diff --git a/src/app.py b/src/app.py index f3f17827fa077443818505b887f0ffd9e044f634..1759f859b4cd0843bdee5aa23f85917a86c27288 100644 --- a/src/app.py +++ b/src/app.py @@ -38,17 +38,33 @@ def logout(): @app.route('/incidencia/<idIncidencia>', methods=['GET', 'POST']) @login_required -def informacion_incidencia_cliente(idIncidencia): +def incidencia(idIncidencia): incidencia = get_incidencia(idIncidencia) + + cambioApertura = get_informacion_apertura(idIncidencia)[0] + cambioAsignada = get_informacion_asignada(idIncidencia) + if len(cambioAsignada) > 0: + cambioAsignada = cambioAsignada[0] + cambioCierre = get_informacion_cierre(idIncidencia) + if len(cambioCierre) > 0: + cambioCierre = cambioCierre[0] + listaTecnicos = get_tecnicos() if request.method == 'POST': - if incidencia.estado==0: + if request.form['action']=="cierre_cliente": + cambio_estado_incidencia(idIncidencia,2, current_user.nick) + elif request.form['action']=="cierre_tecnico": + cambio_estado_incidencia(idIncidencia,3, current_user.nick) + elif request.form['action']=="tecnico": tecnico = request.form['tecnicoAsignado'] cambio_estado_incidencia(idIncidencia, 1, tecnico) - elif incidencia.estado==1: - cambio_estado(idIncidencia, 2) + elif request.form['action']=="n-Solucion": + cambio_estado_incidencia(idIncidencia,4, current_user.nick) + elif request.form['action']=="Solucion": + cambio_estado_incidencia(idIncidencia,5, current_user.nick) + - return render_template('info_incidencia.html', incidencia=incidencia, listaTecnicos=listaTecnicos) + return render_template('info_incidencia.html', incidencia=incidencia, listaTecnicos=listaTecnicos, cambioApertura=cambioApertura, cambioAsignada=cambioAsignada, cambioCierre=cambioCierre) @app.route('/index') @login_required @@ -56,12 +72,14 @@ def index(): if current_user.tipo == 0: #Supervisor incidencias_abiertas = get_incidencias_abiertas_super() incidencias_notif_cierre = get_incidencias_notif_cierre_super() + incidencias_notif_cierre_cliente=get_incidencias_notif_cierre_super_cliente() - return render_template('incidencias_supervisor.html', incidencias_abiertas=incidencias_abiertas, incidencias_notif_cierre=incidencias_notif_cierre) + return render_template('incidencias_supervisor.html', incidencias_abiertas=incidencias_abiertas, incidencias_notif_cierre=incidencias_notif_cierre, incidencias_notif_cierre_cliente=incidencias_notif_cierre_cliente) elif current_user.tipo == 1: #Tecnico incidencias_abiertas = get_incidencias_abiertas(current_user.nick) incidencias_notif_cierre = get_incidencias_notif_cierre(current_user.nick) + incidencias_pendientes_cierre=get_inciencias_pendientes_cierre(current_user.nick) return render_template('incidencias_tecnico.html', incidencias_abiertas=incidencias_abiertas, incidencias_notif_cierre=incidencias_notif_cierre) @@ -70,16 +88,12 @@ def index(): return render_template('incidencias_cliente.html', incidencias=incidencias) -@app.route('/incidencia/<idIncidencia>', methods=['GET', 'POST']) +@app.route('/incidencias_cerradas') @login_required -def incidencia(idIncidencia): - if request.method == 'POST': - tecnico = request.form['tecnicoAsignado'] - cambio_estado_incidencia(idIncidencia, 1, tecnico) +def incidencias_cerradas(): + incidencias = get_incidencias_cerradas() + return render_template('incidencias_cliente.html', incidencias=incidencias) - incidencia = get_incidencia(idIncidencia) - listaTecnicos = get_tecnicos() - return render_template('info_incidencia.html', incidencia=incidencia, listaTecnicos=listaTecnicos) @app.route('/incidencia2/<idIncidencia>', methods=['GET', 'POST']) @login_required @@ -129,9 +143,11 @@ def add_comentario(idIncidencia): ################################################### from flask_sqlalchemy import SQLAlchemy +from sqlalchemy import or_ from flask_login import UserMixin -app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://PGPI_grupo02:JEbITzwe@127.0.0.1:3306/PGPI_grupo02' +# app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://PGPI_grupo02:JEbITzwe@127.0.0.1:3306/PGPI_grupo02' +app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://PGPI_grupo02:JEbITzwe@jair.lab.inf.uva.es:3306/PGPI_grupo02' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) @@ -163,7 +179,7 @@ class Incidencia(db.Model): categoria = db.Column(db.String(40)) class Cambio(db.Model): - fecha = db.Column(db.DateTime, primary_key=True) + fecha = db.Column(db.String(50), primary_key=True) estado = db.Column(db.Integer) tecnico = db.Column(db.String(50)) incidencia = db.Column(db.Integer) @@ -187,28 +203,31 @@ def get_tecnicos(): # INCIDENCIA # ####################### def insert_incidencia(titulo, descripcion, fecha, estado, reportadaPor, categoria, comentario=None, prioridad=None, tiempoEstimado=None, tecnicoAsignado=None): - db.session.add(Incidencia(titulo=titulo, comentario=comentario, prioridad=prioridad, tiempoEstimado=tiempoEstimado, descripcion=descripcion, fecha=fecha, estado=estado, tecnicoAsignado=tecnicoAsignado, reportadaPor=reportadaPor, categoria=categoria)) + incidencia = Incidencia(titulo=titulo, comentario=comentario, prioridad=prioridad, tiempoEstimado=tiempoEstimado, descripcion=descripcion, fecha=fecha, estado=estado, tecnicoAsignado=tecnicoAsignado, reportadaPor=reportadaPor, categoria=categoria) + db.session.add(incidencia) db.session.commit() + insert_cambio(estado, reportadaPor, incidencia.id) + def get_incidencia(id): return Incidencia.query.get(id) -def cambio_estado_incidencia(id, estado, tecnicoAsignado): +def cambio_estado_incidencia(id, estado, usuario): incidencia = get_incidencia(id) incidencia.estado = estado - incidencia.tecnicoAsignado = tecnicoAsignado + incidencia.tecnicoAsignado = usuario db.session.commit() + + insert_cambio(estado, usuario, id) def comentar_incidencia(id, comentario): incidencia = get_incidencia(id) incidencia.comentario = comentario db.session.commit() - -def cambio_estado(id,estado): - incidencia = Incidencia.query.get(id) - incidencia.estado = estado - db.session.commit() + +def get_incidencias_cerradas(): + return list(Incidencia.query.filter(or_(Incidencia.estado == 4, Incidencia.estado == 5))) def get_incidencias_by_user(userNick): return list(Incidencia.query.filter_by(reportadaPor=userNick)) @@ -220,19 +239,31 @@ def get_incidencias_abiertas_super(): return list(Incidencia.query.filter_by(estado=0)) def get_incidencias_notif_cierre_super(): + return list(Incidencia.query.filter_by(estado=3)) +def get_incidencias_notif_cierre_super_cliente(): return list(Incidencia.query.filter_by(estado=2)) - def get_incidencias_notif_cierre(userNick): - return list(Incidencia.query.filter_by(reportadaPor=userNick, estado=2)) + return list((Incidencia.query.filter_by(reportadaPor=userNick, estado=2))) +def get_inciencias_pendientes_cierre(userNick): + return list((Incidencia.query.filter_by(reportadaPor=userNick, estado=3))) ####################### # CAMBIO # ####################### -def insert_cambio(estado, tecnico, incidencia, fecha=datetime.now()): +def insert_cambio(estado, tecnico, incidencia): + fecha = datetime.now() db.session.add(Cambio(fecha=fecha, estado=estado, tecnico=tecnico, incidencia=incidencia)) db.session.commit() +def get_informacion_apertura(id): + return list(Cambio.query.filter_by(incidencia=id, estado=0)) + +def get_informacion_asignada(id): + return list(Cambio.query.filter_by(incidencia=id, estado=1)) + +def get_informacion_cierre(id): + return list(Cambio.query.filter_by(incidencia=id, estado=3)) ####################### # INVENTARIO # diff --git a/src/schema.sql b/src/schema.sql index 3ee3a29fe523a09a6e7c3faa821d07d161f783d9..8169bb35082b0235e55d9e04766656c5fd7e4a9d 100644 --- a/src/schema.sql +++ b/src/schema.sql @@ -7,6 +7,7 @@ DROP TABLE IF EXISTS usuario; DROP TABLE IF EXISTS incidencia; DROP TABLE IF EXISTS elementoIncidencia; DROP TABLE IF EXISTS cambio; +DROP TABLE IF EXISTS categoriaIncidencia; /* Valores para estado de la incidencia: @@ -80,7 +81,7 @@ CREATE TABLE elementoIncidencia( ); CREATE TABLE cambio( - fecha DATE PRIMARY KEY, + fecha DATETIME PRIMARY KEY, estado INTEGER REFERENCES estado(id), tecnico VARCHAR(50) REFERENCES usuario(nick), incidencia INTEGER REFERENCES incidencia(id) @@ -89,9 +90,10 @@ CREATE TABLE cambio( /* Poblando la tabla: estado */ INSERT INTO estado (id, estado) VALUES (0, 'abierta'); INSERT INTO estado (id, estado) VALUES (1, 'asignada a un tecnico'); -INSERT INTO estado (id, estado) VALUES (2, 'pendiente de cerrar'); -INSERT INTO estado (id, estado) VALUES (3, 'cerrada sin solucion'); -INSERT INTO estado (id, estado) VALUES (4, 'cerrada con solucion'); +INSERT INTO estado (id, estado) VALUES (2, 'pendiente de cerrar cliente'); +INSERT INTO estado (id, estado) VALUES (3, 'pendiente de cerrar tecnico'); +INSERT INTO estado (id, estado) VALUES (4, 'cerrada sin solucion'); +INSERT INTO estado (id, estado) VALUES (5, 'cerrada con solusion'); /* Poblando la tabla: tipoUsuario */ INSERT INTO tipoUsuario (id, tipoUsuario) VALUES (0, 'supervisor'); @@ -103,11 +105,4 @@ INSERT INTO usuario (nick, email, password, nombre, apellidos, biografia, fotoPe INSERT INTO usuario (nick, email, password, nombre, apellidos, biografia, fotoPerfil, tipo) VALUES ('tecnico', 'tecnico@mail.com', 'password', 'tec', 'nico', 'probando la biografia del tecnico', 'fotoPerfil', 1); INSERT INTO usuario (nick, email, password, nombre, apellidos, biografia, fotoPerfil, tipo) VALUES ('cliente', 'cliente@mail.com', 'password', 'clie', 'nte', 'probando la biografia del cliente', 'fotoPerfil', 2); -/* Poblando la tabla: incidencia */ -INSERT INTO incidencia (id, titulo, comentario, prioridad, tiempoEstimado, descripcion, estado, tecnicoAsignado, reportadaPor) VALUES (1, 'Titulo 1', 'Comentario 1', 0, 4, 'Descripcion 1', 0, 'tecnico 1', 'cliente'); -INSERT INTO incidencia (id, titulo, comentario, prioridad, tiempoEstimado, descripcion, estado, tecnicoAsignado, reportadaPor) VALUES (2, 'Titulo 2', 'Comentario 2', 0, 4, 'Descripcion 2', 0, 'tecnico 2', 'cliente'); -INSERT INTO incidencia (id, titulo, comentario, prioridad, tiempoEstimado, descripcion, estado, tecnicoAsignado, reportadaPor) VALUES (3, 'Titulo 3', 'Comentario 3', 0, 4, 'Descripcion 3', 0, 'tecnico 3', 'cliente'); -INSERT INTO incidencia (id, titulo, comentario, prioridad, tiempoEstimado, descripcion, estado, tecnicoAsignado, reportadaPor) VALUES (4, 'Titulo 4', 'Comentario 4', 0, 4, 'Descripcion 4', 0, 'tecnico 4', 'cliente'); -INSERT INTO incidencia (id, titulo, comentario, prioridad, tiempoEstimado, descripcion, estado, tecnicoAsignado, reportadaPor) VALUES (5, 'Titulo 5', 'Comentario 5', 0, 4, 'Descripcion 5', 0, 'tecnico 5', 'cliente'); -INSERT INTO incidencia (id, titulo, comentario, prioridad, tiempoEstimado, descripcion, estado, tecnicoAsignado, reportadaPor) VALUES (6, 'Titulo 6', 'Comentario 6', 0, 4, 'Descripcion 6', 0, 'tecnico 6', 'cliente'); diff --git a/src/static/css/clientView.css b/src/static/css/clientView.css index a9a6bdd4da700b163df1ae1ceef3f1d1331c713e..1bf8852e1388e2f6967f5f5b31653f6269015a84 100644 --- a/src/static/css/clientView.css +++ b/src/static/css/clientView.css @@ -93,7 +93,7 @@ nav { width: 100%; height: 100%; padding-top: 64px!important; - padding-left: 4%!important; + padding-left: 6%!important; margin-right: 0!important; margin-bottom: 0!important; padding-right: 0!important; @@ -134,14 +134,14 @@ nav { border: 2px solid grey; } -footer { - position: fixed; +#botonesPiePagina { left: 0; bottom: 0; width: 100%; color: white; text-align: center; padding: 2em; + margin: 0 auto; } .btn { diff --git a/src/static/menus/menu_cliente.html b/src/static/menus/menu_cliente.html new file mode 100644 index 0000000000000000000000000000000000000000..110dd047203805f7b35a6b6dbe7f3f1440be2bd4 --- /dev/null +++ b/src/static/menus/menu_cliente.html @@ -0,0 +1,16 @@ +<div class="list-group list-group-flush w-100 side-icons"> + <a class="list-group-item d-flex justify-content-start align-items-center bg-light" href="/index"> + <span class="material-icons" style="color: black;">home</span> + <span class="collapse width align-top side-options">Inicio</span> + </a> + + <a class="list-group-item d-flex justify-content-start align-items-center bg-light" href="/registrar_incidencia"> + <span class="material-icons" style="color: black;">library_add</span> + <span class="collapse width align-top side-options">Registrar Incidencia</span> + </a> + + <a class="list-group-item d-flex justify-content-start align-items-center bg-light" href="/logout"> + <span class="material-icons" style="color: black;">pregnant_woman</span> + <span class="collapse width align-top side-options">Cerrar Sesión</span> + </a> +</div> diff --git a/src/static/menus/menu_supervisor.html b/src/static/menus/menu_supervisor.html new file mode 100644 index 0000000000000000000000000000000000000000..90f3295aba7855ce0600f8ced60c4585eb890777 --- /dev/null +++ b/src/static/menus/menu_supervisor.html @@ -0,0 +1,16 @@ +<div class="list-group list-group-flush w-100 side-icons"> + <a class="list-group-item d-flex justify-content-start align-items-center bg-light" href="/index"> + <span class="material-icons" style="color: black;">home</span> + <span class="collapse width align-top side-options">Inicio</span> + </a> + + <a class="list-group-item d-flex justify-content-start align-items-center bg-light" href="/incidencias_cerradas"> + <span class="material-icons" style="color: black;">delete_forever</span> + <span class="collapse width align-top side-options">Incidencias Cerradas</span> + </a> + + <a class="list-group-item d-flex justify-content-start align-items-center bg-light" href="/logout"> + <span class="material-icons" style="color: black;">exit_to_app</span> + <span class="collapse width align-top side-options">Cerrar sesión</span> + </a> +</div> diff --git a/src/static/menus/menu_tecnico.html b/src/static/menus/menu_tecnico.html new file mode 100644 index 0000000000000000000000000000000000000000..eb5bd7289487fbe4c007aae98181d50d9f17d57c --- /dev/null +++ b/src/static/menus/menu_tecnico.html @@ -0,0 +1,21 @@ +<div class="list-group list-group-flush w-100 side-icons"> + <a class="list-group-item d-flex justify-content-start align-items-center bg-light" href="/index"> + <span class="material-icons" style="color: black;">home</span> + <span class="collapse width align-top side-options">Inicio</span> + </a> + + <a class="list-group-item d-flex justify-content-start align-items-center bg-light" href="/incidencias_cerradas"> + <span class="material-icons" style="color: black;">delete_forever </span> + <span class="collapse width align-top side-options">Incidencias Cerradas</span> + </a> + + <a class="list-group-item d-flex justify-content-start align-items-center bg-light" href="/registrar_incidencia"> + <span class="material-icons" style="color: black;">library_add</span> + <span class="collapse width align-top side-options">Registrar Incidencia</span> + </a> + + <a class="list-group-item d-flex justify-content-start align-items-center bg-light" href="/logout"> + <span class="material-icons" style="color: black;">exit_to_app</span> + <span class="collapse width align-top side-options">Cerrar sesión</span> + </a> +</div> diff --git a/src/static/scripts/includeHTML.js b/src/static/scripts/includeHTML.js new file mode 100644 index 0000000000000000000000000000000000000000..cc2081f8a1d1bcdbb2bbb19dc646427b6d5d095e --- /dev/null +++ b/src/static/scripts/includeHTML.js @@ -0,0 +1,27 @@ +function includeHTML() { + var z, i, elmnt, file, xhttp; + /*loop through a collection of all HTML elements:*/ + z = document.getElementsByTagName("*"); + for (i = 0; i < z.length; i++) { + elmnt = z[i]; + /*search for elements with a certain atrribute:*/ + file = elmnt.getAttribute("w3-include-html"); + if (file) { + /*make an HTTP request using the attribute value as the file name:*/ + xhttp = new XMLHttpRequest(); + xhttp.onreadystatechange = function() { + if (this.readyState == 4) { + if (this.status == 200) {elmnt.innerHTML = this.responseText;} + if (this.status == 404) {elmnt.innerHTML = "Page not found.";} + /*remove the attribute, and call this function once more:*/ + elmnt.removeAttribute("w3-include-html"); + includeHTML(); + } + } + xhttp.open("GET", file, true); + xhttp.send(); + /*exit the function:*/ + return; + } + } +}; diff --git a/src/templates/incidencias_cliente.html b/src/templates/incidencias_cliente.html index 592f8c22e8743fdf329fbdae0d837816a3a2dec7..83a27605909487764cc69edaf580632297ed0f1b 100644 --- a/src/templates/incidencias_cliente.html +++ b/src/templates/incidencias_cliente.html @@ -14,6 +14,7 @@ crossorigin="anonymous"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" integrity="sha384-gfdkjb5BdAXd+lj+gudLWI+BXq4IuLW5IT+brZEZsLFm++aCMlF1V92rMkPaX4PP" crossorigin="anonymous"> + <script src="{{ url_for('static', filename='scripts/includeHTML.js') }}"></script> </head> <body class="d-flex" style="min-height: 100%;min-width: 100%;"> @@ -24,36 +25,19 @@ </div> </nav> - <div id="side-nav" class="side-nav fixed-top flex-nowrap flex-column justify-content-start d-inline-flex align-items-start bg-light" - onmouseover="openSide('side-nav')"> + <div id="side-nav" class="side-nav fixed-top flex-nowrap flex-column justify-content-start d-inline-flex align-items-start bg-light" onmouseover="openSide('side-nav')"> <div class="side-title side-content d-flex "> <img id="user-img" class="user-icon" src="../static/img/default-gravatar.png" alt="user icon"> - <span class="collapse width align-self-center" style="min-width: 70%;padding-left: 5%">User Name</span> + <span class="collapse width align-self-center" style="min-width: 70%;padding-left: 5%;max-height: 10%">{{ current_user.nick }}</span> </div> - <div class="list-group list-group-flush w-100 side-icons"> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="material-icons" style="color: black;">person_add</span> - <span class="collapse width align-top side-options">Add User</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fa fa-plus-square fa-m" style="color: black;"></span> - <span class="collapse width align-top side-options">Item</span> - </a> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light" href="/registrar_incidencia"> - <span class="fas fa-project-diagram fa-m " style="color: gray;"></span> - <span class="collapse width align-top side-options">Registrar nueva incidencia</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fas fa-code fa-m " style="color: green;"></span> - <span class="collapse width align-top side-options">Ver estadisticas</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fas fa-code fa-m " style="color: grey;"></span> - <span class="collapse width align-top side-options">Filtros de incidencias</span> - </a> - </div> + {% if current_user.tipo == 0 %} + <div w3-include-html="{{ url_for('static', filename='menus/menu_supervisor.html') }}"></div> + {% elif current_user.tipo == 1 %} + <div w3-include-html="{{ url_for('static', filename='menus/menu_tecnico.html') }}"></div> + {% elif current_user.tipo == 2 %} + <div w3-include-html="{{ url_for('static', filename='menus/menu_cliente.html') }}"></div> + {% endif %} </div> <div id="data-body" class="container-fluid flex-grow-1" onmouseover="closeSide('side-nav')" > @@ -134,6 +118,9 @@ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script> +<script> +includeHTML(); +</script> </body> </html> diff --git a/src/templates/incidencias_supervisor.html b/src/templates/incidencias_supervisor.html index 9f59bdab70f19f0baaff8433518264ed77e26c80..8999ddfc1c60e369b1ded6c0b694cb85af516c1a 100644 --- a/src/templates/incidencias_supervisor.html +++ b/src/templates/incidencias_supervisor.html @@ -14,6 +14,7 @@ crossorigin="anonymous"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" integrity="sha384-gfdkjb5BdAXd+lj+gudLWI+BXq4IuLW5IT+brZEZsLFm++aCMlF1V92rMkPaX4PP" crossorigin="anonymous"> + <script src="{{ url_for('static', filename='scripts/includeHTML.js') }}"></script> </head> <body class="d-flex" style="min-height: 100%;min-width: 100%;"> @@ -24,39 +25,19 @@ </div> </nav> - <div id="side-nav" class="side-nav fixed-top flex-nowrap flex-column justify-content-start d-inline-flex align-items-start bg-light" - onmouseover="openSide('side-nav')"> + <div id="side-nav" class="side-nav fixed-top flex-nowrap flex-column justify-content-start d-inline-flex align-items-start bg-light" onmouseover="openSide('side-nav')"> <div class="side-title side-content d-flex "> <img id="user-img" class="user-icon" src="../static/img/default-gravatar.png" alt="user icon"> - <span class="collapse width align-self-center" style="min-width: 70%;padding-left: 5%">User Name</span> + <span class="collapse width align-self-center" style="min-width: 70%;padding-left: 5%;max-height: 10%">{{ current_user.nick }}</span> </div> - <div class="list-group list-group-flush w-100 side-icons"> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="material-icons" style="color: black;">person_add</span> - <span class="collapse width align-top side-options">Add User</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fa fa-plus-square fa-m" style="color: black;"></span> - <span class="collapse width align-top side-options">Item</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fas fa-envelope fa-m" style="color: black;"></span> - <span class="collapse width align-top side-options">E-Mail</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fas fa-project-diagram fa-m " style="color: gray;"></span> - <span class="collapse width align-top side-options">Item</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fas fa-code fa-m " style="color: green;"></span> - <span class="collapse width align-top side-options">Item</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fas fa-code fa-m " style="color: grey;"></span> - <span class="collapse width align-top side-options">Item</span> - </a> - </div> + {% if current_user.tipo == 0 %} + <div w3-include-html="{{ url_for('static', filename='menus/menu_supervisor.html') }}"></div> + {% elif current_user.tipo == 1 %} + <div w3-include-html="{{ url_for('static', filename='menus/menu_tecnico.html') }}"></div> + {% elif current_user.tipo == 2 %} + <div w3-include-html="{{ url_for('static', filename='menus/menu_cliente.html') }}"></div> + {% endif %} </div> <div id="data-body" class="container-fluid flex-grow-1" onmouseover="closeSide('side-nav')" > @@ -109,6 +90,25 @@ </div> {% endfor %} </div> + <div style="border-left: 1px solid grey; height: 70%;"> + <p class="text-center" id="tituloColumna">Pendientes de Cerrar Cliente</p> + {% for i in range(incidencias_notif_cierre_cliente|length) %} + <div class="card-deck" style="margin: 1em;"> + <div class="card" id="card2"> + <div class="card-body"> + <a href="/incidencia/{{ incidencias_notif_cierre_cliente[i].id }}"> + <p class="card-title">{{ incidencias_notif_cierre_cliente[i].titulo }}</p> + <hr> + <p class="card-text">Descripción:</p> + <p class="card-text .text-justify" id="card-description">{{ incidencias_notif_cierre_cliente[i].descripcion }}</p> + <hr> + <p class="card-text">Incidencia abierta por {{ incidencias_notif_cierre_cliente[i].reportadaPor }}</p> + </a> + </div> + </div> + </div> + {% endfor %} + </div> </div> </div> @@ -137,6 +137,9 @@ crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script> +<script> +includeHTML(); +</script> </body> diff --git a/src/templates/incidencias_tecnico.html b/src/templates/incidencias_tecnico.html index b07e48a222c29cb50d7f58cf1a570ce1a82f960c..763bf2a345deb1c7066a21eb81ddcb2cd29a4d4a 100644 --- a/src/templates/incidencias_tecnico.html +++ b/src/templates/incidencias_tecnico.html @@ -14,6 +14,7 @@ crossorigin="anonymous"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" integrity="sha384-gfdkjb5BdAXd+lj+gudLWI+BXq4IuLW5IT+brZEZsLFm++aCMlF1V92rMkPaX4PP" crossorigin="anonymous"> + <script src="{{ url_for('static', filename='scripts/includeHTML.js') }}"></script> </head> <body class="d-flex" style="min-height: 100%;min-width: 100%;"> @@ -24,39 +25,19 @@ </div> </nav> - <div id="side-nav" class="side-nav fixed-top flex-nowrap flex-column justify-content-start d-inline-flex align-items-start bg-light" - onmouseover="openSide('side-nav')"> + <div id="side-nav" class="side-nav fixed-top flex-nowrap flex-column justify-content-start d-inline-flex align-items-start bg-light" onmouseover="openSide('side-nav')"> <div class="side-title side-content d-flex "> <img id="user-img" class="user-icon" src="../static/img/default-gravatar.png" alt="user icon"> - <span class="collapse width align-self-center" style="min-width: 70%;padding-left: 5%">User Name</span> + <span class="collapse width align-self-center" style="min-width: 70%;padding-left: 5%;max-height: 10%">{{ current_user.nick }}</span> </div> - <div class="list-group list-group-flush w-100 side-icons"> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="material-icons" style="color: black;">person_add</span> - <span class="collapse width align-top side-options">Add User</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fa fa-plus-square fa-m" style="color: black;"></span> - <span class="collapse width align-top side-options">Item</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fas fa-envelope fa-m" style="color: black;"></span> - <span class="collapse width align-top side-options">E-Mail</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fas fa-project-diagram fa-m " style="color: gray;"></span> - <span class="collapse width align-top side-options">Item</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fas fa-code fa-m " style="color: green;"></span> - <span class="collapse width align-top side-options">Item</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fas fa-code fa-m " style="color: grey;"></span> - <span class="collapse width align-top side-options">Item</span> - </a> - </div> + {% if current_user.tipo == 0 %} + <div w3-include-html="{{ url_for('static', filename='menus/menu_supervisor.html') }}"></div> + {% elif current_user.tipo == 1 %} + <div w3-include-html="{{ url_for('static', filename='menus/menu_tecnico.html') }}"></div> + {% elif current_user.tipo == 2 %} + <div w3-include-html="{{ url_for('static', filename='menus/menu_cliente.html') }}"></div> + {% endif %} </div> <div id="data-body" class="container-fluid flex-grow-1" onmouseover="closeSide('side-nav')" > @@ -68,6 +49,7 @@ </div> <div style="display: flex;"> + {% if (incidencias_abiertas|length) > 0 %} <div> <p class="text-center" id="tituloColumna">Abiertas</p> {% for i in range(incidencias_abiertas|length) %} @@ -86,9 +68,11 @@ </div> </div> {% endfor %} - </div> + {% endif %} + + {% if (incidencias_notif_cierre|length) > 0 %} <div style="border-left: 1px solid grey; height: 70%;"> <p class="text-center" id="tituloColumna">Notificacion Cierre</p> {% for i in range(incidencias_notif_cierre|length) %} @@ -107,8 +91,30 @@ </div> </div> {% endfor %} + </div> + {% endif %} + {% if (incidencias_notif_cierre|length) > 0 %} + <div style="border-left: 1px solid grey; height: 70%;"> + <p class="text-center" id="tituloColumna">Pendiente Cierre</p> + {% for i in range(incidencias_pendientes_cierre|length) %} + <div class="card-deck" style="margin: 1em;"> + <div class="card" id="card2"> + <div class="card-body"> + <a href="/informacion_incidencia/{{ incidencias_notif_cierre[i].id }}"> + <p class="card-title">{{ incidencias_pendientes_cierre[i].titulo }}</p> + <hr> + <p class="card-text">Descripción:</p> + <p class="card-text .text-justify" id="card-description">{{ incidencias_pendientes_cierre[i].descripcion }}</p> + <hr> + <p class="card-text">Incidencia abierta por {{ incidencias_pendientes_cierre[i].reportadaPor }}</p> + </a> + </div> + </div> + </div> + {% endfor %} </div> + {% endif %} </div> </div> @@ -138,6 +144,9 @@ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script> +<script> +includeHTML(); +</script> </body> </html> diff --git a/src/templates/info_incidencia.html b/src/templates/info_incidencia.html index 49cf3c5568c1321ee6c5726b700a81644aa102e1..7da600a47a8c45eaf65ca97aa6ad0dcdcc42bdf7 100644 --- a/src/templates/info_incidencia.html +++ b/src/templates/info_incidencia.html @@ -14,6 +14,7 @@ crossorigin="anonymous"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" integrity="sha384-gfdkjb5BdAXd+lj+gudLWI+BXq4IuLW5IT+brZEZsLFm++aCMlF1V92rMkPaX4PP" crossorigin="anonymous"> + <script src="{{ url_for('static', filename='scripts/includeHTML.js') }}"></script> </head> <body class="d-flex" style="min-height: 100%;min-width: 100%;"> @@ -24,39 +25,19 @@ </div> </nav> - <div id="side-nav" class="side-nav fixed-top flex-nowrap flex-column justify-content-start d-inline-flex align-items-start bg-light" - onmouseover="openSide('side-nav')"> + <div id="side-nav" class="side-nav fixed-top flex-nowrap flex-column justify-content-start d-inline-flex align-items-start bg-light" onmouseover="openSide('side-nav')"> <div class="side-title side-content d-flex "> <img id="user-img" class="user-icon" src="../static/img/default-gravatar.png" alt="user icon"> - <span class="collapse width align-self-center" style="min-width: 70%;padding-left: 5%">User Name</span> - </div> - <div class="list-group list-group-flush w-100 side-icons"> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="material-icons" style="color: black;">person_add</span> - <span class="collapse width align-top side-options">Add User</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fa fa-plus-square fa-m" style="color: black;"></span> - <span class="collapse width align-top side-options">Item</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fas fa-envelope fa-m" style="color: black;"></span> - <span class="collapse width align-top side-options">E-Mail</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fas fa-project-diagram fa-m " style="color: gray;"></span> - <span class="collapse width align-top side-options">Item</span> - </a> - - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fas fa-code fa-m " style="color: green;"></span> - <span class="collapse width align-top side-options">Item</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fas fa-code fa-m " style="color: grey;"></span> - <span class="collapse width align-top side-options">Item</span> - </a> + <span class="collapse width align-self-center" style="min-width: 70%;padding-left: 5%;max-height: 10%">{{ current_user.nick }}</span> </div> + + {% if current_user.tipo == 0 %} + <div w3-include-html="{{ url_for('static', filename='menus/menu_supervisor.html') }}"></div> + {% elif current_user.tipo == 1 %} + <div w3-include-html="{{ url_for('static', filename='menus/menu_tecnico.html') }}"></div> + {% elif current_user.tipo == 2 %} + <div w3-include-html="{{ url_for('static', filename='menus/menu_cliente.html') }}"></div> + {% endif %} </div> <div id="data-body" class="container-fluid flex-grow-1" onmouseover="closeSide('side-nav')" > @@ -124,36 +105,48 @@ Abierta </h3> <p class="steps-description"> - Incidencia abierta por {{ incidencia.reportadaPor}} el 23/12/18 + Incidencia abierta por {{ incidencia.reportadaPor}} el {{ cambioApertura.fecha }} </p> </div> <div class="steps-two"> {% if incidencia.estado == 1 or incidencia.estado == 2 or incidencia.estado == 3 or incidencia.estado == 4%} <img class="steps-img" src="http://placehold.it/50/3498DB/FFFFFF" alt="" /> + <h3 class="steps-name"> + Asignada + </h3> + <p class="steps-description"> + Aceptada y asignada a {{ incidencia.tecnicoAsignado }} el {{ cambioAsignada.fecha }} + </p> {% else %} <img class="steps-img" src="http://placehold.it/50/FF0000/FFFFFF" alt="" /> - {% endif %} <h3 class="steps-name"> - Aceptada + Asignada </h3> <p class="steps-description"> - Aceptada y asignada a {{ incidencia.tecnico }} + Incidencia aun no asignada </p> + {% endif %} </div> <div class="steps-three"> {% if incidencia.estado == 3 or incidencia.etado == 4%} <img class="steps-img" src="http://placehold.it/50/3498DB/FFFFFF" alt="" /> + <h3 class="steps-name"> + Cerrada + </h3> + <p class="steps-description"> + Incidencia cerrada el {{ cambioCierre.fecha }} + </p> {% else %} <img class="steps-img" src="http://placehold.it/50/FF0000/FFFFFF" alt="" /> - {% endif %} <h3 class="steps-name"> Cerrada </h3> <p class="steps-description"> - Incidencia cerrada por supervisor el 25/12/19 + Incidencia aun no cerrada </p> + {% endif %} </div> </div><!-- /.steps-timeline --> @@ -161,34 +154,42 @@ </section> - - <footer> - {% if (current_user.tipo == 0) and (incidencia.estado == 0) %} - <!-- <form method="POST" action='/incidencia/{{ incidencia.id }}'> --> + + <div id="botonesPiePagina"> + {% if (current_user.tipo == 0) and (incidencia.estado == 0) %} <form method="POST" action='/incidencia/{{ incidencia.id }}'> <button type="button" class="btn btn-outline-primary" >Añadir comentario</button> - - <button type="submit" class="btn btn-outline-primary">Asignar tecnico</button> - <select name="tecnicoAsignado"> + <button type="submit" class="btn btn-outline-primary" name="action" value="tecnico">Asignar tecnico</button> + <select name="tecnicoAsignado"> {% for i in range(listaTecnicos|length) %} <option value="{{ listaTecnicos[i].nick }}">{{ listaTecnicos[i].nick }}</option> {% endfor %} </select> {% endif %}} - </form> + </form> + {% if (current_user.tipo == 0) and (incidencia.estado == 1) %} <form method="POST" action='/incidencia/{{ incidencia.id }}'> <button type="button" class="btn btn-outline-primary">Añadir comentario</button> </form> {% endif %}} - {% if (current_user.tipo == 0) and (incidencia.estado == 2) %} + {% if (current_user.tipo == 0) and (incidencia.estado == 3 or incidencia.estado==2) %} <form method="POST" action='/incidencia/{{ incidencia.id }}'> - <button type="button" class="btn btn-outline-primary">Añadir comentario</button> - <button type="button" class="btn btn-outline-primary">Cerrar Incidencia</button> + <button type="submit" class="btn btn-outline-primary" name="action" value="Solucion">Cerrar Incidencia Solucionada</button> + <button type="submit" class="btn btn-outline-primary" name="action" value="n-Solucion">Cerrar Incidencia sin Solucion</button> </form> + {% endif %}} + {% if (current_user.tipo == 1) and (incidencia.estado==1) %} + <form method="POST" action='/incidencia2/{{ incidencia.id }}'> + <button type="button" class="btn btn-outline-primary">Añadir comentario</button> + </form> + <form method="POST" action='/incidencia/{{ incidencia.id }}'> + <button type="submit" class="btn btn-outline-primary" name="action" value="cierre_tecnico">Solicitar Cierre</button> + </form> + {% endif %}} {% if current_user.tipo == 1 %} <form method="POST" action='/incidencia2/{{ incidencia.id }}'> @@ -199,11 +200,14 @@ </form> {% endif %}} - {% if current_user.tipo == 2 %} + + {% if (current_user.tipo == 2) and (incidencia.estado!=2) %} <button type="button" class="btn btn-outline-primary">Ver comentario</button> + <button type="submit" class="btn btn-outline-primary" name="action" value="cierre_cliente">Solicitar Cierre</button> {% endif %} - </footer> - </form> + <!-- </footer> --> + </form> + </div> <script> function openSide(id) { @@ -231,6 +235,9 @@ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script> +<script> +includeHTML(); +</script> </body> </html> diff --git a/src/templates/registrar_incidencia.html b/src/templates/registrar_incidencia.html index 1808e0d4e0854b9b3ab084eaf7084c273a73375c..aa213f247129c42fae4ec535397cd81220a1780d 100644 --- a/src/templates/registrar_incidencia.html +++ b/src/templates/registrar_incidencia.html @@ -15,6 +15,7 @@ <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" integrity="sha384-gfdkjb5BdAXd+lj+gudLWI+BXq4IuLW5IT+brZEZsLFm++aCMlF1V92rMkPaX4PP" crossorigin="anonymous"> <link rel="stylesheet" type="text/css" href="../static/css/formulario.css"> + <script src="{{ url_for('static', filename='scripts/includeHTML.js') }}"></script> </head> <body class="d-flex" style="min-height: 100%;min-width: 100%;"> @@ -25,36 +26,19 @@ </div> </nav> - <div id="side-nav" class="side-nav fixed-top flex-nowrap flex-column justify-content-start d-inline-flex align-items-start bg-light" - onmouseover="openSide('side-nav')"> + <div id="side-nav" class="side-nav fixed-top flex-nowrap flex-column justify-content-start d-inline-flex align-items-start bg-light" onmouseover="openSide('side-nav')"> <div class="side-title side-content d-flex "> <img id="user-img" class="user-icon" src="../static/img/default-gravatar.png" alt="user icon"> - <span class="collapse width align-self-center" style="min-width: 70%;padding-left: 5%">User Name</span> + <span class="collapse width align-self-center" style="min-width: 70%;padding-left: 5%;max-height: 10%">{{ current_user.nick }}</span> </div> - <div class="list-group list-group-flush w-100 side-icons"> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="material-icons" style="color: black;">person_add</span> - <span class="collapse width align-top side-options">Add User</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fa fa-plus-square fa-m" style="color: black;"></span> - <span class="collapse width align-top side-options">Item</span> - </a> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light" href="/registrar_nueva_incidencia"> - <span class="fas fa-project-diagram fa-m " style="color: gray;"></span> - <span class="collapse width align-top side-options">Registrar nueva incidencia</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fas fa-code fa-m " style="color: green;"></span> - <span class="collapse width align-top side-options">Ver estadisticas</span> - </a> - <a class="list-group-item d-flex justify-content-start align-items-center bg-light"> - <span class="fas fa-code fa-m " style="color: grey;"></span> - <span class="collapse width align-top side-options">Filtros de incidencias</span> - </a> - </div> + {% if current_user.tipo == 0 %} + <div w3-include-html="{{ url_for('static', filename='menus/menu_supervisor.html') }}"></div> + {% elif current_user.tipo == 1 %} + <div w3-include-html="{{ url_for('static', filename='menus/menu_tecnico.html') }}"></div> + {% elif current_user.tipo == 2 %} + <div w3-include-html="{{ url_for('static', filename='menus/menu_cliente.html') }}"></div> + {% endif %} </div> <div id="data-body" class="container-fluid flex-grow-1" onmouseover="closeSide('side-nav')" > @@ -123,6 +107,9 @@ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script> +<script> +includeHTML(); +</script> </body> </html>