Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
UNIVERSIDAD DE GUAYAQUIL
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA DE INGENIERÍA EN SISTEMAS
COMPUTACIONALES
DESARROLLO DE UN SISTEMA WEB, COMO HERRAMIENTA
DE APOYO EN EL CONTROL INTERNO DE EMPRESAS
INDUSTRIALES, QUE GENERE ALERTAS PARA UN
CORRECTO SEGUIMIENTO Y TRAZABILIDAD;
CON EL FIN DE MINIMIZAR PÉRDIDAS DE
ACTIVOS O ELEMENTOS QUE
SALEN DE LAS COMPAÑÍAS.
PROYECTO DE TITULACIÓN
Previa a la obtención del Título de:
INGENIERO EN SISTEMAS COMPUTACIONALES
AUTOR: JIMMY ALEXANDER VERA VERA
TUTOR: ING. VICENTE VIZUETA LOGROÑO, M.SC.
GUAYAQUIL – ECUADOR
2018
REPOSITORIO NACIONAL EN CIENCIAS Y TECNOLOGÍA
FICHA DE REGISTRO DE TESIS
TÍTULO: “DESARROLLO DE UN SISTEMA WEB, COMO HERRAMIENTA DE APOYO EN EL
CONTROL INTERNO DE EMPRESAS INDUSTRIALES, QUE GENERE ALERTAS PARA UN
CORRECTO SEGUIMIENTO Y TRAZABILIDAD; CON EL FIN DE MINIMIZAR PÉRDIDAS DE
ACTIVOS O ELEMENTOS QUE SALEN DE LAS COMPAÑÍAS”.
AUTOR: Jimmy Alexander Vera Vera
REVISORES: Ing. Vicente Vizueta Logroño, M.Sc. Ing. Inelda Martillo Alcivar, M.Sc.
INSTITUCIÓN:
Universidad de Guayaquil
FACULTAD:
Ciencias Matemáticas y Físicas
CARRERA: Ingeniería en Sistemas Computacionales
FECHA DE PUBLICACIÓN: Año 2018 N° DE PÁGS.: 108
ÁREA TEMÁTICA: Desarrollo de Software
PALABRAS CLAVES: Control interno, Open Source, Seguridad.
RESUMEN: El presente proyecto de desarrollo de un sistema web servirá para mejorar el
control de activos o elementos en diferentes empresas industriales, facilitando el seguimiento y trazabilidad de los mismos mediante un entorno web. Este requerimiento surgió debido a que muchas empresas industriales en el Ecuador, buscan a través de sus Departamentos de Control Interno y áreas de Seguridad implementar mecanismos o procedimientos adecuados para evitar pérdidas de activos o elementos. La evolución del proyecto se realizó un marco de trabajo basado en la metodología Scrum y orientado a la Gestión de Procesos para obtener los avances con la mayor calidad posible en un corto tiempo. Para el desarrollo del Sistema se utilizó herramientas Open Source como PHP, MySQL, Apache, CodeIgniter. El aporte principal del proyecto es la entrega de un sistema Web, que agregue valor a la gestión de Control Interno, minimizando la oportunidad de pérdida de los activos o elementos, dotando de herramientas efectivas a los usuarios para el registro, aprobación, control, seguimiento y trazabilidad, estandarizando procesos, generando información en línea, emitiendo las debida alertas de control y contribuyendo al crecimiento de las empresas industriales del Ecuador. N° DE REGISTRO(en base de datos):
N° DE CLASIFICACIÓN:
DIRECCIÓN URL (tesis en la web):
ADJUNTO PDF: x
SI
NO
CONTACTO CON AUTOR:
Jimmy Alexander Vera Vera Teléfono: 0981603582
E-mail:
CONTACTO DE LA INSTITUCIÓN: Universidad de Guayaquil
Nombre: Ab. Juan Chávez Atocha
Teléfono: 042318067 E-mail: [email protected]
I
APROBACIÓN DEL TUTOR
En mi calidad de Tutor del trabajo de investigación, “DESARROLLO DE
UN SISTEMA WEB, COMO HERRAMIENTA DE APOYO EN EL
CONTROL INTERNO DE EMPRESAS INDUSTRIALES, QUE GENERE
ALERTAS PARA UN CORRECTO SEGUIMIENTO Y TRAZABILIDAD;
CON EL FIN DE MINIMIZAR PÉRDIDAS DE ACTIVOS O ELEMENTOS
QUE SALEN DE LA COMPAÑÍAS” elaborado por el estudiante, Jimmy
Alexander Vera Vera, alumno no titulado de la Carrera de Ingeniería en
Sistemas Computacionales, Facultad de Ciencias Matemáticas y Físicas de
la Universidad de Guayaquil, previo a la obtención del Título de Ingeniero
en Sistemas, me permito declarar que luego de haber orientado, estudiado
y revisado, la apruebo en todas sus partes.
Atentamente
_________________________________________
Ing. Vicente Vizueta Logroño, M.Sc.
TUTOR
II
DEDICATORIA
El presente proyecto de titulación
va dedicado a mis padres, mi
esposa, mis hijos y mis
hermanos. Gracias a ustedes por
creer en mí, por ser ese apoyo
incondicional y esa motivación
constante. Gracias por ser parte
de este gran logro.
Jimmy Alexander Vera Vera
III
AGRADECIMIENTO
Gracias a Dios por estar conmigo
en todo momento, por fortalecer mi
corazón e iluminar mi mente para
conseguir este gran objetivo. A mis
padres, por la formación que me
brindaron, sus consejos
invaluables, sus ejemplos de
perseverancia y su motivación
constante. A mis hijos por ser esa
fuente de inspiración diaria que me
motiva a ser mejor cada día para
ellos. A mi esposa por su apoyo
incondicional, por estar siempre a
mi lado y por su amor.
Gracias a mi familia, maestros y
amigos todos ellos hicieron posible
que cumpla esta meta, por y para
ellos es este triunfo.
Jimmy Alexander Vera Vera
IV
TRIBUNAL PROYECTO DE TITULACIÓN
Ing. Eduardo Santos Baquerizo, M.Sc.
DECANO DE LA FACULTAD
CIENCIAS MATEMÁTICAS Y
FISICAS
Ing. Abel Alarcón Salvatierra, M.Sc.
DIRECTOR DE LA CARRERA DE
INGENIERÍA EN SISTEMAS
COMPUTACIONALES
Ing. Inelda Martillo Alcívar, M.Sc.
PROFESOR REVISOR DEL
ÁREA TRIBUNAL
Ing. Jonathan Delgado Guerrero, M.Sc.
PROFESOR REVISOR DEL
ÁREA TRIBUNAL
Ing. Vicente Vizueta Logroño, M.Sc.
PROFESOR TUTOR DEL PROYECTO
DE TITULACION
Ab. Juan Chávez Atocha, Esp.
SECRETARIO
V
DECLARACIÓN EXPRESA
“La responsabilidad del contenido de este Proyecto de
Titulación, me corresponde exclusivamente; y el
patrimonio intelectual de la misma a la UNIVERSIDAD
DE GUAYAQUIL”
Jimmy Alexander Vera Vera
VI
UNIVERSIDAD DE GUAYAQUIL
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES
“DESARROLLO DE UN SISTEMA WEB, COMO HERRAMIENTA DE APOYO EN EL
CONTROL INTERNO DE EMPRESAS INDUSTRIALES, QUE GENERE ALERTAS
PARA UN CORRECTO SEGUIMIENTO Y TRAZABILIDAD; CON EL FIN DE
MINIMIZAR PÉRDIDAS DE ACTIVOS O ELEMENTOS QUE SALEN DE LAS
COMPAÑÍAS”
Proyecto de Titulación que se presenta como requisito para optar por el título de
INGENIERO EN SISTEMAS COMPUTACIONALES.
Autor: Jimmy Alexander Vera Vera
C.I. 0920103678
Tutor: Ing. Vicente Vizueta Logroño, M.Sc.
Guayaquil, Marzo del 2018
VII
CERTIFICADO DE ACEPTACIÓN DEL TUTOR
En mi calidad de Tutor del proyecto de titulación, nombrado por el Consejo
Directivo de la Facultad de Ciencias Matemáticas y Físicas de la Universidad de
Guayaquil.
CERTIFICO:
Que he analizado el Proyecto de Titulación presentado por el
estudiante JIMMY ALEXANDER VERA VERA, como requisito previo para optar
por el título de Ingeniero en cuyo problema es:
“DESARROLLO DE UN SISTEMA WEB, COMO HERRAMIENTA DE APOYO
EN EL CONTROL INTERNO DE EMPRESAS INDUSTRIALES, QUE GENERE
ALERTAS PARA UN CORRECTO SEGUIMIENTO Y TRAZABILIDAD; CON EL
FIN DE MINIMIZAR PÉRDIDAS DE ACTIVOS O ELEMENTOS QUE SALEN DE
LAS COMPAÑÍAS”.
Considero aprobado el trabajo en su totalidad.
Presentado por:
Jimmy Alexander Vera Vera
C.I. 0920103678
Tutor: Ing. Vicente Vizueta Logroño, M.Sc.
C.I. 0910186592
Guayaquil, Marzo del 2018
VIII
UNIVERSIDAD DE GUAYAQUIL FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES
AUTORIZACIÓN PARA PUBLICACIÓN DE PROYECTO DE TITULACIÓN EN FORMATO DIGITAL
1. Identificación del Proyecto de Titulación
Nombre del Alumno: Jimmy Alexander Vera Vera
Dirección: Daule, Urbanización La Joya, etapa Gema, Mz. 10 V. 8
Teléfono: 0981603582 E-mail: [email protected]
Facultad: Ciencias Matemáticas y Físicas
Carrera: Ingeniería en Sistemas Computacionales
Título al que opta: Ingeniero en Sistemas Computacionales
Profesor tutor: Ing, Vicente Vizueta Logroño, M.Sc.
Título del Proyecto de Titulación: “DESARROLLO DE UN SISTEMA WEB, COMO
HERRAMIENTA DE APOYO EN EL CONTROL INTERNO DE EMPRESAS INDUSTRIALES, QUE GENERE ALERTAS PARA UN CORRECTO SEGUIMIENTO Y TRAZABILIDAD; CON EL FIN DE MINIMIZAR PÉRDIDAS DE ACTIVOS O ELEMENTOS QUE SALEN DE LAS COMPAÑÍAS”. Temas de Proyecto de Titulación: Desarrollo Web, PHP, Control Interno.
2. Autorización de Publicación de Versión Electrónica del Proyecto de Titulación
A través de este medio autorizo a la Biblioteca de la Universidad de Guayaquil y a la Facultad de Ciencias Matemáticas y Físicas a publicar la versión electrónica de este Proyecto de Titulación.
Publicación electrónica:
Inmediata X Después de 1 año
Firma Alumno: JIMMY ALEXANDER VERA VERA 3. Forma de envío: El texto del Proyecto de Titulación debe ser enviado en formato Word, como archivo .Doc. O .RTF y .Puf para PC. Las imágenes que la acompañen pueden ser: .gif, .jpg o .TIFF.
DVDROM X CDROM
IX
ABREVIATURAS
PHP Hypertext Pre-Processor
MySQL My Structured Query Language
HTML Lenguaje de Marca de Salida de Hyper Texto
HTTP Protocolo de Transferencia de Hyper Texto
BD Base de Datos
www World Wide Web
X
SIMBOLOGÍA
N: Tamaño de la población,
z: Nivel de confianza
e: Es el máximo error permisible
p: Es la probabilidad de que el evento ocurra
q: Es la probabilidad de que el evento no ocurra
n: Es el tamaño de la muestra a calcular.
XI
ÍNDICE GENERAL
APROBACIÓN DEL TUTOR ................................................................................... I
DEDICATORIA ....................................................................................................... II
AGRADECIMIENTO .............................................................................................. III
TRIBUNAL PROYECTO DE TITULACIÓN .......................................................... IV
DECLARACIÓN EXPRESA ................................................................................... V
CERTIFICADO DE ACEPTACIÓN DEL TUTOR ................................................ VII
AUTORIZACIÓN PARA PUBLICACIÓN ............................................................ VIII
SIMBOLOGÍA ......................................................................................................... X
ÍNDICE GENERAL ................................................................................................ XI
ÍNDICE DE TABLAS ............................................................................................ XV
ÍNDICE DE GRÁFICOS ......................................................................................XVII
RESUMEN .........................................................................................................XVIII
ABSTRACT ..........................................................................................................XIX
INTRODUCCIÓN .................................................................................................. XX
CAPÍTULO I ............................................................................................................ 1
PLANTEAMIENTO DEL PROBLEMA ................................................................... 1
UBICACIÓN DEL PROBLEMA EN UN CONTEXTO ............................................ 1
SITUACIÓN CONFLICTO NUDOS CRÍTICOS ..................................................... 2
CAUSAS Y CONSECUENCIAS DEL PROBLEMA .............................................. 3
DELIMITACIÓN DEL PROBLEMA ........................................................................ 3
FORMULACIÓN DEL PROBLEMA ....................................................................... 4
EVALUACIÓN DEL PROBLEMA .......................................................................... 4
OBJETIVOS ............................................................................................................ 5
Objetivo General ............................................................................................................ 5
XII
Objetivos Específicos ...................................................................................................... 6
ALCANCES DEL PROBLEMA .............................................................................. 6
JUSTIFICACIÓN E IMPORTANCIA ...................................................................... 7
METODOLOGÍA DEL PROYECTO ....................................................................... 8
Supuestos ....................................................................................................................... 9
Restricciones ................................................................................................................ 10
MARCO TEÓRICO ............................................................................................... 11
ANTECEDENTES DEL ESTUDIO ....................................................................... 11
FUNDAMENTACIÓN TEÓRICA .......................................................................... 12
CONTROL INTERNO ........................................................................................... 12
EL FRAUDE .......................................................................................................... 14
Factores del Fraude ...................................................................................................... 16
INTERNET ............................................................................................................ 17
APLICACIONES WEB ......................................................................................... 17
SERVIDORES WEB ............................................................................................. 18
Servidor Apache ........................................................................................................... 19
Usos de Apache ............................................................................................................ 21
OPEN SOURCE .................................................................................................... 22
PHP ....................................................................................................................... 23
MySQL .................................................................................................................. 24
SISTEMA DE GESTIÓN DE LA SEGURIDAD INFORMÁTICA ......................... 25
FRAMEWORK ...................................................................................................... 26
Características de los Famework .................................................................................. 26
CODEIGNITER ..................................................................................................... 27
XIII
FUNDAMENTACIÓN LEGAL .............................................................................. 29
Reglamento de la investigación científica y tecnológica de la Universidad de Guayaquil29
DECRETO 1014 - SOBRE EL USO DEL SOFTWARE LIBRE ........................... 30
LEY DE PROPIEDAD INTELECTUAL ................................................................................ 32
PREGUNTA CIENTÍFICA A CONTESTARSE .................................................... 34
VARIABLES DE LA INVESTIGACIÓN ................................................................ 34
Variable independiente: ............................................................................................... 34
Variables dependientes:............................................................................................... 34
DEFINICIONES CONCEPTUALES ..................................................................... 34
CAPÍTULO III ........................................................................................................ 36
PROPUESTA TECNOLÓGICA ............................................................................ 36
FUNCIONALIDADES DEL SISTEMA .................................................................. 37
Perfil Usuario................................................................................................................ 38
Función del Sistema. .................................................................................................... 38
ANÁLISIS DE FACTIBILIDAD ............................................................................. 39
Factibilidad Operacional............................................................................................... 40
Factibilidad Técnica ...................................................................................................... 41
Factibilidad Legal .......................................................................................................... 42
Factibilidad Económica................................................................................................. 43
ETAPAS DE LA METODOLOGÍA DEL PROYECTO ......................................... 45
CRITERIOS DE VALIDACIÓN DE LA PROPUESTA ......................................... 50
INFORMES DE PRUEBAS .................................................................................. 50
Pruebas de caja negra .................................................................................................. 50
DIAGRAMAS DE CASOS DE USO PARA EL SISTEMA .................................. 51
XIV
Caso de uso Inicio de Sesión ........................................................................................ 52
Caso de uso: Generación de alertas ............................................................................. 53
Caso de uso Reporte de Trazabilidad ........................................................................... 55
Caso de uso Aprobación de Orden de Salida ................................................................ 57
Caso de uso Verificación de Orden de Salida ............................................................... 59
Caso de uso: Verificación de ingreso del bien .............................................................. 61
ENTREGABLES DEL PROYECTO ..................................................................... 63
ENCUESTAS ........................................................................................................ 63
POBLACIÓN Y MUESTRAS ................................................................................ 63
Población ..................................................................................................................... 63
Muestra ........................................................................................................................ 64
TÉCNICAS DE RECOLECCIÓN DE DATOS ...................................................... 66
ENCUESTAS ........................................................................................................ 67
CAPITULO IV........................................................................................................ 73
CRITERIOS DE ACEPTACIÓN DEL PRODUCTO O SERVICIO ....................... 73
CONCLUSIONES ................................................................................................. 74
RECOMENDACIONES ......................................................................................... 75
BIBLIOGRAFÍA .................................................................................................... 77
ANEXO III ............................................................................................................ 133
ANEXO IV ........................................................................................................... 135
XV
ÍNDICE DE TABLAS
Tabla N° 1: Causas y Consecuencias del Problema ................................................. 3
Tabla N° 2: Delimitación del Problema ........................................................................ 3
Tabla N° 3: Factores del Fraude y ejemplo ............................................................... 16
Tabla N° 4 : Ventajas e Inconvenientes ..................................................................... 21
Tabla N° 5: Funcionalidades del Sistema de Control Interno .............................. 37
Tabla N° 6: Perfil del Usuario ....................................................................................... 38
Tabla N° 7: Perfil del Usuario ....................................................................................... 39
Tabla N° 8: Elementos de Hardware y Software ...................................................... 42
Tabla N° 9: Costo de la página web ............................................................................ 43
Tabla N° 10: Costo de recurso humano ..................................................................... 43
Tabla N° 11: Costo de Recurso Hardware ................................................................. 44
Tabla N° 12: Costo de recurso software .................................................................... 44
Tabla N° 13: Sprint 1 ....................................................................................................... 45
Tabla N° 14: Sprint 2 ....................................................................................................... 46
Tabla N° 15: Sprint 3 ....................................................................................................... 47
Tabla N° 16: Sprint 4 ....................................................................................................... 48
Tabla N° 17: Sprint 5 ....................................................................................................... 49
Tabla N° 18: Prueba de Caja Negra ............................................................................. 51
Tabla N° 19: Descripción del Caso de uso Inicio de Sesión ................................. 53
Tabla N° 20: Descripción del Caso de uso Alertas ................................................. 54
Tabla N° 21: Descripción del Caso de uso Consulta de Trazabilidad ................ 56
XVI
Tabla N° 22: Descripción del Caso de uso Casos de uso Aprobación de Orden
de Salida ............................................................................................................................. 58
Tabla N° 23: Descripción del Caso de uso Verificación de Orden de Salida .. 60
Tabla N° 24: Descripción del Caso de uso Verificación de Ingreso del Bien ... 62
Tabla N° 25 : Población ................................................................................................. 64
Tabla N° 26: Muestra ...................................................................................................... 66
Tabla N° 27: Pregunta #1 ............................................................................................... 67
Tabla N° 28: Pregunta # 2 .............................................................................................. 68
Tabla N° 29: Pregunta # 3 .............................................................................................. 70
Tabla N° 30: Pregunta # 4 .............................................................................................. 71
Tabla N° 31: Pregunta # 5 .............................................................................................. 72
Tabla N° 32: Matriz de criterios de aceptación del producto ................. 73
XVII
ÍNDICE DE GRÁFICOS
Gráfico N° 1: Metodología SCRUM ............................................................................... 9
Gráfico N° 2: Definición de control Interno............................................................... 12
Gráfico N° 3: Descripción de la Estructura del Control Interno........................... 14
Gráfico N° 4: Esquema de Fraude ............................................................................... 15
Gráfico N° 5: Arquitectura de aplicaciones web ...................................................... 18
Gráfico N° 6: Funcionamiento de un Servidor web ................................................ 19
Gráfico N° 7: Esquema del funcionamiento de Apache ....................................... 20
Gráfico N° 8: Características de Apache ................................................................... 22
Gráfico N° 9: Herramientas Open Source ................................................................. 23
Gráfico N° 10: Funcionamiento de PHP ..................................................................... 24
Gráfico N° 11: Pilares que conforman la Seguridad ............................................... 25
Gráfico N° 12: Características de FRAMEWORK .................................................... 27
Gráfico N° 13: Diagrama funcional del aplicativo .................................................. 36
Gráfico N° 14: Análisis de Factibilidad ...................................................................... 40
Gráfico N° 15: Casos de uso Inicio Sesión ............................................................... 52
Gráfico N° 16: Casos de uso Alertas .......................................................................... 54
Gráfico N° 17: Casos de uso Consulta de Trazabilidad ......................................... 55
Gráfico N° 18: Casos de uso Aprobación de Orden de Salida ............................. 57
Gráfico N° 19: Casos de uso Verificación de Orden de Salida ........................... 59
Gráfico N° 20: Casos de uso: Verificación de ingreso del bien ........................... 61
Gráfico N° 21: Pregunta # 1 ...................................................................................... 67
Gráfico N° 22: Pregunta # 2 .......................................................................................... 69
Gráfico N° 23: Pregunta # 3 .......................................................................................... 70
Gráfico N° 24: Pregunta # 4 .......................................................................................... 71
Gráfico N° 25: Pregunta # 5 ..................................................................................... 72
XVIII
UNIVERSIDAD DE GUAYAQUIL
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES
“DESARROLLO DE UN SISTEMA WEB, COMO HERRAMIENTA DE APOYO EN
EL CONTROL INTERNO DE EMPRESAS INDUSTRIALES, QUE GENERE
ALERTAS PARA UN CORRECTO SEGUIMIENTO Y TRAZABILIDAD; CON EL FIN
DE MINIMIZAR PERDIDAS DE ACTIVOS O ELEMENTOS QUE SALEN DE LAS
COMPAÑÍAS”.
Autor: Jimmy Alexander Vera Vera Tutor: Ing. Vicente Vizueta Logroño, M.Sc.
RESUMEN
El presente proyecto de desarrollo de un sistema web servirá para mejorar el control de activos en diferentes empresas industriales, facilitando el seguimiento y trazabilidad de los mismos mediante un entorno web. Este requerimiento surgió debido a que muchas empresas industriales en el Ecuador, buscan a través de sus Departamentos de Control Interno y áreas de Seguridad implementar mecanismos o procedimientos adecuados para evitar pérdidas de sus bienes. Durante la evolución del proyecto se realizó un marco de trabajo basado en la metodología Scrum y orientado a la Gestión de Procesos para obtener los avances con la mayor calidad posible en un corto tiempo. Se utilizó para el desarrollo del Sistema Web las herramientas Open Source como PHP, MySQL, Apache, CodeIgniter. El aporte principal del proyecto es la entrega de un sistema Web, que agregue valor a la gestión de Control Interno, minimizando la oportunidad de pérdida de los activos o elementos, dotando de herramientas efectivas a los usuarios para el registro, aprobación, control, seguimiento y trazabilidad, estandarizando procesos, generando información en línea, emitiendo las debida alertas de control y contribuyendo al crecimiento de las empresas industriales del Ecuador. Palabras Claves: Open Source, Metodología Scrum, Seguridad, Trazabilidad
XIX
UNIVERSIDAD DE GUAYAQUIL
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES
"DEVELOPMENT OF A WEB SYSTEM, AS A TOOL OF SUPPORT IN THE
INTERNAL CONTROL OF INDUSTRIAL COMPANIES, THAT GENERATES
ALERTS FOR A CORRECT MONITORING AND TRACEABILITY; IN
ORDER TO MINIMIZE LOSS OF ASSETS OR ELEMENTS THAT COME
OUT OF THE COMPANY”.
Autor: Jimmy Alexander Vera Vera Tutor: Ing. Vicente Vizueta Logroño, MSc.
ABSTRACT
The present project of development of a web system will serve to improve the control of assets or elements in different industrial companies, facilitating the tracking and traceability of them through a web environment. This requirement arose because many industrial companies in Ecuador, seek through their Internal Control Departments and Security areas to implement adequate mechanisms or procedures to avoid losses of assets. During the evolution of the project, a framework was developed based on the Scrum methodology and oriented towards Process Management to obtain the advances with the highest possible quality in a short time. Open Source tools such as PHP, MySQL, Apache, CodeIgniter were used to develop the Web System. The main contribution of the project is the delivery of a Web system, which adds value to the management of Internal Control, minimizing the opportunity of loss of assets or elements, providing effective tools to users for registration, approval, control, monitoring and traceability, standardizing processes, generating information online, issuing due control alerts and contributing to the growth of industrial companies in Ecuador. Keywords: Open Source, Scrum Methodology, Security, Traceability
XX
INTRODUCCIÓN
De acuerdo al Instituto Nacional de Estadísticas y Censos INEC, en el 2016
en Ecuador existían 843,745 empresas de las cuales el 8.62% corresponden a
empresas Industriales.
Muchas empresas de este país cuentan con controles de diferentes tipos,
tales como Registros de transacciones, Sistemas de aprobación, Monitoreo, Control
de calidad entre otros. Sin embargo vemos que aún hay una deficiencia en el control
de los activos de las empresas.
Esta deficiencia en el control interno se hace más evidente en empresas del
ámbito industrial, ya que por su operación constantemente trasladan activos o partes
de estos a otras localidades, a talleres especializados por mantenimientos o
simplemente son dados de baja.
Muchas empresas pierden el control de sus activos en el instante en que estos
salen de sus instalaciones, dando oportunidad al robo interno, fraude, causando
pérdidas físicas que se traducen finalmente en pérdidas monetarias.
Con los antecedentes expuestos, es de suma importancia que todo tipo de
empresa y particularmente las empresas industriales, cuenten con un sistema que
ayude al control y seguimiento de activos.
Una de las formas tradicionales que implementan las empresas es la
contratación de Compañías de Seguridad, para el control de entradas y salidas de
sus activos, pero este control actualmente se lleva de forma manual mediante
XXI
bitácoras (cuadernos empastados), complicando realizar un seguimiento y control
adecuado.
Cuando hablo de activos, hago referencia a aquellos bienes tangibles que
generalmente son indispensables en los procesos de las empresas tales como:
equipos de oficina, maquinarias, equipo de cómputo, vehículos, muebles y enseres,
al referirme a elementos me enfoco en componentes de algún activo o simplemente
en partes o piezas que también son necesarios y por lo tanto necesitan el mismo
proceso de validación de entrada y salida.
Toda empresa debe tener entre sus objetivos una visión enfocada al control
interno, donde prevalezcan factores como la transparencia, efectividad, confiabilidad
y eficiencia, por tales motivos contar con Departamentos de Control Interno y
Seguridad, brindan sin duda un aporte fundamental en esta visión, pero es necesario
dotarles de herramientas adecuadas para conseguir los objetivos planteados.
Mediante este Proyecto se propone disponer de la tecnología al alcance,
utilizando herramientas “Open Source”, y desarrollando un sistema Web, que
agregue valor a la gestión de Control Interno, minimizando la oportunidad de pérdida
de los bienes, dotando de herramientas efectivas a los usuarios para el registro,
aprobación, control, seguimiento y trazabilidad de estos, estandarizando procesos,
generando información en línea y confiable, contribuyendo al crecimiento de las
empresas industriales del Ecuador.
En el Capítulo 1 se planteará la problemática que ocasiona el no contar con
un adecuado control y seguimiento de los activos o elementos, describiendo las
causas y consecuencias del problema, se detallará la delimitación del problema
planteado y los objetivos generales y específicos que orientarán al desarrollo e
implementación del sistema web.
XXII
En el Capítulo 2 se explicarán los antecedentes, los conceptos en que nos
basaremos para el desarrollo del proyecto, se nombrarán teorías de expertos sobre
el tema y la fundamentación legal, ayudando con el planteamiento y estudio de la
propuesta.
En el Capítulo 3 se describen las herramientas tecnológicas que se utilizaran
en el proyecto, así mismo se detallará el método de investigación a utilizar, el cual se
apoyará con encuestas que se realizaran al personal de control interno de distintas
empresas industriales y empresas de seguridad, para validar la factibilidad del
desarrollo e implementación del presente tema de tesis.
En el Capítulo 4 se desarrollará la parte final de la tesis, donde se presentará
la validación del sistema, así como las conclusiones a las que se llegaron en el
estudio y desarrollo del proyecto, también se darán a conocer las recomendaciones
pertinentes para el buen funcionamiento del sistema así como mejoras que se
puedan implementar en el futuro.
1
CAPÍTULO I
EL PROBLEMA
PLANTEAMIENTO DEL PROBLEMA
En nuestro país existen distintos tipos de empresas que brindan un control de
seguridad, las cuales han ido aumentando paulatinamente, acoplándose a las
necesidades del cliente. La mayoría de empresas industriales requiere un personal
de control que cumplan sus funciones eficazmente y realicen un seguimiento
confiable de los activos que entran y salen de la empresa.
El personal de seguridad que pertenece a las empresas industriales, llevan
un registro manual de ingresos o salidas de activos, si algún proveedor o empleado
retira algún activo con su respectiva orden de salida el personal de seguridad debe
registrar ese evento en una bitácora de forma manual.
UBICACIÓN DEL PROBLEMA EN UN CONTEXTO
La mayoría de empresas industriales no cuentan con un sistema que lleve
seguimiento o trazabilidad de los activos o materiales que salen de sus plantas o
agencias por diferentes situaciones (traslados a otras agencias, bajas,
mantenimientos, etc), tampoco que genere una alerta de seguimiento de algún activo
que no hayan entregado a tiempo.
Esto conlleva muchas veces, a que haya desorden en los procesos de control,
pérdida de tiempo, y finalmente pérdida del bien a causa de una falta de seguimiento
adecuado, lo cual impacta directamente en la utilidad de las empresas.
2
Se planteó la elaboración de este tema de tesis con el fin de contribuir en el
control y seguimientos de los activos o elementos de las empresas industriales.
SITUACIÓN CONFLICTO NUDOS CRÍTICOS
Si un activo de la empresa debe ser transferido a una agencia, y sale con su
respectiva orden de salida aprobada, no podemos conocer, al menos de forma
inmediata, si el activo llegó a la agencia en buenas condiciones o en el tiempo
establecido.
Si un activo debe ser retirado de la empresa por mantenimiento durante un
periodo establecido, se dificulta conocer si ya se cumplió el tiempo del mantenimiento
o si el activo ya regresó a las instalaciones.
Al momento de retirar un activo, la persona de Control interno o Seguridad
registra manualmente en su bitácora la salida o se queda con una orden aprobada
realizada manualmente, si el activo es de tipo industrial se le dificulta validar si es el
correcto ya que no posee conocimientos técnicos y no tiene una evidencia digital
como una imagen del bien.
En definitiva la falta de un sistema genera que el personal de control interno
no pueda dar un seguimiento o trazabilidad a los activos que deben salir de las
empresas por diversos motivos e incluso ser alertados en el caso de activos no
entregados pasada la fecha límite,
3
CAUSAS Y CONSECUENCIAS DEL PROBLEMA
Tabla N° 1: Causas y Consecuencias del Problema
Causas Consecuencias
Registro manual de entradas o salidas de
activos.
Genera, pérdida de tiempo al momento
de realizar el seguimiento.
Desconocimiento del bien por parte del
vigilante de seguridad, falta de evidencia.
Genera oportunidad para el fraude,
pérdida o daño del bien.
Falta de alertas oportunas sobre el
seguimiento y trazabilidad del bien.
Genera desconocimiento del estatus
del bien y toma de decisiones
inapropiadas.
Control inadecuado a través de métodos
tradicionales.
Genera descuido al momento de
registrar la salida o entrada de algún
bien, llevando a la empresa a pérdidas
financieras.
Elaboración: Jimmy Alexander Vera Vera
Fuente: Jimmy Alexander Vera Vera
DELIMITACIÓN DEL PROBLEMA
Tabla N° 2: Delimitación del Problema
Campo: Tecnológico (TIC)
Área: Desarrollo de Software
Aspecto: Aplicaciones web, Sistema de gestión de base de datos MySQL, lenguaje
de programación PHP, control interno y trazabilidad de activos de una
empresa industrial.
Tema: DESARROLLO DE UN SISTEMA WEB, COMO HERRAMIENTA DE
APOYO EN EL CONTROL INTERNO DE EMPRESAS INDUSTRIALES,
QUE GENERE ALERTAS PARA UN CORRECTO SEGUIMIENTO Y
TRAZABILIDAD, CON EL FIN DE MINIMIZAR PERDIDAS DE ACTIVOS
O ELEMENTOS QUE SALEN DE LAS COMPAÑÍAS.
Elaboración: Jimmy Alexander Vera Vera Fuente: Jimmy Alexander Vera Vera
4
FORMULACIÓN DEL PROBLEMA
¿Se beneficiarían las empresas industriales, con la implementación del
Sistema Web como apoyo al control interno, logrando minimizar perdidas de activos
que han salido de sus instalaciones?
EVALUACIÓN DEL PROBLEMA
Revisando la problemática, se pueden evaluar los siguientes aspectos:
Delimitado: el desarrollo del Sistema Web está dirigido a las empresas
industriales, específicamente al personal de control interno y seguridad,
automatizando sus procesos y controles.
Claro: Se presenta el siguiente desarrollo del sistema web para optimizar el
control de activos que salen de la empresa, mejorar el tiempo de búsqueda de algún
registro, conocer la trazabilidad de los activos que sean trasladados fuera de la
empresa y alertar los vencimientos de activos que no han regresado a tiempo.
Evidente: Por medio del procedimiento de observación se puede decir que
los agentes de seguridad no usan un sistema que facilite el control interno, sin duda
la tecnología en estos tiempos es de gran ayuda en todo ámbito laboral, para este
caso se optimizara el tiempo de búsqueda y se lograra llevar un mejor control.
Relevante: Referirse a un tema como el control interno en las empresas
industriales es, sin duda, de un interés colectivo para estas empresas, debido a que
por su operación la falta de control genera pérdidas monetarias importantes. El
sistema propuesto aportaría a sistematizar sus controles, optimizando tiempos,
generando alertas y conociendo el estatus de los activos que han salido de sus
instalaciones por diversos motivos, reduciendo el riesgo de pérdida.
5
Original: Basándonos en el argumento del problema planteado, se estima
que es un planteamiento original, para llevar un control y trazabilidad de los
elementos y activos de empresas industriales bajo la supervisión del personal de
Control interno y Seguridad, este planteamiento es nuevo e innovador.
Contextual: Las empresas industriales, no cuentan con un sistema web que
permita al personal de Control interno y Seguridad llevar un control adecuado de
activos o elementos que han salido de sus instalaciones.
Factible: Por medio del desarrollo en lenguajes de programación como PHP
y MySQL , se diseñará un recurso como solución tecnológica a las necesidades que
plantea el problema. Al usar estas herramientas de programación no es necesario
realizar gastos de licencias.
Identifica los productos esperados: El producto esperado que se diseñará
es un sistema web, el cual servirá como herramienta de control interno para
empresas industriales, sistematizando los procesos de creación, aprobación,
verificación y seguimiento de activos que salen de sus instalaciones.
OBJETIVOS
Objetivo General
Proporcionar una herramienta tecnológica que permita mejorar el control
interno de las empresas industriales facilitando el seguimiento y trazabilidad de sus
activos mediante un entorno web.
6
Objetivos Específicos
Investigar los procesos de control y trazabilidad de activos, que poseen en
algunas empresas del sector industrial de la ciudad de Guayaquil.
Desarrollar un entorno web con herramientas de software libre (PHP y
MySQL) que facilite la interacción con los usuarios de las áreas de control y
seguridad.
Sistematizar la creación, aprobación, validación y seguimiento de las órdenes
de salida de activos.
ALCANCES DEL PROBLEMA
Se realizará el levantamiento de información mediante encuestas o
entrevistas a personas ligadas a las áreas de Control Interno, Seguridad y
Mantenimiento en empresas industriales, así como a personas que trabajen
en Compañías de Seguridad que brinden servicios en estas empresas.
El alcance establecido para este proyecto será el desarrollo de una aplicación
Web utilizando herramientas Open Source como lo son lenguaje PHP con
framework Codeigneiter y My Sql como gestor de base de datos.
El presente proyecto se enfoca en la elaboración, aprobación y validación de
las órdenes de salida de los activos, así como dotar de herramientas para el
seguimiento de los mismos, tales como consulta de trazabilidad y generación
de alarmas, por lo tanto se necesita que exista previamente un Sistema de
Inventarios de activos. Para el presente proyecto la información previa
(activos de la empresa) se la incluirá a nivel de base de datos.
7
El sistema contará con las siguientes funcionalidades:
Reporte de la trazabilidad de las órdenes de salidas y de los activos,
detallando estados, usuarios que intervinieron en el proceso así como fechas,
horas de salidas o ingresos de los activos.
Enviar alertas oportunas mediante correos electrónicos indicando que se
acerca la fecha de regreso del bien o que la fecha está vencida.
Registro de orden de salida por transferencias, mantenimientos, venta o bajas
de activos.
Aprobación de orden de salida (Gerente de área).
Verificación de orden de salida (Personal de Seguridad)
Verificación de Ingreso del activo (Personal de Seguridad)
Confirmación de llegada de activo (Nuevo responsable)
Mantenimiento de activos (código, descripción, clasificación).
Mantenimiento de perfiles de usuarios.
Mantenimiento de usuarios.
Mantenimiento de Empresa y Agencias.
Mantenimiento de Bodega,
Cuadro estadístico de Ordenes de Salidas vencidas, en trámite y exitosas
JUSTIFICACIÓN E IMPORTANCIA
Las empresas industriales gastan altas sumas de dinero en servicios de
seguridad patrimonial para custodiar sus bienes de la forma tradicional, sin embargo
pese a esto, muchas empresas reportan anualmente pérdidas de dinero por fugas de
activos ya sean estos maquinarias, equipos, materiales o repuestos.
8
Es importante complementar al personal de seguridad que brinda sus
servicios en las empresas industriales con herramientas tecnológicas que ayuden al
seguimiento de sus activos o elementos, facilitando la gestión del personal de control
y minimizando pérdidas
Mediante el tema planteado de tesis, se conseguirá alcanzar el beneficio
deseado para las empresas industriales, ya que en la actualidad se requiere de un
sistema para que el personal de Control interno y Seguridad puedan controlar
adecuadamente y revisar la trazabilidad de los elementos y activos que salen o
retornan a la empresa.
La forma actual en que el personal de seguridad de empresas industriales
lleva el control de activos o elementos que salen de sus instalaciones, es de manera
manual, es decir, registrando en una bitácora la salida o ingreso del bien, haciendo
dificultosa la búsqueda de algún registro específico, o en otros casos recibiendo un
formato de orden de salida el cual también es llenado de manera manual.
Un sistema web es una herramienta importante en la gestión y procesamiento
de información en las diferentes áreas de una empresa, y en este caso
complementaría mucho la gestión del personal de Control interno y Seguridad de las
empresas industriales, por ello se propone la solución tecnológica planteada.
METODOLOGÍA DEL PROYECTO
La metodología ágil SCRUM es el conjunto de herramientas consideradas
buenas prácticas en el desarrollo de software mediante la asignación de funciones a
cada miembro de un equipo con la finalidad de obtener avances parciales con la
mayor calidad posible de un proyecto. (Proyectosagiles.org, 2017)
9
Gráfico N° 1: Metodología SCRUM
Elaboración: (Proyectosagiles.org, 2017) Fuente: (Proyectosagiles.org, 2017)
Supuestos
Mencionaremos algunos puntos que se consideran como supuestos en el
desarrollo del Sistema Web de Control Interno para Empresas Industriales:
El Sistema Web presentará una consulta de trazabilidad donde se
visualizarán los diferentes eventos que se generaron en el proceso de salida
y traslado del bien así como los responsables de cada evento.
El Sistema Web, permitirá ingresar órdenes de salida por el colaborador
responsable de cada área de la empresa.
El aplicativo web servirá como herramienta de control para los Gerentes de
las diferentes áreas ya que no se generará la impresión de la orden de salida
si no hay previamente una aprobación del Gerente responsable.
10
El personal de Seguridad de dichas empresas industriales, tendrán la opción
de autorizar la salida si previamente esta ha sido autorizada por el Gerente
del área y podrán visualizar la foto del activo para identificarlo fácilmente
El Sistema Web permitirá la generación de alertas cuando identifique activos
o elementos que hayan salido de las instalaciones (por transferencias a otras
agencias o por mantenimientos en proveedores externos) y se hayan vencido
las fechas estimadas de retorno o de llegada de los bienes.
Restricciones
Se trabajará bajo la metodología SCRUM.
El Sistema se enfoca en el control de activos que son trasladados hacia otras
localidades, no se considera un sistema de inventario de activos.
El presupuesto del proyecto no considera el pago de licencias para
herramientas de desarrollo ni de base de datos, se ajustó al uso de
herramientas de Software libre.
11
CAPÍTULO II
MARCO TEÓRICO
ANTECEDENTES DEL ESTUDIO
Desde el inicio de la humanidad la seguridad ha sido una de las principales
necesidades del ser humano. En la medida en que el hombre fue acumulando
posesiones tuvo la necesidad de vigilarlas y ponerlas a buen recaudo, por lo cual en
el transcurso del tiempo fue ideando y mejorando mecanismos de control con el fin
de proteger sus bienes.
Actualmente en el Ecuador muchas empresas contratan compañías que
brindan el servicio de Seguridad Patrimonial o crean departamentos de Seguridad y
Control Interno para custodiar sus activos y llevar el control de los mismos.
Hoy por hoy la tecnología se ha vuelto un aliado muy importante para todas
las empresas, siendo parte fundamental en sus crecimientos, utilizándola casi en
todos sus procesos, y particularmente en los procesos de control, sin embargo, aún
hay muchas áreas de oportunidad en este ámbito.
Particularmente en las Empresas Industriales del Ecuador a las que se tuvo
acceso, se identificó procesos de control interno que se realizan manualmente, es
decir, no cuentan con un sistema que lleve un control de activos o elementos que
entran o salen de sus instalaciones.
Por este motivo, se plantea en el presente proyecto el desarrollo de un
sistema web que sirva de apoyo a las áreas de Control Interno y Seguridad de las
empresas industriales, incorporando herramientas como trazabilidad, reportes en
12
línea y emitiendo alertas oportunas por demoras en el retorno o llegada de los bienes,
con el objetivo de minimizar perdidas.
FUNDAMENTACIÓN TEÓRICA
CONTROL INTERNO
El término “Sistema de control interno” significa todas las políticas y
procedimientos (controles internos) adaptados por la administración de una entidad
para ayudar a lograr el objetivo de la administración de asegurar, tanto como sea
factible, la conducción ordenada y eficiente de su negocio, incluyendo adhesión a las
políticas de administración, la salvaguarda de activos, la prevención y detección de
fraude y error, la precisión e integralidad de los registros contables, y la oportuna
preparación de información financiera confiable. (Norma Internacional de Auditoría 6)
Hoy en día resulta sumamente importante que todas las empresas sin
importar si son industriales, comerciales o de servicios establezcan mecanismos de
control para verificar la existencia real del activo fijo y que dichos datos puedan ser
verificarlos o cotejarlos con el aspecto contable en cualquier momento o periodo con
la satisfacción de que todo está en orden y al día. (EDUCACONTA)
En el siguiente Grafico # 2 veremos de una manera sencilla la definición de
control interno.
13
Gráfico N° 2: Definición de control Interno
Elaboración: Jimmy Vera Vera
Fuente: (Serrano, 2013)
La falta de procedimientos y herramientas para el Control Interno en las
empresas, conlleva muchas veces, a que haya desorden en los procesos, pérdidas
de tiempo, y finalmente pérdidas de recursos, lo cual impacta directamente en la
utilidad de las empresas.
En el siguiente Gráfico # 3, se detalla cómo debe estar compuesta una
estructura de control interno.
14
Gráfico N° 3: Descripción de la Estructura del Control Interno
Elaboración: Jimmy Vera Vera Fuente: (Serrano D. M., 2013)
EL FRAUDE
En el mundo entero se cometen diariamente diversos tipos de delitos, pero
uno de los principales delitos que afecta a las empresas es el FRAUDE, que
generalmente no se detecta inmediatamente y se presenta principalmente por falta
de control sobre todo en procesos críticos.
15
Hoy en día los fraudes que más se están presentando son los que aprovechan
los medios digitales como computadoras e internet, luego se suman los fraudes en
áreas críticas donde hay manejo de dinero, mercadería, insumos, activos entre otros.
Los crímenes de fraudes cuentan con un elevado porcentaje de colaboración
por parte del personal activo de la empresa en donde se registra el delito, y muchas
veces es descubierto por alguna circunstancia de investigación de personas
externas, cambios de personal o algún incidente.
Por medio del siguiente gráfico se puede observar un esquema básico de la
clasificación del fraude.
Gráfico N° 4: Esquema de Fraude
Elaboración: Jimmy Vera Vera
Fuente: (Díez, 2013)
ESQUEMA DE
FRAUDE
Corrupción
Fraude en
Estados
Financieros
Apropiación
Indebida de
activos
Uso indebido de efectivo.
Uso indebido de activos.
Fraude en reembolso de gastos.
Proveedores falsos.
Nomina fraudulenta.
Uso indebido de información confidencial.
Reconocimientos anticipados de ingresos/
egresos fraudulentos.
Reservas fraudulentas.
Documentos financieros o no financieros
fraudulentos.
Soportes financiero y/o no financiero
fraudulentos.
Conflicto de interés.
Soborno.
Recibir pagos ilegales.
Dar pagos ilegales.
Manipulación de compras.
Manipulación de licitaciones.
16
Factores del Fraude
El fraude se divide en tres factores principales Oportunidad, Incentivo/Presión y
Racionalización.
Oportunidad: Ausencia de Controles en métodos o técnicas ilegales
de funciones.
Incentivo/Presión: Se desarrolla por sucesos que le generen una
ganancia o de Posibles sucesos Por posibilidad de beneficios propios
o intimidación por personas externas para que se realice el fraude.
Racionalización: Factor que se basa en el compromiso y ética del
empleado.
Tabla N° 3: Factores del Fraude
Elaboración: Jimmy Vera Vera Fuente: (Cressey, 1973)
17
INTERNET
Internet es un conjunto de redes de ordenadores y equipos físicamente unidos
mediante cables que conectan puntos de todo el mundo. Estos cables se presentan
en muchas formas, desde cables de red local (varias máquinas conectadas en una
oficina o campus) a cables telefónicos convencionales, digitales y canales de fibra
óptica que forman las “carreteras” principales. Esta gigantesca Red se difumina en
ocasiones porque los datos pueden transmitirse vía satélite, o a través de servicios
como la telefonía celular, o porque a veces no se sabe muy bien a dónde está
conectada. (@ALVY)
El acceso a los diferentes ordenadores y equipos que están conectados a
Internet puede ser público o estar limitado. Una red de cajeros automáticos o
terminales de banco, por ejemplo, pueden estar integrados en Internet pero no ser
de acceso público, aunque formen parte teórica de la Red. Lo interesante es que
cada vez más de estos recursos están disponibles a través de Internet: fax, teléfono,
radio, televisión, imágenes de satélites o cámaras de tráfico son algunos ejemplos.
(@ALVY)
Se relaciona con el proyecto porque varios lenguajes usan este medio para la
integración de sus componentes como es el código fuente y la base de datos.
APLICACIONES WEB
Son herramientas ofimáticas, que se utilizan por medio de una conexión a
internet y para estos casos se utiliza al computador como un medio de conexión
remota a la aplicación, otro forma de definir a las aplicaciones web es que son
aquellas en la que los usuarios pueden ingresar o utilizar accediendo al servidor web
18
por medio del internet, usando como herramienta de enlace a los navegadores web.
(Ramos Martín & Ramos Martín, 2014)
El desarrollo web es bastante amplio, los programadores buscan aprovechar
la conectividad existente e implementar soluciones que permitan interactuar de
manera eficiente entre dispositivos para satisfacer las necesidades del mercado.
Gráfico N° 5: Arquitectura de aplicaciones web
Elaboración: Jimmy Vera Vera Fuente: (Pintado, 2012)
Por medio de la tecnología Cliente /servidor se puede hacer uso de esta
arquitectura que se expresa en el gráfico # 5 donde actúan dos escenarios, por una
parte está el servidor para comunicarme a la base de datos y efectuar consultas por
otro lado se encuentra el cliente web permitiendo al usuario utilizar la interfaz
expuesta.
SERVIDORES WEB
De manera sencilla, se puede definir a un servidor web como un programa
especialmente diseñado para transferir datos de hipertexto, es decir, páginas web
19
con todos sus elementos (textos, widgets, baners, etc). Estos servidores web utilizan
el protocolo http. (Culturación, s.f.)
El servidor web es un programa instalado en los hostings, que todo el tiempo
recibe pedidos de navegadores (se los llama peticiones), y le entrega a esos
navegadores el archivo HTML solicitado. Este diálogo entre un navegador y un
servidor Web sigue las reglas de un protocolo (una conversación, un estándar)
denominado HTTP (HyperText Transfer Protocol o Protocolo de Transferencia de
Hipertexto). (Beati, 2015)
Gráfico N° 6: Funcionamiento de un Servidor web
Elaboración: ( Netmarketing Web Internet Solutions, 2016) Fuente: ( Netmarketing Web Internet Solutions, 2016)
Servidor Apache
El servidor Apache, desarrollado por más de cien desarrolladores voluntarios
dentro del proyecto Apache, gestionado por la Fundación Apache, The Apache
Software Foundation (ww.apache.org), es el servidor web más utilizado en el mundo
y esto es debido a sus características: robustez. Rapidez, ser multiplataforma con
versiones para Linux, Win32, MacOs, Unix, modularizable, dispone de módulos para
ejecutar PHP, Perl, etc. (Cobo, Gómez, Pérez, & Rocha)
20
Por medio del siguiente gráfico se muestra el esquema de cómo funciona
Apache.
Gráfico N° 7: Esquema del funcionamiento de Apache
Elaboración: Jimmy Vera Vera Fuente: http://culturacion.com/que-es-apache/
El servidor Apache HTTP , también llamado Apache, es un servidor web
HTTP de código abierto para la creación de páginas y servicios web. Es un
servidor multiplataforma, gratuito, muy robusto y que destaca por su seguridad y
rendimiento. (ibrugor, 2014)
21
Tabla N° 4 : Ventajas e Inconvenientes
Ventajas Inconvenientes
Instalación/Configuración. Software de código abierto.
Falta de integración
Coste. El servidor web Apache es completamente gratuito.
Posee formatos de configuración NO estándar.
Funcional y Soporte. Alta aceptación en la
red y muy popular, esto hace que muchos programadores de todo el mundo contribuyen constantemente con mejoras, que están disponibles para cualquier persona que use el servidor web y que Apache se actualice constantemente.
No posee un buen panel de configuración.
Multi-plataforma. Se puede instalar en
muchos sistemas operativos, es compatible con Windows, Linux y MacOS.
N/A
Rendimiento. Capacidad de manejar más de
un millón de visitas/día.
N/A
Elaboración: Jimmy Vera Vera Fuente: (ibrugor, 2014)
Usos de Apache
Apache es utilizado principalmente, para realizar servicio a páginas web, ya
sean estáticas o dinámicas. Este estupendo servidor se integra a la perfección con
otras aplicaciones, creando el famoso paquete XAMP con Perl, Python, MySQL y
PHP, junto a cualquier sistema operativo, que por lo general es Linux, Windows o
Mac OS. (Culturacion, s.f.)
En consecuencia se puede rescatar que Apache es uno de los servidores Web
más utilizados mundialmente, además de ser de código libre y gratuito, una de las
particularidades que más lo destaca es su rendimiento y seguridad.
22
Gráfico N° 8: Características de Apache
CARACTERÍSTICAS
APACHE
Multiplataforma
Apache es un servidor web flexible, rápido
y eficiente, continuamente actualizado y
adaptado a los nuevos protocolos HTTP
Extendible : Gracias a ser modular se han
desarrollado diversas extensiones entre las
que destacan PHP, un lenguaje de
programación del lado del servidor.
Modular: Puede ser adaptado a diferentes
entornos y necesidades, con los diferentes
módulos de apoyo que proporciona, y con
la API de programación de módulos, para
el desarrollo de módulos específicos
Elaboración: Jimmy Vera Vera Fuente: (aleman, 217)
OPEN SOURCE
A modo de aproximación inicial se puede decir que el término open source
hace referencia a la libre disponibilidad por parte del usuario de un software y de su
código fuente, El código fuente está formado por líneas de instrucciones escritas en
un determinado lenguaje de programación que permiten desarrollar una aplicación o
software y que este se ejecuta las tareas para las que ha sido creado. Para los que
se acercan al mundo de la informática por primera vez o no dominan aspectos más
técnicos podemos utilizar como símil del código fuente la formula de la elaboración
de un medicamento. (Cobo, Gómez, Pérez, & Rocha)
23
Gráfico N° 9: Herramientas Open Source
Elaboración: (Initiative, 2012) Fuente: (Initiative, 2012)
PHP
PHP es un lenguaje interpretado del lado del servidor que se caracteriza por
su potencia, versatilidad, robustez y modularidad. Los programas escritos en PHP
son embebidos directamente en el código HTML y ejecutados por el servidor web a
través de intérprete antes de transferir al cliente que lo ha solicitado un resultado en
forma de código HTML puro. Al ser un lenguaje que sigue las corrientes open source,
tanto el intérprete como su código fuente son totalmente accesibles de una forma
gratuita en la red. (Cobo, Gómez, Pérez, & Rocha)
24
Gráfico N° 10: Funcionamiento de PHP
Elaboración: (Turmero) Fuente: (Turmero)
MySQL
MySQL es un sistema de gestión de base de datos relacional, multihilo y
multiusuario creado por la empresa MySQL AB –desde enero de 2008 una subsidiaria
de Sun Microsystems- desarrolla MySQL como software libre en un esquema de
licenciamiento dual. (Fossati, 2014)
25
SISTEMA DE GESTIÓN DE LA SEGURIDAD INFORMÁTICA
La seguridad de la información, según ISO 27001, consiste en la preservación
de su confidencialidad, integridad y disponibilidad, así como de los sistemas
implicados en su tratamiento, dentro de una organización. Así pues, estos tres
términos constituyen la base sobre la que se cimienta todo el edificio de la seguridad
de la información. (SGSI).
Se puede decir que la Seguridad informática se basa en verificar que el
material informático o programas instalados en la empresa sean manipulados en la
forma en que se dispuso, y para lograr acceder a la información, solo puede realizarlo
el personal autorizado.
A continuación mencionaremos los tres pilares más importantes de la
Seguridad:
Confidencialidad
Disponibilidad
Integridad
Gráfico N° 11: Pilares que conforman la Seguridad
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
26
FRAMEWORK
Según (Sznajdleder, 2013) indica que un framework es una construcción de
software que provee una solución para una problemática determinada. Dado que
estas problemáticas generalmente existen en todas las aplicaciones resulta que el
uso de frameworks facilita enormemente el proceso de desarrollo.
Características de los Famework
Abstracción de URL y Sesiones:
No se requiere trabajar directamente con las URLs o alguna sesión, ya que el
framework se responsabiliza de realizar esas funciones.
Acceso a datos:
Contiene los componentes necesarios para realizar la conexión a la base de
datos.
Controladores:
La gran parte de los Framework usa diferentes controladores para realizar
algunos sucesos como el registro de datos o el acceso específico a una
página.
Autentificación y control de acceso:
Contiene procedimiento de validación de usuario por medio del ingreso del
login y password, estos framework permiten configurar y limitar el acceso a
ciertos usuarios que no estén autorizados, también se puede realizar
restricciones de ciertas páginas.
27
Gráfico N° 12: Características de FRAMEWORK
Elaboración: Jimmy Vera Vera
Fuente: Jimmy Vera Vera
CODEIGNITER
Probablemente ya sepamos que un framework es un programa para
desarrollar otros programas, CodeIgniter, por tanto, es un programa o aplicación web
desarrollada en PHP para la creación de cualquier tipo de aplicación web bajo PHP.
Es un producto de código libre, libre de uso para cualquier aplicación. Como cualquier
otro framework, Codeigniter contiene una serie de librerías que sirven para el
desarrollo de aplicaciones web y además propone una manera de desarrollarlas que
debemos seguir para obtener provecho de la aplicación. Esto es, marca una manera
Abstracción
de URL y
sesiones
Acceso a
datos
Controladores
Autentificación
y Control de
acceso
CARACTERÍSTICAS
FRAMEWORK
28
específica de codificar las páginas web y clasificar sus diferentes scripts, que sirve
para que el código esté organizado y sea más fácil de crear y mantener. CodeIgniter
implementa el proceso de desarrollo llamado Model View Controller (MVC), que es
un estándar de programación de aplicaciones, utilizado tanto para hacer sitios web
como programas tradicionales. Este sistema tiene sus características, que veremos
en artículos siguientes. (Alvarez, 2012)
Gráfico N° 13: Características Codeigniter
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
CARACTERÍSTICAS GENERALES DE CODEIGNITER
Versatilidad:
En comparación con otros frameworks PHP. CodeIgniter es capaz de trabajar la mayoría de los entornos o servidores, incluso en sistemas de alojamiento compartido
Compatibilidad:
Es compatible con la versión PHP 4, lo que hace que se pueda utilizar en cualquier servidor, incluso en algunos antiguos. Por supuesto, funciona correctamente también en PHP 5.
Facilidad de instalación:Solo es necesario una cuenta de FTP para subir CodeIgniter al servidor y su configuración se realiza con apenas la edición de un archivo, donde debemos escribir cosas como el acceso a la base de datos.
Flexibilidad:CodeIgniter es menos rígido que otros frameworks. Define una manera de trabajar específica, pero en muchos de los casos podemos seguirla o no y sus reglas de codificación muchas veces nos las podemos saltar.
29
FUNDAMENTACIÓN LEGAL
Reglamento de la investigación científica y tecnológica de la
Universidad de Guayaquil
Esta investigación tiene sustento legal en los reglamentos de la Investigación
científica y tecnológica de la Universidad de Guayaquil el cual corresponde al
cumplimiento del desarrollo de una aplicación móvil. Los siguientes artículos como
se detallan a continuación objetivos, coordinación y de los derechos económicos,
sociales y culturales los cuales aportan al beneficio que obtiene la comunidad
partiendo de las investigaciones que se realizan en la universidad. (Vicerrectorado
Académico, 2012).
Objetivos de la investigación científica y tecnológica
Art. 1.- Los objetivos de la investigación están concebidos como parte de un
proceso de enseñanza único, de carácter docente investigativo, orientado
según la norma del Estatuto Orgánico para permitir el conocimiento de la
realidad nacional y la creación de ciencia y tecnología, capaces de dar
solución a los problemas del país. (Reglamento de la Investigación Científica
y Tecnológica de la Universidad de Guayaquil).
Las investigaciones dirigidas a la comunidad tienen por finalidad estimular las
manifestaciones de la cultura popular, mejorar las condiciones intelectuales de los
sectores que han tenido acceso a la educación superior; la orientación del pueblo
frente a los problemas que lo afectan; y la prestación de servicios, asesoría técnica y
colaboración de los planes y proyectos destinados a mejorar las condiciones de vida
de la comunidad.
30
Coordinación de la investigación científica
Art. 14.- Las unidades son responsables de la labor investigativa de sus
profesores (as) e investigadores (as) y trabajaran por lograr la mayor
integración posible de los proyectos de investigación a las necesidades del
desarrollo científico y metodológico del pregrado y posgrado, los fines de la
formación integral y profesional de sus docentes y alumnos.
De los derechos económicos, sociales y culturales
Art. 80.- El estado fomentara la ciencia y la tecnología, especialmente en
todos los niveles educativos, dirigidos a mejorar la productividad, la
competitividad, el manejo sustentable de los recursos naturales y satisface las
necesidades básicas de la población.
La investigación científica y tecnológica se llevara a cabo en las
universidades, escuelas politécnicas, institutos superiores y tecnológicos y centros
de investigación científica, en coordinación con los sectores productivos cuando sea
pertinente y con el organismo público que establezca la ley, la que regulara también
el estatuto del investigador científico.
LENIN MORENO PRESIDENTE DE LA REPUBLICA DEL
ECUADOR
DECRETO 1014 - SOBRE EL USO DEL SOFTWARE LIBRE
El decreto 1014 lo estableció el Presidente de la República para ser una
política de estado, a continuación se detallan los artículos que van de acuerdo al
proyecto de titulación. (Correa, 2008)
31
Art. 1: Establecer como política pública para las entidades de administración
Pública central la utilización del Software Libre en sus sistemas y
equipamientos informáticos.
Art. 2: Se entiende por software libre, a los programas de computación que
se pueden utilizar y distribuir sin restricción alguna, que permitan el acceso a
los códigos fuentes y que sus aplicaciones puedan ser mejoradas.
Estos programas de computación tienen las siguientes libertades:
Utilización de programa con cualquier propósito de uso común.
Distribución de copias sin restricción alguna.
Estudio y modificación de programa (Requisito: código fuente
disponible)
Publicación del programa mejorado (Requisito: código fuente
disponible
Art. 3: Las entidades de la administración pública central previa a la
instalación del software libre en sus equipos, deberán verificar la existencia
de capacidad técnica que brinde el soporte necesario para este tipo de
software.
Art. 4: Se faculta la utilización de software propietario (no libre) únicamente
cuando no exista una solución de software libre que supla las necesidades
requeridas, o cuando esté en riesgo de seguridad nacional, o cuando el
proyecto informático se encuentre en un punto de no retorno.
Art. 5: Tanto para software libre como software propietario, siempre y cuando
se satisfagan los requerimientos.
Art. 6: La subsecretaría de Informática como órgano regulador y ejecutor de
las políticas y proyectos informáticos en las entidades de Gobierno Central
deberá realizar el control y seguimiento de este Decreto.
32
Art. 7: Encargue de la ejecución de este decreto los señores Ministros
Coordinadores y el señor Secretario General de la Administración Pública y
Comunicación.
El decreto 1014 sobre el uso de software libre, incentiva a la promoción de
sistemas y aplicaciones con preferencia sobre el software con costo de
licenciamiento, abriendo puertas a desarrolladores independientes y a comunidades
de programadores al momento de crear un nuevo producto de software y distribuirlo.
LEY DE PROPIEDAD INTELECTUAL
SECCIÓN V: Disposiciones especiales sobre ciertas obras de
los programas de ordenador.
Art. 28: Los programas de ordenador se consideran obras literarias y se
protegen como tales. Dicha protección se otorga independientemente de que
hayan sido incorporados en un ordenador y cualquiera sea la forma en que
estén expresados, ya sea en forma legible por el hombre (código fuente) o en
forma legible por máquina (código objeto), ya sean programas operativos y
programas aplicativos, incluyendo diagramas de flujo, planos, manuales de
uso, y en general, aquellos elementos que conformen la estructura, secuencia
y organización del programa.
Art. 29: Es titular de un programa de ordenador, el productor, esto es la
persona natural o jurídica que toma la iniciativa y responsabilidad de la
realización de la obra. Se considerará titular, salvo prueba en contrario, a la
persona cuyo nombre conste en la obra o sus copias de la forma usual. Dicho
titular está además legitimado para ejercer en nombre propio los derechos
33
morales sobre la obra, incluyendo la facultad para decidir sobre su
divulgación.
El creador de un programa informático tendrá el derecho exclusivo de realizar,
autorizar o prohibir la realización de modificaciones o versiones sucesivas del
programa, y de programas derivados del mismo. Las disposiciones del
presente artículo podrán ser modificadas mediante acuerdo entre los autores
y el productor.
Art. 30: La adquisición de un ejemplar de un programa de ordenador que haya
circulado lícitamente, autoriza a su propietario a realizar exclusivamente:
a) Una copia de la versión del programa legible por máquina (código objeto)
con fines de seguridad o resguardo;
b) Fijar el programa en la memoria interna del aparato, ya sea que dicha
fijación desaparezca o no al apagarlo, con el único fin y en la medida
necesaria para utilizar el programa; y;
c) Salvo prohibición expresa, adaptar el programa para su exclusivo uso
personal, siempre que se limite al uso normal previsto en la licencia. El
adquirente no podrá transferir a ningún título el soporte que contenga el
programa así adaptado, ni podrá utilizarlo de ninguna otra forma sin
autorización expresa, según las reglas generales. Se requerirá de
autorización del titular de los derechos para cualquier otra utilización, inclusive
la reproducción para fines de uso personal o el aprovechamiento del
programa por varias personas, a través de redes u otros sistemas análogos,
conocidos o por conocerse. (Comisión de Legislación y Codificación, 2006, p.
8).
Esta ley de propiedad intelectual se usa para proteger al estudiante de
titulación autor de este proyecto, para evitar el abuso por parte de alguna entidad o
34
persona que intente quebrantar la ley, al modificar, actualizar o eliminar parte del
código registrado de un sistema sin permiso del propietario y creador del software.
Este decreto ayuda a precautelar y garantizar la autoría al creador del software
PREGUNTA CIENTÍFICA A CONTESTARSE
¿Se beneficiarán las empresas industriales del Ecuador, con la
implementación de un Sistema web que sirva como herramienta para el Control
Interno de activos, emitiendo las alarmas respectivas en el caso de no ser entregados
a tiempo?
VARIABLES DE LA INVESTIGACIÓN
Variable independiente:
Iinformación de activos que ingresan o salen de la empresa
Variables dependientes:
Alarmas y Reportes de trazabilidad.
DEFINICIONES CONCEPTUALES
A continuación se detallará conceptos de términos utilizados en el tema de tesis, para
así llegar a entender de una forma más eficaz los términos antes mencionados.
Empresa Industrial: Es una organización o lugar en donde se elaboran o se
transforman productos a gran escala, utilizando maquinas especializadas, para luego
ser distribuidos en el país o exportados a diferentes partes del mundo.
35
Aplicación Web: Son herramientas de software utilizadas por el usuario a través de
un servidor, al cual se puede acceder por medio del internet o la intranet.
Web service: Es una tecnología que permite intercambiar datos entre distintos
sistemas de información a través de una red como internet.
Base de datos: Es un repositorio de almacenamiento de datos, los cuales se
guardan de una manera organizada y así al momento que se consulta dicha
información o se la actualiza de manera más ágil.
MySQL: sistema utilizado mundialmente para administrar bases de datos, se
caracteriza por su rapidez y sencillez al momento de utilizarla.
Open Source: Se lo reconoce como un software de código abierto no necesita tener
licencia para utilizarlo.
36
CAPÍTULO III
PROPUESTA TECNOLÓGICA
El presente proyecto de tesis propone la elaboración de un sistema web, para
control interno de empresas industriales del Ecuador, utilizando herramientas Open
Source. El sistema estará desarrollado en PHP con framework Codeigneiter, My Sql
como gestor de base de datos y Apache como Servidor Web.
A continuación mediante el siguiente diagrama podemos observar la
funcionalidad del sistemas de control interno, donde se detalla como el Usuario
ingresa al sistema por medio de un login se conecta a la base de datos que se
encuentra instalada en un servidor web, el aplicativo web hará su conexión al servidor
web por medio de la nube.
Gráfico N° 13: Diagrama funcional del aplicativo
Elaboración: Jimmy Vera Vera
Fuente: Jimmy Vera Vera
37
FUNCIONALIDADES DEL SISTEMA
El sistema web de control interno para empresas industriales cuenta con las
siguientes funcionalidades detalladas en la siguiente tabla.
Tabla N° 5: Funcionalidades del Sistema de Control Interno
N°
FUNCIONALIDAD
FS 1 Mantenimiento de usuarios
FS 2 Mantenimiento de los activos o elementos de la empresa
FS 3 Mantenimiento del perfil de usuario
FS 4 Mantenimiento de Empresas
FS 5 Mantenimiento de sucursales
FS 6 Elaboración de órdenes de salida
FS 7 Aprobación de órdenes de salida emitidas.
FS 8 Verificación de salida de órdenes aprobadas.
FS 9 Confirmación de llegada del activo.
FS 10 Generación de alertas oportunas mediante envió de correos electrónicos
FS 11 Genera una consulta de trazabilidad de la orden de salida del activo o elemento
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
38
Perfil Usuario
Los perfiles de usuario estarán conformados de la siguiente manera:
Tabla N° 6: Perfil del Usuario
USUARIO
DETALLE
ADMINISTRADOR
Tiene acceso a todos las opciones y
módulos de la aplicación, mantenimientos,
creación / eliminación de usuarios, cambios
de contraseña, perfiles de usuarios,
GERENTE
(DE AREA O CONTROL INTERNO)
Tiene permisos para aprobar órdenes de
salida, visualizar reporte de trazabilidad,
tiene permisos para generar alertas de
correos por órdenes de salidas vencidas.
USUARIO (1)
(RESPONSABLE ACTIVO)
Tiene permisos para elaborar órdenes de
salida, y confirmar la recepción del activo.
Tiene acceso a la consulta de trazabilidad y
a la generación de la Orden de Salida
aprobada.
USUARIO (2)
(SEGURIDAD)
Tiene permisos para autorizar la salida del
activo, una vez que la orden de salida sea
aprobada por el Gerente. También tiene
acceso para el registro de la orden cuando
retorne el activo, además tendrá acceso al
reporte de trazabilidad.
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
Función del Sistema.
El Sistema web para el control interno contara con las funciones que se mencionarán
a continuación en la siguiente tabla.
39
Tabla N° 7: Perfil del Usuario
N°
FUNCIÓN
FS 1 Ingreso de usuarios y contraseña.
FS 2 Consulta de reporte de trazabilidad del activo.
FS 3 Creación de órdenes de salida.
FS 4 Creación de empresas y agencias
FS 5 Creación de Bodega.
FS 6 Registro de activos o elementos.
FS 7 Registro de responsable del activo o elemento.
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
ANÁLISIS DE FACTIBILIDAD
En la etapa del análisis de factibilidad se revisará que tan viable es el
desarrollo del sistema propuesto en este documento de tesis, con el fin sistematizar
procesos, mejorar el control y minimizar pérdidas monetarias debido a la falta del
seguimiento de los activos que salen de sus instalaciones.
Por medio del levantamiento de información, utilizando entrevistas a personas
ligadas al Control Interno en Empresas Industriales y Compañías de Seguridad, se
puede determinar que estas no cuentan con un sistema que sirva de apoyo en el
control y seguimiento de los bienes salen de sus instalaciones.
El desarrollo de este proyecto permitirá a las empresas industriales no solo
sistematizar la creación de órdenes de salida, mejorando el control y los tiempos de
40
búsqueda, sino que dispondrá de herramientas que ayuden a un seguimiento
adecuado y a una toma de decisiones oportuna.
Se consideran las siguientes etapas del Análisis de Factibilidad detallados en
el siguiente esquema a visualizar.
Gráfico N° 14: Análisis de Factibilidad
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
Factibilidad Operacional
Por medio del análisis de Factibilidad Operacional podemos decir que
operativamente el tema planteado en este documento de tesis para el desarrollo de
un sistema de control interno de activos será factible tomando en cuenta los
siguientes puntos:
41
El rechazo del sistema web de control interno que brindarían los
usuarios es casi nulo, porque hay una gran aceptación por parte de
los usuarios que laboran en los departamentos donde se
implementaría este sistema, ya que se automatizaran procesos,
haciendo que sus labores sean más productivas y ágiles.
Brindará siempre una información actualizada en sus reportes,
permitiendo llevar un control y seguimiento real de los activos o
elementos que se encuentran en las distintas áreas de la empresa
industrial.
Factibilidad Técnica
Por medio del análisis de Factibilidad Técnica podemos decir que
técnicamente para el desarrollo de este sistema serán necesarias diversas
herramientas tecnológicas de software y hardware.
Las empresas industriales cuentan con tales herramientas tecnológicas compatibles
para la implementación de este sistema.
Mediante la siguiente tabla se detallará las especificaciones del hardware y el
software a utilizar.
42
Tabla N° 8: Elementos de Hardware y Software
CANTIDAD ELEMENTOS CARACTERÍSTICAS
RECURSOS HARDWARE
1 Laptop Procesador: Intel Core i7, 4GB de memoria RAM
1 Computador Desktop
Procesador: Intel Core 2 DUO de 4GB de RAM, 4GB de memoria RAM
1 Navegador de internet gratuito Mozilla Firefox, Google Chrome
1 ROUTER HUAWEI CNT
RECURSOS SOFTWARE
1 Sistema operativo (Servidor) WINDOWS 10 Pro
1 WEB
APACHE/2.4.25 (Win 32)
Versión de Php 5.6.30
1 Base de datos Mysql 5.0.11
1 Manejador de Base de datos phpMyAdmin 3.5.1
1 Servidor de Aplicaciones web Apache tomcat
1 Framework CODEIGNITER
1 IDE PhpDesigner8
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
Factibilidad Legal
Al hablar de factibilidad legal nos estamos enfocando en el alineamiento de
las leyes dispuestas por el gobierno de nuestro país, siguiendo las ordenanzas que
hacen referencias al desarrollo del software. Hoy por hoy el aplicativo web
desarrollado no se encuentra vulnerando, políticas u ordenanza de las leyes del
Ecuador indicadas en el Capítulo 2 de este documento.
43
Factibilidad Económica
El análisis de Factibilidad Económica que se realizó para el desarrollo del
presente sistema se detalla a continuación:
Tabla N° 9: Costo del Sistema
RUBROS
TOTAL
RECURSOS HUMANOS
$ 3,264.00
RECURSOS HARDWARE $ 1,865.00
RECURSOS SOFTWARE
$ 210.00
TOTAL
$ 5,339.00
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
En la tabla siguiente se detalla el costo del Recurso humano:
Tabla N° 10: Costo del Recurso humano
CANTIDAD RUBROS VALOR POR
HORA / PRECIO
HORAS TRABAJADAS
* DIAS TOTAL
RECURSOS HUMANOS
$ 3,264.00
1 Desarrollador $ 8.50 $ 384 $ 3,264.00
TOTAL
$ 3,264.00
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
44
Tabla N° 11: Costo de recursos de Hardware
CANTIDAD RUBROS VALOR POR
HORA / PRECIO
HORAS TRABAJADAS
* DIAS TOTAL
RECURSOS HARDWARE
$ 1,865.00
1 Laptop Intel Core i7 4GB de RAM
$ $
$ 1,200.00
1
Computador Desktop Intel Core 2 DUO de 4GB de RAM
$ $ $ 600.00
1
ROUTER HUAWEI CNT
$ $ $ 65.00
TOTAL
$ 1,865.00
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
Tabla N° 12: Costo de recursos de Software
CANTIDAD RUBROS
PRECIO
HORAS TRABAJADAS
* DIAS
TOTAL
RECURSOS SOFTWARE $ 210.00
1 Sistema operativo $ 150.00 $ $ 150.00
1 Servicio Web $ 60.00 $ $ 60.00
1 Base de Datos $ $
1 Manejador de Base de Datos $ $
1 Servidor de Aplicaciones web
$ $
1 Framework $ $
1 IDE $ $
TOTAL
$ 210.00
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
45
ETAPAS DE LA METODOLOGÍA DEL PROYECTO
La metodología para el Sistema Web propuesto, se realizara por medio de
diferentes Sprint, cada una de estas interacciones tendrán una duración de una
semana, con el fin de mejorar en cada Sprint el sistema que se va construyendo y a
su vez se puedan adaptar nuevas ideas aportadas por el usuario.
El aplicativo Web contará con 5 Sprint cuyo detalle se presentara a
continuación en la siguiente tabla, detallando el tiempo preciso que se tomará por
cada recolección de información.
Tabla N° 13: Sprint 1
DESARROLLO DE UN SISTEMA WEB, COMO
HERRAMIENTA DE APOYO EN EL CONTROL INTERNO DE
EMPRESAS INDUSTRIALES, QUE GENERE ALERTAS PARA
UN CORRECTO SEGUIMIENTO Y TRAZABILIDAD, CON EL
FIN DE MINIMIZAR PERDIDAS DE ACTIVOS O ELEMENTOS
QUE SALEN DE LAS COMPAÑÍAS.
Sprint 1
Product Backlog
Planificación
El día 06 de Noviembre se realizó la primera reunión de
planificación para el desarrollo del Sistema Web de control interno
para las empresas industriales, la cual se la efectuó con las
personas responsables de las áreas de control interno y
seguridad logrando recopilar toda la información necesaria para
el desarrollo del sistema.
Fecha: del 06 de
Noviembre del
2017 al 13
Noviembre del
2017
Tarea:
Investigación y estudio de que metodología usar en el desarrollo del sistema.
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
46
Tabla N° 14: Sprint 2
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
DESARROLLO DE UN SISTEMA
WEB, COMO HERRAMIENTA DE
APOYO EN EL CONTROL INTERNO
DE EMPRESAS INDUSTRIALES, QUE
GENERE ALERTAS PARA UN
CORRECTO SEGUIMIENTO Y
TRAZABILIDAD, CON EL FIN DE
MINIMIZAR PERDIDAS DE ACTIVOS
O ELEMENTOS QUE SALEN DE LAS
COMPAÑÍAS.
Sprint 2
Versión1.0
Fecha del 24 de Noviembre de 2017 al
08 de Diciembre del 2017
Tareas
La tarea para este segundo sprint, es el desarrollo y diseño de los casos de uso para la elaboración del Sistema Web de control interno distribuido en los siguientes puntos.
Desarrollo Se desarrolla el diagrama y descripción de los casos de uso para la implementación del Sistema web, tendrá una duración de 2 semanas como máximo.
Revisión
Una vez culminado el diseño y descripción de casos de uso se procede con la
revisión.
Entregable
Nos dirigiremos al cliente en este caso al Gerente o encargado de ser el
Administrador de área de control interno de la empresa, donde se procederá
explicar, cómo va a interactuar el Sistema con el usuario, dándonos su visto bueno.
47
Tabla N° 15: Sprint 3
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
DESARROLLO DE UN SISTEMA
WEB, COMO HERRAMIENTA DE
APOYO EN EL CONTROL INTERNO
DE EMPRESAS INDUSTRIALES, QUE
GENERE ALERTAS PARA UN
CORRECTO SEGUIMIENTO Y
TRAZABILIDAD, CON EL FIN DE
MINIMIZAR PERDIDAS DE ACTIVOS
O ELEMENTOS QUE SALEN DE LAS
COMPAÑÍAS.
Sprint 3
Versión1.0
Fecha del 11 de Diciembre de 2017 al
19 de Diciembre del 2017
Tareas La tarea para este tercer sprint, es desarrollar la etapa del diseño y estructura de la base de datos a usar en el proyecto.
Desarrollo
Diseño de las tablas entidad relación a usar en el proyecto. Esquema básico de la base de datos. Tendrá una duración de 2 semanas como máximo.
Revisión
Verificación de las tablas elaboradas con su respectiva relación.
Entregable Se procede a programar funciones, métodos para acceder a la base de datos.
48
Tabla N° 16: Sprint 4
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
DESARROLLO DE UN SISTEMA WEB,
COMO HERRAMIENTA DE APOYO EN
EL CONTROL INTERNO DE
EMPRESAS INDUSTRIALES, QUE
GENERE ALERTAS PARA UN
CORRECTO SEGUIMIENTO Y
TRAZABILIDAD, CON EL FIN DE
MINIMIZAR PERDIDAS DE ACTIVOS O
ELEMENTOS QUE SALEN DE LA
COMPAÑÍA.
Sprint 4
Versión 1.0
Fecha del 19 de Diciembre del 2017
al 30 de Diciembre del 2018
Tarea
Diseño de plantilla de opciones que contendrá el sistema de control interno.
Desarrollo Configuración de entorno de desarrollo, instalación de aplicativos
Creación de proyecto PHP en el software de desarrollo a utilizar.
Diseño de pantallas de menú de opciones
Creación de pantalla de ingresos de usuarios y validación de datos
49
Tabla N° 17: Sprint 5
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
DESARROLLO DE UN SISTEMA WEB,
COMO HERRAMIENTA DE APOYO EN
EL CONTROL INTERNO DE
EMPRESAS INDUSTRIALES, QUE
GENERE ALERTAS PARA UN
CORRECTO SEGUIMIENTO Y
TRAZABILIDAD, CON EL FIN DE
MINIMIZAR PERDIDAS DE ACTIVOS O
ELEMENTOS QUE SALEN DE LA
COMPAÑÍA.
Sprint 5
Versión 1.0
Fecha del 01 de Enero del 2018 al 15
de Febrero del 2018
Tarea Diseño de pantallas de alarmas, trazabilidad , ordenes de entrada y salida
Desarrollo
Creación de pantallas de los requerimientos que fueron planteados en los casos de usos: Aprobación de orden de salida Control de salida Consulta órdenes de salida Consulta de trazabilidad Mantenimiento de usuarios Mantenimientos de activos o elementos Eliminación de usuarios Envió de alarmas oportunas.
Revisión Una vez terminado el Sistema Web se realizan las pruebas de Software y se verifica su correcta ejecución previo visto bueno.
Entregable
Sistema Web para Control, Alertas y Trazabilidad “SISCAT” funcionando correctamente
de acuerdo a los objetivos y alcances del proyecto propuesto.
50
CRITERIOS DE VALIDACIÓN DE LA PROPUESTA
Para solucionar la problemática que se presenta en este proyecto de tesis,
se usaron todos los conocimientos adquiridos necesarios para el desarrollo e
implementación del sistema, el mismo que se validó para que cumpla con los
requerimientos planteados.
La validación tiene como objetivo identificar errores y corregirlos mediante
pruebas funcionales, se optimizará el tiempo de corrección al finalizar el proyecto.
INFORMES DE PRUEBAS
Pruebas de caja negra
Según la página web (Globe, 2012) indica que las pruebas de caja negra son,
ni más ni menos que, pruebas funcionales dedicadas a mirar en el exterior de lo que
se prueba. Estas pruebas se denominan de varias formas, pruebas de caja opaca,
pruebas de entrada/salida, pruebas inducidas por datos, etc., los sinónimos son
muchos y muy variados.
51
Tabla N° 18: Prueba de Caja Negra
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
DIAGRAMAS DE CASOS DE USO PARA EL SISTEMA
Por medio de la realización de los diagramas de casos de uso se puede
visualizar la funcionalidad del aplicativo web para el control interno de los activos o
elementos que salgan e ingresen a la empresa, mencionaremos los casos de usos
más importantes para el diseño del sistema.
Actores:
Administrador
Usuario
Personal Seguridad
Sistema
Listados de caso de uso:
Iniciar sesión
Generación de alertas oportunas.
Consulta de trazabilidad de la orden de salida y del bien.
ACTIVIDAD EVALUACIÓN DE PRUEBA
INICIO DE SESIÓN
SATISFACTORIA
ALARMA OPORTUNA
SATISFACTORIA
REPORTE DE TRAZABILIDAD
SATISFACTORIA
APROBACIÓN DE ORDENES DE SALIDA
SATISFACTORIA
CONSULTA DE ORDENES DE SALIDA APROBADAS
SATISFACTORIA
52
Aprobación de orden de salida (Gerente de área).
Verificación de orden de salida (Personal de Seguridad y Control)
Verificación de Ingreso del bien (Personal de Seguridad y Control)
Caso de uso Inicio de Sesión
El administrador o usuario podrá ingresar al sistema y consultar todos los
datos requeridos en ese momento, autenticando su usuario y contraseña.
Gráfico N° 15: Casos de uso Inicio Sesión
ADMINISTRADOR / USUARIO / PERSONAL SEGURIDAD
INGRESAR USUARIO Y
CONTRASEÑA
INGRESAR AL PORTAL DEL
SISTEMA PARA CONTROL
INTERNO
VALIDAR DATOS
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
53
Tabla N° 19: Descripción del Caso de uso Inicio de Sesión
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
Caso de uso: Generación de alertas
El Sistema enviara un mensaje al correo electrónico del usuario y administrador
indicando que el bien está por llegar, dicha alerta será de carácter recordatorio, si el
bien tiene retraso en la llegada según la fecha indicada enviara una alerta de retraso
indicando los días de tardanza.
Caso de Uso Inicio Sesión
N°:1
Actores Administrador / Usuarios
Propósito Ingresar nombre de usuario y contraseña para acceder al Sistema: SISCAT (Sistema de Control, Alerta y Trazabilidad)
Tipo Primera
Resumen Ingresar datos del Administrador y Usuario
Pre condiciones El Administrador o Usuario deberá ingresar para autentificarse.
Post condiciones Administrador y Usuario Registrado
Referencia Permitir ingresar los datos requeridos para el ingreso
Cuadro típico de evento
Acción de Actores Respuesta del Sistema
El administrador o usuario da click en el icono del Sistema Web o digita la URL en la barra de dirección del explorador Web.
El sistema presenta el portal para el ingreso del nombre de usuario y contraseña.
El administrador o usuario ingresa nombre (login) y contraseña.
El sistema realiza la validación del usuario y contraseña, si es correcto permite el acceso.
Cuadro alterno de Evento
Si el administrador o usuario ingresa un login o contraseña erróneos el sistema presentará un mensaje de error.
54
Gráfico N° 16: Casos de uso Alertas
SISTEMA
GENERACIÓN ALERTAINGRESO
AL SISTEMAPROCESOS
ENVIO DE CORRERO
INDICANDO LA ALERTA
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
Tabla N° 20: Descripción del Caso de uso Alertas
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
Caso de Uso Alertas N°:2
Actores Sistema
Propósito Enviar Alertas oportunas y de retraso al correo electrónico del administrador y del usuario encargado del bien.
Tipo Primera
Resumen Envió de alertas
Pre condiciones Orden de salida autorizada por el Administrador.
Post condiciones Orden de salida
Referencia Envía las alertas pertinentes sobre el bien que está por llegar o tiene retraso en su llegada.
Cuadro típico de evento
Acción de Actores Respuesta del Sistema
El administrador o usuario ingresa su nombre de usuario y contraseña.
Valida nombre de usuario y contraseña, permite el ingreso.
El usuario da click en procesos Se despliegan las opciones de esta pestaña, entre ellas la opción Generar correo por alarma.
El usuario da click en la opción “Generar correos por alarmas”, y luego en “Click para procesar alarmas”.
El sistema envía mensajes a los correos registrados de los usuarios que participaron en los procesos, indicando los activos pendientes por retornar y los días que llevan de atraso, de acuerdo a la fecha registrada para la recepción.
Cuadro alterno de Evento
Si el administrador o usuario ingresa un nombre de usuario o contraseña erróneos el sistema presentará un mensaje de error.
55
Caso de uso Reporte de Trazabilidad
En este caso de uso se contempla realizar consultas de trazabilidad del activo,
para conocer el detalle de eventos ocurridos durante todo el proceso, esto es
creación, aprobaciones, verificación, salida, recepción, estatus, así como el lugar,
fecha y hora.
Gráfico N° 17: Casos de uso Consulta de Trazabilidad
ADMINISTRADOR / USUARIO
TRAZABILIDAD
FECHA DE
CREACIÓN
TIPO DE SALIDA
ESTADO
BUSQUEDA REPORTE DE
TRAZABILIDAD
NÚMERO DE
ORDEN
# de Orden
FECHA DE
AUTORIZACIÓN
FECHA DE
SALIDA
FECHA
ENTRADA
USUARIO
SALIDA
USUARIO
CONFIRMACIÓN
USUARIO
ENTRADA
USUARIO
CREACIÓN
DETALLE
IMAGEN
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
56
Tabla N° 21: Descripción del Caso de uso Consulta de Trazabilidad
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
Caso de Uso Consulta de Trazabilidad N°:3
Actores Administrador / Usuario
Propósito Seguimiento de todos los lugares o agencias por donde paso el activo o elemento que salió de la empresa, para luego evitar pérdidas.
Tipo Primera
Resumen Seguimiento de activos o elementos
Pre condiciones El administrador o usuario debe ingresar para autentificar sus datos.
Post condiciones Registro de las agencias, creación de orden de salida, aprobaciones de orden de salida.
Referencia Permite realizar consultas de la trazabilidad del bien.
Cuadro típico de evento
Acción de Actores Respuesta del Sistema
El administrador o usuario ingresa su nombre de usuario y contraseña.
Valida nombre de usuario y contraseña, permite el ingreso.
El administrador o usuario ingresa a la pestaña Reportes / Trazabilidad
Presenta una ventana con algunos filtros solicitando periodo de búsqueda (desde/hasta), producto, tipo de orden de salida, autorizadas, vencidas, además del número de orden si se quiere realizar una búsqueda más específica, y un botón de buscar para generar la búsqueda.
El administrador o usuario ingresa el número de orden a consultar.
El sistema busca la orden y presenta en la ventana, todos los eventos relacionados al seguimiento de la orden.
El administrador o usuario si desea podrá visualizar el detalle de la orden de salida o la imagen del activo.
Presenta iconos para revisar el detalle de la orden y un icono para visualizar la imagen del activo.
El administrador o usuario podrá generar un pdf de la orden de salida, dando click en la opción “Generar”.
Presenta un la orden de salida en formato pdf para imprimirla.
Cuadro alterno de Evento
Si el administrador o usuario ingresa un nombre de usuario o contraseña erróneos el sistema presentará un mensaje de error. Si el administrador o usuario ingresa incorrectamente el numero de orden a consultar, el sistema enviara un mensaje de error “su búsqueda no encontró resultados”.
57
Caso de uso Aprobación de Orden de Salida
El administrador o gerente de área, podrán aprobar o no la orden de salida
del bien según su criterio.
Gráfico N° 18: Casos de uso Aprobación de Orden de Salida
ADMINISTRADOR
FECHA DE DOCUMENTO
APROBACIÓN ORDEN
SALIDA
TIPO DE SALIDA
IMAGEN DEL ACTIVO
O BIEN
DETALLE DE ORDEN
NUMERO DE ORDEN DE
SALIDA
SUCURSAL
DETALLE DE ORDENAS
PENDIENTES X APROBAR
AUTORIZAR
OK
CANCELAR
CONCEPTO
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
58
Tabla N° 22: Descripción del Caso de Uso Aprobación de Orden de Salida
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
Caso de Uso Aprobación de Orden de Salida N°:4
Actores Administrador / Gerente
Propósito Aprobación de las ordenes de salida de los bienes de la empresa
Tipo Primera
Resumen Aprobación de ordenes
Pre condiciones Existir orden de salida.
Post condiciones Consultar orden de salida pendientes.
Referencia Aprobar o dejar en espera las ordenes de salida del bien.
Cuadro típico de evento
Acción de Actores Respuesta del Sistema
El administrador / Gerente, ingresa su nombre de usuario y contraseña.
Valida nombre de usuario y contraseña, permite el ingreso.
El administrador / Gerente ingresa a la opción Procesos / Autorizar orden de salida.
Presenta una venta con todas las órdenes pendientes por aprobar.
El administrador / Gerente, podrá visualizar todas las órdenes de salidas pendientes por aprobar así como dos botones para verificar el detalle de las ordenes de salida o la imagen del activo.
Presenta detalle de la orden de salida o la imagen del activo.
El administrador / Gerente, selecciona con un “check” la orden de salida que desea aprobar.
El sistema presentará una ventana de verificación: “¿Está seguro que desea aprobar esta orden de salida?” Aceptar / Cancelar.
El administrador / Gerente, dará click en “Aceptar”.
“Orden de salida aprobada”.
Cuadro alterno de Evento
Si el administrador o usuario ingresan el nombre de usuario o contraseña erróneas el sistema enviará un mensaje de error.
Antes de aprobar la Orden de Salida el Sistema presentará una ventana de verificación: “¿Está seguro que desea aprobar esta orden de salida?” Aceptar / Cancelar.
59
Caso de uso Verificación de Orden de Salida
El usuario de Seguridad y Control, debe verificar el activo o bien que va a salir
de las instalaciones versus la información de la orden de salida que consta en el
sistema. Si la verificación es correcta permite la salida del activo.
Gráfico N° 19: Casos de uso Verificación de Orden de Salida
PERSONAL SEGURIDAD
SISTEMA
USUARIO CREACIÓN
FECHA
CONCEPTO
DESCRIPCIÓNPROCESOS
AUTORIZACIÓN GUARDARCONTROL SALIDA
DE ACTIVOS
REGISTRO AUTOMTICO
DE HORA DE SALIDA
BUSCAR X
# DE ORDEN
IMAGEN
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
60
Tabla N° 23: Descripción del Caso de uso Verificación de Orden de Salida
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
Caso de Uso Verificación de orden de salida N°:5
Actores Personal de Seguridad y Control
Propósito Control del activo o bien que va a salir de la empresa versus la orden de salida registrada y aprobada en el sistema.
Tipo Primera
Resumen Seguimiento de activos o elementos
Pre condiciones Autentificación de datos, ordenes de salida creada y aprobada, permisos de usuario.
Post condiciones Consulta de órdenes aprobadas, verificación de salida del bien.
Referencia Permite verificar las órdenes de los bienes, aprobadas para su salida de la empresa.
Cuadro típico de evento
Acción de Actores Respuesta del Sistema
El usuario de seguridad y control ingresa su nombre de usuario y contraseña.
Valida nombre de usuario y contraseña, permite el ingreso.
El usuario de seguridad y control ingresa a la pestaña Procesos / Control de activos.
Presentará una ventana donde se debe ingresar el número de orden de salida a verificar.
El usuario de Seguridad y Control ingresa el número de orden a salir y da click en buscar.
El sistema busca la orden, si existe y está aprobada previamente, la presenta.
El usuario de Seguridad y Control, verifica los datos presentados en el sistema vs el bien (físico), puede consultar la foto del bien si tiene alguna duda.
El sistema presentara la imagen del activo relacionada a la orden de salida. El sistema presentará un botón de autorizar
El Personal de seguridad da click en autorizar. “Registro procesado exitosamente”.
Cuadro alterno de Evento
Si el administrador o usuario ingresa incorrectamente el numero de orden a consultar, el sistema enviara un mensaje de error “No hay información de la consulta”.
Si el número orden no registra como autorizada, el sistema presenta un mensaje “orden no autorizada”
61
Caso de uso: Verificación de ingreso del bien
El Personal de Seguridad y Control, verifica en qué estado está llegando el
activo a la agencia y detallara cualquier observación en el caso de encontrar alguna
novedad durante la revisión.
Gráfico N° 20: Casos de uso: Verificación de ingreso del bien
PERSONAL SEGURIDAD
SISTEMA
USUARIO CREACIÓN
FECHA
CONCEPTO
DESCRIPCIÓNPROCESOS
AUTORIZACIÓN GUARDARCONFIRMACIÓN
ENTRADA
REGISTRO AUTOMTICO DEL
EVENTO Y ACTUALIZACIÓN DE
ESTADO
BUSCAR X
# DE ORDEN
IMAGEN
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
62
Tabla N° 24: Descripción del Caso de uso Verificación de Ingreso del Bien
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
Caso de Uso Verificación de Ingreso del Bien N°:6
Actores Personal de Seguridad y Control
Propósito Verificación del ingreso de activo o elemento que llega a la agencia sin ningún inconveniente.
Tipo Primera
Resumen Verificar el ingreso del Bien.
Pre condiciones Autentificación de datos, permisos de usuario. Orden de Salida en tránsito.
Post condiciones Detalle de orden de salida del bien que llega a la agencia.
Referencia Permite Verificar en qué estado llegan los activos o elementos que fueron asignados a esa agencia.
Cuadro típico de evento
Acción de Actores Respuesta del Sistema
El usuario de Seguridad y Control, ingresa al sistema con su nombre de usuario y contraseña.
Valida nombre de usuario y contraseña, permite acceso.
El usuario de Seguridad y Control, ingresa a la pestaña “Procesos” y escoge la opción “Control entrada de activos”.
Presentará una ventana con la opción para buscar el número de orden de salida a verificar.
El usuario de Seguridad y Control, ingresa el número de orden y da click en buscar.
El sistema realiza la búsqueda y presenta la descripción del activo o bien que va a ingresar, podrá visualizar la foto del bien para una mejor validación.
Si la verificación es correcta, el usuario de Seguridad y Control dará click en el botón “Autorizar” y permitirá el ingreso.
Mensaje: “Registro procesado exitosamente”. Actualización automática de estado.
Cuadro alterno de Evento
Si el administrador o usuario ingresan incorrectamente el numero de orden a consultar, el sistema enviara un mensaje de error “No hay información de la consulta”.
63
ENTREGABLES DEL PROYECTO
Mediante la metodología utilizada en el desarrollo del sistema de control interno se
presentara los siguientes entregables:
Código Fuente del Sistema “SISCAT” Sistema de Control, Alerta y
Trazabilidad de activos.
Instaladores del Sistema
Diseño de la base de datos
Manual de usuario
ENCUESTAS
Se realizaron encuestas a usuarios que laboran en diferentes empresas del
ámbito industrial, de seguridad y control, quienes por sus funciones tienen la
necesidad de controlar los activos de las empresas donde laboran; de esta
manera podemos validar la aceptación que tendría el tema propuesto, logrando
obtener información real.
POBLACIÓN Y MUESTRAS
Población
Para realizar el cálculo de la muestra se escogió como universo a tres empresas
industriales y una empresa de Seguridad con experiencia en brindar servicios
de Seguridad en empresas del sector industrial. Las personas encuestadas
pertenecen a los departamentos de Mantenimiento, Control Interno y
Seguridad. Es decir el total de la población será de 30 personas.
64
Tabla N° 25 : Población
POBLACIÓN NÚMERO DE POBLACIÓN
.
EMPRESA TIOSA S.A.
12
.
EMPRESA PUNCALSA S.A.
2
EMPRESA FARMAGRO S.A.
EMPRESA COMEXPORT S.A.
EMPRESA DE SEGURIDAD VIMASE
CIA. LTDA.
3
3
10
TOTAL 30
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
Muestra
Para el cálculo de la muestra de la población antes mencionada se aplicara
una formula definida a continuación.
N = El número total de personas que trabajan en las 3 empresas se lo
tomara como tamaño de la población.
Z = nivel de confianza, por lo general es el porcentaje en q se asume
el riesgo de equivocarnos.
P = probabilidad de éxito
65
E = error admisible
Remplazando valores nos
quedara:
66
Al ser mi población pequeña, mi muestra será igual a mi población como se
demuestra en la fórmula aplicada.
Tabla N° 26: Muestra
MUESTRA NÚMERO DE POBLACIÓN
Personal de Mantenimiento, Control interno y Seguridad.
30
TOTAL 30
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
TÉCNICAS DE RECOLECCIÓN DE DATOS
Para el desarrollo del sistema web de control interno enfocado a empresas
industriales para el control de trazabilidad de activos y generador de alertas
oportunas, se empleará la recolección de datos por medio de encuestas para
identificar los inconvenientes que sufren estas empresas por la falta de dicho
sistema.
67
ENCUESTAS
Pregunta # 1:
¿Ha usado alguna vez algún Sistema de Control?
Objetivo de la pregunta: Identificar que tanto conocen sobre algún tipo de
control.
Tabla N° 27: Pregunta #1
RESPUESTAS
CANT. PERSONAS
PORCENTAJE
SI
29 97%
NO
1
3%
TOTAL
30
100%
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
Gráfico N° 21: Pregunta # 1
Elaboración: Jimmy Vera Vera. Fuente: Primera pregunta de la encuesta a la muestra calculada Interna
¿Ha usado alguna vez algun Sistema de Control?
97%
3%
SI
NO
68
Análisis: El 97% de las personas encuestadas tomadas de la muestra calculada
indicaron que en algún momento han utilizado algún sistema de control durante su
etapa de vida profesional, mientras que el 1% de los encuestados supo indicar que
no han utilizado algún sistema de control.
Pregunta #2:
¿Cree usted que un Sistema Web que automatice la creación y búsqueda de órdenes
de salida, le ayudaría en la gestión de control interno de los activos que ingresen o
salgan de la empresa?
Objetivo de la pregunta: Conocer cómo reaccionará el personal que utilizara la
herramienta tecnológica que servirá de ayuda en la gestión de sus actividades
diarias.
Tabla N° 28: Pregunta # 2
RESPUESTAS CANT. PERSONAS PORCENTAJE
SI 30 100%
NO 0 0%
TOTAL
30 100%
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
69
Gráfico N° 22: Pregunta # 2
Elaboración: Jimmy Vera Vera.
Fuente: Segunda pregunta de la encuesta a la muestra calculada Interna
Análisis: El 100% de las personas encuestadas tomadas de la muestra calculada
comentaron que un Sistema de Control Interno ayudaría al personal encargado de
los activos o elementos a movilizar y beneficiaria a la empresa a minimizar perdidas
de dichos bienes.
Pregunta #3:
¿Cree usted que la empresa en donde labora ha tenido pérdidas financieras por no
contar con un sistema de control, que le permita conocer la trazabilidad de los activos
que han salido de la empresa?
Objetivo de la pregunta: Conocer si la empresa donde laboran las personas
encuestadas han pasado por alguna pérdida por falta de un control interno y
seguimiento de los bienes que salen.
¿Cree usted que un Sistema Web ayudara en el control interno de
los activos que ingresen o salgan de la empresa?
100%
0%
SI
NO
70
Tabla N° 29: Pregunta # 3
RESPUESTAS CANT. PERSONAS PORCENTAJE
SI 30 100%
NO 0 0%
TOTAL 30 100%
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
Gráfico N° 23: Pregunta # 3
Elaboración: Jimmy Vera Vera. Fuente: Tercera pregunta de la encuesta a la muestra calculada Interna
Análisis: El 100% de las personas encuestadas tomadas de la muestra calculada
ratificaron que las empresas donde laboran si ha llegado a sufrir pérdidas
financieras por los bienes que no retornan a la empresa.
Pregunta #4:
¿Le gustaría contar con sistema que tenga la opción de enviar alertas oportunas
o de vencimientos del bien que salió de la empresa y no ha llegado a su destino
o no ha retornado a tiempo?
71
Objetivo de la pregunta: Conocer si el usuario está interesado en el módulo de
alertas oportunas y de vencimientos de los bienes que salieron de la empresa.
Tabla N° 30: Pregunta # 4
RESPUESTAS CANT. PERSONAS PORCENTAJE
SI
23
77%
NO 7 23%
TOTAL 30 100%
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
Gráfico N° 24: Pregunta # 4
Elaboración: Jimmy Vera Vera. Fuente: Cuarta pregunta de la encuesta a la muestra calculada Interna
Análisis: El 77% de las personas encuestadas tomadas de la muestra calculada
indicaron en que si les gustaría contar con un sistema que le envié alertas
oportunas de los activos que están por regresar y de activos que se han
demorado en su retorno.
72
Pregunta #5:
¿Recomendaría usted el uso de un Sistema de Control Interno que emita un
reporte en línea de la trazabilidad del bien que salió de la empresa y que genere
alertas en caso de no llegar o retornar a tiempo?
Objetivo de la pregunta: Cerciorarse que el usuario después de saber el
funcionamiento del sistema se atreverá en recomendar este aplicativo a otras
empresas de la misma línea que sería la industrial
Tabla N° 31: Pregunta # 5 RESPUESTAS CANT. PERSONAS PORCENTAJE
SI 28 93%
NO 2 7%
TOTAL 30 100%
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
Gráfico N° 25: Pregunta # 5
Elaboración: Jimmy Vera Vera. Fuente: Quinta pregunta de la encuesta a la muestra calculada Interna
Análisis: El 93% de las personas encuestadas tomadas de la muestra calculada
con respecto a que si recomendarían el sistema de control interno a otras
empresas de tipo industriales que no hayan utilizado este sistema, el 7 % restante
indico que no recomendaría el sistema de control interno.
73
CAPITULO IV
CRITERIOS DE ACEPTACIÓN DEL PRODUCTO O SERVICIO
Mediante una validación de los requerimientos que fueron solicitados, se detallara
el cumplimiento del criterio de aceptación de la propuesta, según el alcance que se
definió en el capítulo 1 de este documento.
Tabla N° 32: Matriz de criterios de aceptación del producto
REQUERIMIENTO
SI CUMPLE
NO CUMPLE
Alertar a los usuarios oportunamente mediante el envío de correos electrónicos, indicando la fecha de vencimiento para el retorno del bien.
SI CUMPLE
Generar una consulta de trazabilidad de la orden de salida y del bien.
SI CUMPLE
Registrar nuevo responsable de activo.
SI CUMPLE
Registro de orden de salida por transferencias, mantenimientos, venta o bajas.
SI CUMPLE
Aprobación de orden de salida (Gerente área).
SI CUMPLE
Verificación de orden de salida (Personal de Seguridad)
SI CUMPLE
Verificación de Ingreso del bien (Personal de Seguridad)
SI CUMPLE
Confirmación de llegada de activo (Nuevo responsable)
SI CUMPLE
Mantenimiento de productos (código, descripción, clasificación).
SI CUMPLE
74
Elaboración: Jimmy Vera Vera Fuente: Jimmy Vera Vera
CONCLUSIONES
Mediante la investigación y recolección de datos realizados, se evidenció la
problemática y la necesidad de la solución planteada así como la factibilidad para el
desarrollo del presente proyecto.
Se consiguieron los objetivos planteados al inicio del proyecto, respetando los
alcances.
Podemos concluir entonces lo siguiente:
Que el sistema se desarrolló para un entorno Web, de tal manera que
facilitará el flujo de información en línea y que se utilizaron
herramientas de Software libre (PHP y MySql) conforme a lo propuesto.
Que el Sistema desarrollado permitirá mejorar el control de los activos
en las empresas industriales y que por su diseño sencillo y amigable
facilitará la interacción con los usuarios.
Mantenimiento de perfiles de usuarios.
SI CUMPLE
Mantenimiento de usuarios.
SI CUMPLE
Mantenimiento de Empresa y Agencias.
SI CUMPLE
Mantenimiento de Bodega
SI CUMPLE
75
Que el Sistema desarrollado permite realizar consultas de la
trazabilidad de las órdenes emitidas y por consiguiente de los bienes
que han salido de las empresas así como conocer el detalle de los
diferentes eventos que se originaron en el proceso de creación,
aprobación, salida y retorno de las órdenes.
Que el Sistema permite generar alertas oportunas o por vencimiento
enviando correos electrónicos a los responsables del proceso a fin de
que puedan tomar decisiones en tiempo y forma.
Podemos concluir finalmente que el presente Sistema para el Control,
Alerta y Trazabilidad, sin duda, aportará en solucionar los problemas
actuales de las empresas industriales, minimizando las pérdidas de sus
bienes y por ende las pérdidas financieras, ya que brinda herramientas
efectivas para una adecuada gestión en el control y seguimiento de
activos.
RECOMENDACIONES
Es importante que las empresas industriales del país fomenten la capacitación
de sus colaboradores en el uso de sistemas informáticos que contribuyan a la
gestión de control.
Por la gestión operativa que realizan los Vigilantes de Seguridad se recomienda
dotarles de tablets con conexión a internet, de tal manera que se les facilite
interactuar con el sistema al momento de la verificación para la salida o ingreso
del bien.
76
El presente Sistema es escalable, por lo cual permitirá integrar o agregar nuevos
módulos o funciones de acuerdo a las necesidades de control que tengan las
Empresas.
Este sistema fue enfocado a las empresas industriales que por su operación
requieren un mayor control de sus activos, sin embargo se puede acoplar a cualquier
empresa que requiera controlar de una mejor manera los bienes que salen de sus
instalaciones.
77
BIBLIOGRAFÍA
Netmarketing Web Internet Solutions. (2016). Desarrollo y programación PHP, aplicaciones
web en la nube en Guadalajara. Obtenido de
http://netmarketingweb.com/soluciones-web-modulos-en-php.php
@ALVY. (17 de MARZO de 2005). Microsiervos. Obtenido de
http://www.microsiervos.com/archivo/internet/que-es-internet.html
aleman, j. (13 de 03 de 217). Servidor Apache. Obtenido de Servidor Apache:
https://www.slideshare.net/juanitaaleman1/servidor-apache-73096537
Alvarez, M. A. (2012). Manual de CodeIgniter. Obtenido de
https://www.google.com.ec/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rj
a&uact=8&ved=0ahUKEwiLvoCEpLXXAhUF4WMKHfivDD4QFgglMAA&url=http%3A
%2F%2Fwww.izt.uam.mx%2Fspring%2Fwp-
content%2Fuploads%2F2012%2F07%2Fmanual-
codeigniter.pdf&usg=AOvVaw3CYh2zWdeK8nEP2-w
Beati, H. (2015). PHP - Creación de páginas Web dinámicas 2a edición. Buenos Aires:
Alfaomega.
Cobo, Á., Gómez, P., Pérez, D., & Rocha, R. (2005). PHP y MySQL Tecnología para el desarrollo
de aplicaciones web. España: Ediciones Díaz de Santos.
Correa, R. (10 de Abril de 2008). Decreto 1014.- Sobre el uso del Software Libre. Obtenido de
Decreto 1014.- Sobre el uso del Software Libre:
http://www.estebanmendieta.com/blog/software-libre-en-ecuador-decreto-1014
Cressey, D. R. (1973). Triangulo del Fraude. Obtenido de ACFE Asociación de Certificadores
de Fraude: https://acfe-spain.com/recursos-contra-fraude/que-es-el-
fraude/triangulo-del-fraude
Culturación. (s.f. de s.f. de s.f.). ¿Qué es Apache? - Culturación. Obtenido de
http://culturacion.com/que-es-apache/
78
Culturacion. (s.f de s.f de s.f.). Culturacion. Obtenido de ¿Qué es Apache?:
http://culturacion.com/que-es-apache/
Díez, J. A. (30 de 03 de 2013). La Auditoría Forense. Obtenido de auditool:
https://auditool.org/blog/fraude/1772-la-auditoria-forense
EDUCACONTA. (17 de 11 de 2012). CONTROL DE LOS ACTIVOS FIJOS. Obtenido de
http://www.educaconta.com/2012/11/control-de-los-activos-fijos.html
Fossati, M. (2014). Todo sobre MySQL.
Giovanny, G. (11 de mayo de 2001). Control interno en la organización empresarial. Obtenido
de https://www.gestiopolis.com/control-interno-organizacion-empresarial/
Globe. (27 de 08 de 2012). Pruebas de caja negra - Globe Testing. Obtenido de
https://www.globetesting.com/2012/08/pruebas-de-caja-negra/
Hungria, B. (2013). SlidePlayer. Obtenido de SlidePlayer:
http://slideplayer.es/slide/5482609/
ibrugor. (11 de junio de 2014). ibrugor. Obtenido de Apache HTTP Server: ¿Qué es, cómo
funciona y para qué sirve?: http://www.ibrugor.com/blog/apache-http-server-que-
es-como-funciona-y-para-que-sirve/
Initiative, O. S. (18 de 6 de 2012). Open Source Initiative. Obtenido de
https://opensource.org/node/626
Lerma Blasco, R., Murcia Andrés, J. A., & Mifsud Talón, E. (2013). Aplicaciones web. España:
McGraw-Hill/Interamericana de España, S.L.
Michael Pham. (2015). MPSOFTWARE. Obtenido de MPSOFTWARE:
http://www.mpsoftware.dk/phpdesigner.php
Nazer, J., & Ramirez, R. (2002). Neonatología. Santiago de Chile: Universitaria S.A.
Norma Internacional de Auditoría 6. (s.f.). sec400evaluacionderiesgosycontrolinterno.
Evaluación de Riesgo y Control Interno. Obtenido de
https://www.google.com.ec/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rj
79
a&uact=8&ved=0ahUKEwiL34TB7rLXAhXMRCYKHZY6C00QFgglMAA&url=http%3A%
2F%2Fwww.intelecto.com.ec%2Fwp-
content%2Fthemes%2Fintelecto%2FNiia%2Fsec400evaluacionderiesgosycontrolint
erno.doc&us
Pintado, A. (118 de 2012). Esquema de funcionamiento de un servidor web. Obtenido de
Esquema de funcionamiento de un servidor web:
https://alpinbar.wordpress.com/2012/11/08/esquema-de-funcionamiento-de-un-
servidor-web/
Presidencia de la República. (2010). LEY ORGANICA DE EDUCACION SUPERIOR, LOES. Quito.
Proyectosagiles.org. (2017). Qué es SCRUM. Recuperado el 10 de Febrero de 2017, de El
Proceso: https://proyectosagiles.org/que-es-scrum/
RAFAEL CORREA DELGADO. (10 de 4 de 2008). Esteban Mendieta. Obtenido de Esteban
Mendieta: http://www.estebanmendieta.com/blog/wp-
content/uploads/Decreto_1014_software_libre_Ecuador.pdf
Ramos Martín, A., & Ramos Martín, M. J. (2014). Aplicaciones Web. Madrid: Paraninfo ciclos
formativos.
Registro Oficial del Organo de Gobierno del Ecuador. (28 de 12 de 2006). Obtenido de
http://www.wipo.int/edocs/lexdocs/laws/es/ec/ec031es.pdf
Reina, V. (2012). Examén Clínico al Recién Nacido. Obtenido de Examén Clínico al Recién
Nacido: http://gsdl.bvs.sld.cu/cgi-bin/library?e=d-00000-00---off-0pediatra--00-0----
0-10-0---0---0direct-10---4-------0-1l--11-es-50---20-about---00-0-1-00-0-0-11-1-
0utfZz-8-00&cl=CL3.1&d=HASHca742e753edabdd5688982.7.3.4&hl=0&gc=0>=0
Sanchez, M. (2012). Manual de Desarrollo web, basado en ejercicios y supuestos prácticos.
España: Cretae Space Legal Departament.
Serrano, D. M. (18 de 11 de 2013). Curso COSO 2013 Marco Integrado de Control Interno
actualizado.
80
Serrano, M. A. (2013). Nuevo marco de control interno integrado - COSO 2013. Obtenido de
http://www.monografias.com/trabajos96/nuevo-marco-control-interno-integrado-
coso-2013/nuevo-marco-control-interno-integrado-coso-2013.shtml
SGSI, S. d. (s.f.). Sistema de Gestión de la Seguridad de la Información (SGSI). Obtenido de
http://www.iso27000.es/download/doc_sgsi_all.pdf
Sznajdleder, P. A. (2013). Java a fondo: - estudio del lenguaje y desarrollo de aplicaciones - 2a
ed. Buenos Aires: Alfaomega Grupo Editor Argentino S.A.
Turmero, P. (s.f.). Desarrollo de sitios web . Obtenido de
http://www.monografias.com/trabajos106/desarrollo-sitios-web-con-php-y-
mysql/desarrollo-sitios-web-con-php-y-mysql.shtml
Valderrama, J. (1999). Información Tecnologica. Chile: Centro de Información Tecnologica.
Valle, A., et, & al. (2016). Curso de Consultoría TIC. IT Campus Academy.
Vicerrectorado Académico. (2012). Objetivos de la investigacion. En V. Académico, Plan
estratégico de investigación, desarrollo tecnológico e innovación de la Universidad de
Guayaquil (pág. 14). Guayaquil: DIPA.
81
A
N
E
X
O
S
82
ANEXO I
ENCUESTA A USUARIOS
Objetivo:
Determinar la necesidad y factibilidad para el desarrollo del Proyecto de Tesis:
“Elaboración de un sistema Web como herramienta de apoyo en el control interno de
empresas industriales, que genere alertas para un correcto seguimiento y
trazabilidad, con el fin de minimizar pérdidas de activos o elementos que salen de las
compañías”.
Nombres y apellidos: ____________________________
Empresa donde labora: _____________________________
Pregunta # 1: ¿Ha usado alguna vez algún Sistema de Control?
Sí No
Pregunta #2: ¿Cree usted que un Sistema Web que automatice la creación y
búsqueda de órdenes de salida, le ayudaría en la gestión de control interno de los
activos que ingresen o salgan de la empresa?
Sí No
Pregunta #3: ¿Cree usted que la empresa en donde labora ha tenido pérdidas
83
financieras por no contar con un sistema de control, que le permita conocer la
trazabilidad de los activos que han salido de la empresa?
Sí No
Pregunta #4: ¿Le gustaría contar con sistema que tenga la opción de enviar
alertas oportunas o de vencimientos del bien que salió de la empresa y no ha
llegado a su destino o no ha retornado a tiempo?
Sí No
Pregunta #5: ¿Recomendaría usted el uso de un Sistema de Control Interno que
emita un reporte en línea de la trazabilidad del bien que salió de la empresa y
que genere alertas en caso de no llegar o retornar a tiempo?
Sí No
Firma: _____________________________
Cedula de identidad: _____________________________
84
ANEXO II
CÓDIGO FUENTE DE LA APLICACIÓN
CONTROLADORES
Login.php
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Login extends CI_Controller {
var $home="reportesMain/reporteTrazabilidad";
function __construct(){
parent::__construct();
$this->load->library('session');
$this->load->model('Usuario','usuarioClass');
$this->load->model('Fecha','fechaClass');
$this->load->model('Config_seguridad','configSeguridadClass');
$this->load->library('form_validation');
$this->load->helper(array('form', 'url'));
$this->template='/template/index';
$this->session->set_userdata(md5(base_url().'login_in'),false);
$this->url_accion=base_url().SELF.'/login'; //se refiere a la url
del propio controlador
$this->config->load('myconfig');
date_default_timezone_set('America/Guayaquil');
}
//---------------
function index($msj=''){
$this->form_validation->set_rules('txtusuario', 'Username',
'required');
$this->form_validation->set_rules('txtclave', 'Password',
'required');
$msj=str_replace("_"," ",$msj);
$data['msj_login']=$msj;
if ($this->form_validation->run() == FALSE){
$this->load->view('login/login_form',$data);
}else{//formulario enviado
$this->_sendLogin();
}
}
//--------------------
function _sendLogin(){
$this->configSeguridadClass->selectConfigSeguridad();
//incremento de numero de intento
85
$this->session->set_userdata('total_intentos',$this->session-
>userdata('total_intentos')+1);
//Chequeo de numero de intetos permitidos
if($this->session->userdata('total_intentos')> $this-
>configSeguridadClass->max_intento_login){
//numero de intentos excedido
$this->usuarioClass->bloquearCuenta($this->input-
>post('txtusuario'));
$this->session->set_userdata('usuario_bloqueado',true);
$this->session->set_userdata('total_intentos',0 );
$data['msj_login']='Numero de intentos de Login excedido. Su cuenta
estara bloqueada por algunos minutos';
$this->load->view('login/login_form',$data);
return;
}else{//Numero de intentos permitido
//Validacion de Autentificacion
if($this->usuarioClass->autentificarUsuario($this->input-
>post('txtusuario'),$this->input->post('txtclave'))){
$this->_validarBloqueoUsuario();
return;
}else{
//en caso que falta la autentificacion
$data['msj_login']='Usuario o clave no valida';
$this->load->view('login/login_form',$data);
return;
}//fin del if autentificacion
}//fin del if num_intentos
}
//-----------------------
function _permitirAcceso(){
$this->session->set_userdata(md5(base_url().'login_in'),true);
$this->session->set_userdata('template_index','/template/index');
$this->session->set_userdata('id_usuario',$this->usuarioClass-
>id_usuario);
$this->session->set_userdata('cod_usuario',$this->usuarioClass-
>cod_usuario);
$this->session->set_userdata('cod_perfil',$this->usuarioClass-
>cod_perfil);
$this->session->set_userdata('cod_tipo_user',$this->usuarioClass-
>cod_tipo);
$this->session->set_userdata('cod_admin_user',2);
$this->session->set_userdata('user_correo',$this->usuarioClass-
>email);
$this->session->set_userdata('cod_grupo',$this->usuarioClass-
>cod_grupo);
$this->session->set_userdata('cod_seg_img_user',$this->usuarioClass-
>cod_seg_img);
$this->session->set_userdata('nombres_usuario',$this->usuarioClass-
>nombres.' '.$this->usuarioClass->apellidos);
$this->load->helper('url');
$this->session->set_userdata('ultimo_acceso', date("Y-n-j H:i:s"));
86
$this->session->set_userdata('max_tiempo_inactividad',$this-
>configSeguridadClass->max_tiempo_inactividad);
$this->session->set_userdata('total_intentos',0 );
$this->usuarioClass->updateIdUltimaSesion($this->session-
>userdata('id_usuario'),$this->session->userdata('session_id'));
redirect($this->home, 'refresh');
}
//-----------------------
function _validarBloqueoUsuario(){
//Si no esta bloqueado, permitidos el acceso al sistema
if($this->usuarioClass->flg_bloqueado==0){
$this->_permitirAcceso();
}else{//Si el usuario esta bloqueado.entonces chequeamos si el
tiempo de bloqueo expiro
date_default_timezone_set('America/Guayaquil');
$hoy=date("Y-m-d H:i:s ",time());
$min_transcurridos=$this->fechaClass-
>getDiferenciaFechaCompleta($hoy,$this->usuarioClass-
>fecha_bloqueado,'min');
//echo $min_transcurridos;
if($min_transcurridos>($this->configSeguridadClass-
>tiempo_bloqueo_cuenta)){
//Desbloquearquamos la cuenta
$this->usuarioClass->bloquearCuenta($this->usuarioClass-
>id_usuario,false);
$this->_permitirAcceso();
}else{
//---------------
$data['msj_login']='Cuenta de Usuario bloqueada';
$this->load->view('login_form',$data);
}
}
}
//-----------------------
function salir(){
//---------------
$this->session->unset_userdata();
$this->session->sess_destroy();
redirect('login/', 'refresh');
}
//---------------------------
}
/* End of file login.php */
controlAcecso.php
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
87
date_default_timezone_set('America/Guayaquil');
header ('Content-type: text/html; charset=utf-8');
$this->load->library('session');
$this->load->helper('url');
$this->load->model('Usuario','usuarioClass');
DEFINE ('IS_LOGIN',$this->session-
>userdata(md5(base_url().'login_in')));
if($this->session->userdata(md5(base_url().'login_in'))!=true ){
if(!$this->input->is_ajax_request()){
redirect('login/', 'refresh');
exit();
}
}else{
$ahora = date("Y-n-j H:i:s");
$this->session->set_userdata('ultimo_acceso',$ahora);
if($this->usuarioClass->selectIdUltimaSesion($this->session-
>userdata('id_usuario'))){
if($this->usuarioClass->id_ultima_sesion!=$this->session-
>userdata('session_id')){
$this->session->set_userdata(md5(base_url().'login_in'),false);
$this->session->unset_userdata();
$this->session->sess_destroy();
$msj='Usuario desconectado. Ha iniciado sesión en otro equipo.';
$msj=str_replace(" ","_",$msj);
if(!$this->input->is_ajax_request()){
redirect('login/index/'.$msj, 'refresh');
}else{//Es ajax
$msj=str_replace(" ","_",$msj);
$data['msj']=$msj;
$this->load->view('login/login_redirect',$data);
return;
}
}
}
}
?>
mantenimientoMain.php
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MantenimientoMain extends CI_Controller {
function __construct(){
parent::__construct();
require_once('controlAcceso.php');
$this->load->model('Menu','menuClass');
$this->load->model('Perfil_permiso','perfilPermisoClass');
88
$this->load->model('Usuario','usuarioClass');
$this->load->model('Usuario','depClass');
$this->load->model('Usuario','perfilesClass');
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->load->library('pagination');
$this->load->library('email');
$this->load->library('table');
$this->config->load('myconfig');
$this->template_view='/template_registro/index';
$this->dir_app=base_url().'application';
$this->url_index=base_url().SELF;
$this->url=base_url().SELF.'/mantenimientoMain'; //se refiere a la
url del propio controlador
$this->cod_menu_mant_usuario=3; //Este es el cod_menu
correspondiente a mantenimiento de usuario
$this->cod_menu_mant_perfiles=4; //Este es el cod_menu
correspondiente a mantenimiento de perfiles
$this->cod_menu_mant_empresa=5; //Este es el cod_menu
correspondiente a mantenimiento de empresas
$this->cod_menu_mant_bodega=6; //Este es el cod_menu correspondiente
a mantenimiento de bodega
$this->cod_menu_mant_clasificacion=7; //Este es el cod_menu
correspondiente a mantenimiento de clasificacion
$this->cod_menu_mant_subclasificacion=8; //Este es el cod_menu
correspondiente a mantenimiento de subclasificacion
$this->cod_menu_mant_suscursales=9; //Este es el cod_menu
correspondiente a mantenimiento de sucursales
$this->cod_menu_mant_departamento=14; //Este es el cod_menu
correspondiente a mantenimiento de sucursales
$this->load->library('Grocery_crud');
}
//----------------
function mantenimientoUsuario(){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_mant_usuario,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
//---------------------
$this->usuarioClass->selectAllUsuarios();
$this->depClass->selectAllDepartamentos();
$this->perfilesClass->selectAllPerfiles();
$this->template->load($this-
>template_view,'mantenimientos/mantenimiento_usuario');
}
//--------------------
function getDatosUsuario($cod_usuario){
$this->usuarioClass-
>selectTraerDatosUsuario($cod_usuario);
header("Content-Type: application/json");
89
$i=0;
$data=array();
if ($this->usuarioClass->exist){
foreach ($this->usuarioClass->mirecordset as $obj){
$data[$i]['codigo']= $obj->COD_USUARIO;
$data[$i]['id']= $obj->ID_USUARIO;
$data[$i]['nombres']= $obj->NOMBRES;
$data[$i]['apellidos']= $obj->APELLIDOS;
$data[$i]['perfil']= $obj->COD_PERFIL;
$data[$i]['estado']= $obj->COD_ESTADO;
$data[$i]['departamento']= $obj->cod_departamento;
$data[$i]['correo']= $obj->EMAIL;
$i++;
}
echo json_encode($data);
}else{
echo json_encode($data);
}
}
//--------------------
function
actualizarUsuario($codigo,$id,$nombres,$apellidos,$tipo,$estado,$dep
artamento,$correo){
if($this->usuarioClass-
>actualizarUsuario($codigo,$id,$nombres,$apellidos,$tipo,$estado,$de
partamento,$correo)){
echo '<div class="alert alert-success">Usuario actualizado
exitosamente</div>';
}else{
echo '<div class="alert alert-warning">Incovenientes al actualizar
el usuario</div>';
}
}
//--------------------
function
grabarUsuario($id,$nombres,$apellidos,$tipo,$pass,$estado,$departame
nto,$correo){
if($this->usuarioClass-
>grabarUsuario($id,$nombres,$apellidos,$tipo,$pass,$estado,$departam
ento,$correo)){
echo '<div class="alert alert-success">Usuario creado
exitosamente</div>';
}else{
echo '<div class="alert alert-warning">Incovenientes al crear el
usuario</div>';
}
}
//----------------
function mantenimientoPerfiles(){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_mant_perfiles,'ing')){
90
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
$this->usuarioClass->selectAllPerfiles();
$this->menuClass->selectAllMenu();
$this->template->load($this-
>template_view,'mantenimientos/mantenimiento_perfiles');
}
//--------------------
function getDatosPerfiles($codigo){
$this->usuarioClass-
>selectTraerDatosPerfiles($codigo);
header("Content-Type: application/json");
$i=0;
$z=1;
$data=array();
if ($this->usuarioClass->exist){
foreach ($this->usuarioClass->mirecordset as $obj){
$data[$i]['perfil']= $obj->cod_perfil;
$data[$i]['menu']= $obj->cod_menu;
$data[$i]['permiso']= $obj->flg_ing;
$i++;
}
echo json_encode($data);
}else{
echo json_encode($data);
}
}
//--------------------
function getDatosMenu(){
$this->menuClass->selectAllMenu();
header("Content-Type: application/json");
$i=0;
$z=1;
$data=array();
if ($this->menuClass->exist_menu){
foreach ($this->menuClass->mirecordset_menu as $obj){
$data[$i]['menu']= $obj->COD_MENU;
$i++;
}
echo json_encode($data);
}else{
echo json_encode($data);
}
}
//--------------------
function grabarPerfiles($perfil,$menu,$permiso){
if($this->usuarioClass->grabarPerfiles($perfil,$menu,$permiso)){
echo '<div class="alert alert-success">Perfiles actualizados
exitosamente</div>';
}else{
91
echo '<div class="alert alert-warning">Incovenientes al actualizar
los perfiles</div>';
}
}
//----------------
function mantenimientoEmpresa(){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_mant_empresa,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
try{
$crud = new grocery_CRUD();
$crud->set_theme('bootstrap-v4');
$crud->set_table('tb_sg_empresa');
$crud->set_subject('Empresa');
$crud-
>columns('nom_empresa','identificacion','tipo_identificacion','cod_e
stado');
$crud-
>fields('nom_empresa','identificacion','tipo_identificacion','cod_es
tado');
$crud-
>required_fields('nom_empresa','identificacion','tipo_identificacion
','cod_estado');
$crud->set_relation('cod_estado','tb_estado','descripcion');
$crud-
>set_relation('tipo_identificacion','tb_gen_tipo_identificacion','de
scripcion');
$crud->unset_delete();
$crud->unset_read();
$crud->unset_export();
$crud->unset_print();
$output = $crud->render();
$this->template->load($this-
>template_view,'mantenimientos/mantenimiento_empresa',(array)$output
);
}catch(Exception $e){
show_error($e->getMessage().' --- '.$e->getTraceAsString());
}
}
//----------------
function mantenimientoBodega(){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_mant_bodega,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
try{
$crud = new grocery_CRUD();
92
$crud->set_theme('bootstrap-v4');
$crud->set_table('tb_af_bodega');
$crud->set_subject('Bodega');
$crud-
>columns('cod_empresa','responsable','direccion','cod_estado');
$crud->fields('cod_empresa','responsable','direccion','cod_estado');
$crud-
>required_fields('cod_empresa','responsable','direccion','cod_estado
');
$crud->set_relation('cod_empresa','tb_sg_empresa','nom_empresa');
$crud-
>set_relation('responsable','vw_usuarios_acitvos','nom_usuario');
$crud->set_relation('cod_estado','tb_estado','descripcion');
$crud->unset_delete();
$crud->unset_read();
$crud->unset_export();
$crud->unset_print();
$output = $crud->render();
$this->template->load($this-
>template_view,'mantenimientos/mantenimiento_empresa',(array)$output
);
}catch(Exception $e){
show_error($e->getMessage().' --- '.$e->getTraceAsString());
}
}
//----------------
function mantenimientoClasificacion(){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_mant_clasificacion,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
try{
$crud = new grocery_CRUD();
$crud->set_theme('bootstrap-v4');
$crud->set_table('tb_af_clasificacion');
$crud->set_subject('Clasificacion');
$crud->columns('cod_clasificacion','descripcion','cod_estado');
$crud->fields('descripcion','cod_estado');
$crud->required_fields('descripcion','cod_estado');
$crud->set_relation('cod_estado','tb_estado','descripcion');
$crud->unset_delete();
$crud->unset_read();
$crud->unset_export();
$crud->unset_print();
$output = $crud->render();
$this->template->load($this-
>template_view,'mantenimientos/mantenimiento_empresa',(array)$output
);
}catch(Exception $e){
show_error($e->getMessage().' --- '.$e->getTraceAsString());
93
}
}
//----------------
function mantenimientoSubclasificacion(){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this-
>cod_menu_mant_subclasificacion,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
try{
$crud = new grocery_CRUD();
$crud->set_theme('bootstrap-v4');
$crud->set_table('tb_af_subclasificacion');
$crud->set_subject('Subclasificacion');
$crud-
>columns('cod_subclasificacion','descripcion','cod_clasificacion','c
od_estado');
$crud->fields('descripcion','cod_clasificacion','cod_estado');
$crud-
>required_fields('descripcion','cod_clasificacion','cod_estado');
$crud-
>set_relation('cod_clasificacion','tb_af_clasificacion','descripcion
');
$crud->set_relation('cod_estado','tb_estado','descripcion');
$crud->unset_delete();
$crud->unset_read();
$crud->unset_export();
$crud->unset_print();
$output = $crud->render();
$this->template->load($this-
>template_view,'mantenimientos/mantenimiento_empresa',(array)$output
);
}catch(Exception $e){
show_error($e->getMessage().' --- '.$e->getTraceAsString());
}
}
//----------------
function mantenimientoSucursal(){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this-
>cod_menu_mant_subclasificacion,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
try{
$crud = new grocery_CRUD();
$crud->set_theme('bootstrap-v4');
$crud->set_table('tb_sg_sucursal');
94
//$crud->where('tb_af_niveles.cod_tipo', '0');
$crud->set_subject('Sucursales');
$crud-
>columns('cod_empresa','nom_sucursal','cod_sri','direccion','telefon
os','cod_estado');
$crud-
>fields('cod_empresa','nom_sucursal','cod_sri','direccion','telefono
s','cod_estado');
$crud-
>required_fields('cod_empresa','nom_sucursal','cod_sri','direccion',
'telefonos','cod_estado');
$crud-
>set_relation('cod_empresa','tb_sg_empresa','nom_empresa',array('cod
_estado' => '1'));
$crud->set_relation('cod_estado','tb_estado','descripcion');
$crud->unset_delete();
$crud->unset_read();
$crud->unset_export();
$crud->unset_print();
$output = $crud->render();
$this->template->load($this-
>template_view,'mantenimientos/mantenimiento_empresa',(array)$output
);
}catch(Exception $e){
show_error($e->getMessage().' --- '.$e->getTraceAsString());
}
}
//----------------
function mantenimientoProductos(){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this-
>cod_menu_mant_subclasificacion,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
try{
$crud = new grocery_CRUD();
$crud->set_theme('bootstrap-v4');
$crud->set_table('tb_af_productos');
$crud->set_subject('Productos');
$crud-
>columns('cod_empresa','descripcion','cod_clasificacion','cod_subcla
sificacion','modelo','cod_marca','cod_unidad','cod_barra','cod_estad
o');
$crud-
>fields('cod_empresa','descripcion','cod_clasificacion','cod_subclas
ificacion','modelo','cod_marca','cod_unidad','cod_barra','cod_estado
');
$crud-
>required_fields('cod_empresa','descripcion','cod_clasificacion','co
95
d_subclasificacion','modelo','cod_marca','cod_unidad','cod_barra','c
od_estado');
$crud-
>set_relation('cod_empresa','tb_sg_empresa','nom_empresa',array('cod
_estado' => '1'));
$crud->set_relation('cod_estado','tb_estado','descripcion');
$crud-
>set_relation('cod_clasificacion','tb_af_clasificacion','descripcion
',array('cod_estado' => '1'));
$crud->unset_delete();
$crud->unset_read();
$crud->unset_export();
$crud->unset_print();
$output = $crud->render();
$this->template->load($this-
>template_view,'mantenimientos/mantenimiento_empresa',(array)$output
);
}catch(Exception $e){
show_error($e->getMessage().' --- '.$e->getTraceAsString());
}
}
//----------------
function mantenimientoDepartamento(){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this-
>cod_menu_mant_subclasificacion,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
try{
$crud = new grocery_CRUD();
$crud->set_theme('bootstrap-v4');
$crud->set_table('tb_af_departamentos');
$crud->set_subject('Departamentos');
$crud->columns('descripcion','id_usuario','cod_estado');
$crud->fields('descripcion','id_usuario','cod_estado');
$crud->required_fields('descripcion','id_usuario','cod_estado');
$crud-
>set_relation('id_usuario','vw_usuarios_acitvos','nom_usuario');
$crud->set_relation('cod_estado','tb_estado','descripcion');
$crud->unset_delete();
$crud->unset_read();
$crud->unset_export();
$crud->unset_print();
$output = $crud->render();
$this->template->load($this-
>template_view,'mantenimientos/mantenimiento_empresa',(array)$output
);
}catch(Exception $e){
show_error($e->getMessage().' --- '.$e->getTraceAsString());
96
}
}
//----------------
function mantenimientoProveedores(){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this-
>cod_menu_mant_subclasificacion,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
try{
$crud = new grocery_CRUD();
$crud->set_theme('bootstrap-v4');
$crud->set_table('tb_af_proveedores');
$crud->set_subject('Proveedores');
$crud-
>columns('cod_prv','tipo_prv','nom_proveedor','direccion','cod_estad
o');
$crud-
>fields('cod_prv','tipo_prv','nom_proveedor','direccion','cod_estado
');
$crud-
>required_fields('cod_prv','tipo_prv','nom_proveedor','direccion','c
od_estado');
$crud-
>set_relation('tipo_prv','tb_gen_proveedore_tipo','descripcion');
$crud->set_relation('cod_estado','tb_estado','descripcion');
$crud->unset_delete();
$crud->unset_read();
$crud->unset_export();
$crud->unset_print();
$output = $crud->render();
$this->template->load($this-
>template_view,'mantenimientos/mantenimiento_empresa',(array)$output
);
}catch(Exception $e){
show_error($e->getMessage().' --- '.$e->getTraceAsString());
}
}
//------------------
}// End
?>
97
procesoMain.php
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class ProcesosMain extends CI_Controller {
function __construct(){
parent::__construct();
require_once('controlAcceso.php');
$this->load->model('Menu','menuClass');
$this->load->model('Perfil_permiso','perfilPermisoClass');
$this->load->model('Reporte','cbxsalidaClass');
$this->load->model('Usuario','usuarioClass');
$this->load->model('Salida','salidaClass');
$this->load->model('Salida','salidaSucClass');
$this->load->model('Salida','salidaProClass');
$this->load->model('Salida','salidaMailClass');
$this->load->model('Salida','salidaDetClass');
$this->load->model('Salida','salidaMailAutoriza');
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->load->library('pagination');
$this->load->library('email');
$this->load->library('table');
$this->config->load('myconfig');
$this->template_view='/template_registro/index';
$this->dir_app=base_url().'application';
$this->url_index=base_url().SELF;
$this->url=base_url().SELF.'/procesosMain'; //se refiere a la url
del propio controlador
$this->cod_menu_salida=12; //Este es el cod_menu correspondiente a
orden de salida
$this->cod_menu_autorizar=13; //Este es el cod_menu correspondiente
a autorizar salida
$this->cod_menu_autorizar_g=17; //Este es el cod_menu
correspondiente a autorizar salida guardia
$this->cod_menu_alarma=22; //Este es el cod_menu correspondiente a
alarma correo
$this->load->library('Grocery_crud');
}
//----------------
function ordenSalida(){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_salida,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
98
//---------------------
$this->cbxsalidaClass->selectTipoSalida();
$this->usuarioClass->selectAllUsuarios();
$this->salidaClass->getProductos();
$this->salidaSucClass->selectAllSucursales();
$this->salidaProClass->selectAllProveedores();
$this->template->load($this-
>template_view,'procesos/vista_orden_salida');
}
//----------------
function autorizarSalida(){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_autorizar,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
//---------------------
$this->salidaClass->selectGetSalidas();
$this->template->load($this-
>template_view,'procesos/vista_autorizar');
}
//----------------
function getProductos(){
$this->salidaClass->getProductos();
header("Content-Type: application/json");
$i=0;
$data=array();
if ($this->salidaClass->exist){
foreach ($this->salidaClass->mirecordset as $obj){
$data[$i]['cod_producto']= $obj->cod_producto;
$data[$i]['descripcion']= $obj->descripcion;
$i++;
}
echo json_encode($data);
}else{
echo json_encode($data);
}
}
//----------------
function guardarOrdenSalida($count_indice){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_autorizar,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
$data = $this->input->post();
$usuario = $this->input->post('txt_usuario');
$fecha = $this->input->post('txt_fecha');
$tipo_salida = $this->input->post('cbx_salida');
$tiempo = $this->input->post('txt_tiempo');
99
$direccion = $this->input->post('txt_direccion');
$responsable = $this->input->post('cbx_usuarios');
$sucursal = $this->input->post('cbx_sucursal');
$proveedor = $this->input->post('cbx_proveedor');
$recibe = $this->input->post('cbx_usuarios');
$concepto = $this->input-
>post('txt_concepto');
$this->salidaClass-
>obtenerNumDoc();
$dir_uploads=getcwd()."/img/";
$nombre_origen=$this->session-
>userdata('nombre_origen');
$nombre_imagen=date('Ymd').'/num_doc-'.$this->salidaClass-
>num_doc.'.'.$this->_getExtension($nombre_origen);
if($this->salidaClass->guardarOrdenSalidaCab($data,$this-
>salidaClass-
>num_doc,$usuario,$fecha,$tipo_salida,$tiempo,$direccion,$responsabl
e,$recibe,$concepto,$sucursal,$proveedor,$count_indice,$nombre_image
n)){
$nom_archivo_destino='num_doc-'.$this->salidaClass-
>num_doc.'.'.$this->_getExtension($nombre_origen);
$path_file_origen=rtrim($this->config-
>item('dir_tmp'),'/').'/'.$nombre_origen;
$path_destino=rtrim($dir_uploads,'/').'/'.date('Ymd');
log_message('error',$path_file_origen);
$this->salidaClass->moverImagen($path_file_origen,$path_destino,
$nom_archivo_destino);
$this->salidaMailClass->obtenerCorreo($this->salidaClass->num_doc);
foreach ($this->salidaMailClass->mirecordset as $obj){
$correo = $obj-
>correo;
}
$this->_enviarEmail($correo);
echo '<br><br><div class="alert alert alert-success" role="success"
align="center">No de orden '.$this->salidaClass->num_doc.' procesado
exitosamente.
</div>';
}
}
//--------------------
public function do_upload($tipo=1, $fcname='foto') {
error_reporting(0);
$config['allowed_types'] = 'gif|jpg|png|doc|docx|pdf|txt';
$config['max_size'] = '5000';
$upload_path_url = $this->config->item('www_tmp');
$config['upload_path'] = $this->config->item('dir_tmp');
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload('foto')){
$error = array('error' => $this->upload->display_errors());
print_r( $error);
}else{
$data = $this->upload->data();
100
$info->name = $data['file_name'];
$info->size = $data['file_size'];
$info->type = $data['file_type'];
$info->url = $upload_path_url .$data['file_name'];
$this->session->set_userdata('nombre_origen',$info->name);
if (IS_AJAX) {
echo json_encode(array($info));
} else {
$file_data['upload_data'] = $this->upload->data();
$this->load->view('admin/upload_success', $file_data);
}
}
}
//----------------
function autorizarSalidaUpdate($num_doc){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_autorizar,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
//---------------------
$this->salidaClass->autorizarSalidaUpdate($num_doc);
$this->salidaMailAutoriza->obtenerCorreoAutoriza($this->session-
>userdata('id_usuario'));
foreach ($this->salidaMailAutoriza->mirecordset as $obj){
$correo = $obj-
>email_usuario;
$correojefe = $obj->email_jefe;
}
if($correo!=''){
$this->_enviarEmailAutoriza($correo,$num_doc,4);
}
if($correojefe!=''){
$this->_enviarEmailAutoriza($correojefe,$num_doc,4);
}
}
//----------------
function getDetalleSalida($num_doc){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_autorizar,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
//---------------------
$this->salidaClass->getDetalleSalida($num_doc);
$this->load->view('procesos/tabla_det_salida');
}
//--------------------
function _getExtension($filename) {
$trozos = explode(".", $filename);
101
$lext = end($trozos);
return $lext;
}
//------------
function _enviarEmail($to){
$this->email->from($this->config->item('email_no_replay'), $this-
>config->item('nombre_no_replay'));
$this->email->to($to);
$this->email->subject('Autorizacion de salida pendiente');
$this->email->message('Estimado, tiene una solicitud de SALIDA para
ser procesado en el sistema web. http://200.112.216.33/activos');
$this->email->send();
}
//----------------
function getImagen($carpeta,$img){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_autorizar,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
$imagen = $carpeta.'/'.$img;
$data['img']= $imagen;
$this->load->view('procesos/rp_imagen',$data);
}
//----------------
function autorizarSalidaGuardia(){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_autorizar_g,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
//------------------------
$data['guardia']=1;
$this->template->load($this-
>template_view,'procesos/vista_autorizar_g',$data);
}
//----------------
function buscarOrdenSalida($num_orden,$guardia){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_autorizar_g,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
//---------------------
$data['guardia']=$guardia;
$this->salidaClass-
>getSalidaCabecera($num_orden,$guardia);
$this->salidaDetClass->getSalidaDetalle($num_orden,$guardia);
102
$this->load-
>view('procesos/busqueda_orden',$data);
}
//----------------
function grabaSalidaGuardia($guardia){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_autorizar_g,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
//---------------------
$num_doc = $this->input->post('num_doc');
if($this->salidaClass->grabaSalidaGuardia($num_doc,$guardia)){
echo '<br><br><div class="alert alert alert-success" role="success"
align="center">Registro procesado exitosamente.</div>';
}else{
echo '<br><br><div class="alert alert alert-danger" role="danger"
align="center">No se pudo procesar el registro.</div>';
}
$this->salidaMailAutoriza->obtenerCorreoAutoriza($this->session-
>userdata('id_usuario'));
foreach ($this->salidaMailAutoriza->mirecordset as $obj){
$correo = $obj-
>email_usuario;
$correojefe = $obj->email_jefe;
if($correo!=''){
$this->_enviarEmailAutoriza($correo,$num_doc,$guardia);
}
if($correojefe!=''){
$this->_enviarEmailAutoriza($correojefe,$num_doc,$guardia);
}
}
//----------------
function entradaActivos(){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_autorizar_g,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
//------------------------
$data['guardia']=2;
$this->template->load($this-
>template_view,'procesos/vista_autorizar_g',$data);
}
//----------------
function confirmacionEntrada(){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_autorizar_g,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
103
return;
}
//------------------------
$data['guardia']=3;
$this->template->load($this-
>template_view,'procesos/vista_autorizar_g',$data);
}
//--------------------------------
function traeDireccion($proveedor){
header("Content-Type: application/json");
$this->salidaClass->traeDireccion($proveedor);
$i=0;
$data=array();
if ($this->salidaClass->exist){
foreach ($this->salidaClass->mirecordset as $obj){
$data[$i]['direccion']= $obj-
>direccion;
}
}
echo json_encode($data);
}
//-------------------------------
function procesarAlarmasCorreo(){
$this->salidaClass-
>procesarAlarmasCorreo();
if ($this->salidaClass->exist){
foreach ($this->salidaClass->mirecordset as $obj){
$this->_enviarEmailAlarma($obj->email,$obj->dias,$obj-
>NUMERO_DOCUMENTO);
$this->_enviarEmailAlarma($obj->mail_usuario,$obj->dias,$obj-
>NUMERO_DOCUMENTO);
}
echo '<br><br><div class="alert alert alert-success" role="success"
align="center">Alarmas procesadas exitosamente.</div>';
}else{
echo '<br><br><div class="alert alert alert-success" role="success"
align="center">No hay alarmas en este momento.</div>';
}
}
//------------
function _enviarEmailAlarma($to, $dias = 0, $num_orden){
$this->email->from($this->config->item('email_no_replay'), $this-
>config->item('nombre_no_replay'));
$this->email->to($to);
$this->email->subject('Aplicacion Web SISCAT');
if ($dias >0 and $dias <= 2 ){
$this->email->message('La Orden # '.$num_orden. ' le faltan '. $dias
. ' dia(s) por vencer' );
}else{
$this->email->message('La Orden # '.$num_orden. ' esta vencida por
'. $dias . ' dia(s)' );
}
104
$this->email->send();
}
//----------------
function generaAlarma(){
//-------------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_alarma,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
//------------------------
$this->template->load($this->template_view,'procesos/vista_correo');
}
//------------
function _enviarEmailAutoriza($to,$orden,$opcion){
if($opcion==1){
$descripcion = 'Aprobacion salida de activos';
}elseif($opcion==2){
$descripcion = 'Aprobacion entrada de activo';
}elseif($opcion==3){
$descripcion = 'Aprobacion confirmacion de entrada';
}else{
$descripcion = 'Aprobacion orden de salida';
}
$this->email->from($this->config->item('email_no_replay'), $this-
>config->item('nombre_no_replay'));
$this->email->to($to);
$this->email->subject('Aplicacion Web SISCAT');
$this->email->message('Se ha procesado la Orden '.$orden.' con la
novedad de '.$descripcion.'. Puede revisarlo en la aplicacion web
SISCAT http://200.112.216.33/activos');
$this->email->send();
}
//------------------
}// End
?>
reportesMain.php
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class ReportesMain extends CI_Controller {
function __construct(){
parent::__construct();
105
require_once('controlAcceso.php');
$this->load->model('Menu','menuClass');
$this->load->model('Reporte','reporteClass');
$this->load->model('Reporte','cbxsalidaClass');
$this->load->model('Reporte','cbxproductoClass');
$this->load->model('Perfil_permiso','perfilPermisoClass');
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->load->library('pagination');
$this->load->library('email');
$this->load->library('table');
$this->config->load('myconfig');
$this->template_view='/template_registro/index';
$this->dir_app=base_url().'application';
$this->url_index=base_url().SELF;
$this->url=base_url().SELF.'/homeMain'; //se refiere a la url del
propio controlador
$this->cod_menu=1; //Este es el cod_menu correspondiente a homeMain
$this->cod_menu_grafico=19; //Este es el cod_menu correspondiente a
graficoMain
$this->cod_menu_barra=20; //Este es el cod_menu correspondiente a
graficoBarra
}
//----------------
function index(){
//---------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
}
//----------------
function reporteTrazabilidad(){
//---------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
$this->cbxsalidaClass->selectTipoSalida();
$this->cbxproductoClass->selectProductos();
$this->reporteClass->selectTranzabilidad();
$this->template->load($this-
>template_view,'reportes/rep_tranzabilidad');
}
//----------------
function reporteTrazabilidadAjax(){
//---------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
106
return;
}
if($this->reporteClass->selectTranzabilidadAjax($this->input-
>post('fecha_ini'),$this->input->post('fecha_fin'),$this->input-
>post('cbx_salida'),$this->input->post('cbx_estado'),$this->input-
>post('cbx_producto'),$this->input->post('txt_orden'),$this->input-
>post('cbx_vencidos'))){
$this->load->view('reportes/tabla_tranzabilidad');
}else{
echo '<div class="alert alert-warning">Su busqueda no encontro
resultados.</div>';
}
}
//------------------------------------
function crearPdf($num_doc=0){
$z=17;
//---------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
if($this->reporteClass->getCrearPdf($num_doc)){
$empresa = $this->reporteClass->empresa;
$realizado_por = $this->reporteClass->realizado_por;
$fecha_doc = $this->reporteClass->fecha_doc;
$fecha_ret = $this->reporteClass->fecha_retorno;
$motivo = $this->reporteClass->motivo;
$concepto = $this->reporteClass->concepto;
require('Cezpdf/Cezpdf.php');
// Initialize a ROS PDF class object using DIN-A4, with background
color gray
$pdf = new Cezpdf('a4','landscape','color',array(1,1,1));
// Set pdf Bleedbox
$pdf->ezSetMargins(50,20,50,50);
// Use one of the pdf core fonts
$mainFont = 'Helvetica';
// Select the font
$pdf->selectFont($mainFont);
// Define the font size
$size_documento=10;
$size_empresa=14;
// Modified to use the local file if it can
$pdf->openHere('Fit');
$pdf->ezText("<b>Empresa ".$empresa."</b>", $size_empresa,
array('justification'=>'center'));
$pdf->ezText("\n");
$pdf->ezText("<b>Orden de salida</b>", $size_empresa,
array('justification'=>'center'));
$pdf-
>ezText("___________________________________________________________
107
__________________________________________________", 12,
array('justification'=>'center'));
$pdf->ezText("\n");
$firma1 = array(
array("Col 1" => "<b>Realizado por:</b> ".$realizado_por."","Col 2"
=> "<b>Fecha:</b> ".$fecha_doc."", "Col 3" => "<b>No:</b>
".$num_doc.""));
$columns = array("Col 1" => "","Col 2" => "","Col 3" => "");
$option = array('showHeadings' => 0,'shaded'=>0,'showLines'=>0,
'width'=>1000, 'fontSize' => 12, 'xPos'=>450,'cols'=>array('Col
1'=>array('justification'=>'center')));
$pdf-
>ezTable($firma1,$columns,'',$option);
$firma2 = array(
array("Col 1" => "<b>Motivo:</b> ".$motivo."","Col 2" => "<b>Fecha
retorno:</b> ".$fecha_ret.""));
$columns = array("Col 1" => "","Col 2" => "");
$option = array('showHeadings' => 0,'shaded'=>0,'showLines'=>0,
'width'=>740, 'fontSize' => 12, 'xPos'=>329,'cols'=>array('Col
1'=>array('justification'=>'center')));
$pdf->ezTable($firma2,$columns,'',$option);
$firma3 = array(
array("Col 1" => "<b>Concepto:</b> ".$concepto.""));
$columns = array("Col 1" => "");
$option = array('showHeadings' => 0,'shaded'=>0,'showLines'=>0,
'width'=>740, 'fontSize' => 12, 'xPos'=>107,'cols'=>array('Col
1'=>array('justification'=>'center')));
$pdf->ezTable($firma3,$columns,'',$option);
$pdf->ezText("\n");
$table = array();
foreach ($this->reporteClass->mirecordset as $obj){
$cod_producto = $obj->cod_producto;
$nom_producto = $obj->nom_producto;
$marca = $obj->marca;
$modelo = $obj->modelo;
$cantidad = $obj->cantidad;
$arreglo = array("Col 1" => $cod_producto, "Col 2" => $nom_producto,
"Col 3" => $marca, "Col 4" => $modelo, "Col 5" => $cantidad );
array_push($table, $arreglo);
$z=$z-1;
}
for ($i = 1; $i <= $z; $i++) {
$arreglo = array("Col 1" => "", "Col 2" => "", "Col 3" => "", "Col
4" => "", "Col 5" => "" );
array_push($table, $arreglo);
}
$columns = array("Col 1" => "<b>Codigo</b>", "Col 2" =>
"<b>Descripcion</b>", "Col 3" => "<b>Marca</b>", "Col 4" =>
"<b>Modelo</b>", "Col 5" => "<b>Cantidad</b>");
$option = array('shaded'=>2,'showLines'=>1, 'width'=>750, 'fontSize'
=> $size_documento, 'xPos'=>420 );
108
$pdf->ezTable($table,$columns,'',$option);
$pdf->ezStream(array('compress'=>0));
}else{
echo 'No existe registro con ese codigo de solicitud, favor
comunicar con el administrador de sistemas.';
}
}
//----------------
function graficoEstados(){
//---------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_grafico,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
$this->template->load($this->template_view,'reportes/rep_grafico');
}
//----------------
function reporteGrafico(){
//---------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_grafico,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
if($this->reporteClass->selectReporteGrafico($this->input-
>post('fecha_ini'),$this->input-
>post('fecha_fin'))){
$this->load->view('reportes/tabla_grafico');
}else{
echo '<div class="alert alert-warning">Su busqueda no encontro
resultados.</div>';
}
}
//----------------
function graficoBarras(){
//---------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_barra,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
$this->template->load($this->template_view,'reportes/rep_barra');
}
//----------------
function reporteGraficoBarra(){
//---------------
if(!$this->perfilPermisoClass->tienePermiso($this->session-
>userdata('cod_perfil'),$this->cod_menu_barra,'ing')){
$this->template->load($this->template_view,'panel/sin_permiso');
return;
}
109
if($this->reporteClass->reporteGraficoBarra($this->input-
>post('fecha_ini'),$this->input-
>post('fecha_fin'))){
$this->load->view('reportes/tabla_grafico_bar');
}else{
echo '<div class="alert alert-warning">Su busqueda no encontro
resultados.</div>';
}
}
}// End
?>
MODELOS
Menu.php
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Menu extends CI_Model {
//----------------
var $sortname;
var $sortorden;
var $mirecordset;
var $mirecordsetp;
var $debug;
var $exist;
var $existp;
var $mirecordset_menu;
var $exist_menu;
//--------------
function __construct(){
parent::__construct();
$this->load->database();
}
function generarMenuHTML($cod_perfil=0){
$i=1;
$this->selectMenuByPerfil($cod_perfil);
$lexist=$this->exist;
if($lexist){
$lmirecordset=$this->mirecordset;
foreach($lmirecordset as $obj){
if($obj->TIP_MENU!=0){
echo '<li id="'.$obj->ETIQUETA.'" class="dropdown">';
110
echo '<a class="dropdown-toggle" href="#" data-toggle="dropdown"><i
class="'.$obj->ICONO.'"></i> '.$obj->DES_OPCION.' <b
class="caret"></b></a>';
if($this->selectMenuByCodPadre($obj->COD_MENU)){
$j=1;
echo '<ul id="s'.$obj->ETIQUETA.'" class="dropdown-menu">';
foreach($this->mirecordsetp as $obj){
if($j!=1){ echo '<li class="divider"></li>'; }
echo '<li id="'.$obj->ETIQUETA.'">
<a href="'.$this->url_index.'/'.$obj->DES_ENLACE.'"><i
class="'.$obj->ICONO.'"></i> '.$obj->DES_OPCION.'</a>
</li>';
$j++;
}
echo '</ul>';
}
echo '</li>';
}
else{
echo '<li class="" id="'.$obj->ETIQUETA.'">
<a href="'.$this->url_index.'/'.$obj->DES_ENLACE.'"><i
class="'.$obj->ICONO.'"></i> '.$obj-
>DES_OPCION.'</a>
</li>';
}
$i++;
}
}else{
echo "No se genero el menu";
}
}
//-----------------------
function selectMenuByPerfil($cod_perfil){
$cod_perfil=(int)$cod_perfil;
$sql=" select * from TB_CM_MENU m
left join TB_CM_PERFILES_PERMISOS p on m.cod_menu = p.cod_menu
where p.cod_perfil = ? and p.flg_ing = 1 and m.cod_estado = 1 and
m.cod_padre = 0
order by m.orden ";
$query=$this->db->query($sql,array($cod_perfil));
if($query->num_rows() > 0){
$this->mirecordset = $query->result();
$this->exist = true;
return true;
}else{
$this->exist = false;
return false;
}
}
//---------------------
function selectMenuByCodPadre ($cod_padre){
$sql=" select * from TB_CM_MENU m
111
left join TB_CM_PERFILES_PERMISOS p on m.cod_menu = p.cod_menu
where p.cod_perfil = 1 and p.flg_ing = 1 and m.cod_estado = 1
and cod_padre = ?
order by m.orden ";
$query=$this->db->query($sql,array($cod_padre));
if($query->num_rows() > 0){
$this->mirecordsetp = $query->result();
$this->existp=true;
return true;
}else{
$this->existp=false;
return false;
}
}
function selectAllMenu(){
$sql=" SELECT * FROM tb_cm_menu where cod_estado = 1 ";
$query=$this->db->query($sql);
if($query->num_rows() > 0){
$this->mirecordset_menu = $query->result();
$this->exist_menu=true;
return true;
}else{
$this->exist_menu=false;
return false;
}
}
}//Fin de la Clase
?>
Reporte.php
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Reporte extends CI_Model {
var $query;
var $num_rows;
var $mirecordset;
var $ciquery;
var $debug;
var $registro;
var $existt;
var $empresa;
var $realizado_por;
112
var $fecha_doc;
var $fecha_retorno;
var $motivo;
var $concepto;
//--------------
function __construct(){
parent::__construct();
$this->load->database();
}
//---------------
function selectTranzabilidad(){
$fecha_ini = date("Y-m-d");
$fecha_ini = new DateTime($fecha_ini);
$fecha_ini->modify('first day of this month');
$fecha_ini = $fecha_ini->format('Y-m-d');
$fecha_fin = date("Y-m-d");
$fecha_fin = new DateTime($fecha_fin);
$fecha_fin->modify('last day of this month');
$fecha_fin = $fecha_fin->format('Y-m-d');
$sql=" Select * from (SELECT DISTINCT emp.nom_empresa AS EMPRESA,
suc.nom_sucursal AS SUCURSAL,
c.tipo_doc AS DOCUMENTO,
c.num_doc AS NUMERO_DOCUMENTO,
t.descripcion AS TIPO_SALIDA,
fecha_doc FECHA_DOCUMENTO,
CASE
WHEN c.cod_estado = 1 THEN 'Pendiente'
WHEN c.cod_estado = 3 THEN 'Aprobado'
WHEN c.cod_estado = 4 THEN 'En transito'
WHEN c.cod_estado = 5 THEN 'Recibida'
WHEN c.cod_estado = 6 THEN 'Confirmado'
ELSE 'Otros'
END AS ESTADO,
cod_usuario AS USUARIO_CREACION,
fecha_creacion AS FECHA_CREACION,
tiempo_transferir AS TIEMPO_TRANSFERIR,
direccion_transferir AS DIRECCION_TRANFERIR,
recibe_salida AS RECIBE_SALIDA,
concepto AS CONCEPTO,
imagen AS IMAGEN,
usuario_autoriza AS USUARIO_AUTORIZA,
fecha_autoriza AS FECHA_AUTORIZA,
usuario_salida AS USUARIO_SALIDA,
fecha_salida FECHA_SALIDA,
usuario_entrada AS USUARIO_ENTRADA,
fecha_entrada AS FECHA_ENTRADA,
usuario_confirmacion AS USUARIO_CONFIRMACION,
fecha_confirmacion AS FECHA_CONFIRMACION,
CASE
113
WHEN (SYSDATE() > c.tiempo_transferir) AND c.fecha_confirmacion IS
NULL THEN 'S'
ELSE 'N'
END AS ALARMA
FROM tb_af_orden_salida_cab c
INNER JOIN tb_af_orden_salida_tipos t
ON c.cod_tipo_salida = t.cod_tipo_salida
INNER JOIN tb_sg_empresa emp
ON c.cod_empresa = emp.cod_empresa
INNER JOIN tb_sg_sucursal suc
ON c.cod_empresa = suc.cod_empresa
AND c.cod_sucursal = suc.cod_sucursal
INNER JOIN tb_af_orden_salida_det d
ON c.cod_empresa = d.cod_empresa
AND c.cod_sucursal = d.cod_sucursal
AND c.tipo_doc = d.tipo_doc
AND c.num_doc = d.num_doc
AND (d.cod_producto = 0 OR 0 = 0)
WHERE fecha_doc >= ? AND fecha_doc <= ?
AND (t.cod_tipo_salida = '' OR '' = '')
AND (c.cod_estado= 0 OR 0 = 0)
AND (c.num_doc = 0 OR 0 = 0)) a where alarma = 'S'
";
$query=$this->db->query($sql,array($fecha_ini,$fecha_fin));
if($query->num_rows() > 0){
$this->mirecordset = $query->result();
$this->ciquery = $query;
$this->exist=true;
return true;
}else{
$this->exist=false;
return false;
}
}
//---------------
function selectTipoSalida(){
$sql="SELECT * FROM tb_af_orden_salida_tipos ";
$query=$this->db->query($sql);
if($query->num_rows() > 0){
$this->mirecordset = $query->result();
$this->exist=true;
return true;
}else{
$this->exist=false;
return false;
}
}
//---------------
function
selectTranzabilidadAjax($fecha_ini,$fecha_fin,$tipo_salida='',$estad
o=0,$producto=0,$orden=0,$vencidos = 'T'){
114
$sql=" Select * from (SELECT DISTINCT emp.nom_empresa AS EMPRESA,
suc.nom_sucursal AS SUCURSAL,
c.tipo_doc AS DOCUMENTO,
c.num_doc AS NUMERO_DOCUMENTO,
t.descripcion AS TIPO_SALIDA,
fecha_doc FECHA_DOCUMENTO,
CASE
WHEN c.cod_estado = 1 THEN 'Pendiente'
WHEN c.cod_estado = 3 THEN 'Aprobado'
WHEN c.cod_estado = 4 THEN 'En transito'
WHEN c.cod_estado = 5 THEN 'Recibida'
WHEN c.cod_estado = 6 THEN 'Confirmado'
ELSE 'Otros'
END AS ESTADO,
cod_usuario AS USUARIO_CREACION,
fecha_creacion AS FECHA_CREACION,
tiempo_transferir AS TIEMPO_TRANSFERIR,
direccion_transferir AS DIRECCION_TRANFERIR,
recibe_salida AS RECIBE_SALIDA,
concepto AS CONCEPTO,
imagen AS IMAGEN,
usuario_autoriza AS USUARIO_AUTORIZA,
fecha_autoriza AS FECHA_AUTORIZA,
usuario_salida AS USUARIO_SALIDA,
fecha_salida FECHA_SALIDA,
usuario_entrada AS USUARIO_ENTRADA,
fecha_entrada AS FECHA_ENTRADA,
usuario_confirmacion AS USUARIO_CONFIRMACION,
fecha_confirmacion AS FECHA_CONFIRMACION,
CASE
WHEN (SYSDATE() > c.tiempo_transferir) AND c.fecha_confirmacion IS
NULL THEN 'S'
ELSE 'N'
END AS ALARMA
FROM tb_af_orden_salida_cab c
INNER JOIN tb_af_orden_salida_tipos t
ON c.cod_tipo_salida = t.cod_tipo_salida
INNER JOIN tb_sg_empresa emp
ON c.cod_empresa = emp.cod_empresa
INNER JOIN tb_sg_sucursal suc
ON c.cod_empresa = suc.cod_empresa
AND c.cod_sucursal = suc.cod_sucursal
INNER JOIN tb_af_orden_salida_det d
ON c.cod_empresa = d.cod_empresa
AND c.cod_sucursal = d.cod_sucursal
AND c.tipo_doc = d.tipo_doc
AND c.num_doc = d.num_doc
AND (d.cod_producto = ? OR ? = 0)
WHERE fecha_doc >= ? AND fecha_doc <= ?
AND (t.cod_tipo_salida = ? OR ? = '')
AND (c.cod_estado= ? OR ? = 0)
115
AND (c.num_doc = ? OR ? = 0)) a where (alarma = ? or ? = 'T')";
$query=$this->db-
>query($sql,array($producto,$producto,$fecha_ini,$fecha_fin,$tipo_sa
lida,$tipo_salida,$estado,$estado,$orden,$orden,$vencidos,$vencidos)
);
if($query->num_rows() > 0){
$this->mirecordset = $query->result();
$this->ciquery = $query;
$this->exist=true;
return true;
}else{
$this->exist=false;
return false;
}
}
//---------------
function getCrearPdf($num_doc){
$sql="SELECT e.nom_empresa, s.nom_sucursal,
c.fecha_doc,c.tipo_doc,c.num_doc, c.cod_proveedor,prv.nom_proveedor,
c.cod_usuario,c.fecha_creacion,c.concepto,st.descripcion AS
tipo_salida,c.tiempo_transferir AS
fecha_retorno,c.direccion_transferir AS direccion ,
c.recibe_salida,d.cod_producto,p.descripcion AS nom_producto,
d.cantidad,p.cod_barra , IFNULL(p.cod_marca,'<No Asignado>') AS
marca, IFNULL(p.modelo,'<No Asignado>') AS modelo,c.cod_usuario AS
usuario_creacion ,c.fecha_creacion,cl.descripcion AS clasificacion,
scl.descripcion AS subclasificacion
FROM tb_af_orden_salida_cab c
INNER JOIN tb_af_orden_salida_det d
ON c.tipo_doc = d.tipo_doc
AND c.num_doc = d.num_doc
INNER JOIN tb_af_productos p
ON d.cod_producto = p.cod_producto
LEFT OUTER JOIN tb_af_clasificacion cl
ON cl.cod_clasificacion = p.cod_clasificacion
LEFT OUTER JOIN tb_af_subclasificacion scl
ON scl.cod_subclasificacion = p.cod_subclasificacion
INNER JOIN tb_sg_empresa e
ON c.cod_empresa = e.cod_empresa
INNER JOIN tb_sg_sucursal s
ON c.cod_empresa = s.cod_empresa
AND c.cod_sucursal = s.cod_sucursal
LEFT JOIN tb_af_proveedores prv
ON prv.cod_prv = c.cod_proveedor
INNER JOIN tb_af_orden_salida_tipos st
ON c.cod_tipo_salida = st.cod_tipo_salida
WHERE c.tipo_doc ='SA'
AND c.num_doc= ? ";
$query=$this->db->query($sql,$num_doc);
if(($query) && $query->num_rows() > 0){
$this->mirecordset = $query->result();
$registro = $query->row_array();
116
$this->empresa=$registro['nom_empresa'];
$this->realizado_por=$registro['usuario_creacion'];
$this->fecha_doc=$registro['fecha_doc'];
$this->fecha_retorno=$registro['fecha_retorno'];
$this->motivo=$registro['tipo_salida'];
$this->concepto=$registro['concepto'];
$query->free_result();
return true;
}else{
$query->free_result();
return false;
return true;
}
//---------------
function selectReporteGrafico($fecha_ini,$fecha_fin){
$sql="
SELECT COUNT(*) AS cantidad, 'En Tramite' AS Estado
FROM tb_af_orden_salida_cab
WHERE cod_estado <> 6
AND tiempo_transferir > NOW()
AND fecha_doc >= ?
AND fecha_doc <= ?
AND tiempo_transferir IS NOT NULL
UNION
SELECT COUNT(*) AS cantidad, 'Exitosa' AS Estado
FROM tb_af_orden_salida_cab
WHERE cod_estado = 6
AND fecha_doc >= ?
AND fecha_doc <= ?
UNION
SELECT COUNT(*) AS cantidad, 'Vencidas' AS Estado
FROM tb_af_orden_salida_cab
WHERE cod_estado <> 6
AND tiempo_transferir <= NOW()
AND fecha_doc >= ?
AND fecha_doc <= ?
AND tiempo_transferir IS NOT NULL ";
$query=$this->db-
>query($sql,array($fecha_ini,$fecha_fin,$fecha_ini,$fecha_fin,$fecha
_ini,$fecha_fin));
if($query->num_rows() > 0){
$this->mirecordset = $query->result();
$this->ciquery = $query;
$this->exist=true;
return true;
}else{
$this->exist=false;
return false;
}
}
//---------------
function reporteGraficoBarra($fecha_ini,$fecha_fin){
117
$sql=" SELECT COUNT(*) as cantidad,t.descripcion AS tipo_salida
FROM tb_af_orden_salida_cab c
INNER JOIN tb_af_orden_salida_tipos t
ON c.cod_tipo_salida = t.cod_tipo_salida
WHERE c.fecha_doc >= ?
AND c.fecha_doc <= ?
GROUP BY t.descripcion ";
$query=$this->db->query($sql,array($fecha_ini,$fecha_fin));
if($query->num_rows() > 0){
$this->mirecordset = $query->result();
$this->ciquery = $query;
$this->exist=true;
return true;
}else{
$this->exist=false;
return false;
}
}
//---------------
function selectProductos(){
$sql="SELECT * FROM tb_af_productos ";
$query=$this->db->query($sql);
if($query->num_rows() > 0){
$this->mirecordset = $query->result();
$this->exist=true;
return true;
}else{
$this->exist=false;
return false;
}
}
}//Fin de la Clase Usuario
?>
VISTAS
Rep_trazabilidad.php
<div class="panel panel-info">
<div class="panel-heading">
<div class="btn-group pull-right">
<a href="#" class="btn btn-info" id="btn_buscar"><span
class="glyphicon glyphicon-search" ></span> BUSCAR</a>
</div>
118
<h5><i class='glyphicon glyphicon-compressed'></i> Reporte
tranzabilidad</h5>
</div><div class="panel-body">
<?php
$fecha_ini = date("Y-m-d");
$fecha_ini = new DateTime($fecha_ini);
$fecha_ini->modify('first day of this month');
$fecha_ini = $fecha_ini->format('Y-m-d');
$fecha_fin = date("Y-m-d");
$fecha_fin = new DateTime($fecha_fin);
$fecha_fin->modify('last day of this month');
$fecha_fin = $fecha_fin->format('Y-m-d');
?>
<form id="form_tranzabilidad" class="col-lg-12 form-horizontal"
action="#">
<div class="form-group row">
<label for="fecha_ini" class="col-md-1 control-label">Desde</label>
<div class="col-md-2">
<input type="text" class="form-control required" id="fecha_ini"
name="fecha_ini" value = "<?php echo $fecha_ini; ?>"
placeholder="Fecha desde">
</div>
<label for="fecha_fin" class="col-md-1 control-label">Hasta</label>
<div class="col-md-2">
<input type="text" class="form-control required" id="fecha_fin"
name="fecha_fin" value = "<?php echo $fecha_fin; ?>"
placeholder="Fecha hasta">
</div>
<label for="cbx_salida" class="col-md-1 control-
label">Producto</label>
<div class="col-md-5">
<?php $this->load->view('panel/cbxProductos'); ?>
</div>
</div>
<div class="form-group row">
<label for="fecha_ini" class="col-md-1 control-label"># de
orden</label>
<div class="col-md-2">
<input type="text" class="form-control" id="txt_orden"
name="txt_orden" value = "" placeholder="orden">
</div>
<label for="cbx_salida" class="col-md-1 control-label">Tipo
salida</label>
<div class="col-md-2">
<?php $this->load->view('panel/cbxTipoSalida2'); ?>
</div>
<label for="cbx_estado" class="col-md-1 control-
label">Autorización</label>
<div class="col-md-2">
<select class='form-control' id='cbx_estado' name='cbx_estado'
required>
<option value="0" selected>Todos</option>
119
<option value="1">Pendiente</option>
<option value="3">Aprobado</option>
<option value="4">En transito</option>
<option value="5">Recibido</option>
<option value="6">Confirmado</option>
</select>
</div>
<label for="cbx_estado" class="col-md-1 control-
label">Vencidos</label>
<div class="col-md-2">
<select class='form-control' id='cbx_vencidos' name='cbx_vencidos'
required>
<option value="T">Todos</option>
<option value="S" selected>Si</option>
<option value="N">No</option>
</select>
</div>
</div>
</form>
<div class="col-lg-12">
<div>
<br>
<div class="table-responsive" id="div_tab_trans"
style="height:500px;">
<?php
if($this->reporteClass->exist){
$tmpl = array ( 'table_open' => '<table id="tabla_transa"
class="table table-bordered table-hover">' );
$this->table-
>set_template($tmpl);
echo $this->table->generate($this->reporteClass->ciquery);
}else{
echo '<div class="alert alert-warning">Su busqueda no encontro
resultados.</div>';
}
?>
</div>
</div>
</div>
</div>
</div>
<!-- Modal -->
<div id="myModal" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-
dismiss="modal">×</button>
<h4 class="modal-title">Detalle</h4>
</div>
<div class="modal-body" id="div_detalle">
120
<p>Cargando...</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-
dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<!-- Modal -->
<div id="myModalImg" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-
dismiss="modal">×</button>
<h4 class="modal-title">Detalle</h4>
</div>
<div class="modal-body" id="div_img">
<p>Cargando...</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-
dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script language="javascript">
var i=0;
var num_doc;
var estado;
var url = url_index+'/reportesMain/crearPdf';
$('#tabla_transa').find('thead tr').prepend('<th>DETALLE</th>');
$('#tabla_transa').find('thead tr').prepend('<th>IMPRIMIR</th>');
$('#tabla_transa').find('thead tr').prepend('<th>IMAGEN</th>');
$('#tabla_transa').find('tbody tr').each(function () {
num_doc = $(this).find('td').eq(3).html();
estado = $(this).find('td').eq(6).html();
alarma = $(this).find('td').eq(22).html();
img = $(this).find('td').eq(13).html();
$(this).prepend('<td><span
onclick="javascript:procesosJS.getDetalleSalida('+num_doc+')" data-
toggle="modal" data-target="#myModal" class="glyphicon glyphicon-
list-alt" aria-hidden="true" style="font-size: 25px;cursor:
pointer;"></span></td>');
if(estado == 'Pendiente'){
$(this).addClass('alert alert-
warning');
$(this).prepend('<td align="center"></td>');
}else{
121
$(this).prepend('<td align="center"><a href="'+url+'/'+num_doc+'"
target="_blank" class="btn btn-default" style="text-decoration:
none;">Generar</a></td>');
}
if(alarma == 'S'){
$(this).addClass('alert alert-danger');
}
$(this).prepend('<td><span
onclick="javascript:procesosJS.getImagenT(\''+img+'\')" data-
toggle="modal" data-target="#myModalImg" class="glyphicon glyphicon-
picture" aria-hidden="true" style="font-size: 25px;cursor:
pointer;"></span></td>');
});
$('#tabla_transa thead tr th').each(function (){
texto = $(this).html();
texto = texto.replace("_", " ");
$(this).html(texto);
$(this).attr('style','vertical-align:middle');
i++;
});
$("#fecha_ini").datepicker({
dateFormat: 'yy-mm-dd',
altField: "#nfechaini",
altFormat: "yymmdd",
changeMonth: true,
changeYear: true
});
$("#fecha_fin").datepicker({
dateFormat: 'yy-mm-dd',
altField: "#nfechaini",
altFormat: "yymmdd",
changeMonth: true,
changeYear: true
});
$(function(){
reportesJS.initTranzabilidad();
});
</script>
122
SCRIPTS PARA LA CREACIÓN DE TABLAS DE BASE DE DATOS EN MYSQL
TABLA tb_af_departamentos
DROP TABLE IF EXISTS `tb_af_departamentos`;
CREATE TABLE `tb_af_departamentos` (
`cod_departamento` INT(11) NOT NULL AUTO_INCREMENT,
`descripcion` VARCHAR(40) DEFAULT NULL,
`id_usuario` VARCHAR(15) DEFAULT NULL,
`cod_estado` TINYINT(1) DEFAULT NULL,
PRIMARY KEY (`cod_departamento`)
) ENGINE=MYISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
TABLA tb_af_estados
DROP TABLE IF EXISTS `tb_af_estados`;
CREATE TABLE `tb_af_estados` (
`cod_estado` INT(11) NOT NULL,
`descripcion` VARCHAR(15) DEFAULT NULL,
PRIMARY KEY (`cod_estado`)
) ENGINE=MYISAM DEFAULT CHARSET=utf8;
TABLA tb_af_orden_salida_cab
DROP TABLE IF EXISTS `tb_af_orden_salida_cab`;
CREATE TABLE `tb_af_orden_salida_cab` (
`cod_empresa` INT(11) NOT NULL,
`cod_sucursal` INT(11) NOT NULL,
123
`tipo_doc` VARCHAR(2) CHARACTER SET latin1 NOT NULL,
`num_doc` INT(11) NOT NULL,
`fecha_doc` DATETIME DEFAULT NULL,
`cod_estado` TINYINT(4) DEFAULT NULL,
`cod_usuario` VARCHAR(20) CHARACTER SET latin1 DEFAULT NULL,
`fecha_creacion` DATETIME DEFAULT NULL,
`tiempo_transferir` VARCHAR(30) CHARACTER SET latin1 DEFAULT NULL,
`direccion_transferir` VARCHAR(150) CHARACTER SET latin1 DEFAULT NULL,
`recibe_salida` VARCHAR(50) CHARACTER SET latin1 DEFAULT NULL,
`usuario_recibe` VARCHAR(15) CHARACTER SET latin1 DEFAULT NULL,
`fecha_recibe` DATETIME DEFAULT NULL,
`concepto` VARCHAR(150) CHARACTER SET latin1 DEFAULT NULL,
`imagen` VARCHAR(100) CHARACTER SET latin1 DEFAULT NULL,
`usuario_autoriza` VARCHAR(15) CHARACTER SET latin1 DEFAULT NULL,
`fecha_autoriza` DATETIME DEFAULT NULL,
`usuario_salida` VARCHAR(15) CHARACTER SET latin1 DEFAULT NULL,
`fecha_salida` DATETIME DEFAULT NULL,
`usuario_entrada` VARCHAR(15) CHARACTER SET latin1 DEFAULT NULL,
`fecha_entrada` DATETIME DEFAULT NULL,
`usuario_control_interno` VARCHAR(15) CHARACTER SET latin1 DEFAULT
NULL,
`fecha_control_interno` DATETIME DEFAULT NULL,
`cod_tipo_salida` VARCHAR(3) CHARACTER SET latin1 DEFAULT NULL,
PRIMARY KEY (`cod_empresa`,`cod_sucursal`,`tipo_doc`,`num_doc`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
TABLA tb_af_orden_salida_det
DROP TABLE IF EXISTS `tb_af_orden_salida_det`;
124
CREATE TABLE `tb_af_orden_salida_det` (
`cod_empresa` INT(11) NOT NULL,
`cod_sucursal` INT(11) NOT NULL,
`tipo_doc` VARCHAR(2) NOT NULL,
`num_doc` INT(11) NOT NULL,
`secuencia` INT(11) NOT NULL,
`cod_producto` INT(11) DEFAULT NULL,
`cantidad` DECIMAL(18,2) DEFAULT NULL,
PRIMARY KEY (`cod_empresa`,`cod_sucursal`,`tipo_doc`,`num_doc`,`secuencia`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
TABLA tb_af_orden_salida_tipos
DROP TABLE IF EXISTS `tb_af_orden_salida_tipos`;
CREATE TABLE `tb_af_orden_salida_tipos` (
`cod_tipo_salida` VARCHAR(3) NOT NULL,
`descripcion` VARCHAR(30) DEFAULT NULL,
PRIMARY KEY (`cod_tipo_salida`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
TABLA tb_af_productos
DROP TABLE IF EXISTS `tb_af_productos`;
CREATE TABLE `tb_af_productos` (
`cod_empresa` INT(11) DEFAULT NULL,
`cod_producto` INT(11) NOT NULL AUTO_INCREMENT,
`cod_alterno` VARCHAR(50) DEFAULT NULL,
`descripcion` VARCHAR(150) DEFAULT NULL,
`cod_clasificacion` INT(11) DEFAULT NULL,
125
`cod_subclasificacion` INT(11) DEFAULT NULL,
`cod_estado` TINYINT(1) DEFAULT NULL,
`cod_barra` VARCHAR(20) DEFAULT NULL,
`modelo` VARCHAR(20) DEFAULT NULL,
`cod_marca` VARCHAR(25) DEFAULT NULL,
`cod_unidad` VARCHAR(15) DEFAULT NULL,
`cod_alterno1` VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (`cod_producto`),
KEY `FK_tb_af_productos` (`cod_clasificacion`)
) ENGINE=MYISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
TABLA tb_af_subclasificacion
DROP TABLE IF EXISTS `tb_af_subclasificacion`;
CREATE TABLE `tb_af_subclasificacion` (
`cod_subclasificacion` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`descripcion` VARCHAR(100) NOT NULL,
`cod_estado` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1',
`cod_clasificacion` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`cod_subclasificacion`)
) ENGINE=MYISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
TABLA tb_cm_log
DROP TABLE IF EXISTS `tb_cm_log`;
CREATE TABLE `tb_cm_log` (
`ID_LOG` BIGINT(20) NOT NULL AUTO_INCREMENT,
`FECHA` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`MAQUINA` VARCHAR(30) NOT NULL,
126
`USUARIO` INT(3) NOT NULL,
`COD_MENU` INT(3) NOT NULL DEFAULT '0',
`OPCION` INT(2) NOT NULL DEFAULT '0',
`EST_EXPORT` INT(1) NOT NULL DEFAULT '0',
`DETALLE` TEXT,
`REFERENCIA` TEXT,
PRIMARY KEY (`ID_LOG`),
KEY `id_log` (`ID_LOG`) USING BTREE
) ENGINE=INNODB AUTO_INCREMENT=3486 DEFAULT CHARSET=utf8
ROW_FORMAT=COMPACT;
TABLA tb_cm_menu
DROP TABLE IF EXISTS `tb_cm_menu`;
CREATE TABLE `tb_cm_menu` (
`COD_IDIOMA` INT(2) NOT NULL,
`COD_MENU` INT(3) NOT NULL,
`TIP_MENU` INT(1) NOT NULL,
`DES_OPCION` VARCHAR(60) DEFAULT NULL,
`ICONO` VARCHAR(30) DEFAULT NULL,
`PROGRAMA` VARCHAR(100) DEFAULT NULL,
`COD_PADRE` SMALLINT(6) DEFAULT NULL,
`ORDEN` SMALLINT(6) DEFAULT NULL,
`COD_AMBIENTE` SMALLINT(6) DEFAULT NULL,
`DES_ENLACE` VARCHAR(60) DEFAULT NULL,
`FLG_PROCESO` TINYINT(4) DEFAULT '0',
`FLG_TOOLBAR` TINYINT(4) DEFAULT '0',
`COD_ESTADO` TINYINT(4) UNSIGNED NOT NULL,
`ETIQUETA` VARCHAR(45) NOT NULL,
PRIMARY KEY (`COD_IDIOMA`,`COD_MENU`,`TIP_MENU`)
127
) ENGINE=INNODB DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=1820
ROW_FORMAT=DYNAMIC;
TABLA tb_cm_perfiles
DROP TABLE IF EXISTS `tb_cm_perfiles`;
CREATE TABLE `tb_cm_perfiles` (
`COD_PERFIL` INT(3) NOT NULL AUTO_INCREMENT,
`DESCRIPCION` VARCHAR(60) NOT NULL,
`COD_ESTADO` INT(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`COD_PERFIL`)
) ENGINE=MYISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
ROW_FORMAT=COMPACT;
DATA PARA LA TABLA tb_cm_perfiles
INSERT INTO `tb_cm_perfiles`(`COD_PERFIL`,`DESCRIPCION`,`COD_ESTADO`)
VALUES
(1,'ADMINISTRADOR',1),
(2,'GERENTE DEPARTAMENTO',1),
(3,'OPERADOR',1),
(4,'CONTROL INTERNO',1),
(5,'SEGURIDAD',1);
TABLA tb_cm_perfiles_permisos
DROP TABLE IF EXISTS `tb_cm_perfiles_permisos`;
CREATE TABLE `tb_cm_perfiles_permisos` (
`cod_perfil` INT(11) NOT NULL,
128
`cod_menu` INT(11) NOT NULL,
`flg_ing` TINYINT(4) DEFAULT '0',
`flg_mod` TINYINT(4) DEFAULT '0',
`flg_eli` TINYINT(4) DEFAULT '0',
`flg_rep` TINYINT(4) DEFAULT '0',
`flg_con` TINYINT(4) DEFAULT '0',
`flg_pro` TINYINT(4) DEFAULT '0',
`flg_exp` TINYINT(4) DEFAULT '0',
`flg_cor` TINYINT(4) DEFAULT '0',
UNIQUE KEY `tb_perfiles_permisos_x` (`cod_perfil`,`cod_menu`)
) ENGINE=MYISAM DEFAULT CHARSET=utf8 ;
TABLA tb_cm_usuarios
DROP TABLE IF EXISTS `tb_cm_usuarios`;
CREATE TABLE `tb_cm_usuarios` (
`COD_USUARIO` INT(11) NOT NULL AUTO_INCREMENT,
`ID_USUARIO` VARCHAR(15) CHARACTER SET latin1 NOT NULL,
`NOMBRES` VARCHAR(60) NOT NULL,
`APELLIDOS` VARCHAR(60) NOT NULL,
`OBSERVACION` VARCHAR(100) DEFAULT NULL,
`COD_TIPO` INT(11) NOT NULL,
`COD_PERFIL` INT(11) DEFAULT NULL,
`COD_ESTADO` INT(11) NOT NULL,
`CLAVE` VARCHAR(60) DEFAULT NULL,
`EMAIL` VARCHAR(100) DEFAULT NULL,
`COD_SEG_IMG` SMALLINT(6) DEFAULT '1',
`FLG_BLOQUEADO` TINYINT(4) DEFAULT '0',
`FECHA_BLOQUEADO` DATETIME DEFAULT NULL,
`ID_ULTIMA_SESION` VARCHAR(60) DEFAULT NULL,
129
`FLG_MOD_CLAVE` TINYINT(4) DEFAULT '1',
`FECHA_MOD_CLAVE` DATETIME DEFAULT NULL,
`COD_MENU` SMALLINT(5) UNSIGNED DEFAULT NULL,
`COD_BODEGA` SMALLINT(6) DEFAULT NULL,
`CARGO` VARCHAR(45) NOT NULL,
`CEDULA` VARCHAR(10) NOT NULL,
`COD_GRUPO` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
`COD_SUPERVISOR` INT(10) UNSIGNED DEFAULT NULL,
`cod_departamento` INT(11) DEFAULT NULL,
PRIMARY KEY (`ID_USUARIO`),
UNIQUE KEY `tb_usuarios` (`COD_USUARIO`),
UNIQUE KEY `id_usuario` (`ID_USUARIO`)
) ENGINE=INNODB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8 ;
TABLA tb_cm_usuarios_permisos
DROP TABLE IF EXISTS `tb_cm_usuarios_permisos`;
CREATE TABLE `tb_cm_usuarios_permisos` (
`cod_usuario` INT(11) NOT NULL,
`cod_menu` INT(11) NOT NULL,
`flg_ing` TINYINT(4) DEFAULT '0',
`flg_mod` TINYINT(4) DEFAULT '0',
`flg_eli` TINYINT(4) DEFAULT '0',
`flg_con` TINYINT(4) DEFAULT '0',
`flg_rep` TINYINT(4) DEFAULT '0',
`flg_pro` TINYINT(4) DEFAULT '0',
`flg_exp` TINYINT(4) NOT NULL DEFAULT '0',
`flg_cor` TINYINT(4) NOT NULL DEFAULT '0',
UNIQUE KEY `tb_usuarios_permisos` (`cod_usuario`,`cod_menu`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 ;
130
TABLA tb_config_seguridad
DROP TABLE IF EXISTS `tb_config_seguridad`;
CREATE TABLE `tb_config_seguridad` (
`max_intento_login` SMALLINT(6) NOT NULL,
`tiempo_bloqueo_cuenta` SMALLINT(6) NOT NULL DEFAULT '5' COMMENT
'minutos',
`tiempo_caducidad_clave` INT(60) NOT NULL COMMENT 'dias',
`min_longitud_clave` TINYINT(4) NOT NULL DEFAULT '6',
`flg_letras_mayus_clave` SMALLINT(6) NOT NULL,
`flg_letras_minus_clave` SMALLINT(5) NOT NULL,
`flg_digitos_clave` SMALLINT(6) NOT NULL,
`flg_especiales_clave` SMALLINT(6) NOT NULL,
`caracteres_especiales_clave` VARCHAR(10) CHARACTER SET latin1 DEFAULT
NULL,
`min_clave_repetidas` SMALLINT(3) NOT NULL,
`max_usuarios_concurrentes` INT(10) NOT NULL,
`max_tiempo_inactividad` INT(2) NOT NULL COMMENT 'minutos',
`cod_usuario_editado` INT(1) NOT NULL,
`fecha_editado` DATETIME NOT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
TABLA tb_estado
DROP TABLE IF EXISTS `tb_estado`;
CREATE TABLE `tb_estado` (
`cod_estado` TINYINT(3) UNSIGNED NOT NULL,
`descripcion` VARCHAR(10) NOT NULL,
PRIMARY KEY (`cod_estado`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
131
DATA PARA LA TABLA tb_estado
INSERT INTO `tb_estado`(`cod_estado`,`descripcion`) VALUES
(0,'Inactivo'),
(1,'Activo');
TABLA tb_gen_tipo_identificacion
DROP TABLE IF EXISTS `tb_gen_tipo_identificacion`;
CREATE TABLE `tb_gen_tipo_identificacion` (
`cod_tipo` VARCHAR(10) NOT NULL,
`descripcion` VARCHAR(45) NOT NULL,
`cod_tipo_sri` VARCHAR(45) NOT NULL,
PRIMARY KEY (`cod_tipo`)
) ENGINE=MYISAM DEFAULT CHARSET=utf8;
DATA PARA LA TABLA tb_gen_tipo_identificacion
INSERT INTO `tb_gen_tipo_identificacion`(`cod_tipo`,`descripcion`,`cod_tipo_sri`)
VALUES
('C','CEDULA',''),
('P','PASAPORTE',''),
('R','RUC','');
TABLA tb_sg_empresa
DROP TABLE IF EXISTS `tb_sg_empresa`;
132
CREATE TABLE `tb_sg_empresa` (
`cod_empresa` INT(11) NOT NULL AUTO_INCREMENT,
`nom_empresa` VARCHAR(80) DEFAULT NULL,
`identificacion` VARCHAR(15) DEFAULT NULL,
`tipo_identificacion` VARCHAR(1) DEFAULT NULL,
`cod_estado` TINYINT(4) DEFAULT NULL,
PRIMARY KEY (`cod_empresa`)
) ENGINE=MYISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
133
ANEXO III
DIAGRAMA DE BASE DE DATOS
134
135
UNIVERSIDAD DE GUAYAQUIL
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA DE INGENIERÍA DE SISTEMAS
COMPUTACIONALES
ANEXO IV
MANUAL DE USUARIO
“DESARROLLO DE UN SISTEMA WEB, COMO HERRAMIENTA
DE APOYO EN EL CONTROL INTERNO DE EMPRESAS
INDUSTRIALES, QUE GENERE ALERTAS PARA UN
CORRECTO SEGUIMIENTO Y TRAZABILIDAD;
CON EL FIN DE MINIMIZAR PÉRDIDAS DE
ACTIVOS O ELEMENTOS QUE
SALEN DE LAS COMPAÑÍAS.”
Previa a la obtención del Título de:
INGENIERO EN SISTEMAS COMPUTACIONALES
AUTOR: JIMMY ALEXANDER VERA VERA
TUTOR: ING. VICENTE VIZUETA LOGROÑO, M.Sc.
GUAYAQUIL – ECUADOR
2018
136
MANUAL DE USUARIO
SISCAT
Sistema para el Control, Alerta y Trazabilidad de activos.
137
INGRESO AL SISTEMA
Para ingresar al Sistema Web, debemos hacerlo mediante cualquier navegador de
internet como lo son Internet Explorer, Mozilla, Google Chrome, entre otros.
Una vez en el navegador de internet, en la barra de dirección debemos digitar la
dirección Web o dirección IP proporcionada por el administrador del sistema, una vez
hecho esto tendremos la pantalla de inicio de sesión, donde el usuario autorizado
deberá digitar el nombre de usuario y la contraseña de acceso.
Si el usuario y contraseña son correctas, podremos ingresar al sistema.
REPORTE DE TRAZABILIDAD
Ya dentro del sistema la primera pantalla que visualizaremos por default será la de
Reporte de Trazabilidad, en el cual se muestran sombreados de color rojo, las
Órdenes vencidas, es decir, que aún no han llegado a su destino o no han retornado
de ser el caso.
138
Opciones de este reporte:
Con el fin de causar alerta y llamar la atención del usuario, se presenta las Órdenes de Salida vencidas sombreadas de color rojo.
Visualización de todos los eventos generados en el proceso: Creación, aprobación, auroización, usuarios, fechas, horas, estado, etc.
Permite visualizar el detalle de los activos en la Orden de Salida, así como la imagen del activo, además permite generar la orden de salida en formato pdf e imprimirla si es necesario.
Este reporte cuenta con filtros que nos permiten realizar consultas por rango de fechas, por activo (producto), por número de Orden de Salida, por tipo de salida (baja, mantenimiento, transferencia interna, transferencia externa.
139
Visualización de la imagen del activo.
Visualización del detalle de la orden de salida
140
En el reporte de Trazablidad, también podemos visualizar o generar la Orden de
Salida en formato de impresión (pdf).
El Sistema Web, SISCAT, presenta una barra de menú con las siguientes opciones
Reportes o Trazabilidad o Gráfico pastel o Gráfico barras
Mantenimiento
o Mantenimiento de usuarios o Mantenimiento de perfiles o Mantenimiento de empresa o Mantenimiento de bodega o Mantenimiento de clasificación o Mantenimiento de Subclasificación o Mantenmiento de sucursales o Mantenmiento de productos o Mantenimiento de departamento
o Mantenimiento de proveedores
141
Procesos o Orden de Salida o Aprobación Orden de Salida o Control Salida de Activos o Control de entrada de activos o Confirmación de entrada o Generar correo por alarma
REPORTES
Adicional al Reporte de Trazabilidad.el Sistema cuenta con dos reportes estadísticos:
Gráfico Pastel
Permite obtener un gráfico estadístico en forma de pastel, de las Órdenes de salida
de acuerdo al estado: En trámite, Exitosas y Vencidas, durante un periodo
determinado.
142
Gráfico Barras
Permite obtener un gráfico estadístico en forma de barras, de las Órdenes de Salida
de acuerdo al tipo: Baja, Mantenimiento, Trnaferencia Interna, Transferencia externa
o Venta, en un periodo determinado.
143
MENÚ PRINCIPAL DE MANTENIMIENTOS
Mantenimiento de usuarios:
Mediante esta opción podemos dar de alta, baja a los usuarios del Sistema, o
actualizar sus datos de ser necesario.
144
Mantenimiento de perfiles
Mediante esta opción podemos otrogar o denegar accesos a las opciones
del del Sistema, de acuerdo al perfil del usuario.
145
PROCESOS
Orden de Salida
El proceso de creación de Ordenes de Salida, está dividido en dos ventanas:
Cabecera, donde ira la información de la orden, tales como Fecha, usuario, Tipo de
Salida, Fecha de retorno, Proveedor, Sucursal, Dirección, Usuario que Recibe y
Concepto.
Y la ventana Productos, donde se escogerá el activo que va salir de acuerdo al
catalago, y se podrá subir una imagen del bien para evidenciar su estado (la imagen
es obligatoria).
146
147
Aprobación Orden de Salida
En esta opción el Gerente de área o usuario aprobador, podrá visualizar las
órdenes de salida que han sido creadas y que están pendientes por aprobar.
Deberá seleccionar la casilla Autorizar.
148
Una vez autorizada la orden se visualizará con un fondo verde.
Control Salida de Activos
El usuario de Seguridad y Control, debe ingresar el número de Orden de
Salida en el sistema y dar click en buscar. Si la Orden está creada y aprobada
por el Gerente de área, la podrá visualizar y autorizar la salida.
149
El usuario podrá visualizar la imagen del activo.
Cada evento de aprobación o autorización podrá visualizarse en el reporte de
trazabilidad.
Para que se cumpla el ciclo deberá haber una autorización de ingreso del
activo que lo realizará el usuario de Seguridad y Control cuando el bien llegue
a su destino, y luego debe haber una confirmación en el sistema por parte del
responsable del activo.
El flujo que debe seguir el sistema es el siguiente:
Creación O.S. (Responsable activo) Aprobación O.S. (Gerente) Control
Salida (Seguridad) Control Ingreso (Seguridad) Confirmación de entrada
(Nuevo responsable activo).
Generar correo por alarma
Este proceso permitirá mediante un botón, enviar correos masivos a los
usuarios que participaron en la creación, aprobación y verificación de las
Órdenes de Salida que estén vencidas, es decir, que no han llegado a su
destino, teniendo como referencia la fecha indicada en la Orden.
150
El sistema además envía correos de forma automática por eventos como
aprobación y autorización de Ordenes de Salida.