You are on page 1of 90

Desarrollo

Para desarrollar el sistema web para la gestión de incidencias en el área de


sistemas de la empresa Colegios Peruanos S.A. Innovaschools Sede Los
Olivos, se usó la metodología Scrum. Según dicha metodología se procedió
a realizar de la siguiente manera:

A. Introducción de la Metodología

Este documento describe la implementación de la metodología de


trabajo SCRUM que fue aplicada para el desarrollo del Sistema de
gestión de incidencias en el área de sistemas de Innovaschools Sede
Los Olivos.

Se Incluye junto a esta descripción el ciclo de vida iterativo e incremental


para el proyecto, los artefactos y documentos con los que se gestionan
las tareas, requisitos, monitorización y seguimiento del avance, así como
los roles y responsabilidades del equipo de trabajo.

B. Descripción General de la Metodología SCRUM.


 Las principales razones del uso de un ciclo de desarrollo iterativo e
incremental de tipo SCRUM para la ejecución de este proyecto son:

 Sistema modular. Las características del sistema de Control de


Incidencias permiten desarrollar una base funcional mínima y sobre ella
ir incrementando las funcionalidades o modificando el comportamiento o
apariencia de las ya implementadas.

 Entregas frecuentes y continuas al cliente de los módulos terminados,


de forma que puede disponer de una funcionalidad básica en un tiempo
mínimo y a partir de ahí un incremento y mejora continua del sistema.

 Previsible inestabilidad de requisitos:

 Es posible que el sistema incorpore más funcionalidades de las


inicialmente identificadas.

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.

 Para el cliente resulta difícil precisar cuál será la dimensión


completa del sistema, y su crecimiento puede continuarse en el
tiempo suspenderse o detenerse.

C. Personas y Roles del Proyecto


Grupo de personas que de manera conjunta desarrollan el producto del
proyecto. Tienen un objetivo común, comparten la responsabilidad del
trabajo que realizan en cada iteración y en el proyecto.

Tabla N°3: Recursos humanos y roles del proyecto


PERSONAS CONTACTOS ROLES
Product
Fernando
fernando.medina@colegiosperuanos.edu.pe Owner(Propietario
Medina
del productor)
Randy Scrum Master y
randy.sandoval@innovaschools.edu.pe
Sandoval Scrum Team
Fuente: Elaboration propia

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.

Tabla N° 4: Historia de usuario número 1 – Ingreso al sistema


Historia de Usuario
Número : 1 Usuario : Cliente
Nombre historia : Ingresar al sistema
Programador responsable : Randy Sandoval Viviani
Descripción :
Como cliente quiero que solo el personal autorizado del área de
sistema pueda ingresar al sistema de gestión de incidencias.
Validación :
El cliente únicamente puede tener acceso al sistema mediante un
usuario y contraseña que el administrador del sistema proveerá.
Estimación : 3 días Prioridad : Media
Fuente: Innovaschools Los Olivos

Tabla N° 5: Historia de usuario número 2 – Registrar usuario de


sistema
Historia de Usuario
Número : 2 Usuario : Cliente
Nombre historia : Registrar nuevo usuario de sistema
Programador responsable : Randy Sandoval Viviani
Descripción :
Se debe registrar nuevos usuarios para que tengan acceso al
sistema y lo puedan usar en base de las necesidades del área.
Validación :
El cliente puede registrar nuevos usuarios en el sistema
asignándole un nombre de usuario y una contraseña, y serán
identificados mediante un código único que tiene cada usuario y
que le asigna automáticamente el sistema.
Estimación : 2 días Prioridad : Media
Fuente: Innovaschools Los Olivos

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

Tabla N° 7: Historia de usuario número 4 – Consultar usuario del


sistema
Historia de Usuario
Número : 4 Usuario : Cliente
Nombre historia: Consultar usuarios de sistema.
Programador responsable : Randy Sandoval Viviani
Descripción :
Como cliente deseo poder listar a todos los usuarios que se
encuentren registrados en el sistema y poder hacer consultas
según su código, nivel y nombre de usuario.
Validación :
Como usuario supervisor el cliente puede realizar el listado
completo de todos los usuarios registrados en el sistema y también
puede consultarlos y agruparlos por su nivel de acceso según sea
la necesidad del cliente.
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

Tabla N° 9: Historia de usuario número 6 – Asignar nivel de


acceso al sistema
Historia de Usuario
Número : 6 Usuario : Cliente
Nombre historia: Asignar nivel de acceso al sistema.
Programador responsable : Randy Sandoval Viviani
Descripción :
Como cliente quiero poder dar privilegios a los usuarios en el cual
unos puedan tener acceso a todo el sistema y otros solo puedan
tener acceso a algunas específicas tareas del sistema.
Validación :
Como usuario surpervisor el cliente puede asignar niveles de
acceso según el cargo de usuario que puede ser “supervisor” ,
“soporte”, “docente” y “directivo “para que solo tengan acceso a
ciertas partes del sistema que ya fueron definidas por el supervisor
del sistema.
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

Tabla N° 11: Historia de usuario número 8 – Registrar Incidencia


Historia de Usuario
Número : 8 Usuario : Cliente
Nombre historia: Registrar incidencia.
Programador responsable : Randy Sandoval Viviani
Descripción :
Como cliente necesito poder registrar la incidencia el sistema
asignándole un responsable para la atención, el lugar donde
ocurrió, la fecha, hora de registro y una descripción de la
incidencia.
Validación :
Como usuario el cliente puede realizar el registro de cualquier
incidencia, ingresando una breve descripción de la incidencia, el
área donde ocurrió, el usuario afectado, el personal responsable,
la fecha y hora de la incidencia.
Estimación : 4 días Prioridad : Alta
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

Tabla N° 13: Historia de usuario número 10 – Consultar el estado


de las Incidencias
Historia de Usuario
Número : 10 Usuario : Cliente
Nombre historia: Consultar el estado de las incidencias
Programador responsable : Randy Sandoval Viviani
Descripción :
Como cliente necesito poder consultar las incidencias para poder
conocer el estado en que se encuentran y poder tomar acciones y
realizar el debido seguimiento a las mismas.
Validación :
Como usuario el cliente puede realizar la consulta de cada una de
las incidencias registradas, realizando la búsqueda por código, por
categoría, por prioridad y estado y también realiza el listado de
todas las incidencias registradas seleccionando un determinado
tiempo.
Estimación : 3 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

Tabla N° 15: Historia de usuario número 12 – Calcular el


porcentaje de casos resueltos por el primer nivel de soporte.
Historia de Usuario
Número : 12 Usuario : Cliente
Nombre historia: Calcular el porcentaje de incidencias resueltas
por el nivel 1 de atención.
Programador responsable : Randy Sandoval Viviani
Descripción :
Como cliente necesito saber que porcentaje de incidencias se
resolvieron en el nivel 1 de atención.
Validación :
Como usuario el cliente puede consultar el porcentaje de
incidencias resueltas por el nivel 1 de atención desde el momento
que esta fue registrada consultando el detalle de incidencia.
Estimación : 1 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

Tabla N° 17: Historia de usuario número 14 – Consultar acción de


solución
Historia de Usuario
Número : 14 Usuario : Cliente
Nombre historia: Consultar acción de solución.
Programador responsable : Randy Sandoval Viviani
Descripción :
Como cliente necesita poder consultar las acciones realizadas
para la solución de las incidencias. Si el usuario es cliente solo
puede ver las acciones de sus incidencias.
Validación :
El usuario cliente puede consultar las acciones según su id, fecha,
operador, descripción de la acción y al seleccionar la incidencia
mediante un botón podrá visualizar más detalles de la acción.
Estimación : 2 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

Tabla N° 19: Historia de usuario número 16 – Calcula porcentaje


de casos reabiertos
Historia de Usuario
Número : 16 Usuario : Cliente
Nombre historia: Calcular porcentaje de casos reabiertos
Programador responsable : Randy Sandoval Viviani
Descripción :
Como cliente necesito poder calcular el porcentaje de incidencias
que fueron reabiertas.
Validación :
Como usuario el cliente puede consultar el porcentaje de
incidencias que fueron reabiertas desde el momento que la
incidencia fue cerrada.
Estimación : 1 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

ID Nombre Prioridad Estim. Demostración Notas


Para entrar al sistema,
debe ingresar el usuario
y contraseña, si el El usuario debe estar
Ingreso al usuario es correcto registrado en el
1 1 3
Sistema ingresa al menú principal sistema por el
caso contrario se administrador.
presentará un mensaje
de error.
El usuario
En el menú principal
administrador de
elegir la opción usuarios
Registrar sistema puede
del sistema y seleccionar
2 nuevo 1 2 actualizar los datos
la opción registrar
usuario personales del
usuario, ingresar los
usuario en caso de
datos y guardar.
algún error.
En la opción consultar
usuarios, seleccionar al Se puede actualizar
Modificar
usuario que se desea y únicamente datos
3 datos de 1 2
actualizar los datos personales del
usuario
personales si fuese el usuario.
caso necesario.
En la opción consultar
puede listar a todos los
Se permite realizar
usuario registrados o
búsquedas de
Consultar puede realizar
4 1 2 usuarios por código,
usuario búsquedas
nombre, estado y
personalizadas según
nivel de acceso.
parámetros que le ofrece
el sistema
En la opción consultar
usuarios, seleccionar el
Dar de alta Solo el administrador
usuario que se desea
5 y baja de 1 1 puede dar de baja y
dar de baja o dar de alta,
usuarios alta a los usuarios.
modificar y luego
guardar.
Solo existen dos (04)
En la opción consultar
tipos de niveles de
Asignar usuarios, seleccionar el
acceso en el sistema,
nivel de usuario que se desea y
6 1 1 de tipos Supervisor,
acceso al otorgarle el privilegio de
soporte, docente y
sistema acceso que crea
directivo.
conveniente y guardar

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 solución de Las consultas de


incidencias se puede soluciones de
Consultar
consultar las soluciones incidencias pueden
15 acción de 3 2
de cada incidencia ser personalizadas y
solución
seleccionando su buscarlas por código,
respectivo código. responsable y estado
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 Usuario al sistema. 3 1

Modifica datos de usuario 1 1

SP1 Consultar usuarios del sistema 2 1

Dar de alta y baja de usuarios 1 1

Asignar nivel de acceso al sistema 3 1

Cambiar contraseña de usuario 2 1

Registrar incidencia 3 2

Asignar nivel de prioridad 3 2

Asignar un estado de incidencia 2 2


SP2
Consultar incidencia 1 2

Reclasificar incidencia 1 2

Calcular porcentaje casos resueltos en el primer nivel


1 2
de soporte.

Registrar acción de solución. 3 3

Consultar acción de solución 2 3


SP3
Generar reportes de incidencias 5 3

Calcular porcentaje de casos reabiertos 1 2

Nota. Pila del Sprint. Fuente: Innovaschools. Elaboración propia.


Prioridad: 1 = Muy Alta, 2 = Alta y 3 = Media

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.

Tabla N° 23: Sprint Backlog - Gestión de incidencia


FECHA INICIO:
TITULO DE SPRINT
N° TAREAS
SPRINT 2
14 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 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

Nota. Sprint 2: Gestión de Incidencias.


Fuente: Innovaschools Sede Los Olivos. Elaboración propia.

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

Fuente: Elaboración propia

18
Análisis y Desarrollo del Proyecto

 Sprint 1: Acceso al sistema y control de usuarios

Diagrama de caso de uso del sistema.


La figura 21 y 22 representa la relación entre los actores (Supervisor,
soporte , directivos y docente) y los casos de uso del sistema. En este
sprint va a desarrollar la página principal, login del sistema y el registro
de usuarios al sistema.
Figura N° 21: Diagrama de casos de uso del sistema – Supervisor Acceso
Fuente: Elaboración propia

Diagrama de caso de uso del sistema del sprint 1 para el actor Supervisor.

Figura N° 22: Diagrama de casos de uso del sistema – Usuario Acceso


Fuente: Elaboración propia

Diagrama de caso de uso del sistema del sprint 1 para el actor Usuario.

19
Diagrama de clases

La figura 23 muestra las relaciones entre las clases que involucra el


sistema en el Sprint 1. Estas clases son necesarias para que el
sistema se empiece a construir.

Figura N° 23: Diagrama de clases – Acceso


Fuente: Elaboración propia

Diagrama de clases de Sprint 1.

Modelo Lógico de la base de datos


El modelo lógico de la base de datos para el sprint 1, como se muestra
en la figura 24 se ha construido en base del diagrama de clases, se
muestran las llaves foráneas según la relación entre tablas.

20
Figura N° 24: Modelo Lógico de Base de datos para el sprint 1

Fuente: Elaboración propia

Modelo Lógico de Base de datos para el sprint 1


Modelo Físico de la base de datos
El modelo físico de la base de datos para el sprint 1 como se muestra
en la figura 25 incluye el tipo de datos y además muestra el tamaño de
datos de cada campo.

Figura N° 25: Modelo Físico de Base de datos para el sprint 1


Fuente: Elaboración propia

Modelo Físico de Base de datos para el sprint 1

21
Prototipos de interfaces del Sprint 1:

Prototipos de la Interface de Acceso al Sistema

Se presentan dos prototipos para la interface de acceso al sistema en


la figura 26 y 27 respectivamente de la cual el cliente seleccionara una
de ellas para su implementación.

Figura 26: Prototipo “A” interface Login


Fuente: Elaboración propia

Prototipo para la interface de acceso al sistema del Sprint 1 – opción “A”.

Figura 27: Prototipo “B” interface Login


Fuente: Elaboración propia

Prototipo para la interface de acceso al sistema del Sprint 1 – opción “B”.

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.

Programación del Prototipo Elegido

Código de la vista del Login


<?php
if(!isset($_SESION)){ session_start();}
?>

<!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>

<p class="login-box-msg">Ingrese sus credenciales</p>

<form action="../../src/controller/UserController.php" method="post">


<input type='hidden' name='action' value='login'>
<div class="form-group has-feedback">
<input type="text" class="form-control" name='t_usuario'
placeholder="Usuario">
<span class="glyphicon glyphicon-user form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input type="password" class="form-control" name='t_password'
placeholder="Contraseña">
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</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>

<div class="social-auth-links text-center">


</div>
<!-- /.social-auth-links -->

<!--
<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

A continuación presentamos dos prototipos para la interface menú


principal del sistema en la figura 28 y 29 respectivamente para que el
cliente pueda elijar uno de los prototipos para su posterior diseño.

Figura 28: Prototipo “A” interface del Menú

Fuente: Elaboración propia

Prototipo para la interface de Menú Principal del Sprint 1 – Opción “A”.


Figura 29: Prototipo “B” interface del Menú
Fuente: Elaboración propia

Prototipo para la interface de Menú Principal del Sprint 1 –


Opción “B”.

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.

Programación del Prototipo Elegido

En esta fase se procede a realizar la respectiva programación de la


interface de menú principal del prototipo que ha sido elegido por el
cliente.

Código del Layout del Menú


<aside class="main-sidebar">
<!-- sidebar: style can be found in sidebar.less -->
<section class="sidebar">
<!-- Sidebar user panel -->
<div class="user-panel">
<div class="pull-left image">
<img src="../../../public/dist/img/icon-user.jpg" class="img-circle"
alt="User Image">
</div>
<div class="pull-left info">
<p>
<?php echo $_SESSION['datos_user']['nombres']."
".$_SESSION['datos_user']['apellidos']; ?>
</p>
<a href="#"><i class="fa fa-circle text-success"></i> <?php echo
$_SESSION['datos_user']['perfil']; ?> </a>
</div>
</div>
<ul class="sidebar-menu" data-widget="tree">
<li class="header">PANEL DE NAVEGACIÓN</li>

<?php $p = $_SESSION['datos_user']['id_perfil']; ?>

<?php if($p==1){ ?>


<li class="treeview">
<a href="#">
<i class="fa fa-cog"></i> <span>Paŕámetros Generales</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/ConfiguracionController.php?config"><i
class="fa fa-circle-o"></i>Configuración</a></li>
</ul>
</li>
<?php }?>

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 }?>

<?php if($p==1){ ?>


<li class="treeview">
<a href="#">
<i class="fa fa-home"></i> <span>Sedes</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/SedeController.php?add"><i class="fa fa-
circle-o"></i>Agregar</a></li>
<li><a href="../../../application/src/controller/SedeController.php?list"><i
class="fa fa-circle-o"></i>Listar</a></li>
</ul>
</li>
<?php }?>

<?php if($p==1){ ?>


<li class="treeview">
<a href="#">
<i class="fa fa-bookmark"></i> <span>Categorí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/CategoriaController.php?add"><i class="fa
fa-circle-o"></i>Agregar</a></li>
<li><a
href="../../../application/src/controller/CategoriaController.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 } ?>

<?php if( ($p==1)||($p==2)||($p==3)||($p==4) ){ ?>


<li class="treeview">
<a href="#">
<i class="fa fa-exclamation-triangle "></i> <span>Incidencias</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/IncidenciaController.php?add"><i
class="fa fa-circle-o"></i>Agregar</a></li>
<li><a
href="../../../application/src/controller/IncidenciaController.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

Figura 30: Prototipo “A” interface Registro de Usuarios


del sistema

Fuente: Elaboración propia

Prototipo para la interface de Menú Principal del Sprint 1 – Opción “A”.

Figura 31: Prototipo “B” interface Registro de Usuarios


del sistema
Fuente: Elaboración propia

Prototipo para la interface de Menú Principal del Sprint 1 –


Opción “B”.

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.

Programación de los prototipos elegidos.

En esta fase se procede a realizar la respectiva programación de la


interface de registro de usuario, así como el formulario de datos
personales y datos de usuario que fueron elegidos por el cliente.

Código de la vista de la interfaz Registrar usuario

<!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">

<?php require_once '../../layout/header.php' ?>


<?php require_once '../../layout/menu.php' ?>

<!-- Content Wrapper. Contains page content -->


<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1>
<?php if($dts!=null){?>
EDITAR USUARIO
<?php }else{?>
AGREGAR USUARIO
<?php }?>
</h1></section>

30
<section class="content">

<!-- Default box -->


<div class="box">
<form method="post" action="../../src/controller/UserController.php"
id="frm_user">
<input type="hidden" id="action" name="action" value="add">
<div class="box-body">
<div class="col-md-12">
&nbsp;
<input type="hidden" id="t_id" name="t_id" value="<?php
if($dts!=null)echo $dts['id_usuario'];?>">
</div>
<div class="col-md-4">
<label>Nombres</label>
<input type="text" id="t_nombres" name="t_nombres" class="form-
control" onkeypress="return letra(event)"
maxlength="50" value="<?php if($dts!=null) echo $dts['nombres'];
?>">
</div>
<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>

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">&nbsp;</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">&nbsp;</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>

Prototipos para la interface consulta y administración de


Usuarios

La interface de consulta de usuarios del sistema, es la interface en la


cual se realiza la búsqueda de los usuarios registrados mediante
criterios de búsqueda. Se realizaron dos (02) prototipos para esta

33
interface para que luego el cliente pueda elegir el prototipo que le
parezca mejor.

Figura 32: Prototipo “A” interface del Consulta y Administración


de Usuario
Fuente: Elaboración propia

Prototipo para la interface consulta y administración de usuarios del sprint


1 – Opción “A”.

Figura 33: Prototipo “B” interface de Consulta y Administración


de Usuario
Fuente: Elaboración propia

Prototipo para la interface consulta y administración de usuarios del sprint


1 – Opción “B”.

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.

Programación de la interface elegida:

En esta fase se procede a realizar la respectiva programación de la


interface consulta de usuario del prototipo que ha sido elegido por el
cliente.

Código de vista de la interfaz Consulta y Administración de usuario


<!DOCTYPE html>
<?php
if(!isset($_SESSION)){ session_start(); }
require_once '../security.php';
?>

<?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">

<?php require_once '../../layout/header.php' ?>

<?php require_once '../../layout/menu.php' ?>


<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1>
USUARIOS
</h1>

<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>

<!-- Main content -->


<section class="content">

<?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']);
?>

<!-- Default box -->


<div class="box">
<?php if($listUser!=null){ ?>
<div class="box-body">
<table id="example1" class="table table-bordered table-striped">
<thead>
<tr>
<th>Nombres</th>
<th>Apellidos</th>
<th>DNI</th>
<th>Perfil</th>
<th>Usuario</th>
<th>Cuenta</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<?php foreach($listUser as $p){ ?>
<tr>
<td><?php echo $p['nombres'] ?></td>
<td><?php echo $p['apellidos'] ?></td>
<td><?php echo $p['dni'] ?></td>
<td><?php echo $p['perfil'] ?></td>
<td><?php echo $p['usuario'] ?></td>
<td align="center">
<?php if($p['estado']=='1'){ ?>
<span class="label label-success">Activa</span>
<?php }else{?>
<span class="label label-danger">Inactiva</span>
<?php }?>
</td>

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 -->

<?php require_once '../../layout/footer.php' ?>

<!-- sidebar.php -->


<?php //require_once '../../layout/sidebar.php' ?>

</div>
<!-- ./wrapper -->

<?php require_once '../../layout/dataTable.php' ?>

</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

Fuente: Elaboración propia

Prototipo para la interface interface de actualizar datos de Usuario del


sprint 1 – Opción “A”.

Figura 35: Prototipo “B” interface de actualizar datos de Usuario


Fuente: Elaboración propia

Prototipo para la interface interface de actualizar datos de Usuario del


sprint 1 – Opción “B”.

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.

Programación del prototipo elegido

En esta fase se procede a realizar la respectiva programación de la


interface actualizar datos de usuario del prototipo que ha sido elegido
por el cliente.

Código de vista para la interfaz actualizar datos de usuario


<?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">

</div>
<!-- /.box -->

</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->

<?php require_once '../../layout/footer.php' ?>

<!-- sidebar.php -->


<?php //require_once '../../layout/sidebar.php' ?>
39
</div>
<!-- ./wrapper -->
<?php require_once '../../layout/header.php' ?>

<?php require_once '../../layout/menu.php' ?>

<!-- Content Wrapper. Contains page content -->


<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1>
<?php if($dts!=null){?>
EDITAR USUARIO
<?php }else{?>
AGREGAR USUARIO
<?php }?>
</h1>
<?php require_once '../../layout/footer.php' ?>

<!-- sidebar.php -->


<?php //require_once '../../layout/sidebar.php' ?>

</div>
<!-- ./wrapper -->

<?php require_once '../../layout/dataTable.php' ?>

</body>
</html>

</section>

<!-- Main content -->


<section class="content">

<!-- Default box -->


<div class="box">
<form method="post" action="../../src/controller/UserController.php"
id="frm_user">
<input type="hidden" id="action" name="action" value="add">
<div class="box-body">
<div class="col-md-12">
&nbsp;
<input type="hidden" id="t_id" name="t_id" value="<?php
if($dts!=null)echo $dts['id_usuario'];?>">
</div>
<div class="col-md-4">
<label>Nombres</label>
<input type="text" id="t_nombres" name="t_nombres" class="form-
control" onkeypress="return letra(event)"
maxlength="50" value="<?php if($dts!=null) echo $dts['nombres'];
?>">

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">&nbsp;</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">&nbsp;</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

En esta fase se presentan las interfaces oficiales del sistema que


fueron previamente diseñadas y programadas para su funcionamiento,
para posteriormente presentar este primer avance del sprint 1 al
cliente.

Interface de acceso al sistema.

Esta es la interface en la cual el usuario de sistema que tenga


privilegios ya sea con nivel de administrador u operador podrá acceder
al sistema de control de incidencias mediante un usuario y contraseña
que el ingresara, si todo es ingresado correctamente esta interface la
redirigirá a la página de menú principal con los acceso
correspondientes.

Figura 36: Interface oficial del acceso


Fuente: Elaboración propia

En la siguiente figura se muestra la Interface oficial del acceso de Usuario


del sprint 1.

Interface de Menú Principal

Es la página principal del sistema de gestión de incidencia donde el


usuario puede realizar diferentes tareas con respecto a las incidencias,
usuarios reportes, tales como registrarlas, realizar consultas, dar
seguimiento, derivarlas, generar reportes, etc.

43
Figura 37: Interface oficial del Menú Principal

Fuente: Elaboración propia

En la siguiente figura se muestra la Interface oficial del Menú Principal del


sprint 1.

Interface Registrar Usuarios de sistema

La interface de registro de usuarios de sistema se realiza en un


formulario donde se detallan los datos personales del usuario
(nombres, apellidos, DNI, etc.) y los datos propios de la cuenta de
usuario como (nombre de usuario y contraseña).
Figura 38: Interface oficial de Registrar Usuario del Sistema
Fuente: Elaboración propia

En la siguiente figura se muestra la Interface oficial de Registrar Usuario de


Sistema del sprint 1.

44
Interface Consulta de Usuarios de sistema.

En esta interface se podrán realizar el listado de todos los usuarios,


realizar búsquedas personalizadas de acuerdo a la necesidad de
búsqueda del usuario.
Figura 39: Interface oficial de Consultar Usuario del Sistema
Fuente: Elaboración propia

En la siguiente figura se muestra la Interface oficial de Consultar Usuario


de Sistema del sprint 1.

Interface Actualizar Datos de Usuario

En esta interface se puede realizar la actualización de datos


personales y modificar al cargo a la que pertenece.
Figura 40: Interface oficial de Actualizar Datos de Usuario
Fuente: Elaboración propia

En la siguiente figura se muestra la Interface oficial de Actualizar Datos de


Usuario del sprint 1.

45
Gráfico de Burn Down Chart del Sprint 1.

Este gráfico representa el trabajo pendiente a lo largo del tiempo de la


duración del sprint y muestra la velocidad a la que se está completando
los objetivos. Me permitió conocer si las tareas del Sprint 1 se
estuvieron cumpliendo en el tiempo estimado.

Figura 41: Grafico de Burn Down Chart del sprint 1


Fuente: Elaboración propia

Burn Down Chart Sprint 1


14
12
Numero de Tareas

10
8
6 Dias restantes
4 Diass estimados
2
0
1 2 3 4 5 6 7 8 9 10 11
Dias del Sprint

En la siguiente figura se muestra el Grafico de Burn Down Chart del


sprint1.

Sprint 2: Control de Incidencias

Diagrama de caso de uso del sistema.

La figura 42 y 43 representa la relación entre los actores


(administrador y operador) y los casos de uso del sistema. En este
sprint se desarrolla el proceso y gestión de las incidencias.

46
Figura N° 42: Diagrama de casos de uso del sistema – Gestión de incidencias

Fuente: Elaboración propia

Diagrama de caso de uso del sistema del sprint 2 para el actor usuario Supervisor.

Figura N° 43: Diagrama de casos de uso del sistema – Gestión de incidencias


Fuente: Elaboración propia

Diagrama de caso de uso del sistema del sprint 2 para el actor Usuario.

47
Diagrama de Clases

La figura 44 muestra las relaciones entre las clases que involucra el


sistema en el Sprint 2. Estas clases son necesarias para el registro y
administración de las incidencias.

Figura N° 44: Diagrama de casos de uso del sistema – Gestión de


incidencias
Fuente: Elaboración propia

Diagrama de clases del Sprint 2.

Modelo Lógico: El modelo lógico de la base de datos para el sprint 2


como se muestra en la figura 45 se ha construido como se muestra en
la siguiente figura. Este modelo lógico es el registro y consulta de
incidencias.

48
Figura N° 45: Modelo lógico de la base de datos para el sprin 2

Fuente: Elaboración propia

Diagrama lógico de la base de datos para el sprint 2

Modelo Físico: El modelo físico de la base de datos para el sprint 2


como se muestra la figura 46. Comprende las tablas necesarias para
el registro y consulta de incidencias.

Figura N° 46: Modelo físico de la base de datos para el sprin 2


Fuente: Elaboración propia

Diagrama físico de la base de datos para el sprint 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.

Prototipos de Registro de Incidencias


Figura N° 47: Prototipo para el registro de incidencia del Sprint 2
Fuente: Elaboración propia

Prototipo para la interface registro de incidencias del sprint 2 – Opción “A”.

50
Figura N° 48: Prototipo para el registro de incidencia del Sprint 2

Fuente: Elaboración propia

Prototipo para la interface registro de incidencias del sprint 2 – Opción “B”.

El prototipo para la interface registro de incidencias elegido por el


cliente (Ver anexo 7) fue la “opción A” que se muestra en la figura 47.

Programación del prototipo elegido.

En esta fase se procede a realizar la respectiva programación de la


interface de registro de incidencias del prototipo que ha sido elegido
por el cliente.

Código de la Vista de la interfaz Registro de Incidencia


<?php
if(!isset($_SESSION)){ session_start(); }
require_once '../security.php';
?>

<?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' ?>

<link rel="stylesheet" href="../../../public/bower_components/bootstrap-


datepicker/dist/css/bootstrap-datepicker.min.css">

</head>
<body class="hold-transition skin-blue sidebar-mini">
<!-- Site wrapper -->
<div class="wrapper">

<?php require_once '../../layout/header.php' ?>

<?php require_once '../../layout/menu.php' ?>

<!-- Content Wrapper. Contains page content -->


<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1>
INCIDENCIAS
</h1>

<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']);
?>

<!-- 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">&times;</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-->
<!-- modal resolver-->
<div class="modal fade" id="modal-resolver">
<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">&times;</span></button>
<h4 class="modal-title">Resolver Incidencia</h4>
</div>
<div class="modal-body">
<form id="frm_solucion"
action="../../src/controller/IncidenciaController.php" method="POST">
<input type="hidden" name="action" id="action">
<div id="datosResolver">
</div>
</form>

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">&times;</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">&nbsp;</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{?>

<div class="callout callout-info">


<p>No se encontraron registros</p>
</div>

<?php }?>

</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/dataTable.php' ?>

<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 () {

$('#datemask_desde').inputmask('yyyy-mm-dd', { 'placeholder': 'yyyy-mm-dd'


});
$('#datemask_hasta').inputmask('yyyy-mm-dd', { 'placeholder': 'yyyy-mm-dd'
});

});
</script>

</body>
</html>

58
Prototipo de la interface consulta y administración de
incidencias.

En esta interface se podrán realizar el listado de todos los usuarios,


realizar búsquedas personalizadas de acuerdo a la necesidad de
búsqueda del usuario.
Figura N° 49: Prototipo para la administración de incidencia del Sprint 2
Fuente: Elaboración propia

Prototipo para la interface para la administración de incidencias del sprint 2


– Opción “A”.
Figura N° 50: Prototipo para la administración de incidencia del Sprint 2
Fuente: Elaboración propia

Prototipo para la interface para la administración de incidencias del sprint 2


– Opción “B”.

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.

Programación del prototipo elegido.

En esta fase se procede a realizar la respectiva programación de la


interface de administración de incidencias del prototipo que ha sido
elegido por el cliente.

Código de la Vista de la interfaz administración de Incidencia


<!DOCTYPE html>
<?php
if(!isset($_SESSION)){ session_start(); }
require_once '../security.php';
date_default_timezone_set('America/Los_Angeles');
?>

<?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>

<?php if($dts!=null){ ?>


<body class="hold-transition skin-blue sidebar-mini">
<?php }else{?>
<body class="hold-transition skin-blue sidebar-mini" onload="relojFecha('<?php
echo date('d')."/".date('m')."/".date('Y') ?>')">
<?php } ?>

<!-- Site wrapper -->


<div class="wrapper">

60
<?php require_once '../../layout/header.php' ?>

<?php require_once '../../layout/menu.php' ?>

<!-- Content Wrapper. Contains page content -->


<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1>
<?php if($dts!=null){?>
EDITAR INCIDENCIA
<?php }else{?>
AGREGAR INCIDENCIA
<?php }?>
</h1>
</section>

<!-- Main content -->


<section class="content">

<!-- Default box -->


<div class="box">
<form method="post" action="../../src/controller/IncidenciaController.php"
id="frm_incidencia">
<input type="hidden" id="action" name="action" value="add">
<div class="box-body">
<div class="col-md-12">
&nbsp;
<input type="hidden" id="t_id" name="t_id" value="<?php
if($dts!=null)echo $dts['id_incidencia'];?>">
</div>
<div class="col-md-4">
<label>Código</label>
<input type="text" disabled class="form-control" maxlength="50"
value="<?php if($dts!=null){ echo $dts['codigo'];}else{ echo
$codIncidencia; } ?>">
</div>
<div class="col-md-4">
<label>Sede</label>
<input type="text" disabled class="form-control" value="<?php echo
$_SESSION['datos_user']['sede']; ?>">
</div>
<div class="col-md-4">
<?php if($dts!=null){ ?>
<label>Fecha/Hora de Registro</label>
<?php }else{?>
<label>Fecha/Hora</label>
<?php }?>
<input type="text" disabled id="t_fecha" class="form-control"
value="<?php if($dts!=null){ echo $dts['fecharegistro']; }else{ echo
date('d')."/".date('m')."/".date('Y');} ?>">
</div>

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">&nbsp;</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">&nbsp;</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 interface Resolver incidencia.

En esta interface se podrán realizar resolver la incidencia así como


escalar a otro nivel.
Figura N° 51: Prototipo para resolver la incidencia del Sprint 2
Fuente: Elaboración propia

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

Fuente: Elaboración propia

Prototipo para la interface para resolver incidencias del sprint 2 – Opción “B”.

El prototipo para la interface registro de incidencias elegido por el


cliente (Ver anexo 7) fue la “opción A” que se muestra en la figura 51.

Programación del prototipo elegido.

En esta fase se procede a realizar la respectiva programación de la


interface de Resolver incidencias del prototipo que ha sido elegido por
el cliente

Código de vista de la interfaz Solucionar incidencia


<!-- busqueda -->
<div class="box" id="divbusqueda">
<form target='_blank' method="POST"
action="../../src/controller/ReporteController.php" id="miform">
<input type="hidden" name="action" value="reporte_ticket">
<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 }?>

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">&nbsp;</div>
</div>
</form>
</div>
<!-- -->
</section>
<!-- /.content -->
</div>
<?php require_once '../../layout/footer.php' ?>

<!-- sidebar.php -->


<?php //require_once '../../layout/sidebar.php' ?>
</div>
<!-- ./wrapper -->
<?php require_once '../../layout/dataTable.php' ?>
<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 () {
$('#datemask_desde').inputmask('yyyy-mm-dd', { 'placeholder': 'yyyy-mm-dd'
});
$('#datemask_hasta').inputmask('yyyy-mm-dd', { 'placeholder': 'yyyy-mm-dd'
});
});
</script>
</body>

67
Prototipo de la Interface Base de conocimiento de Incidencias.

En esta interface se podrán realizar el listado de las soluciones


registradas.
Figura N° 53: Prototipo Base de datos de Soluciones de Incidencias del
Sprint2
Fuente: Elaboración propia

Prototipo para la interface para la base de datos de soluciones de incidencias del


sprint 2 – Opción “A”.

Figura N° 54: Prototipo Base de datos de Soluciones de Incidencias del


Sprint2
Fuente: Elaboración propia

Prototipo para la interface para la base de datos de soluciones de incidencias del


sprint 2 – Opción “B”.

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.

Programacion de prototipo elegido

basedatos.php: Este controlador nos permitirá buscar todas las


incidencias que han sido resueltas y tengan relación con una
incidencia que se quiera resolver en el momento, por medio de una
palabra el controlador mostrara los resultados.
<?php
if(!isset($_SESSION)){ session_start(); }
require_once '../security.php';
?>

<?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' ?>

<link rel="stylesheet" href="../../../public/bower_components/bootstrap-


datepicker/dist/css/bootstrap-datepicker.min.css">

</head>
<body class="hold-transition skin-blue sidebar-mini">
<!-- Site wrapper -->
<div class="wrapper">

<?php require_once '../../layout/header.php' ?>

<?php require_once '../../layout/menu.php' ?>

<!-- Content Wrapper. Contains page content -->


<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1>
BASE DE DATOS DE CONOCIMIENTO DE INCIDENCIAS
</h1>
</section>

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">&times;</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-->

<!-- Main content -->


<section class="content">

<!-- busqueda -->


<div class="box" id="divbusqueda">
<form method="POST" action="../../src/controller/IncidenciaController.php"
id="miform">
<input type="hidden" name="action" value="buscar_bd">
<div class="box-body">

<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">&nbsp;</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{?>

<div class="callout callout-info">


<p>No se encontraron registros</p>
</div>
<?php }?>
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
<?php require_once '../../layout/footer.php' ?>
<!-- sidebar.php -->
<?php //require_once '../../layout/sidebar.php' ?>
</div>

71
</div>
<!-- ./wrapper -->

<?php require_once '../../layout/dataTable.php' ?>

<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 () {

$('#datemask_desde').inputmask('yyyy-mm-dd', { 'placeholder': 'yyyy-mm-dd'


});
$('#datemask_hasta').inputmask('yyyy-mm-dd', { 'placeholder': 'yyyy-mm-dd'
});

});
</script>

</body>
</html>

Demos de las interfaces oficiales del Sprint2

En esta fase se presenta todos las interfaces que corresponden al


Sprint 2 donde podemos mostrar al cliente una parte más del proceso
que se quiere controlar mejor que es la gestión de incidencia,
encontramos las interfaces de registro, consulta, dar solución y una
interface importante que es la de la base de datos de conocimiento
que va hacer fundamental ahora de resolver las incidencias que será
vista en el Sprint 3 más adelante.

Interface de Registro de Incidencias

Esta parte del sistema es esencial, ya que, aquí se comienza o inicia


el proceso de la incidencia que debe terminar en una solución en un
tiempo relativamente óptimo, si la incidencia no ha sido resuelta
seguirá con el proceso que corresponde en base al sistema.

72
Figura N° 55: Interface de Registro de Incidencias del Sprint2

Fuente: Elaboración propia

Interface de Registro de Incidencias del sprint 2.

Interface Consulta de Incidencias

En esta interface su realiza la consulta de las incidencias registradas


se clasifican por, categoría, estado, prioridad, recurso y se le puede
dar seguimiento a través del código de la incidencia, nos da la
posibilidad de mostrar incidencias pasadas por búsqueda con fechas
y nos da acceso a posibles soluciones para el mismo problema.

Figura N° 56: Interface de Consulta de Incidencias del Sprint2


Fuente: Elaboración propia

Interface de Consulta de Incidencias del sprint 2.

73
Interface de Resolver la incidencia.

En esta Interface se tiene la posibilidad de modificar solo algunos


campos de la incidencia como es la descripción, el recurso (técnico) y
el estado de la incidencia, sí que es necesario, pero no se recomienda
porque en el proceso normal de gestión de la incidencia esta se va
actualizando automáticamente, aunque en ciertos momentos del
proceso requerirá actualizar la incidencia por parte del usuario de
sistema y no automáticamente.
Figura N° 57: Interface de Resolver las Incidencias del Sprint2
Fuente: Elaboración propia

Interface de Resolver las Incidencias del sprint 2.

Interface base de datos de conocimiento de incidencias.

Esta interface tiene una importancia alta al momento de usarla, ya que,


como su nombre lo indica en una base de conocimientos de
solucioneas a incidencias que fueron resuletas ateriormente por los
técnicos ya sean de primer nivel o segundo nivel, esta información es
buscada por el sistema cuando el usuario ingrese un palabra
relacionada con la incidencia y sistema le da como resultado una o
muchos casos parecidos con soluciones que podría usar en la
inicdencia que trata de resolver.

74
Figura N° 58: Interface de Base de conocimiento de incidencias del Sprint2

Fuente: Elaboración propia

Interface de Base de conocimiento de incidencias del sprint 2.

Figura N° 59 : Burn Down de Sprint 2

Burn Down Chart Sprint 2


14
12
Numero de Tareas

10
8
6 Dias restantes
4 Diass estimados
2
0
1 2 3 4 5 6 7 8 9 10 11
Dias del Sprint

En la siguiente figura se muestra el Grafico de Burn Down Chart del


sprint2.

75
Sprint 3: Reportes de Incidencias

Diagrama de caso de uso del sistema.

La figura 56 y 57 representa la relación entre los actores y los casos


de uso del sistema.

Figura N° 60: Casos de uso del Sistema - Supervisor


Fuente: Elaboración propia

Diagrama de caso de uso del sistema del sprint 3 para el actor Supervisor.

Figura N° 61: Casos de uso del Sistema - Usuario


Fuente: Elaboración propia

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

Diagrama de clases de Sprint 3.

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.

Figura N° 63: Modelo lógico de la base de datos del sprint 3


Fuente: Elaboración propia

Modelo lógico de la base de datos del sprint 3

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.

Figura N° 64: Modelo lógico de la base de datos del sprint 3


Fuente: Elaboración propia

Modelo lógico de la base de datos del sprint 3

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.

Prototipo de interface para el reporte porcentaje de incidencias


resueltas en el primer nivel de soporte

Este prototipo de interface es el primer reporte del sistema y muestra


el porcentaje de incidencias resueltas en el primer nivel de soporte que
se obtuvo en un determinado tiempo y es valido para demostrar
nuestro primer indicador.

Figura N° 65: Prototipo de Reporte de porcentajes casos de


resueltos por el primer nivel de soporte
Fuente: Elaboración propia

Prototipo de interface reporte de casos resueltos por el nivel


primer nivel de soporte del Sprint 3 – Opcion “A”

80
Figura N° 66: Prototipo de reporte de porcentaje de casos
resueltos por el primer nivel de soporte

Fuente: Elaboración propia

Prototipo de interface reporte de porcentajes de casos resueltos por el


primer nivel de soporte del Sprint 3 – Opcion “B”

El prototipo para la interface de reporte de porcentaje de casos


resueltos por el primer nivel de soporte (Ver anexo 7) fue la “opción
A” que se muestra en la figura 65.

Programación del prototipo elegido.

En esta fase se procede a realizar la respectiva programación de


la interface de reporte de porcentaje de casos resueltos por el
primer nivel de soporte del prototipo que ha sido elegido por el
cliente

Código de vista de la interfaz Reporte de porcentaje de casos


resueltos por el primer nivel de soporte.
$html = <<<EOF
<center>
<table>
<tr>
<td align="center">
<label style="font-size:14px;font-family:arial">
<b>PORCENTAJE DE INCIDENCIAS RESUELTAS EN EL PRIMER NIVEL
DE SOPORTE</b>
</label>
</td>
</tr>
</table>
</center>

<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

Este prototipo de interface es el segundo reporte del sistema y


muestra el porcentaje de casos reabiertos que se obtuvo en un
determinado tiempo y es valido para demostrar nuestro segundo
indicador.

83
Figura N° 67: Prototipo de reporte de porcentaje de casos
reabiertos

Fuente: Elaboración propia

Prototipo de interface reporte de porcentaje de casos reabiertas –


Opcion “A”

Figura N° 68: Prototipo de reporte de incidencias reabiertas


Fuente: Elaboración propia

Prototipo de interface reporte de incidencias reabiertas – Opcion


“B”

El prototipo para la interface de reporte de porcentaje de casos


reabiertos (Ver anexo 7) fue la “opción B” que se muestra en la
figura 68.

Programación del prototipo elegido.

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

Código de vista de la interfaz reporte de porcentajes de casos


reabiertos.
else if($action=='reporte_porcentaje_reabiertas')
{
$desde = $_POST['f_desde'];
$hasta = $_POST['f_hasta'];
$model=new IncidenciaModel();
$lista = $model->indicador_porcentaje_reabiertas($desde, $hasta);
$pdf=new ReporteA4();
$pdf->AddPage();
$detalle='';
if($lista!=null)
{
$p=1;
foreach($lista as $r)
{
$detalle.='<tr>'.
'<td align="center">'.$p.'</td>'.
'<td align="center">'.$r['fecha'].'</td>'.
'<td align="center">'.$r['total'].'</td>'.
'<td align="center">'.$r['reabierta'].'</td>'.
'<td align="center">'.$r['porcentaje'].'</td>'.
'</tr>';
$p++;
}
if($lista!=null)
{
$html = <<<EOF
<center>
<table>
<tr>
<td align="center">
<label style="font-size:14px;font-family:arial">
<b>PORCENTAJE DE INCIDENCIAS REABIERTAS</b>
</label>
</td>
</tr>
</table>
</center> br><br>
<table style="width:40%">
<tr>
<td align="center">
<label style="font-size:10px;font-family:arial">
<b>DESDE:</b>
</label>
</td>
<td align="center">
<label style="font-size:10px;font-family:arial">
$desde
</label>
</td>
</tr>
<tr>
<td align="center">
<label style="font-size:10px;font-family:arial">
<b>HASTA:</b> 85
</label>
</td>
<br><br>
<table style="width:40%">
<tr>
<td align="center">
<label style="font-size:10px;font-family:arial">
<b>DESDE:</b>
</label>
</td>
<td align="center">
<label style="font-size:10px;font-family:arial">
$desde
</label>
</td>
</tr>
<tr>
<td align="center">
<label style="font-size:10px;font-family:arial">
<b>HASTA:</b>
</label>
</td>
<td align="center">
<label style="font-size:10px;font-family:arial"> 86
$hasta
</label>
</td>
Demos de las interfaces oficiales del Sprint3
En esta fase se presenta todos las interfaces que corresponden al
Sprint 3 donde podemos mostrar al cliente una parte mas del
proceso que se quiere gestionar mejor que es finalmente generar
los reportes de incidecnias.

Interface para el reporte de porcentaje de casos resueltos en


el primer nivel de soporte.
Este reporte nos muestra el numero de incidencias que fueron
registradas en el sistemas y hace una comparación el numero de
casos que lograron ser resueltas por el primer nivel de soporte al
final se calcula un porcentaje de casos resueltos en el primer nivel
de soporte entre el numero de casos registradas y el numero de
casos resueltos por el primer nivel de soporte.

Figura N° 69: Interface oficial de reporte de porcentaje de casos


resueltos por el primer nivel de soporte
Fuente: Elaboración propia

87
Interface reporte de porcentaje de casos resueltos por el
primer nivel de soporte en el Sprint 3.

Figura N° 70: Interface oficial de reporte de porcentaje de casos


resueltos por el primer nivel de soporte en formato pdf
Fuente: Elaboración propia

Interface reporte de porcentaje de casos resueltos por el primer


nivel de soporte en formato pdf en el Sprint 3.

Interface para el reporte de porcentaje de casos reabiertos.


Este reporte nos muestra el número de incidencias que fueron
cerradas en el sistemas y hace una comparación el numero de
casos que lograron reabiertas, se calcula un porcentaje de casos
reabiertos entre el número de casos reabiertos y el número de
casos cerrados.

Figura N° 71: Interface oficial de reporte de porcentaje de casos


reabiertos
Fuente: Elaboración propia

88
Interface reporte de porcentaje de casos reabiertos en el
Sprint 3.

Figura N° 72: Interface oficial de reporte de porcentaje de casos


resueltos por el primer nivel de soporte en formato pdf
Fuente: Elaboración propia

Interface reporte de porcentaje de casos resueltos por el primer


nivel de soporte en formato pdf en el Sprint 3.

Figura N° 73: Burn Down de Sprint 3

Burn Down Chart Sprint 3


14
12
Numero de Tareas

10
8
6 Dias restantes
4 Diass estimados
2
0
1 2 3 4 5 6 7 8 9 10 11
Dias del Sprint

En la siguiente figura se muestra el Grafico de Burn Down Chart del


sprint3.

89
90

You might also like