Professional Documents
Culture Documents
A. Introducción de la Metodología
1
Es posible que durante la ejecución del proyecto se altere el orden
en el que se desean recibir los módulos o historias de usuario
terminadas.
D. Artefactos
Los Artefactos en SCRUM representan trabajo o valor añadido que
aportan transparencia y oportunidades para la revisión y adaptación. Los
Artefactos están diseñados específicamente para facilitar la
transparencia de la información clave y unificar los criterios de
compresión de dicho artefacto.
Documentos.
Pila de producto o Product Backlog
Pila de sprint o Sprint Backlog
Gráficas para registro y seguimiento del avance.
Gráfica de Burn Down Chart.
Comunicación y reporte directo.
Reunión de inicio de sprint
Reunión de cierre de sprint y entrega del incremento.
2
E. Historias de Usuario
Las historias de usuario son una forma rápida de administrar los
requisitos de los usuarios sin tener que elaborar gran cantidad de
documentos formales y sin requerir de mucho tiempo para
administrarlos. Las historias de usuario permiten responder rápidamente
a los requisitos cambiantes.
3
Tabla N° 6: Historia de usuario número 3 – Modificar datos de
usuario
Historia de Usuario
Número : 3 Usuario : Cliente
Nombre historia : Modificar datos del usuario
Programador responsable : Randy Sandoval Viviani
Descripción :
Se debe modificar los datos personales del usuario en caso
hubiera la necesidad de hacerlo.
Validación :
El cliente puede modificar los datos del usuario mediante el uso
del nombre de usuario asignando, en esta opción solo se podrá
actualizar datos personales del usuario.
Estimación : 2 días Prioridad : Media
Fuente: Innovaschools Los Olivos
4
Tabla N° 8: Historia de usuario número 5 – Dar alta y baja de
usuario del sistema
Historia de Usuario
Número : 5 Usuario : Cliente
Nombre historia: Dar de alta y baja cuentas de usuario.
Programador responsable : Randy Sandoval Viviani
Descripción :
Como cliente quiero poder desactivar temporalmente o
permanentemente el acceso al sistema a usuarios que ya no estén
trabajando en el área y/o se encuentren de vacaciones, así mismo
tener la posibilidad de volver a activarlos nuevamente en el
sistema.
Validación :
Como supervisor el cliente puede desactivar temporalmente o
definitivamente cualquier cuenta de usuario (operadores) según lo
crea necesario y también podrá dar de alta nuevamente.
Estimación : 1 día Prioridad : Media
Fuente: Innovaschools Los Olivos
5
Tabla N° 10: Historia de usuario número 7 – Cambiar contraseña
de usuario
Historia de Usuario
Número : 7 Usuario : Cliente
Nombre historia: Cambiar contraseña del usuario.
Programador responsable : Randy Sandoval Viviani
Descripción :
Como cliente quiero poder cambiar la contraseña de los usuarios
en caso que sea necesario y poder tener una mayor seguridad de
las cuentas de usuarios.
Validación :
Como usuario supervisor el cliente puede realizar el cambio de la
contraseña antigua por una nueva de cualquier usuario según la
petición de cada usuario (docente, directivo, soporte).
Estimación : 2 días Prioridad : Media
Fuente: Innovaschools Los Olivos
6
Tabla N° 12: Historia de usuario número 9 – Asignar nivel de
prioridad
Historia de Usuario
Número : 9 Usuario : Cliente
Nombre historia: Asignar nivel de prioridad de incidencia.
Programador responsable : Randy Sandoval Viviani
Descripción :
Como cliente necesito poder asignar un nivel de prioridad a la
incidencia para su respectiva atención.
Validación :
Como usuario el cliente puede asignar una prioridad a la incidencia
que va a registrar de acuerdo a parámetros establecidos en el área
para el nivel de prioridad.
Estimación : 1 día Prioridad : Alta
Fuente: Innovaschools Los Olivos
7
Tabla N° 14: Historia de usuario número 11 – Reclasificar
incidencia
Historia de Usuario
Número : 11 Usuario : Cliente
Nombre historia: Reclasificar incidencia
Programador responsable : Randy Sandoval Viviani
Descripción :
El usuario soporte selecciona la incidencia para reasignarle un
técnico o reclasificar la incidencia al siguiente nivel de atención
hasta que se resuelva la incidencia. Además se puede reclasificar
según su prioridad en caso sea necesaria.
Validación :
Como usuario el cliente puede realizar la reclasificación de
incidencias que fueron registradas anteriormente para poder
asignarles un nuevo nivel de atención y estado hasta que se de
por cerrada la incidencia
Estimación : 2 día Prioridad : Alta
Fuente: Innovaschools Los Olivos
8
Tabla N° 16: Historia de usuario número 13 – Registrar acción de
solución
Historia de Usuario
Número : 13 Usuario : Cliente
Nombre historia: Registrar acción de solución
Programador responsable : Randy Sandoval Viviani
Descripción :
Como cliente necesito seleccionar la incidencia sobre la que se
registrará una acción. Se introduce la descripción de la acción,
fecha, tiempo dedicado y el técnico quien realizó la acción.
Validación :
Como usuario el cliente puede pasar el estado de la incidencia de
estado clasificado a estado resuelto. Si la acción es la correcta
para la solución de la incidencia, ésta pasará al estado cerrado.
Estimación : 3 días Prioridad : Muy Alta
Fuente: Innovaschools Los Olivos
9
Tabla N° 18: Historia de usuario número 15 – Generar Reportes de
incidencias.
Historia de Usuario
Número : 15 Usuario : Cliente
Nombre historia: Generar reportes de incidencias
Programador responsable : Randy Sandoval Viviani
Descripción :
Como cliente necesito generar los reportes de incidencias que
ocurrieron durante el día, mes, año, desde una fecha escogida a
otra; reportes de la cantidad de incidencias que se dieron según el
tiempo o por usuario. Informes de horas invertidas, informe de
elementos problemáticos.
Validación :
Como usuario el cliente puede realizar reportes que podrán ser
imprimidos y servirán como informe mediante filtros en el cual se
podrán generar la información que se necesite y para para ver
cómo está funcionando el proceso de control de incidencias.
Estimación : 4 días Prioridad : Muy Alta
Fuente: Innovaschools Los Olivos
F. Pila de Producto
Después de concluir con el listado de los requerimientos obtenidos con
el Product Owner, se dará paso a la construcción del Product Backlog
10
también llamado pila del producto, el que estará compuesto por las
historias del usuario con su prioridad respectiva y los días estimados a
ser desarrollados cada una de las mismas.
Tabla N° 20: Product Backlog
PILA DE PRODUCTO
11
En la opción usuarios del
Se debe repetir dos
sistema seleccionar la
veces la contraseña
Cambiar opción cambiar
nueva para que el
7 contraseña 1 2 contraseña, ingrese al
sistema valide el
de usuario antigua y seguidamente
cambio de
la nueva contraseña y
contraseña
guardar
En el menú principal
elegir la opción Se registran fecha,
incidencias y seleccionar hora, usuario
Registrar
8 2 4 la opción registrar afectado, lugar y una
incidencia
incidencia, ingresar la breve descripción de
información solicitada y la incidencia.
proceder a registrar.
En el formulario registrar La prioridad es
Asignar
incidencia, existe la asignada por el
nivel de
9 2 1 opción nivel de prioridad sistema mediante
prioridad de
que el sistema asigna a parámetros
incidencia
la incidencia establecidos.
En el formulario registrar El estado de la
incidencia, existe la incidencia nos ayuda
Asignar opción de poder a tener conocimiento
10 estado de 2 1 establecer un estado de como la incidencia
incidencia para la incidencia para esta siendo atendida
realizar el seguimiento hasta que finalmente
correspondiente. se cierre.
Se realiza el listado
de todas las
En la opción control de incidencias
incidencias se puede registradas, y se
seleccionar la opción realizan consultas
Consultar
11 2 3 consultar incidencias, personalizadas
incidencias
seleccionar la incidencia mediante el código,
deseada y realizar las prioridad, estado
consultas necesarias. actual, categoría o
asignándole un
rango de fecha.
Las incidencias
registradas son
En el menú principal en
derivadas a
la opción control de
diferentes niveles de
incidencias se consulta
atención si estas no
una incidencia y luego se
Reclasificar han podido
12 2 2 procede a reclasificar la
incidencias resolverse en el
incidencia a otro nivel si
primer nivel y se
esta no ha podido ser
derivan a un posterior
resuelta en primera
nivel de atención
instancia
hasta que sean
resueltas.
Calcular el En la opción registrar El sistema cumple
porcentaje incidencia el sistema con calcular
de almacena el nivel de porcentaje de casos
13 2 1
incidencias atención que será resueltos en el primer
resueltas resuelto y luego cuando nivel de soporte y
por primer el técnico comienza a guardar este dato
12
nivel de registrar la solución el que se puede
soporte. sistema registra el nivel visualizar en el
de atención y procede a reporte de
contabilizar en el incidencias.
porcentaje.
En el menú principal en Cuando se realiza el
la opción solución de registro de la
incidencia, solución de
seleccionamos la incidencia se debe
Registrar incidencia a la cual ingresar la hora de
14 acciones 3 3 vamos a registrar la registro y hora de
de solución solución ingresando los término de atención,
datos que nos pide el las acciones de
sistema y luego se solución que se
procede a guardar el realizaron y el estado
registro. final de la incidencia.
En la opción reportes el
Generar
usuario elegirá el tipo de Todo reporte se
Reportes
16 3 4 reporte que desea mostrará en formato
de
generar según la PDF .
incidencias
necesidad que tenga.
En la opción registrar
incidencia el sistema
almacena el estado de El sistema cumple
la incidencia, al ser con calcular
Calcular cerrada contabilizara porcentaje de casos
porcentaje como caso cerrado y reabiertos y guardar
17 2 1
de casos luego cuando el técnico este dato que se
reabiertos. reabre un caso , este puede visualizar en el
cambia de estado de reporte de
reabierto en donde se incidencias.
procede contabilizar en
el porcentaje.
Nota. Pila del producto. Fuente: Innovaschools Sede Los olivos. Elaboración propia.
Prioridad: Se encuentra en una escala de 1 – 3 donde 1=Media; 2= Alta y 3=Muy Alta
Estimación: Cantidad en días
13
Sprint Backlog
Se agrupa las historias del usuario y la descompone en tareas o actividades
para poder desarrollar el sistema en forma incremental.
Tabla N° 21: Sprint Backlog
SPRINT BACKLOG
Estimación
Sprint Historias Prioridad
(días)
Ingreso al sistema 3 1
Registrar incidencia 3 2
Reclasificar incidencia 1 2
14
Sprint 1: Acceso al sistema y control de usuarios
En este primer sprint se realizó en primer lugar el análisis del sistema
mediante la elaboración de los casos de uso y diagrama de clases, luego se
elaboró el diagrama lógico y físico de la base de datos con las tablas
correspondientes para este sprint y finalmente se procedió a realizar la
interface y programación de logueo para el acceso al sistema, el menú
principal y también se realiza la interface de control de usuarios donde se
realizara el registro, consulta y modificación de datos de los usuarios del
sistema.
Tabla N° 22: Sprint Backlog – Acceso al sistema y control de
usuario
FECHA INICIO:
TITULO DE SPRINT
N° TAREAS
SPRINT 1
Acceso al sistema y 16 FECHA FINAL:
control de usuarios
ID TAREA
1 Elaboración del diagrama de caso de uso.
2 Elaboración de diagrama de clases.
3 Diseño del modelo Lógico y Físico de la base de datos.
4 Diseño de la interface de Acceso al sistema
5 Programación de la interface de Acceso al sistema.
6 Diseño de la interface del Menú Principal.
7 Programación de la interface del Menú Principal.
8 Diseño de la interface de registro de usuarios.
9 Programación de la Interface de registro de usuarios.
10 Diseño de la interface de consulta y administración de usuarios.
11 Programación de la interface de consulta y administración de
usuarios.
12 Diseño de la interface de cambio de contraseña.
13 Programación de la interface de cambio de contraseña.
14 Demo del Sprint 1
15 Review – Burn down chart del sprint 1
16 Retrospectiva del Sprint 1
Nota. Sprint 1: Acceso al sistema y control de usuarios.
Fuente: Innovaschools Sede Los olivos. Elaboración propia.
15
Sprint 2: Gestión de Incidencias.
En este segundo sprint en primera instancia se realizó el análisis del
sistema mediante la elaboración de los casos de uso y diagrama de
clases, luego se elaboró el diagrama lógico y físico de la base de datos
con las tablas correspondientes para este sprint y finalmente se realiza
la interface y la programación.
ID TAREA
1 Elaboración del diagrama de caso de uso.
2 Elaboración de diagrama de clases.
3 Diseño del modelo Lógico y Físico de la base de datos.
4 Diseño de la interface de Registro de incidencias.
5 Programación de la interface de Registro de incidencias
6 Diseño de la interface de reclasificación de incidencias
7 Programación de la interface de reclasificación de incidencias.
8 Diseño de la interface de consulta y administración de incidencias.
9 Programación de la Interface de consulta y administración de
incidencias.
10 Diseño de la interface de Resolver la incidencia.
11 Programación de la interface editar detalle de incidencias.
12 Demo del Sprint 2
13 Review – Burn down chart del sprint 2
14 Retrospectiva del Sprint 2
16
Sprint 3: Reporte de Incidencias e Indicadores.
En este primer sprint se realizó en primer lugar el análisis del sistema
mediante la elaboración de los casos de uso y diagrama de clases, luego
se elaboró el diagrama lógico y físico de la base de datos con las tablas
correspondientes para este sprint y finalmente se procedió a realizar la
interface de reportes de incidencias y de los indicadores.
Tabla N° 24: Sprint Backlog - Reportes del sistema e indicadores
FECHA INICIO:
TITULO DE SPRINT
N° TAREAS
SPRINT 3
13 FECHA FINAL:
Gestión de incidencias
ID TAREA
1 Elaboración del diagrama de caso de uso.
2 Elaboración de diagrama de clases.
3 Diseño del modelo Lógico y Físico de la base de datos.
4 Diseño de la interface de Registro de Soluciones.
5 Programación de la interface de Registro de soluciones.
6 Diseño de la interface de registro de acción de solución.
7 Programación de la interface de registro de acción de solución.
8 Diseño de la interface de consulta de soluciones.
9 Programación de la Interface de consulta de soluciones.
10 Diseño de la interface de generación de reportes.
11 Programación de la interface de generación de reportes.
12 Demo del Sprint 3
13 Review – Burn down chart del sprint 3
Nota. Sprint 3: Reportes del sistema e indicadores.
Fuente: Innovaschools Sede Los Olivos. Elaboración propia.
PLANIFICACIÓN
En la figura 16 se detalla las tareas que se va a realizar en cada sprint,
a estas tareas se le ha asignado una fecha para poder desarrollarla,
además se muestran los hitos importantes que son la presentación de
los sprint al product owner.
17
Figura 20: Diagrama de Gantt - Scrumm
18
Análisis y Desarrollo del Proyecto
Diagrama de caso de uso del sistema del sprint 1 para el actor Supervisor.
Diagrama de caso de uso del sistema del sprint 1 para el actor Usuario.
19
Diagrama de clases
20
Figura N° 24: Modelo Lógico de Base de datos para el sprint 1
21
Prototipos de interfaces del Sprint 1:
22
El prototipo de interface de acceso al sistema elegido por el cliente
(Ver anexo 6.) finalmente fue la “opción A” que se muestra en la figura
26.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Iniciar Sesión</title>
<?php require_once '../../layout/head.php' ?>
<!-- iCheck -->
<link rel="stylesheet" href="../../../public/plugins/iCheck/square/blue.css">
</head>
<!--
<body class="hold-transition login-page">
-->
<body background="../../../public/dist/img/wallpaper.jpeg">
<div class="login-box">
<div class="login-logo">
<b>
<label style='color:blue'>
Sistema de Gestión de Incidencias
</label>
</b>
</div>
23
<?php if(isset($_SESSION['msj_login'])){ ?>
<div class="callout callout-danger">
<p><?php echo $_SESSION['msj_login']; ?></p>
</div>
<?php }?>
<?php unset($_SESSION['msj_login']); ?>
<div class="row">
<div class="col-xs-12">
<button type="submit" class="btn btn-primary btn-block btn-
flat">Autenticar</button>
</div>
<!-- /.col -->
</div>
</form>
<!--
<a href="#">I forgot my password</a><br>
<a href="register.html" class="text-center">Register a new membership</a>
-->
</div>
<!-- /.login-box-body -->
</div>
<!-- /.login-box -->
<script src="../../../plugins/iCheck/icheck.min.js"></script>
<script>
$(function () {
$('input').iCheck({
checkboxClass: 'icheckbox_square-blue',
radioClass: 'iradio_square-blue',
increaseArea: '20%' // optional
});
});
</script>
</body>
</html>
24
Prototipos para interface Menú Principal
25
El prototipo para la interface de menú principal elegido por el cliente
(Ver anexo 6) fue la “opción B” que se muestra en la figura 29.
26
<?php if($p==1){ ?>
<li class="treeview">
<a href="#">
<i class="fa fa-users"></i> <span>Usuarios</span>
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
<li><a href="../../../application/src/controller/UserController.php?add"><i
class="fa fa-circle-o"></i>Agregar</a></li>
<li><a href="../../../application/src/controller/UserController.php?list"><i
class="fa fa-circle-o"></i>Listar</a></li>
</ul>
</li>
<?php }?>
27
<?php if($p==1){ ?>
<li class="treeview">
<a href="#">
<i class="fa fa-caret-square-o-down"></i>
<span>Subcategorías</span>
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
<li><a
href="../../../application/src/controller/SubcategoriaController.php?add"><i
class="fa fa-circle-o"></i>Agregar</a></li>
<li><a
href="../../../application/src/controller/SubcategoriaController.php?list"><i
class="fa fa-circle-o"></i>Listar</a></li>
</ul>
</li>
<?php } ?>
</ul>
</section>
<!-- /.sidebar -->
</aside>
28
Prototipos para la interface Registro de Usuarios del sistema
29
El prototipo para el formulario de registro de elegido por el cliente (Ver
anexo 6) fue la “opción A” que se muestra en la figura 30.
<!DOCTYPE html>
<?php
if(!isset($_SESSION)){ session_start(); }
require_once '../security.php';
?>
<?php
$dts=null;
if(isset($_SESSION['dts_usuario'])){
$dts=$_SESSION['dts_usuario'];}
$listaSede=$_SESSION['cbo_sede'];
$listaPerfil=$_SESSION['cbo_perfil'];
unset($_SESSION['dts_usuario']);
?>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Agregar Usuario</title>
<?php require_once '../../layout/head.php' ?>
</head>
<body class="hold-transition skin-blue sidebar-mini">
<!-- Site wrapper -->
<div class="wrapper">
30
<section class="content">
31
<div class="col-md-4">
<label>Contraseña</label>
<input type="password" id="t_password" name="t_password"
class="form-control"
maxlength="50" value="<?php if($dts!=null) echo
base64_decode($dts['clave']); ?>">
</div>
<div class="col-md-4">
<label>Teléfono/Celular</label>
<input type="text" id="t_telefono" name="t_telefono" class="form-
control" onkeypress="return telefono(event)"
maxlength="10" value="<?php if($dts!=null) echo $dts['telefono'];
?>">
</div>
<div class="col-md-4">
<label>Perfil</label>
<select id="s_perfil" name="s_perfil" class="form-control">
<option value="-1">--SELECCIONE--</option>
<?php if($listaPerfil!=null){ ?>
<?php foreach($listaPerfil as $p){?>
<option value="<?php echo $p['id_perfil']; ?>"><?php echo
$p['descripcion'] ?></option>
<?php }?>
<?php }?>
</select>
<?php if($dts!=null){ ?>
<script>document.getElementById("s_perfil").value='<?php echo
$dts['id_perfil'] ?>';</script>
<?php }?>
</div>
<div class="col-md-4">
<label>Sede</label>
<select id="s_sede" name="s_sede" class="form-control">
<option value="">--SELECCIONE--</option>
<?php if($listaSede!=null){ ?>
<?php foreach($listaSede as $s){?>
<option value="<?php echo $s['id_sede']; ?>"><?php echo
$s['descripcion'] ?></option>
<?php }?>
<?php }?>
</select>
<?php if($dts!=null){ ?>
<script>document.getElementById("s_sede").value='<?php echo
$dts['id_sede'] ?>'</script>
<?php }?>
</div>
<div class="col-md-12"> </div>
<div class="col-md-2">
<button type="button" onclick="javascript:addUser()" class="btn btn-
block btn-success">Guardar</button>
</div>
32
<div class="col-md-2">
<button type="button" onclick="javascript:cancelUser()" class="btn btn-
block btn-danger">Cancelar</button>
</div>
<div class="col-md-12"> </div>
</div>
<!--/.box-footer-->
</form>
</div>
<!-- /.box -->
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
</div>
<!-- ./wrapper -->
</body>
</html>
33
interface para que luego el cliente pueda elegir el prototipo que le
parezca mejor.
34
El prototipo para el formulario consulta de usuarios de sistema elegido
por el cliente (Ver anexo 6) fue la “opción A” que se muestra en la
figura 32.
<?php
$listUser=$_SESSION['list_user'];
?>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Usuarios</title>
<?php require_once '../../layout/head.php' ?>
<?php require_once '../../layout/headTable.php' ?>
</head>
<body class="hold-transition skin-blue sidebar-mini">
<!-- Site wrapper -->
<div class="wrapper">
<br>
35
<div class="col-md-2">
<a href="../../../application/src/controller/UserController.php?add">
<button type="button" class="btn btn-block btn-primary btn-
sm">Agregar</button>
</a>
</div>
<br><br>
</section>
36
<td align="center">
<a class="btn btn-app"
href="../../src/controller/UserController.php?editar=<?php echo $p['id_usuario']
?>">
<i class="fa fa-edit"></i> Editar
</a>
</td>
<td align="center">
<?php if($p['estado']=='0'){ ?>
<a class="btn btn-app"
href="../../src/controller/UserController.php?activar=<?php echo $p['id_usuario']
?>">
<i class="fa fa-check"></i> Activar
</a>
<?php }else{?>
<a class="btn btn-app"
href="../../src/controller/UserController.php?activar=<?php echo $p['id_usuario']
?>">
<i class="fa fa-close"></i> Inactivar
</a>
<?php }?>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
<?php }else{?>
<div class="callout callout-info">
<p>No se encontraron registros</p>
</div>
<?php }?>
</div>
<!-- /.box -->
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
</div>
<!-- ./wrapper -->
</body>
</html>
37
Prototipos de la interface Actualizar datos de Usuario:
Se realizaron dos (02) prototipos para esta interface para que luego
el cliente pueda elegir el prototipo que le parezca mejor.
Figura 34: Prototipo “A” interface de actualizar datos de Usuario
38
El prototipo para la interface actualizar datos de usuario elegido por el
cliente (Ver anexo 6) fue la “opción A” que se muestra en la figura 34.
<?php
$dts=null;
if(isset($_SESSION['dts_usuario'])){
$dts=$_SESSION['dts_usuario'];
}
$listaSede=$_SESSION['cbo_sede'];
$listaPerfil=$_SESSION['cbo_perfil'];
unset($_SESSION['dts_usuario']);
?>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Agregar Usuario</title>
<?php require_once '../../layout/head.php' ?>
</head>
<body class="hold-transition skin-blue sidebar-mini">
<!-- Site wrapper -->
<div class="wrapper">
</div>
<!-- /.box -->
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
</div>
<!-- ./wrapper -->
</body>
</html>
</section>
40
<div class="col-md-4">
<label>Apellidos</label>
<input type="text" id="t_apellidos" name="t_apellidos" class="form-
control" onkeypress="return letra(event)"
maxlength="50" value="<?php if($dts!=null) echo $dts['apellidos'];
?>">
</div>
<div class="col-md-4">
<label>DNI</label>
<input type="text" id="t_dni" name="t_dni" class="form-control"
onkeypress="return numero(event)" onblur='validaDNI(this.value)'
maxlength="8" value="<?php if($dts!=null) echo $dts['dni']; ?>"
<?php if($dts!=null)echo 'readonly';?>>
</div>
<div class="col-md-12">
<label>Dirección</label>
<input type="text" id="t_direccion" name="t_direccion" class="form-
control" onkeypress="return sinCaracterEspecial(event)"
maxlength="200" value="<?php if($dts!=null) echo $dts['direccion'];
?>">
</div>
<div class="col-md-4">
<label>Email</label>
<input type="text" id="t_email" name="t_email" class="form-control"
onkeypress="return correo(event)" onblur='validarEmail(this.value)'
maxlength="50" value="<?php if($dts!=null) echo $dts['email']; ?>">
</div>
<div class="col-md-4">
<label>Usuario</label>
<input type="text" id="t_usuario" name="t_usuario" class="form-control"
onkeypress="return letra(event)"
maxlength="50" value="<?php if($dts!=null) echo $dts['usuario'];
?>" <?php if($dts!=null)echo 'readonly';?>>
</div>
<div class="col-md-4">
<label>Contraseña</label>
<input type="password" id="t_password" name="t_password"
class="form-control"
maxlength="50" value="<?php if($dts!=null) echo
base64_decode($dts['clave']); ?>">
</div>
<div class="col-md-4">
<label>Teléfono/Celular</label>
<input type="text" id="t_telefono" name="t_telefono" class="form-
control" onkeypress="return telefono(event)"
maxlength="10" value="<?php if($dts!=null) echo $dts['telefono'];
?>">
</div>
<div class="col-md-4">
<label>Perfil</label>
<select id="s_perfil" name="s_perfil" class="form-control">
<option value="-1">--SELECCIONE--</option>
<?php if($listaPerfil!=null){ ?>
<?php foreach($listaPerfil as $p){?>
<option value="<?php echo $p['id_perfil']; ?>"><?php echo
$p['descripcion'] ?></option>
<?php }?>
41
<?php }?>
</select>
<?php if($dts!=null){ ?>
<script>document.getElementById("s_perfil").value='<?php echo
$dts['id_perfil'] ?>';</script>
<?php }?>
</div>
<div class="col-md-4">
<label>Sede</label>
<select id="s_sede" name="s_sede" class="form-control">
<option value="">--SELECCIONE--</option>
<?php if($listaSede!=null){ ?>
<?php foreach($listaSede as $s){?>
<option value="<?php echo $s['id_sede']; ?>"><?php echo
$s['descripcion'] ?></option>
<?php }?>
<?php }?>
</select>
<?php if($dts!=null){ ?>
<script>document.getElementById("s_sede").value='<?php echo
$dts['id_sede'] ?>'</script>
<?php }?>
</div>
<div class="col-md-12"> </div>
<div class="col-md-2">
<button type="button" onclick="javascript:addUser()" class="btn btn-
block btn-success">Guardar</button>
</div>
<div class="col-md-2">
<button type="button" onclick="javascript:cancelUser()" class="btn btn-
block btn-danger">Cancelar</button>
</div>
<div class="col-md-12"> </div>
</div>
<!--/.box-footer-->
</form>
</div>
<!-- /.box -->
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
<?php require_once '../../layout/footer.php' ?>
<!-- sidebar.php -->
<?php //require_once '../../layout/sidebar.php' ?>
</div>
<!-- ./wrapper -->
<?php require_once '../../layout/foot.php' ?>
<?php if($dts!=null){ ?>
<script>
//$( document ).ready(function() {
//activarSedeUsuario('<?php //echo $dts['id_perfil'] ?>');
//});
</script>
<?php }?>
</body>
</html>
42
Demos de las interfaces oficiales del Sprint1
43
Figura 37: Interface oficial del Menú Principal
44
Interface Consulta de Usuarios de sistema.
45
Gráfico de Burn Down Chart del Sprint 1.
10
8
6 Dias restantes
4 Diass estimados
2
0
1 2 3 4 5 6 7 8 9 10 11
Dias del Sprint
46
Figura N° 42: Diagrama de casos de uso del sistema – Gestión de incidencias
Diagrama de caso de uso del sistema del sprint 2 para el actor usuario Supervisor.
Diagrama de caso de uso del sistema del sprint 2 para el actor Usuario.
47
Diagrama de Clases
48
Figura N° 45: Modelo lógico de la base de datos para el sprin 2
49
Prototipos de interfaces del Sprint 2:
Los prototipos son los diseños previos de las interfaces que nos dará
el producto final, para este caso se realizó dos (02) prototipos por cada
interface del Sprint 2.
50
Figura N° 48: Prototipo para el registro de incidencia del Sprint 2
<?php
$listTicket=$_SESSION['list_ticket'];
$listaCategoria=$_SESSION['cbo_categoria'];
$listaPrioridad=$_SESSION['cbo_prioridad'];
$listaEspecialista=$_SESSION['cbo_especialista'];
$listaSub=null;
51
if(isset($_SESSION['cbo_sub'])){ $listaSub=$_SESSION['cbo_sub']; }
$listaTipo=$_SESSION['cbo_tipoincidencia'];
$listaEstado=$_SESSION['cbo_estado'];
?>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Incidencias</title>
<?php require_once '../../layout/head.php' ?>
<?php require_once '../../layout/headTable.php' ?>
</head>
<body class="hold-transition skin-blue sidebar-mini">
<!-- Site wrapper -->
<div class="wrapper">
<br>
<div class="col-md-2">
<a href="../../../application/src/controller/IncidenciaController.php?add">
<button type="button" class="btn btn-block btn-primary btn-
sm">Agregar</button>
</a>
</div>
<div class="col-md-2">
<a href="#" onclick="busquedaTicket()">
<button type="button" class="btn btn-block btn-github btn-
sm">Búsqueda</button>
</a>
</div>
<br><br>
</section>
<!-- Main content -->
<section class="content">
52
<?php if(isset($_SESSION['msj_tipo'])){ ?>
<div class="callout callout-<?php echo $_SESSION['msj_tipo']; ?>">
<p><?php echo $_SESSION['msj_contenido']; ?></p>
</div>
<?php }?>
<?php unset($_SESSION['msj_tipo']);unset($_SESSION['msj_contenido']);
?>
53
</div>
<div class="modal-footer">
<button type="button" onclick="guardarSolucion()" class="btn btn-
success">Guardar</button>
<button type="button" class="btn btn-default pull-left" data-
dismiss="modal">Cerrar</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
<!-- /modal resolver-->
<!-- modal cierre-->
<div class="modal fade" id="modal-cierre">
<div class="modal-dialog" style="width:700px !important">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-
label="Close">
<span aria-hidden="true">×</span></button>
<h4 class="modal-title">Cerrar Incidencia</h4>
</div>
<div class="modal-body">
<form id="frm_cerrar"
action="../../src/controller/IncidenciaController.php" method="POST">
<input type="hidden" name="action" id="action_cierre">
<div id="datosCerrar">
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" onclick="guardarCierreTicket()" class="btn btn-
success">Guardar</button>
<button type="button" class="btn btn-default pull-left" data-
dismiss="modal">Cerrar</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
<!-- /modal cierre-->
54
<!-- busqueda -->
<div class="box" id="divbusqueda" style="display:none">
<form method="POST" action="../../src/controller/IncidenciaController.php"
id="miform">
<input type="hidden" name="action" value="buscar">
<div class="box-body">
<div class="col-md-3">
<label>Categoría</label>
<select id="s_categoria" name="s_categoria" class="form-control"
onchange="javascript:buscarSubcategoria(this.value)">
<option value="-1">--TODOS --</option>
<?php if($listaCategoria!=null){ ?>
<?php foreach($listaCategoria as $p){?>
<option value="<?php echo $p['id_categoria']; ?>"><?php echo
$p['descripcion'] ?></option>
<?php }?>
<?php }?>
</select>
</div>
<div class="col-md-3">
<label>Subcategoría</label>
<div id="divsubcategoria">
<select id="s_subcategoria" name="s_subcategoria" class="form-
control">
<option value="-1">--TODOS --</option>
<?php if($listaSub!=null){ ?>
<?php foreach($listaSub as $ss){?>
<option value="<?php echo $ss['id_subcategoria']; ?>"><?php
echo $ss['descripcion'] ?></option>
<?php }?>
<?php }?>
</select>
</div>
</div>
<div class="col-md-3">
<label>Prioridad</label>
<select id="s_prioridad" name="s_prioridad" class="form-control">
<option value="-1">--TODOS --</option>
<?php if($listaPrioridad!=null){ ?>
<?php foreach($listaPrioridad as $x){?>
<option value="<?php echo $x['id_prioridad']; ?>"><?php echo
$x['descripcion'] ?></option>
<?php }?>
<?php }?>
</select></div>
<div class="col-md-3">
<label>Tipo</label>
<select id="s_tipo" name="s_tipo" class="form-control">
<option value="-1">--TODOS --</option>
<?php if($listaTipo!=null){ ?>
<?php foreach($listaTipo as $tt){?>
<option value="<?php echo $tt['id_tipologia']; ?>"><?php echo
$tt['descripcion'] ?></option>
<?php }?>
<?php }?>
</select>
55
</div>
<div class="form-group">
<div class="col-md-3">
<label>Fecha Desde</label>
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-calendar"></i>
</div>
<input type="text" name="f_desde" id="datemask_desde"
class="form-control" data-inputmask="'alias': 'yyyy-mm-dd'" data-mask>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-3">
<label>Fecha Hasta</label>
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-calendar"></i>
</div>
<input type="text" name="f_hasta" id="datemask_hasta"
class="form-control" data-inputmask="'alias': 'yyyy-mm-dd'" data-mask>
</div>
</div>
</div>
<div class="col-md-3">
<label>Estado</label>
<select id="s_estado" name="s_estado" class="form-control">
<option value="-1">--TODOS--</option>
<?php if($listaEstado!=null){ ?>
<?php foreach($listaEstado as $tx){?>
<option value="<?php echo $tx['id_estado']; ?>"><?php echo
$tx['descripcion'] ?></option>
<?php }?>
<?php }?>
</select>
</div>
<div class="col-md-2">
<label style="color:transparent">Buscar</label>
<button type="submit" class="btn btn-block btn-instagram btn-
sm">Buscar</button>
</div>
<div class="col-md-12"> </div>
</div>
</form>
</div>
<!-- -->
<div class="box">
56
<table id="example1" class="table table-bordered table-striped">
<thead>
<tr>
<th>Código</th>
<th>Prioridad</th>
<th>Fecha/Hora Registro</th>
<th>Categoria</th>
<th>Subcategoria</th>
<th>Estado</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<?php foreach($listTicket as $p){ ?>
<tr>
<td><?php echo $p['codigo'] ?></td>
<td><?php echo $p['prioridad'] ?></td>
<td><?php echo $p['fecharegistro'] ?></td>
<td><?php echo $p['categoria'] ?></td>
<td><?php echo $p['subcategoria'] ?></td>
<td>
<label id="lblestado<?php echo $p['id_incidencia'] ?>"
style="color:<?php echo $p['color'] ?>">
<b><?php echo $p['nombre_estado'] ?></b>
</label>
</td>
<td align="center">
<div id='divboton<?php echo $p['id_incidencia'] ?>'>
<?php if($p['edicion']=='1'){ ?>
<a class="btn btn-app"
href="../../src/controller/IncidenciaController.php?editar=<?php echo
$p['id_incidencia'] ?>">
<i class="fa fa-edit"></i> Editar
</a>
<?php }?>
<?php if($p['proceso']=='1'){ ?>
<a class="btn btn-app" onclick="ponerTicketEnProceso('<?php
echo $p['id_incidencia'] ?>')">
<i class="fa fa-play"></i> En proceso
</a>
<?php }?>
<?php if($p['resolver']=='1'){ ?>
<a class="btn btn-app" onclick="resolverTicket('<?php echo
$p['id_incidencia'] ?>')" data-toggle="modal" data-target="#modal-resolver">
<i class="fa fa-code-fork"></i> Resolver
</a>
<?php }?>
<?php if($p['cierre']=='1'){ ?>
<a class="btn btn-app" onclick="cerrarTicket('<?php echo
$p['id_incidencia'] ?>')" data-toggle="modal" data-target="#modal-cierre">
<i class="fa fa-close"></i> Cerrar
</a>
<?php }?>
</div>
</td>
57
<td>
<a class="btn btn-app" onclick="verDetalleTicket('<?php echo
$p['id_incidencia'] ?>')" data-toggle="modal" data-target="#modal-default">
<i class="fa fa-file-o"></i> Detalle
</a>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
<?php }else{?>
<?php }?>
</div>
<!-- /.box -->
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
<script src="../../../public/plugins/input-mask/jquery.inputmask.js"></script>
<script src="../../../public/plugins/input-
mask/jquery.inputmask.date.extensions.js"></script>
<script src="../../../public/plugins/input-
mask/jquery.inputmask.extensions.js"></script>
<script>
$(function () {
});
</script>
</body>
</html>
58
Prototipo de la interface consulta y administración de
incidencias.
59
El prototipo para la interface consulta de incidencias elegido por el
cliente (Ver anexo 7) fue la “opción B” que se muestra en la figura 49.
<?php
$dts=null;
if(isset($_SESSION['dts_ticket'])){
$dts=$_SESSION['dts_ticket'];unset($_SESSION['dts_ticket']);
}
$listaCategoria=$_SESSION['cbo_categoria'];
$listaPrioridad=$_SESSION['cbo_prioridad'];
$listaEspecialista=$_SESSION['cbo_especialista'];
$listaSub=null;
if(isset($_SESSION['cbo_sub'])){ $listaSub=$_SESSION['cbo_sub']; }
$listaTipo=$_SESSION['cbo_tipoincidencia'];
$codIncidencia=$_SESSION['cod_incidencia'];
unset($_SESSION['cbo_sub']);
?>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Agregar Incidencia</title>
<?php require_once '../../layout/head.php' ?>
</head>
60
<?php require_once '../../layout/header.php' ?>
61
<div class="col-md-4">
<label>Categoría</label>
<select id="s_categoria" name="s_categoria" class="form-control"
onchange="javascript:buscarSubcategoria(this.value)">
<option value="-1">--SELECCIONE--</option>
<?php if($listaCategoria!=null){ ?>
<?php foreach($listaCategoria as $p){?>
<option value="<?php echo $p['id_categoria']; ?>"><?php echo
$p['descripcion'] ?></option>
<?php }?>
<?php }?>
</select>
<?php if($dts!=null){ ?>
<script>document.getElementById("s_categoria").value='<?php echo
$dts['id_categoria'] ?>';</script>
<?php }?>
</div>
<div class="col-md-4">
<label>Subcategoría</label>
<div id="divsubcategoria">
<?php if($dts!=null){ ?>
<select id="s_subcategoria" name="s_subcategoria" class="form-
control">
<option value="-1">--SELECCIONE--</option>
<?php if($listaSub!=null){ ?>
<?php foreach($listaSub as $ss){?>
<option value="<?php echo $ss['id_subcategoria'];
?>"><?php echo $ss['descripcion'] ?></option>
<?php }?>
<?php }?>
</select>
<script>document.getElementById("s_subcategoria").value='<?php echo
$dts['id_subcategoria'] ?>';</script>
<?php }else{?>
<select id="s_subcategoria" name="s_subcategoria" class="form-
control">
<option value="-1">--SELECCIONE--</option>
</select>
<?php } ?>
</div>
</div>
<div class="col-md-4">
<label>Prioridad</label>
<select id="s_prioridad" name="s_prioridad" class="form-control">
<option value="-1">--SELECCIONE--</option>
<?php if($listaPrioridad!=null){ ?>
<?php foreach($listaPrioridad as $x){?>
<option value="<?php echo $x['id_prioridad']; ?>"><?php echo
$x['descripcion'] ?></option>
<?php }?>
<?php }?></select>
<?php if($dts!=null){ ?>
<script>document.getElementById("s_prioridad").value='<?php echo
$dts['id_prioridad'] ?>';</script>
<?php }?>
62
</div>
<div class="col-md-4">
<label>Tipo</label>
<select id="s_tipo" name="s_tipo" class="form-control">
<option value="-1">--SELECCIONE--</option>
<?php if($listaTipo!=null){ ?>
<?php foreach($listaTipo as $tt){?>
<option value="<?php echo $tt['id_tipologia']; ?>"><?php echo
$tt['descripcion'] ?></option>
<?php }?>
<?php }?>
</select>
<?php if($dts!=null){ ?>
<script>document.getElementById("s_tipo").value='<?php echo
$dts['id_tipologia'] ?>';</script>
<?php }?>
</div>
<div class="col-md-4">
<label>Cliente</label>
<input type="text" id="t_cliente" name="t_cliente" class="form-control"
maxlength="50"
value="<?php if($dts!=null){ echo $dts['cliente']; } ?>"
onkeypress="return letra(event)">
</div>
<div class="col-md-4">
<label>Especialista</label>
<select id="s_especialista" name="s_especialista" class="form-
control">
<option value="-1">--SELECCIONE--</option>
<?php if($listaEspecialista!=null){ ?>
<?php foreach($listaEspecialista as $xx){?>
<option value="<?php echo $xx['id_usuario']; ?>"><?php echo
$xx['nombres']." ".$xx['apellidos'] ?></option>
<?php }?>
<?php }?>
</select>
<?php if($dts!=null){ ?>
<script>document.getElementById("s_especialista").value='<?php echo
$dts['id_especialista'] ?>';</script>
<?php }?>
</div>
<div class="col-md-12">
<label>Descripción</label>
<textarea class="form-control" id='t_descripcion' name="t_descripcion"
rows="4" style="resize:none"
onkeypress="return sinCaracterEspecial(event)"><?php
if($dts!=null){ echo $dts['descripcion']; } ?></textarea>
</div>
<div class="col-md-12">
<label>Posible Solución/Referencia</label>
<textarea class="form-control" name="t_solucion" rows="4"
style="resize:none"
onkeypress="return sinCaracterEspecial(event)"><?php
if($dts!=null){ echo $dts['solucion']; } ?></textarea>
</div>
63
<div class="col-md-12"> </div>
<div class="col-md-2">
<button type="button" onclick="javascript:addIncidencia()" class="btn
btn-block btn-success">Guardar</button>
</div>
<div class="col-md-2">
<button type="button" onclick="javascript:cancelIncidencia()" class="btn
btn-block btn-danger">Cancelar</button>
</div>
<div class="col-md-12"> </div>
</div>
<!--/.box-footer-->
</form>
</div>
<!-- /.box -->
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
<?php require_once '../../layout/footer.php' ?>
<!-- sidebar.php -->
<?php //require_once '../../layout/sidebar.php' ?>
</div>
<!-- ./wrapper -->
<?php require_once '../../layout/foot.php' ?>
</body>
</html>
Prototipo para la interface para resolver incidencias del sprint 2 – Opción “A”.
64
Figura N° 52: Prototipo para resolver la incidencia del Sprint 2
Prototipo para la interface para resolver incidencias del sprint 2 – Opción “B”.
65
<?php }?>
</select>
</div>
<div class="col-md-3">
<label>Subcategoría</label>
<div id="divsubcategoria">
<select id="s_subcategoria" name="s_subcategoria" class="form-
control">
<option value="-1">--TODOS --</option>
<?php if($listaSub!=null){ ?>
<?php foreach($listaSub as $ss){?>
<option value="<?php echo $ss['id_subcategoria']; ?>"><?php
echo $ss['descripcion'] ?></option>
<?php }?>
<?php }?>
</select>
</div>
</div>
<div class="col-md-3">
<label>Prioridad</label>
<select id="s_prioridad" name="s_prioridad" class="form-control">
<option value="-1">--TODOS --</option>
<?php if($listaPrioridad!=null){ ?>
<?php foreach($listaPrioridad as $x){?>
<option value="<?php echo $x['id_prioridad']; ?>"><?php echo
$x['descripcion'] ?></option>
<?php }?>
<?php }?>
</select>
</div>
<div class="col-md-3">
<label>Tipo</label>
<select id="s_tipo" name="s_tipo" class="form-control">
<option value="-1">--TODOS --</option>
<?php if($listaTipo!=null){ ?>
<?php foreach($listaTipo as $tt){?>
<option value="<?php echo $tt['id_tipologia']; ?>"><?php echo
$tt['descripcion'] ?></option>
<?php }?>
<?php }?>
</select>
</div>
<div class="form-group">
<div class="col-md-3">
<label>Fecha Desde</label>
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-calendar"></i>
</div>
<input type="text" name="f_desde" id="datemask_desde" class="form-control"
data-inputmask="'alias': 'yyyy-mm-dd'" data-mask>
</div>
</div>
</div>
<div class="form-group">
66
<div class="col-md-3">
<label>Fecha Hasta</label>
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-calendar"></i>
</div>
<input type="text" name="f_hasta" id="datemask_hasta"
class="form-control" data-inputmask="'alias': 'yyyy-mm-dd'" data-mask>
</div>
</div>
</div>
<div class="col-md-3">
<label>Estado</label>
<select id="s_estado" name="s_estado" class="form-control">
<option value="-1">--TODOS--</option>
<?php if($listaEstado!=null){ ?>
<?php foreach($listaEstado as $tx){?>
<option value="<?php echo $tx['id_estado']; ?>"><?php echo
$tx['descripcion'] ?></option>
<?php }?>
<?php }?>
</select>
</div>
<div class="col-md-2">
<label style="color:transparent">Generar</label>
<button type="submit" class="btn btn-block btn-success btn-
sm">Generar</button>
</div>
<div class="col-md-12"> </div>
</div>
</form>
</div>
<!-- -->
</section>
<!-- /.content -->
</div>
<?php require_once '../../layout/footer.php' ?>
67
Prototipo de la Interface Base de conocimiento de Incidencias.
68
El prototipo para la interface Base de datos de conocimientos elegido
por el cliente (Ver anexo 7) fue la “opción A” que se muestra en la
figura 53.
<?php
$listTicket=null;
if(isset($_SESSION['list_bd'])){
$listTicket = $_SESSION['list_bd'];
}
?>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Base de datos de Conocimiento de Incidencias</title>
<?php require_once '../../layout/head.php' ?>
<?php require_once '../../layout/headTable.php' ?>
</head>
<body class="hold-transition skin-blue sidebar-mini">
<!-- Site wrapper -->
<div class="wrapper">
69
<!-- modal info-->
<div class="modal fade" id="modal-default">
<div class="modal-dialog" style="width:900px !important">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-
label="Close">
<span aria-hidden="true">×</span></button>
<h4 class="modal-title">Información</h4>
</div>
<div class="modal-body">
<div id="datosTicket">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default pull-left" data-
dismiss="modal">Cerrar</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
<!-- /modal info-->
<div class="col-md-6">
<label>Palabra Clave</label>
<input type="text" class="form-control" id="t_clave" name="t_clave"
maxlength="50"
onkeypress="return sinCaracterEspecial(event)">
</div>
<div class="col-md-2">
<label style="color:transparent">Buscar</label>
<button type="button" onclick="buscar_bd_conocimiento()" class="btn
btn-block btn-success btn-sm">Buscar</button>
</div>
<div class="col-md-12"> </div>
</div>
</form>
</div>
<!-- -->
70
<?php if($listTicket!=null){ ?>
<div class="box-body table-responsive">
<table id="example1" class="table table-bordered table-striped">
<thead>
<tr>
<th>Código</th>
<th>Prioridad</th>
<th>Fecha/Hora Registro</th>
<th>Categoria</th>
<th>Subcategoria</th>
<th></th>
</tr>
</thead>
<tbody>
<?php foreach($listTicket as $p){ ?>
<tr>
<td><?php echo $p['codigo'] ?></td>
<td><?php echo $p['prioridad'] ?></td>
<td><?php echo substr($p['fecharegistro'],0,19) ?></td>
<td><?php echo $p['categoria'] ?></td>
<td><?php echo $p['subcategoria'] ?></td>
<td>
<a class="btn btn-app" onclick="verDetalleTicket('<?php echo
$p['id_incidencia'] ?>')" data-toggle="modal" data-target="#modal-default">
<i class="fa fa-file-o"></i> Detalle
</a>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
<?php }else{?>
71
</div>
<!-- ./wrapper -->
<script src="../../../public/plugins/input-mask/jquery.inputmask.js"></script>
<script src="../../../public/plugins/input-
mask/jquery.inputmask.date.extensions.js"></script>
<script src="../../../public/plugins/input-
mask/jquery.inputmask.extensions.js"></script>
<script>
$(function () {
});
</script>
</body>
</html>
72
Figura N° 55: Interface de Registro de Incidencias del Sprint2
73
Interface de Resolver la incidencia.
74
Figura N° 58: Interface de Base de conocimiento de incidencias del Sprint2
10
8
6 Dias restantes
4 Diass estimados
2
0
1 2 3 4 5 6 7 8 9 10 11
Dias del Sprint
75
Sprint 3: Reportes de Incidencias
Diagrama de caso de uso del sistema del sprint 3 para el actor Supervisor.
Diagrama de caso de uso del sistema del sprint 3 para el actor usuario.
76
Diagrama de Clases: La figura 58 muestra las relaciones entre las clases que involucra el sistema en el
Sprint 3. Estas clases son necesarias para el registro y consulta de soluciones de incidencias.
Fuente: Elaboración propia Figura N° 62: Diagrama de clases Registro y Consulta de soluciones de incidencias
77
Modelo Logico: El modelo lógico de la base de datos para el sprint 3 como se puede observar en la figura
59 es parte del proceso de control de incidencias y que finaliza con la solucion y cierre definitivo de la
incidencia.
78
Modelo Físico: El modelo físico de la base de datos para el sprint 3 se ha construido como se muestra en la
figura 60. Estas tablas se generan del modelo lógico añadiendo los tipos de datos y el tamaño de cada tipo
de dato para cada campo que es parte de las tablas relacionadas.
79
Prototipos de interfaces del Sprint 3:
Los prototipos son los diseños previos de las interfaces que nos dará
el producto final, para este caso se realizó dos (02) prototipos por cada
interface del Sprint 3.
80
Figura N° 66: Prototipo de reporte de porcentaje de casos
resueltos por el primer nivel de soporte
<br><br>
<table style="width:40%">
<tr>
<td align="center">
81
<label style="font-size:10px;font-family:arial">
<b>DESDE:</b>
</label>
<b>PORCENTAJE DE INCIDENCIAS RESUELTAS EN EL PRIMER NIVEL DE
SOPORTE</b>
</label>
</td>
</tr>
</table>
</center>
<br><br>
<table style="width:40%">
<tr> 82
<td align="center">
<label style="font-size:10px;font-family:arial">
<b>DESDE:</b>
Prototipo para la interface de reporte del porcentaje de casos
reabiertos
83
Figura N° 67: Prototipo de reporte de porcentaje de casos
reabiertos
84
En esta fase se procede a realizar la respectiva programación de
la interface de reporte de porcentaje de casos reabiertos del
prototipo que ha sido elegido por el cliente
87
Interface reporte de porcentaje de casos resueltos por el
primer nivel de soporte en el Sprint 3.
88
Interface reporte de porcentaje de casos reabiertos en el
Sprint 3.
10
8
6 Dias restantes
4 Diass estimados
2
0
1 2 3 4 5 6 7 8 9 10 11
Dias del Sprint
89
90