Skip to content
Snippets Groups Projects
Unverified Commit 3f062875 authored by MartaFM's avatar MartaFM Committed by GitHub
Browse files

Merge branch 'master' into tiempo_resol

parents 278b7e65 400c1e67
No related branches found
No related tags found
1 merge request!30registrartiempo
......@@ -41,9 +41,8 @@ def logout():
def incidencia(idIncidencia):
incidencia = get_incidencia(idIncidencia)
if request.method == 'POST':
if request.form['action']=="tecnico":
tecnico = request.form['tecnicoAsignado']
cambio_estado_incidencia(idIncidencia, 1, current_user.nick, tecnicoAsignado=tecnico)
if request.form['action']=="completar":
return redirect(url_for('completar_incidencia', idIncidencia=idIncidencia))
elif request.form['action']=="cierre_cliente":
cambio_estado_incidencia(idIncidencia, 2, current_user.nick)
elif request.form['action']=="cierre_tecnico":
......@@ -58,8 +57,6 @@ def incidencia(idIncidencia):
return render_template('add_time.html', incidencia=incidencia)
listaTecnicos = get_tecnicos()
cambioApertura = get_cambio_by_estado(idIncidencia, 0)
cambioAsignada = get_cambio_by_estado(idIncidencia, 1)
......@@ -85,8 +82,10 @@ def index():
elif current_user.tipo == 2: #Cliente
incidencias = get_incidencias_by_user(current_user.nick)
incidencias_estado=get_incidencias_by_user_estado(current_user.nick)
incidencias_estado_cierre=get_incidencias_by_user_estado_cierre(current_user.nick)
return render_template('incidencias_cliente.html', incidencias=incidencias)
return render_template('incidencias_supervisor.html', incidencias=incidencias, incidencias_estado=incidencias_estado, incidencias_estado_cierre=incidencias_estado_cierre)
@app.route('/incidencias_cerradas')
@login_required
......@@ -119,6 +118,21 @@ def registrar_incidencia():
return render_template('registrar_incidencia.html')
@app.route('/completar_incidencia/<idIncidencia>', methods=['GET', 'POST'])
@login_required
def completar_incidencia(idIncidencia):
if request.method == 'POST':
comentario = request.form.get('comentario')
prioridad = request.form.get('prioridad')
tecnico = request.form.get('tecnico')
asignar_incidencia(idIncidencia, comentario, prioridad, tecnico)
return redirect(url_for('incidencia', idIncidencia=idIncidencia))
listaTecnicos = get_tecnicos()
incidencia = get_incidencia(idIncidencia)
return render_template('completar_incidencia.html', incidencia=incidencia, listaTecnicos=listaTecnicos)
@app.route('/add_comentario/<idIncidencia>', methods=['GET', 'POST'])
@login_required
def add_comentario(idIncidencia):
......@@ -222,14 +236,22 @@ def insert_incidencia(titulo, descripcion, fecha, estado, reportadaPor, categori
def get_incidencia(id):
return Incidencia.query.get(id)
def cambio_estado_incidencia(id, estado, usuario, tecnicoAsignado=None):
def cambio_estado_incidencia(id, estado, usuario):
incidencia = get_incidencia(id)
incidencia.estado = estado
if tecnicoAsignado: incidencia.tecnicoAsignado = tecnicoAsignado
db.session.commit()
insert_cambio(estado, usuario, id)
def asignar_incidencia(id, comentario, prioridad, tecnico):
incidencia = get_incidencia(id)
incidencia.comentario = comentario
incidencia.prioridad = prioridad
incidencia.tecnicoAsignado = tecnico
db.session.commit()
cambio_estado_incidencia(id, 1, current_user.nick)
def comentar_incidencia(id, comentario):
incidencia = get_incidencia(id)
incidencia.comentario = comentario
......@@ -241,7 +263,14 @@ def addTiempo_incidencia(id, tiempo):
db.session.commit()
def get_incidencias_by_user(userNick):
return list(Incidencia.query.filter_by(reportadaPor=userNick))
return list(Incidencia.query.filter_by(reportadaPor=userNick, estado=0))
def get_incidencias_by_user_estado(userNick):
return list(Incidencia.query.filter_by(reportadaPor=userNick, estado=1))
def get_incidencias_by_user_estado_cierre(userNick):
return list(Incidencia.query.filter_by(reportadaPor=userNick, estado=2))
def get_incidencias_by_estado(estado):
return list(Incidencia.query.filter_by(estado=estado))
......
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>PGPIncidents</title>
<!-- Establecer el ancho al ancho del sistema y el zoom al 1 -->
<meta name="viewport" content="width = device-width, initial-scale = 1, shrink-to-fit=no">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="{{ url_for('static', filename='css/clientView.css') }}">
<!-- Link al css de Bootstrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO"
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">
<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%;">
<!-- barra principal del menú -->
<nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top pt-0" onmouseover="closeSide('side-nav')">
<div class="d-inline-flex justify-content-center w-100 align-items-center">
<span class="navbar-brand title" style="font-size: 25px;">PGPIncidents</span>
</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 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%;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')" >
<!-- Body -->
<!DOCTYPE html>
<div class="inciCli">
<div class="formCli">
<form class="incidentCli" method='POST' action='/completar_incidencia/{{ incidencia.id }}'>
<p> Incidencia {{ incidencia.id }} </p>
<textarea placeholder="Comentario" name="comentario" required></textarea>
<input type="text" placeholder="prioridad" name="prioridad" required/>
<select name="tecnico" required>
{% for i in range(listaTecnicos|length) %}
<option value="{{ listaTecnicos[i].nick }}">{{ listaTecnicos[i].nick }}</option>
{% endfor %}
</select>
<button type="submit">Enviar</button>
</form>
</div>
</div>
</div>
<script>
function openSide(id) {
let el = document.getElementById(id);
if (!el.classList.contains('open')) {
$('.collapse').collapse('show');
el.classList.add('open');
document.getElementById('side-nav').style.width = "200px";
}
};
function closeSide(id) {
let el = document.getElementById(id);
if (el.classList.contains('open')) {
el.classList.remove('open');
$('.collapse').collapse('hide')
document.getElementById('side-nav').style.width = "64px";
}
};
</script>
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49"
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>
</html>
......@@ -43,12 +43,20 @@
<div id="data-body" class="container-fluid flex-grow-1" onmouseover="closeSide('side-nav')" >
<!-- Body -->
<div class="row" style="width: 100%; padding-top: 0.5em; padding-bottom: 0.5em; font-size: 2em;">
{% if current_user.tipo==0 %}
<div class="col">
<p class="text-center">Estado de las incidencias del supervisor {{ username }}</p>
</div>
{% endif %}
{% if current_user.tipo==2 %}
<div class="col">
<p class="text-center">Incidencias del cliente {{ username }}</p>
</div>
{% endif %}
</div>
<div style="display: flex;">
{% if current_user.tipo==0 %}
<div>
<p class="text-center" id="tituloColumna">Pendientes de asignar</p>
......@@ -70,7 +78,8 @@
{% endfor %}
</div>
{% endif %}
{% if current_user.tipo==0 %}
<div style="border-left: 1px solid grey; height: 70%;">
<p class="text-center" id="tituloColumna">Pendientes de Cerrar</p>
{% for i in range(incidencias_notif_cierre|length) %}
......@@ -90,6 +99,8 @@
</div>
{% endfor %}
</div>
{% endif %}
{% if current_user.tipo==0 %}
<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) %}
......@@ -109,6 +120,71 @@
</div>
{% endfor %}
</div>
{% endif %}
{% if current_user.tipo==2 %}
<div style="border-left: 1px solid grey; height: 70%;">
<p class="text-center" id="tituloColumna">Incidencias abiertas</p>
{% for i in range(incidencias|length) %}
<div class="card-deck" style="margin: 1em;">
<div class="card" id="card2">
<div class="card-body">
<a href="/incidencia/{{ incidencias[i].id }}">
<p class="card-title">{{ incidencias[i].titulo }}</p>
<hr>
<p class="card-text">Descripción:</p>
<p class="card-text .text-justify" id="card-description">{{ incidencias[i].descripcion }}</p>
<hr>
<p class="card-text">Incidencia abierta por {{ incidencias[i].reportadaPor }}</p>
</a>
</div>
</div>
</div>
{% endfor %}
</div>
{% endif %}
{% if current_user.tipo==2 %}
<div style="border-left: 1px solid grey; height: 70%;">
<p class="text-center" id="tituloColumna">Incidencias en Resolucion</p>
{% for i in range(incidencias_estado|length) %}
<div class="card-deck" style="margin: 1em;">
<div class="card" id="card2">
<div class="card-body">
<a href="/incidencia/{{ incidencias_estado[i].id }}">
<p class="card-title">{{ incidencias_estado[i].titulo }}</p>
<hr>
<p class="card-text">Descripción:</p>
<p class="card-text .text-justify" id="card-description">{{ incidencias_estado[i].descripcion }}</p>
<hr>
<p class="card-text">Incidencia abierta por {{ incidencias_estado[i].reportadaPor }}</p>
</a>
</div>
</div>
</div>
{% endfor %}
</div>
{% endif %}
{% if current_user.tipo==2 %}
<div style="border-left: 1px solid grey; height: 70%;">
<p class="text-center" id="tituloColumna">Incidencias Solicitud Cierre</p>
{% for i in range(incidencias_estado_cierre|length) %}
<div class="card-deck" style="margin: 1em;">
<div class="card" id="card2">
<div class="card-body">
<a href="/incidencia/{{ incidencias_estado_cierre[i].id }}">
<p class="card-title">{{ incidencias_estado_cierre[i].titulo }}</p>
<hr>
<p class="card-text">Descripción:</p>
<p class="card-text .text-justify" id="card-description">{{ incidencias_estado_cierre[i].descripcion }}</p>
<hr>
<p class="card-text">Incidencia abierta por {{ incidencias_estado_cierre[i].reportadaPor }}</p>
</a>
</div>
</div>
</div>
{% endfor %}
</div>
{% endif %}
</div>
</div>
......
......@@ -49,72 +49,66 @@
</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) %}
<div class="card-deck" style="margin: 1em;">
<div class="card" id="card1">
<div class="card-body">
<a href="/incidencia/{{ incidencias_abiertas[i].id }}">
<!-- <a href="/incidencia/{{ incidencias_abiertas[i].id }}"> -->
<p class="card-title">{{ incidencias_abiertas[i].titulo }}</p>
<hr>
<p class="card-text">Descripción:</p>
<p class="card-text .text-justify" id="card-description">{{ incidencias_abiertas[i].titulo }}</p>
<hr>
<p class="card-text">Incidencia pendiente de asignar a un tecnico.</p>
</a>
<!-- </a> -->
</div>
</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) %}
<div class="card-deck" style="margin: 1em;">
<div class="card" id="card2">
<div class="card-body">
<a href="/incidencia/{{ incidencias_notif_cierre[i].id }}">
<!-- <a href="/incidencia/{{ incidencias_notif_cierre[i].id }}"> -->
<p class="card-title">{{ incidencias_notif_cierre[i].titulo }}</p>
<hr>
<p class="card-text">Descripción:</p>
<p class="card-text .text-justify" id="card-description">{{ incidencias_notif_cierre[i].descripcion }}</p>
<hr>
<p class="card-text">Incidencia abierta por {{ incidencias_notif_cierre[i].reportadaPor }}</p>
</a>
<!-- </a> -->
</div>
</div>
</div>
{% endfor %}
</div>
{% endif %}
{% if (incidencias_pendientes_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 }}">
<!-- <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>
<!-- </a> -->
</div>
</div>
</div>
{% endfor %}
</div>
{% endif %}
</div>
</div>
......
......@@ -166,13 +166,7 @@
<div id="botonesPiePagina">
<form method="POST" action='/incidencia/{{ incidencia.id }}'>
{% if (current_user.tipo == 0) and (incidencia.estado == 0) %}
<button type="button" class="btn btn-outline-primary" >Añadir comentario</button>
<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>
<button type="submit" class="btn btn-outline-primary" name="action" value="completar">Completar incidencia</button>
{% endif %}}
{% if (current_user.tipo == 0) and (incidencia.estado == 1) %}
......
......@@ -45,6 +45,7 @@
<!-- Body -->
<!DOCTYPE html>
<div class="inciCli">
<div class="formCli">
......@@ -54,7 +55,6 @@
<textarea placeholder="Descripción" name="descripcion" required></textarea>
<input type="number" pattern="[0-9]" placeholder="Id elemento inventario " name="idElementoInventario"/>
<input type="date" id="fecha" name="fecha" required>
<select name="categoria" required>
<option value="hw">Hardware</option>
<option value="com">Comunicaciones</option>
......@@ -62,23 +62,24 @@
<option value="softwareApp">Software de aplicaciones</option>
<option value="otros">Otros</option>
</select>
<button type="submit" onsubmit="ValidarFecha">Enviar</button>
<button type="submit" onsubmit="validarCampos()">Enviar</button>
</form>
<script>
function ValidarFecha(){
function validarCampos(){
var fechainicial = new Date();
var fechafinal = document.getElementById("fecha").value;
var descripcion = document.forms["formulario"]["descripcion"].value;
if(Date.parse(fechafinal) < Date.parse(fechainicial)) {
alert("La fecha introducida no puede ser anterior a la actual");}
}
if (descripcion.length < 100) {
alert("La descripción ha de tener más de 100 cáracetres");}
};
</script>
</div>
</div>
</div>
<script>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment