B-CISC-PTG.1383.Paz Castillo Luis Eduardo
B-CISC-PTG.1383.Paz Castillo Luis Eduardo
B-CISC-PTG.1383.Paz Castillo Luis Eduardo
UNIVERSIDAD DE GUAYAQUIL
PROYECTO DE TITULACIÓN
AUTOR:
Luis Eduardo Paz Castillo
TUTOR:
Ing. Fabricio Javier Sánchez Moreno Mgs.
GUAYAQUIL – ECUADOR
2017
REPOSITORIO NACIONAL EN CIENCIAS Y TECNOLOGÍA
FICHA DE REGISTRO DE TESIS
Título" sistema web de órdenes de trabajo para el registro, seguimiento y control de las labores en
la jefatura editorial e imprenta de la universidad de Guayaquil."
Revisores:
N°
Dirección url:
Adjunto PDF X Si No
Contacto de la institución:
Atentamente
A Dios por haberme permitido llegar a este punto con salud y estabilidad, a mis
padres Luis Paz y Carmen Castillo por ser el ejemplo de esfuerzo y superación
que tomé de modelo para nunca rendirme ante cualquier dificultad; agradezco
también al resto de mi familia y a todos aquellos que aportaron directa o
indirectamente para la elaboración de esta tesis.
_______________________________________ ________________________________________
Ing. Eduardo Santos Baquerizo, M.Sc. Ing. José Abel Alarcón Salvatierra, Mgs.
DECANO DE LA FACULTAD DE DIRECTOR DE LA CARRERA DE
CIENCIAS MATEMÁTICAS Y FÍSICAS INGENIERÍA EN SISTEMAS
COMPUTACIONALES
________________________________________ ________________________________________
Ing. Fabricio Javier Sánchez Moreno, Mgs. Ing. Johana Elizabeth Trejo Alarcón, Mgs.
PROFESOR TUTOR DEL ÁREA - PROFESOR REVISOR DEL PROYECTO DE
TRIBUNAL TITULACIÓN
_____________________________
Ab. Juan Chávez Atocha, Esp.
SECRETARIO
DECLARACIÓN EXPRESA
2
.
UNIVERSIDAD DE GUAYAQUIL
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
Proyecto de Titulación que se presenta como requisito para optar por el título de
INGENIERO EN SISTEMAS COMPUTACIONALES.
C.I. 0921215570
3
CERTIFICADO DE ACEPTACIÓN DEL TUTOR
CERTIFICO:
Presentado por:
4
UNIVERSIDAD DE GUAYAQUIL
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES
Publicación electrónica:
5
ÍNDICE GENERAL
6
CAPÍTULO II ..................................................................................................... 23
2. MARCO TEÓRICO ............................................................................... 23
2.1. Antecedentes del estudio ................................................................. 23
2.2. Fundamentación Teórica ................................................................. 24
2.2.1. Desarrollo Web............................................................................ 24
2.2.2. Scrum........................................................................................... 24
2.2.3. Laravel ......................................................................................... 26
2.2.4. Mvc .............................................................................................. 27
2.2.5. Framework ................................................................................... 28
a. Frameworks más usados en el mercado laboral .............................. 28
2.2.6. Aura. ............................................................................................ 28
2.2.7. Phalcon ........................................................................................ 29
2.2.8. Cakephp ....................................................................................... 29
2.2.9. Zend Framework ......................................................................... 29
2.2.10. Codeigniter............................................................................... 30
2.2.11. Symfony2 ................................................................................. 30
2.2.12. Laravel ..................................................................................... 31
2.2.13. Xampp ...................................................................................... 32
2.2.14. Apache ..................................................................................... 32
2.2.15. Base de datos Mysql ................................................................ 33
2.3. Fundamentación Legal .............................................................................. 34
2.3.1. Decreto 1014 ............................................................................................. 34
2.3.2. Sobre el uso del Software Libre ................................................................ 34
2.3.3. Ley de propiedad intelectual ..................................................................... 34
2.3.4. Ley orgánica de educación superior (loes)................................................ 35
2.3.5. 410 Tecnología de la Información ............................................................ 35
2.3.6. 410-04 Políticas y Procedimientos ............................................................ 35
2.3.7. 410-06 Administración de Proyectos Tecnológicos ................................. 36
2.3.8. Reglamentos a la ley de comercio electrónico, firmas electrónicas y
mensajes de datos. ................................................................................................. 36
CAPÍTULO III .................................................................................................... 39
3. PROPUESTA TECNOLÓGICA ................................................................ 39
3.1. Análisis de Factibilidad. ............................................................................ 39
3.1.1. Factibilidad Operacional ........................................................................... 40
7
3.1.2. Factibilidad Técnica .................................................................................. 41
3.1.3. Factibilidad Legal...................................................................................... 41
3.1.4. Factibilidad Económica ............................................................................. 42
a. Egresos de Software ........................................................................ 42
b. Egresos de Hardware....................................................................... 42
c. Egresos Varios ................................................................................ 42
d. Recurso Humano ............................................................................. 43
1. Programador en PHP, Laravel y Mysql .......................................... 43
e. Resumen total de egresos ................................................................ 43
3.2. Diagrama de caso de uso de Swot. ............................................................ 44
3.3. Diagrama de Secuencia ............................................................................. 51
3.4. Etapas de la metodología del proyecto...................................................... 51
3.4.1. Sprint No. 0 ................................................................................. 52
3.4.2. Sprint No. 1 ................................................................................. 52
3.4.3. Sprint No. 2 ................................................................................. 54
3.4.4. Sprint No. 3 ................................................................................. 59
3.4.5. Sprint No. 4 ................................................................................. 61
3.4.6. Sprint No. 5 ................................................................................. 63
3.4.7. Sprint No. 6 ................................................................................. 63
3.5. Modelo Entidad Relación.......................................................................... 68
3.6. Entregables del proyecto ........................................................................... 69
CAPÍTULO IV .................................................................................................... 70
RESULTADOS CONCLUSIONES Y RECOMENDACIONES .................... 70
4. Criterios de aceptación del producto o Servicio ........................................ 70
4.1. Matriz de aceptación ................................................................................. 70
4.2. Informe de aceptación y aprobación ......................................................... 71
4.3. Criterios de validación de la propuesta ..................................................... 67
4.4. Análisis de datos de encuesta de satisfacción del proyecto ...................... 68
Bibliografía ........................................................................................................... 80
Anexos .................................................................................................................. 81
8
ABREVIATURAS
9
ÍNDICE DE CUADROS
Pág.
CUADRO N. 1
Causas y consecuencias ................................................................................... 17
CUADRO N. 2
Delimitación del problema.................................................................................. 18
CUADRO N. 3
Plan de hosting contratado ................................................................................ 41
CUADRO N. 4
Detalles de egresos en hardware ...................................................................... 42
CUADRO N. 5
Detalle de egresos varios .................................................................................. 43
CUADRO N. 6
Egreso de RRHH ............................................................................................... 43
CUADRO N. 7
Detalle de egresos totales ................................................................................. 43
CUADRO N. 8
Requerimientos Funcionales ............................................................................. 70
CUADRO N. 9
Requerimientos no funcionales .......................................................................... 71
CUADRO N. 10
Plan de pruebas realizado ................................................................................. 67
CUADRO N. 11
Funcionalidad de SWOT .................................................................................... 68
CUADRO N. 12
Registro online de las órdenes de trabajo .......................................................... 69
CUADRO N. 13
Aceptación de interfaz de SWOT. ...................................................................... 70
CUADRO N. 14
Tiempo de respuesta de SWOT......................................................................... 71
CUADRO N. 15
Validaciones en SWOT ...................................................................................... 72
CUADRO N. 16
Acceso al sistema .............................................................................................. 73
CUADRO N. 17
Gestión de las órdenes de trabajo ..................................................................... 74
CUADRO N. 18
Gestión manual de las órdenes de trabajo ......................................................... 75
CUADRO N. 19
Gestión de trabajos y control de inventario ágil .................................................. 76
CUADRO N. 20
Administración del inventario llevado en Excel .................................................. 77
10
ÍNDICE DE GRÁFICOS
Pág.
GRÁFICO Nº 1
Estructura de Laravel ......................................................................................... 26
GRÁFICO Nº 2
Modelo-Vista-Controlador .................................................................................. 27
GRÁFICO Nº 3
Laravel y su funcionalidad ................................................................................. 31
GRÁFICO Nº 4
Panel de Control de Xampp ............................................................................... 32
GRÁFICO Nº 5
Funcionalidad de Apache .................................................................................. 33
GRÁFICO Nº 6
Funcionalidad de MySQL................................................................................... 33
GRÁFICO Nº 7
Diagrama de caso de uso de Swot .................................................................... 44
GRÁFICO Nº 8
Diagrama de caso de uso iniciar sesión............................................................. 45
GRÁFICO Nº 9
Diagrama de caso de uso gestión de materiales ............................................... 46
GRÁFICO Nº 10
Diagrama de caso de uso gestión de órdenes de trabajo en coordinación ........ 47
GRÁFICO Nº 11
Diagrama de caso de uso gestión de órdenes de trabajo en taller ..................... 47
GRÁFICO Nº 12
Diagrama de caso de uso gestión de órdenes de trabajo en gestión externa .... 48
GRÁFICO Nº 13
Diagrama de caso de uso gestión de órdenes de trabajo en recepción ............. 48
GRÁFICO Nº 14
Diagrama de caso de uso gestión de órdenes de trabajo en diseño .................. 49
GRÁFICO Nº 15
Diagrama de caso de uso gestión de usuarios en Swot ..................................... 50
GRÁFICO Nº 16
Diagrama de caso de uso usuarios visitantes .................................................... 50
GRÁFICO Nº 17
Diagrama de secuencia ..................................................................................... 51
GRÁFICO Nº 18
Framework Laravel en funcionamiento desde localhost ..................................... 53
GRÁFICO Nº 19
Interfaz principal de SWOT ................................................................................ 54
GRÁFICO Nº 20
Interfaz de ingreso de nueva orden de trabajo ................................................... 58
GRÁFICO Nº 21
Interfaz ingreso de nuevo cliente ....................................................................... 59
GRÁFICO Nº 22
Interfaz ingreso de nuevos materiales ............................................................... 60
GRÁFICO Nº 23
Interfaz ingreso de nueva categoría ................................................................... 61
GRÁFICO Nº 24
Interfaz ingreso de nueva categoría ................................................................... 62
11
GRÁFICO Nº 25
Interfaz ingreso de nuevo proveedor.................................................................. 62
GRÁFICO Nº 26
Interfaz ingreso de nuevo usuario ...................................................................... 63
GRÁFICO Nº 27
Interfaz de visualización de materiales ingresados ............................................ 64
GRÁFICO Nº 28
Interfaz de visualización de categorías ingresadas ............................................ 64
GRÁFICO Nº 29
Interfaz de visualización de stock de materiales ingresados .............................. 65
GRÁFICO Nº 30
Interfaz de visualización de proveedores ingresados ......................................... 65
GRÁFICO Nº 31
Interfaz de visualización de órdenes de trabajo ingresadas ............................... 66
GRÁFICO Nº 32
Interfaz de visualización de clientes ingresados ................................................ 66
GRÁFICO Nº 33
Interfaz de visualización de usuarios ingresados ............................................... 67
GRÁFICO Nº 34
Arquitectura del sistema .................................................................................... 67
GRÁFICO Nº 35
Diagrama relacional de Base de Datos MySql ................................................... 68
GRÁFICO Nº 36
Gráfico de funcionalidad de SWOT .................................................................... 68
GRÁFICO Nº 37
Gráfico de registro online de las órdenes de trabajo .......................................... 69
GRÁFICO Nº 38
Gráfico aceptación de interfaz de SWOT ........................................................... 70
GRÁFICO Nº 39
Gráfico de tiempo de respuesta de SWOT......................................................... 71
GRÁFICO Nº 40
Gráfico de validaciones en SWOT ..................................................................... 72
GRÁFICO Nº 41
Gráfico de acceso al sistema ............................................................................. 73
GRÁFICO Nº 42
Gráfico de gestión de las órdenes de trabajo ..................................................... 74
GRÁFICO Nº 43
Gráfico de gestión manual de las órdenes de trabajo ........................................ 75
GRÁFICO Nº 44
Gráfico de gestión de trabajos y control de inventario ágil ................................. 76
GRÁFICO Nº 45
Gráfico de la administración del inventario llevado en Excel .............................. 77
12
UNIVERSIDAD DE GUAYAQUIL
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES
RESUMEN
13
UNIVERSIDAD DE GUAYAQUIL
FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS
CARRERA DE INGENIERÍA EN SISTEMAS
COMPUTACIONALES
ABSTRACT
The work orders generated by the different administrative and academic units of
the University of Guayaquil are used for the development of daily activities in the
Publishing and Printing Headquarters, the development of this web system of work
orders programmed in the PHP language, With the Laravel framework and MySql
database, it will be used for the registration control and monitoring of all the orders
that enter daily, the degradation of the papers by the constant manipulation and
traspapeleo generate constant delays in the delivery of the works and in the
elaboration And reporting, this happens because all these processes are done
manually.
14
INTRODUCCIÓN
15
CAPÍTULO I
EL PROBLEMA
1.1. PLANTEAMIENTO DEL PROBLEMA
16
para elaborar una orden, o hacer la programación de gastos en pedidos para
abastecer la bodega con insumos y suministros que se requerirán en el siguiente
año, esto influye directamente en la entrega del trabajo, ya que la orden debe ser
entregada incompleta o se debe detener hasta que la bodega sea abastecida.
CUADRO N. 1
Causas y consecuencias
Causas Consecuencias
Desgaste de la tinta impresa en papel químico que provocaría
Constante manipulación de las
pérdida de información sobre el trabajo creando un conflicto y
órdenes de trabajo.
retrasando la entrega del mismo.
Almacenamiento de las órdenes
Deterioro de la documentación que provocaría pérdida de
de trabajo y sus anexos
información afectando a la elaboración de reportes mensuales.
agrupados en folders.
Distribución de la información de
Desperdicio de insumos y suministros al fotocopiar las órdenes
las órdenes de trabajo y anexos
de trabajos y anexos para entregar a todas las áreas.
en fotocopias.
Control de las labores del La pérdida de esta documentación provocaría que el personal no
personal en forma manual. pueda justificar sus labores y su responsabilidad en los trabajos.
La entrega de reportes con base de registros físicos provocaría
Elaboración de reportes con datos
una demora en la entrega del estado de una orden de trabajo.
tomados de registros físicos.
17
1.1.4. Delimitación del Problema
CUADRO N. 2
Delimitación del problema
Campo Área Aspecto Tema
Universidad de Editorial E Registro, control Órdenes de
Guayaquil Imprenta y seguimiento de Trabajo
las órdenes de
trabajo
Elaboración: Luis Eduardo Paz Castillo
Fuente: Editorial E Imprenta
18
1.1.6.4. Contextual: Es transcendental destacar la implementación del sistema
de órdenes de trabajo, para gestionar las labores internas, tener
acceso a la información y generar reportes actualizados llevando un
control adecuado del inventario.
1.2. OBJETIVOS
19
1.3. ALCANCES DEL PROBLEMA
20
La diagramación e impresión de títulos universitarios, diplomas y certificados
representan los documentos de mayor importancia trabajados en la Editorial,
estos se elaboran bajo estrictas medidas de seguridad impuestas por el Jefe a
cargo, son solicitados por las unidades académicas y/o administrativas, su
elaboración se la realiza de manera aislada y pasa por varios filtros antes de ser
entregados, de la misma manera se maneja la impresión del material utilizado en
las votaciones con la diferencia que en este proceso interviene todo el personal
de la Editorial junto con la autoridad encargada responsable de la facultad, de
donde se realiza la elección, las unidades administrativas solicitan una gran
variedad de trabajos los cuales son manejados dependiendo la labor por las
áreas de diseño, impresión o manufactura.
21
El sistema se usará exclusivamente en la Universidad de Guayaquil, por el
personal de la Editorial E Imprenta.
Solo serán subidas al sistema las órdenes de trabajo, que cuenten con la
firma autorizada de la autoridad responsable y el jefe o subrogantes a
cargo.
El Jefe de la Editorial, el coordinador general y el encargado del área de
sistemas son los únicos que tendrán el acceso de super-administrador al
sistema web de órdenes de trabajo.
Revisar que las validaciones cumplan con los datos que se necesitan para
el ingreso de datos a la base de datos.
Verificar que los datos ingresados a la base sean correctos conforme a las
órdenes de trabajo.
22
CAPÍTULO II
2. MARCO TEÓRICO
23
reportes de las órdenes orientado a información variada. GB System (2014) ofrece
una plataforma web para gestión de las órdenes de trabajo a empresas dedicadas
al soporte técnico de las industrias, maneja internamente órdenes de trabajo,
presupuestos, registros de clientes y reportes.
Los sistemas en el mercado son de gran utilidad para gestionar las órdenes de
trabajo, sin embargo no siguen la misma línea de negocio por lo que no pueden
ser utilizados en una editorial. El proyecto que se desarrollará siguiendo la
metodología SCRUM, esto ayudará a medir los avances mediante sprint en
reuniones donde el cliente prueba el avance del producto y lo aprueba tal y como
esta o sugiere cambios. Trigas (2012) menciona que esta metodología es una
técnica que mejora la comunicación entre cliente y proveedor, optimizando la
productividad de los equipos de trabajo, promoviendo la innovación, motivación y
el compromiso de los equipos involucrados, además reduce el margen de error y
los riesgos del proyecto cuyo principal objetivo es optimizar el retorno de la
inversión.
Garro (2014) afirma que es un término amplio para el trabajo asociado con la
construcción de un sitio para Internet o una intranet (un sistema privado). La
mejora de la web puede extenderse desde la creación de la página estática más
sencilla de contenido simple hasta las aplicaciones electrónicas en línea más
complejas (o simplemente "aplicaciones web").
2.2.2. Scrum
24
empresas como ONDA, CANNON y FUJI fueron las pioneras en implementar esta
metodología en sus equipos de trabajo.
1. Se define el backlog
Un sprint es cada una de las fases del proyecto donde se presentan los avances
al cliente, donde el cliente prueba el producto y lo aprueba tal y como está o
sugiere cambios, a estos cambios se les asigna una prioridad y se decide si se
ejecutan en el momento o se mandan a un segundo backlog, es decir a una lista
de pendientes para ejecutarse posteriormente, el gran beneficio de trabajar en
forma colaborativa y repetitiva es que el cliente conoce en la etapa en que se
encuentra su proyecto, y junto con el equipo de trabajo redefine los requerimientos
según el avance del mismo.
Scrum se utiliza para trabajar de una manera ágil los proyectos en el menor tiempo
y costo posible, es una técnica que mejora la comunicación entre cliente y
proveedor optimizando la productividad de los equipos de trabajo, es una
metodología de trabajo que promueve la innovación, motivación y el compromiso
de los equipos involucrados, además reduce el margen de error y los riesgos del
proyecto siendo el principal objetivo optimizar el retorno de la inversión (Trigas,
2012).
25
2.2.3. Laravel
26
Funcionamiento del proyecto:
2.2.4. Mvc
GRÁFICO Nº 2 Modelo-Vista-Controlador
Elaboración: Luis Eduardo Paz Castillo
Fuente: MVC
Ruiz-Álvarez (2015) menciona que una idea que se utiliza mucho mientras se
explica el MVC es la "línea del negocio". Es un arreglo de principios que se siguen
en el producto para responder ante diversas circunstancias. En una aplicación el
cliente utiliza el Framework a través de una interfaz, pero cuando se activa la
interfaz para realizar actividades con el programa, se ejecuta una sucesión de
procedimientos que se conocen como la razón del negocio. Esta es una idea de
la mejora de la programación como una regla.
27
a. Modelo
b. Vista
Ruiz-Álvarez (2015) Como su nombre nos hace entender, este contiene el código
de nuestra aplicación que producirá la visualización de las interfaces para los
usuarios, entonces indica la codificación con la cual se renderizará los estados de
la aplicación desarrollada en HTML. En las vistas sólo tenemos los códigos HTML
y PHP que nos permiten mostrar la salida.
c. Controlador
2.2.5. Framework
Parra-Garofalo (2015) lo definen como una estructura que tiene como objetivo
general ofrecer una funcionalidad definida. Es una forma de trabajar para
desarrollar y/o usar un sistema, ya que nos proporciona una variedad de
herramientas (librerías, utilidades) ajustados a la estructura sólida para promover
la mejora. En general, las estructuras tienen multitud de ingenieros en
comunidades que ofrecen ayuda y simplifican la vida para que nos concentremos
en que ofrecerle al usuario para generarle valor y no desarrollar desde el inicio el
código que ya ha sido probado.
2.2.6. Aura.
Aura (2017) afirma que la particularidad que presenta en las librerías que tiene
puede ser usada como paquetes independientemente en cualquier código que
tengamos como base.
28
Que el proyecto se centra en torno a una colección de paquetes de bibliotecas
independientes de alta calidad, probados, con versiones semánticas y compatibles
con los estándares, que pueden utilizarse en cualquier base de código.
Cada biblioteca es autónoma y sólo tiene las cosas que necesita para su propósito
principal. Ninguno de los paquetes de la biblioteca depende de ningún otro
paquete. Están desacoplados, no sólo de un marco particular, sino también de
cada uno. Esto significa que los desarrolladores pueden usar todo o un poco del
proyecto como sea requerido.
Es usado por programadores que crean sus librerías propias, así no se contamina
demasiado el proyecto con paquetería innecesaria, se puede exportar estos
paquetes de librerías a otros Framework.
2.2.7. Phalcon
Phalcon (2017) manifiesta que es de código abierto full-stack para lenguaje PHP,
fue escrito como una extensión en lenguaje C, optimizado para tener un tiempo
de respuesta rápido. No es necesario aprender a programar en C para poder
utilizarlo, la funcionalidad total está expuesta en clases PHP listas paras para su
uso.
Diseñado para la rapidez, es con seguridad el Frameworks más rápido existente
hoy día y ofrece un gran porcentaje de los recursos que se necesitan hoy en para
programar un proyecto ágil y fresco. Tras innumerables pruebas este sigue siendo
el Frameworks con más rendimiento a la hora de programar un proyecto web, sea
cual sea su complejidad y complejidad, ofrece todas las características necesarias
para ello, además de un entorno de fácil aprendizaje e intuitivo.
2.2.8. Cakephp
Cakephp (2017) indica que suministra una base fuerte para desarrollar las
aplicaciones, engargantándose de todo, desde la petición se realiza al inicio el
usuario hasta el desarrollo del código HTML final. Siguiendo los fundamentos de
MVC, permite caracterizar y ampliar fácilmente cada una de sus partes,
proporciona una estructura organizacional iniciando en los nombres de los ficheros
y hasta el nombre de las tablas en la base.
Zend (2017) afirma que es una colección de paquetes PHP profesionales con más
de 155 millones de instalaciones. Puede usarse para desarrollar aplicaciones web
29
y servicios utilizando PHP 5.6+, y proporciona código 100% orientado a objetos
usando un amplio espectro de características de lenguaje.
Utiliza Composer como un gestor de dependencias de paquetes; PHPUnit para
probar todos los paquetes; Y Travis CI como un servicio de Integración Continua,
también sigue los estándares de PHP-FIG, e incluye una implementación de PSR-
7 para interfaces de mensajes HTTP (como guiado por Matthew Weier O'Phinney,
líder del proyecto Zend Framework).
2.2.10. Codeigniter
2.2.11. Symfony2
30
2.2.12. Laravel
Cuenta con su propio motor de plantillas que tiene por nombre Blade, con el cual
facilita el desarrollo de código sobre sus plantillas directamente, ahorrando
posibles líneas innecesarias aligerando el trabajo, facilitando las tareas de
autenticación, enrutamiento, sesiones y el almacenamiento en caché haciendo de
la programación una experiencia agradable y creativa.
Por todas estas virtudes frente a otros framework que existen en el mercado el
Departamento de Gestión tecnológica de la Información en su División Centro de
Computo de la Universidad de Guayaquil, requiere que todos los sistemas web
que sean desarrollados para las diferentes unidades académicas y administrativas
estén bajo esta plataforma.
31
2.2.13. Xampp
Apache (2017) menciona que el objetivo de XAMPP es crear una distribución fácil
de instalar y manejar para programadores que están iniciando en el mundo de la
programación web. XAMPP viene configurado por defecto con todas las opciones
activadas. Es de uso gratuito tanto para usos comerciales como no comerciales.
En caso de usar XAMPP comercialmente, hay que asegurarse de que cumplir con
las licencias del productos. Actualmente XAMPP tiene instaladores para Windows,
Linux y OS X.
2.2.14. Apache
Canepa (2016) menciona que es un software que sirve para levantar localmente
aplicaciones web asignando puertos específicos para ello. Es el servidor web con
mayor número de instalaciones a nivel mundial al ser un proyecto de código
abierto, gratuito, multiplataforma y robusto que sobresale por su seguridad y
rendimiento.
Atiende eficientemente un gran número de peticiones HTTP, incluyendo la
ejecución multitarea ya que soporta peticiones simultaneas, restringe el acceso a
los ficheros que se requieran, gestiona las solicitudes de inicio de sesión, filtra las
peticiones según sean el origen de estas, maneja errores por páginas no
encontradas informando al usuario, redirige a paginas por defecto, gestiona la
información que transmite comunicándose con el navegador.
32
GRÁFICO Nº 5 Funcionalidad de Apache
Elaboración: Luis Eduardo Paz Castillo
Fuente: Apache Friends
33
MySql (2017) afirma que "es la base de datos de código abierto más conocida del
planeta, potenciando el conocimiento financiero de aplicaciones de bases de datos
electrónicas adaptables e incorporadas, incluyendo cinco de los cinco principales
sitios de élite y fiabilidad. Ayuda especializada para crear, enviar y tratar con sus
aplicaciones siendo un espectacular gestor de bases de datos que hace alusión a
la estructura de un modelo social, los datos que maneja dependiendo del proyecto
pueden ser sencillos como complejos.
En cuanto a lo que tiene que ver con leyes de programas de ordenadores se citan
los siguientes artículos:
34
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
morales sobre la obra, incluyendo la facultad para decidir sobre su divulgación.
Las disposiciones del presente artículo podrán ser modificadas mediante acuerdo
entre los autores y el productor.
Normas de control interno para las entidades, organismos del sector público
y de las personas jurídicas de derecho privado que dispongan de recursos
públicos.
35
La unidad de tecnología de información definirá, documentará y difundirá las
políticas, estándares y procedimientos que regulen las actividades relacionadas
con tecnología de información y comunicaciones en la organización, estos se
actualizarán permanentemente e incluirán las tareas, los responsable de su
ejecución, los procesos que están normando, así como, las sanciones
administrativas a que hubiere lugar si no se cumplieran.
36
¿La disminución del tiempo en la entrega de trabajos y elaboración de reportes
mejorara con la disponibilidad y administración de la información a través del
sistema Web?
2.5.1. Internet La red que integra todas las redes, inventada en 1970 a mediados
de década, con la protección de DARPA, quien Inició un programa de
investigaciones avanzadas para unir a diversas redes de sistemas para
intercambio de paquetería, permitiendo así a los ordenadores relacionarse
entre sí en estas redes para transmitir datos de forma sencilla.
2.5.5. Usuario web Persona o personas que a través de una conexión a internet
y con un dispositivo móvil u ordenador accede a uno o varios sistemas
web.
37
2.5.7. Browser Es una aplicación que se instala en un dispositivo móvil u
ordenador, utilizado para acceder a las páginas web por medio de una url.
2.5.8. Cargar archivo vía web Seleccionar un archivo ya sea foto, documento,
audio, video, etc. desde una página para que sea transferida a su lugar de
destino.
2.5.13. Página web Una página Web es un archivo escrito en lenguaje HTML con
php, java script, etc. pueden ser prácticamente de cualquier tamaño y
mostrar mucho contenido textual o multimedia (fotos, videos, audios).
38
CAPÍTULO III
3. PROPUESTA TECNOLÓGICA
39
evidencian en los informes realizados por coordinación general, demuestra que
estos presentan demoras muy significativas desde el ingreso hasta su entrega.
40
usuario la realización de sus actividades de una manera intuitiva por lo se podrán
adaptar a su manejo en un lapso corto de tiempo.
CUADRO N. 3
Plan de hosting contratado
Plan de Hosting Contratado
Nombre: Gold PHP
Servicios HD
Almacenamiento HD de espacio Ilimitado
Servicios Memoria
Server - Memoria RAM 128GB
Sistema Operativo Centos
Otras Características
Uso del FTP Ilimitado
Base de Datos MySql Ilimitado
Selector de Versiones PHP: 5.3, 5.4, 5.5, 5.6 , 5.7 , 6.0, SÍ
7.0 - Versión del servidor: 10.0.21 – MariaDB
Características Avanzadas
Servidor Apache SÍ
Elaboración: Luis Eduardo Paz Castillo
Fuente: Ecuaweb
41
internet y que actualmente tienen soporte por un tiempo más prolongado. No se
incumple con ninguna normativa legal y se adapta a los mandatos constitucionales
y normativas establecidas en el código de propiedad intelectual y en el Decreto
1014 aprobado y firmado por el Eco. Rafael Correa expresidente del Ecuador.
a. Egresos de Software
b. Egresos de Hardware
CUADRO N. 4
Detalles de egresos en hardware
Valor Valor
Hardware
Unitario Total
Laptop (Procesador I7 7ma Gen, Ram 8Gb,
Disco Duro SSD 500Gb, S.O. Windows 10, Wifi $1200,00 $1200,00
AC)
Egreso Total $1200,00
Elaboración: Luis Eduardo Paz Castillo
Fuente: Laptop Dell
c. Egresos Varios
42
CUADRO N. 5
Detalle de egresos varios
Software Subtotal Total
Internet $110,00
Comidas $160,00
Movilización $190,00
Insumos y Suministros $500,00
$1130.00
Varios $170,00
Elaboración: Luis Eduardo Paz Castillo
Fuente: Datos del proyecto
d. Recurso Humano
Para desarrollar el proyecto fue necesario contar con recurso humano que cumpla
con el perfil apropiado para trabajar en el proyecto, como se puede observar en el
cuadro No. 6
CUADRO N. 6
Egreso de RRHH
Valor por Valor
Personal
Persona Total
CUADRO N. 7
Detalle de egresos totales
43
3.2. Diagrama de caso de uso de Swot.
Registrar
Abastecimiento de Materiales
Reporte y visualización de
Categoría de Materiales
Modificar
Materiales
Registrar
Categoría de Materiales
Visualización de avance de
Órdenes de trabajo
Registrar
Órdenes de trabajo
Registrar Rol a
Usuarios
Registro de
Avances de OT
| Modificar
Estado de OT
Reporte y visualización de
Proveedores
Registrar
Proveedores
Reporte y visualización de
Clientes
Modificar
Clientes
Registrar
Clientes
Modificar
Proveedores
44
Caso de uso iniciar sesión
Iniciar sesión
Cerrar sesión
45
Descripción del caso de uso
Caso de uso: Iniciar sesión
Bodeguero, coordinador general, administrador,
Actores: coordinador de diseño, recepcionista, gestionador externo,
coordinador de taller, visitantes
Propósito: Ingreso al sistema con validaciones
Precondiciones: Es necesario estar previamente registrado
Se valida el usuario, dependiendo de su rol tendrá acceso a
Flujo Principal: las opciones correspondientes
Excepciones: Se valida el usuario, si es este no ingresa los datos
correctamente se vuelve a pedir el ingreso de los datos.
SWOT
Consultar
Materiales
Modificar
Categoría de Materiales
Registrar
Materiales
Reporte y visualización de
Abastecimiento de Materiales
Registrar
Abastecimiento de Materiales
Reporte y visualización de
Categoría de Materiales
Modificar
Materiales
Registrar
Categoría de Materiales
46
Caso de uso gestión de órdenes de trabajo en coordinación
SWOT
Visualización de avance de
Órdenes de trabajo
Registrar
Órdenes de trabajo
Modificar
Avances de OT
Registro de
Avances de OT
Modificar
Estado de OT
47
Dependiendo de la acción a realizarse se escogerá la
Flujo Principal: opción disponible en el rol para la gestión de las órdenes
de trabajo en taller
Se valida los datos ingresados, si estos no son correctos
Excepciones:
se vuelve a pedir el ingreso de la información nuevamente.
SWOT Modificar
Estado de OT
Reporte y visualización de
Clientes
Modificar
Clientes
Registrar
Clientes
Modificar
Proveedores
48
Descripción del caso de uso
SWOT
Registrar
Avances de OT
Modificar
Estado de OT
49
Caso de uso gestión de usuarios en Swot
SWOT
Registrar Rol a usuarios
Modificar información de
usuarios
SWOT
Visualización de avance de
Órdenes de trabajo
50
3.3. Diagrama de Secuencia
51
A continuación siguiendo el esquema de desarrollo de la metodología Scrum se
procede a realizar y documentar los Sprints para cumplir con la elaboración del
proyecto:
a. Xampp,
b. Laravel,
c. Artisan,
d. Mysql,
e. Composer
52
GRÁFICO Nº 18 Framework Laravel en funcionamiento desde localhost
Elaboración: Luis Eduardo Paz Castillo
Fuente: Framework Laravel 5
Menú y Submenú:
a. Menú Estadísticas
- Inventario
b. Menú Inventario
- Sub-menú Materiales
- Sub-menú Categorías
c. Menú Abastecimiento
- Sub-menú Ingresos
- Sub-menú Proveedores
d. Menú Órdenes de Trabajo
- Sub-menú OT
- Sub-menú Clientes
- Progreso
- Gestión
e. Menú RRHH
- Sub-menú Usuarios
53
f. Enlace externo Office 365
g. Enlace externo SIUG
h. Enlace externo Quipux
i. Enlace externo Descargas Repositorio U.G.
j. Acerca de Proyecto SWOT
1. Solicitante (esta opción realizará la búsqueda del cliente que está registrado
previamente en el sistema)
54
4. Número (se ingresará el número correspondiente a la orden)
5. Autoridad Responsable (se despliega opciones a escoger)
- Seleccione uno
- Rectorado
- Vicerrectorado de Investigación, Gestión del conocimiento y Posgrado
- Vicerrectorado de Internalización y Movilidad Académica
- Vicerrectorado de Formación Académica y Profesional
- Vicerrectorado de Bienestar Estudiantil
- Gerencia Administrativa
- Dirección Administrativa
- Secretaría General
- Editorial E Imprenta
6. Unidad o Dependencia (esta opción mostrará múltiples opciones a escoger)
- Seleccione uno
- Apug
- Contabilidad
- Coordinación de Comunicación y Difusión de la Información
- Coordinación General de Planificación, Acreditación y Evaluación
Institucional
- Dirección Administrativa
- Dirección de Admisión y Nivelación
- Dirección de Atención Integral
- Dirección de Cooperación Nacional e Internacional
- Dirección de Formación Universitaria
- Dirección de Gestión de Proyectos Internacionales
- Dirección de Gestión del Personal Académico
- Dirección de Gestión Social del Conocimiento
- Dirección de Gestión Tecnológica de la Información
- Dirección de Inclusión de Estudiantes y Graduados
- Dirección de Infraestructura y Obras Universitarias
- Dirección de Investigación
- Dirección de Movilidad Académica
- Dirección de Posgrado
- Dirección de Talento Humano
- Dirección Financiera
- Dirección General de Planificación, Acreditación y Evaluación Institucional
- Facultad de Arquitectura y Urbanismo
55
- Facultad de Ciencias Administrativas
- Facultad de Ciencias Agrarias
- Facultad de Ciencias del Desarrollo
- Facultad de Ciencias Económicas
- Facultad de Ciencias Matemáticas y Físicas
- Facultad de Ciencias Médicas
- Facultad de Ciencias Naturales
- Facultad de Ciencias Odontológicas
- Facultad de Ciencias Psicológicas
- Facultad de Ciencias Químicas
- Facultad de Comunicación Social
- Facultad de Educación Física, Recreación y Deportes
- Facultad de Filosofía, Letras y Ciencias de la Educación
- Facultad de Ingeniería Industrial
- Facultad de Ingeniería Química
- Facultad de Jurisprudencia, Ciencias Sociales y Políticas
- Facultad de Medicina Veterinaria y Zootecnia
- Focsu
- Gerencia Administrativa
- Jefatura de Acreditación de carreras y programas
- Jefatura de Acreditación Institucional
- Jefatura de Activos Fijos
- Jefatura de Adquisiciones
- Jefatura de Análisis, Desarrollo e Implementación de Sistemas
- Jefatura de Asesoría Jurídica y Contratación Pública
- Jefatura de Asuntos Legales y Laborales
- Jefatura de Capacitación de desempleo
- Jefatura de Control de Nóminas
- Jefatura de Control y Seguridad
- Jefatura de Desarrollo Normativo
- Jefatura de Fiscalización y Construcción
- Jefatura de Infraestructura
- Jefatura de Infraestructura Informática
- Jefatura de Patrocinio
- Jefatura de Planificación de Obras
- Jefatura de Planificación y proyectos de Inversión
- Jefatura de Presupuesto
56
- Jefatura de Procesos y Calidad de la Gestión Institucional
- Jefatura de Proveeduría
- Jefatura de Seguimiento y Gestión de la Información
- Jefatura de Seguridad y Salud Ocupacional
- Jefatura de Selección y Admisión
- Jefatura de Servicios Generales
- Jefatura de Sustanciación
- Jefatura de Tesorería
- Jefatura Editorial E Imprenta
- Procuraduría Síndica
- Rectorado
- Secretaría General
- Vicerrectorado de Bienestar Estudiantil
- Vicerrectorado de Formación Académica y Profesional
- Vicerrectorado de Internalización y Movilidad Académica
- Vicerrectorado de Investigación, Gestión del conocimiento y Posgrado.
7. Número de Oficio (permitirá ingresar la nomenclatura y el número correspondiente
al oficio)
8. Resumen de oficio (permitirá ingresar el detalle del oficio)
9. Nombre de archivo adjunto (permitirá ingresar el título correspondiente al archivo
adjunto)
10. Medio de entrega (se mostrará opciones a escoger)
- CD
- Correo
- Pendrive
- Tarjeta de memoria
11. Tipo de Archivo (se mostrará opciones del tipo de archivo a escoger)
- Word
- Pdf
- Excel
- Fotografía
- Adobe Illustrator
- Adobe Photoshop
- Adobe Indesign
12. Muestra impresa adjunta (se mostrará opciones a escoger)
- Si
- No
57
13. Tipo de acabado requerido (se mostrará opciones a escoger)
- Barnizado
- Laminado
- Otro
14. Diseñador(es) (se ingresará el o los diseñadores que realizarán el arte)
15. Operador(es) (se ingresará el o los operadores que realizarán el arte)
16. Artesano(s) (se ingresará el o los artesanos que realizarán el arte)
17. Autorizó (se mostrará opciones a escoger)
- Ing. Enrique Castillo
- Ing. Diana Abad
- Sr. Luis Carcelén
18. Recorrido (se mostrará opciones a escoger)
- Recepción
- Coordinación general
- Jefatura
- Diseño
- Máquinas
- Manufactura
- En Percha
- Cliente
58
b. Desarrollo de Página: Clientes
59
Categoría (se escogerá la categoría previamente guardada).
60
GRÁFICO Nº 23 Interfaz ingreso de nueva categoría
Elaboración: Luis Eduardo Paz Castillo
Fuente: Framework Laravel 5
Nuevo ingreso
61
GRÁFICO Nº 24 Interfaz ingreso de nueva categoría
Elaboración: Luis Eduardo Paz Castillo
Fuente: Framework Laravel 5
62
3.4.6. Sprint No. 5
63
GRÁFICO Nº 27 Interfaz de visualización de materiales ingresados
Elaboración: Luis Eduardo Paz Castillo
Fuente: Framework Laravel 5
64
GRÁFICO Nº 29 Interfaz de visualización de stock de materiales ingresados
Elaboración: Luis Eduardo Paz Castillo
Fuente: Framework Laravel 5
65
GRÁFICO Nº 31 Interfaz de visualización de órdenes de trabajo ingresadas
Elaboración: Luis Eduardo Paz Castillo
Fuente: Framework Laravel 5
66
GRÁFICO Nº 33 Interfaz de visualización de usuarios ingresados
Elaboración: Luis Eduardo Paz Castillo
Fuente: Framework Laravel 5
67
3.5. Modelo Entidad Relación
68
3.6. Entregables del proyecto
Con la programación del sistema web de órdenes de trabajo, se tendrá un medio
eficaz para el registro, control y seguimiento de las labores internas. El sistema
completo será copiado en un espacio del hosting alquilado de la Editorial, se
accederá a él desde un subdominio creado a partir de su dominio principal.
Se entregan:
69
.
CAPÍTULO IV
RESULTADOS CONCLUSIONES Y RECOMENDACIONES
4. Criterios de aceptación del producto o Servicio
4.1. Matriz de aceptación
CUADRO N. 8
Requerimientos Funcionales
Código Requerimientos
RF-001 El usuario cuenta con una interfaz capaz de registrar la información de la
orden de trabajo, agregar el material que va a utilizar en la misma
disminuyéndola por medio de la aplicación de un triguer del stock
RF-002 El sistema le permite a los usuarios agregar nuevos materiales al inventario
y relacionarlo con la categoría a la que previamente se ha guardado
RF-003 Swot permite registrar nuevas categorías para clasificar los materiales
ingresados
RF-004 El sistema le facilita al usuario el registro de proveedores mismos que
pueden ser seleccionados en el abastecimiento de materiales para que se
pueda identificar el origen de cada material
RF-005 El proyecto cuenta con el registro de clientes mismo que son vinculados en
las órdenes de trabajo al ingresarlas
RF-006 Mediante la interfaz el sistema permite el registro de usuarios ingresando el
correo y contraseña para su respectivo acceso
RF-007 La interfaz presenta automáticamente en orden descendente paginando de
10 en 10 las ordenes de trabajado registradas
RF-008 La interfaz presenta automáticamente en orden descendente paginando de
10 en 10 los materiales del inventario registrados
RF-009 La interfaz presenta automáticamente en orden descendente paginando de
10 en 10 las categorías de los materiales registrados
RF-010 La interfaz presenta automáticamente en orden descendente paginando de
10 en 10 los proveedores registrados
RF-011 La interfaz presenta automáticamente en orden descendente paginando de
10 en 10 los clientes registrados
RF-012 La interfaz presenta automáticamente en orden descendente paginando de
10 en 10 los usuarios registrados
RF-013 El sistema presenta los materiales más utilizados y los valores de ingresos
y egresos de materiales del inventario por día, mes y año.
RF-014 El proyecto se programó en el Framework Laravel mismo que incorpora
MVC, arquitectura de que separa la interfaz de usuario de los datos de la
aplicación y la lógica de control en componentes distintos
Elaboración: Luis Eduardo Paz Castillo
Fuente: Jefatura Editorial E Imprenta
70
CUADRO N. 9
Requerimientos no funcionales
Código Descripción de requerimientos no funcionales
RNF-001 La programación del sistema siguiendo las políticas del Centro
de Cómputo de la Universidad se debe efectuar utilizando
herramientas de software libre.
RNF-002 El sistema web debe ser desarrollado de tal manera que todos los
navegadores más utilizados como Google Chrome, Firefox Mozilla,
Edge puedan visualizarlo sin ningún inconveniente.
Una vez culminada la programación del proyecto, los usuarios realizaron las
pruebas necesarias en cada ítem de cada una de las pantallas, obteniendo
respuestas favorables en las opciones desarrolladas:
Registro de órdenes de Reportes de registros de
trabajo y materiales que se proveedores
utilizarán en la misma. Reportes de registros de
Registro de materiales en clientes
inventario Visualización de órdenes de
Registro de categorías de trabajo y materiales que se
materiales utilizarán en la misma.
Registro de proveedores Visualización de materiales
Registro de clientes en inventario
Registros de usuarios Visualización de categorías
Reportes de registros de de materiales
órdenes de trabajo Visualización de proveedores
Reportes de registros de Visualización de clientes
materiales en inventario Visualización de usuarios
Reportes de registros de
categorías de materiales
71
4.3. Criterios de validación de la propuesta
Con el objetivo de validar el sistema web, se realizó varios tipos de pruebas por
parte de los 26 funcionarios de la Jefatura, los resultados se pueden visualizar en
el cuadro No. 8, y la petición de estas pruebas se muestran en el anexo No. 4, se
las realizó mientras transcurría la capacitación, permitiéndoles registrarse con un
usuario y clave con rol de acceso total, de esta manera poder validar cada opción
del sistema, en medio de este estudio se levantó la información necesaria que
comprobó que cubre las necesidades de cada una de las áreas de la Editorial:
jefatura, coordinación general, diseño, manufactura y máquinas.
CUADRO N. 10
Plan de pruebas realizado
Acción Tipo de Prueba Resultado Deseado Resultado Adquirido Conclusión
Acceso al Todos los usuarios El ingreso fue Actividad
sistema por Se realizó la ejecución del pueden iniciar sesión placentero para los superada
medio del framework desde el hosting funcionarios con éxito
subdominio
Se muestran los diferentes Los usuarios pueden
Registro de campos para rellenar la Lo usuarios pueden registrar la información Actividad
categorías de información de la categoría guardar adecuadamente de la categoría de los superada
materiales del material la información materiales con éxito
Se muestran los diferentes Los usuarios pueden Los usuarios pueden Actividad
Registro de campos para rellenar la guardar adecuadamente registrar la información superada
materiales información del material la información de los materiales con éxito
Se muestran los diferentes Los usuarios pueden
Ingreso de campos para rellenar la Los usuarios pueden registrar la información Actividad
proveedores información de los guardar adecuadamente del proveedor de superada
de materiales proveedores de materiales la información materiales con éxito
Abastecer Se muestran los diferentes Los usuarios pueden Los usuarios pueden Actividad
stock de campos para agregar stock guardar adecuadamente registrar la información superada
materiales a los materiales disponibles la información de los materiales con éxito
Selección e
Ingreso de
información Se muestra al usuario todos Los usuarios pueden Los usuarios pueden Actividad
de órdenes los campos para llenar y seleccionar opciones e ingresar la información superada
de trabajo seleccionar opciones ingresar datos de las órdenes con éxito
Se muestra al usuario los Todos los usuarios
Selección de materiales que están Selección adecuada del pueden seleccionar losActividad
material en disponibles en bodega y material y cantidad que materiales necesariossuperada
las órdenes tienen stock se necesita para cada orden con éxito
Se muestran los diferentes Se guarda Los usuarios pueden Actividad
Registro de campos para rellenar la adecuadamente la registrar la información
superada
clientes información del cliente información de los clientes con éxito
Se muestran los campos Actividad
Registro de para rellenar la información Guardado adecuado del El usuario se registra superada
usuarios del usuario usuario adecuadamente con éxito
Elaboración: Luis Eduardo Paz Castillo
Fuente: Jefatura Editorial E Imprenta
67
4.4. Análisis de datos de encuesta de satisfacción del proyecto
0%
31% 31%
38%
68
Análisis: Con los datos que se muestran en el gráfico se evidencia la
funcionalidad brindada por el sistema, cumple el estándar de aceptación de los
usuarios que utilizarán el sistema.
CUADRO N. 12
Registro online de las órdenes de trabajo
Opciones Resultados % de Respuesta
Muy insatisfecho 0 0%
Insatisfecho 0 0%
Aceptable 7 27%
Satisfecho 9 35%
Muy satisfecho 10 38%
Total 100%
Elaboración: Luis Eduardo Paz Castillo
Fuente: Jefatura Editorial E Imprenta
0%
27%
38%
35%
69
Análisis: El gráfico demuestra el grado alto de satisfacción que perciben los
usuarios al registrar vía internet las órdenes de trabajo con la cual laboran
diariamente.
CUADRO N. 13
Aceptación de interfaz de SWOT.
Opciones Resultados % de Respuesta
No es amigable 0 0%
Poco amigable 1 4%
Amigable 14 54%
Muy amigable 11 42%
Total 100%
Elaboración: Luis Eduardo Paz Castillo
Fuente: Jefatura Editorial E Imprenta
0%
4%
42%
54%
70
Análisis: El gráfico demuestra que la interfaz se ve amigable ante los usuarios,
haciendo que su constante utilización no represente problemas para cumplir con
sus funciones.
CUADRO N. 14
Tiempo de respuesta de SWOT
Opciones Resultados
% de Respuesta
Muy lento 0 0%
Lento 1 4%
Normal 8 31%
Rápida 8 31%
Muy rápida 9 35%
Total 100%
Elaboración: Luis Eduardo Paz Castillo
Fuente: Jefatura Editorial E Imprenta
0% 4%
34%
31%
31%
71
Análisis: En el gráfico se evidencia que el tiempo de respuesta satisface al 34%
de los usuarios encuestados, por lo que se determina que el tiempo de respuesta
del sistema es muy rápido.
CUADRO N. 15
Validaciones en SWOT
Opciones Resultados % de Respuesta
Muy malo 1 4%
Malo 1 4%
Bueno 10 38%
Muy bueno 14 54%
Total 100%
Elaboración: Luis Eduardo Paz Castillo
Fuente: Jefatura Editorial E Imprenta
4% 4%
54% 38%
72
Análisis: Un gran porcentaje de los usuarios considera que los mensajes usados
para el ingreso correcto de datos (validaciones) son tolerable, por lo que no les
representa una molestia los avisos de alertas.
CUADRO N. 16
Acceso al sistema
Opciones Resultados % de Respuesta
Muy inseguro 0 0%
Nada seguro 1 4%
Seguro 13 50%
Muy seguro 12 46%
Total 100%
Elaboración: Luis Eduardo Paz Castillo
Fuente: Jefatura Editorial E Imprenta
0% 4%
46%
50%
73
Análisis: La grafica demuestra que la seguridad de acceso al sistema a vista de
los usuarios es segura con una aceptación del 50% de las personas encuestadas
y un 46% que reconocen es muy segura.
CUADRO N. 17
Gestión de las órdenes de trabajo
Opciones Resultados % de Respuesta
No es importante 6 23%
Poco importante 0 0%
Es importante 12 46%
Es muy Importante 8 31%
Total 100%
Elaboración: Luis Eduardo Paz Castillo
Fuente: Jefatura Editorial E Imprenta
23%
31%
0%
46%
74
Análisis: Un gran porcentaje de los usuarios aprecia que es importante el uso del
sistema para una eficaz gestión de las órdenes de trabajo e inventario.
CUADRO N. 18
Gestión manual de las órdenes de trabajo
Opciones Resultados % de Respuesta
Muy mala 14 54%
Mala 4 15%
Regular 6 23%
Eficiente 1 4%
Muy eficiente 1 4%
Total 100%
Elaboración: Luis Eduardo Paz Castillo
Fuente: Jefatura Editorial E Imprenta
4% 4%
23%
54%
15%
75
Análisis: Se demuestra que el mayor porcentaje de los usuarios estaba
insatisfecho, con la deficiente gestión manual que se llevaba en las órdenes de
trabajo.
CUADRO N. 19
Gestión de trabajos y control de inventario ágil
Opciones Resultados % de Respuesta
En desacuerdo 0 0%
Indiferente 4 15%
De acuerdo 10 38%
Muy de acuerdo 12 46%
Total 100%
Elaboración: Luis Eduardo Paz Castillo
Fuente: Jefatura Editorial E Imprenta
0%
15%
46%
38%
76
Análisis: Se verifica que el mayor porcentaje de los usuarios está satisfecho, con
la eficiente gestión que se lleva en las órdenes de trabajo y control del inventario.
CUADRO N. 20
Administración del inventario llevado en Excel
Opciones Resultados % de Respuesta
En desacuerdo 22 85%
Indiferente 4 15%
De acuerdo 0 0%
Muy de acuerdo 0 0%
Total 100%
Elaboración: Luis Eduardo Paz Castillo
Fuente: Jefatura Editorial E Imprenta
0%
15% 0%
85%
77
Análisis: El gráfico demuestra que los usuarios tenían problemas con la
administración del inventario, al este ser llevado en un archivo de Excel, ahora que
utilizan el sistema no tienen ese inconveniente.
4.5. Conclusiones
4.6. Recomendaciones
78
Se recomienda eliminar el acta de entrega de insumos y suministros, que
se implementó únicamente para adjuntar a la orden el material que se
utiliza para elaborar cada orden.
79
BIBLIOGRAFÍA
80
81
Anexo 1
Cronograma del Proyecto alineado a la Matriz del Marco Lógico
1era Sem
1era Sem
1era Sem
1era Sem
1era Sem
2da Sem
2da Sem
2da Sem
2da Sem
2da Sem
3ra Sem
3ra Sem
3ra Sem
3ra Sem
3ra Sem
4ta Sem
4ta Sem
4ta Sem
4ta Sem
4ta Sem
Análisis
Análisis
Planteamiento
del problema
Entrevista con
los usuarios
Levantamiento
de información
Especificaciones
del sistema
Reunión y
aceptación del
proyecto
Diseño
Diseño de la
interfaz base del
sistema y menú
Diseño de base
de datos
Presentación del
prototipo
Desarrollo
Programación de
la interfaz base
Sprint 0
Sprint 1
Sprint 2
Sprint 3
Sprint 4
Sprint 5
Sprint 6 7
Implementación
Subir al Hosting
Pruebas
Capacitación al
personal
Entrega del
Proyecto
82
Anexo 2 – Encuesta:
83
7. ¿Considera que SWOT es importante para la gestión eficaz de las órdenes
de trabajo e inventario?
No es importante
Poco importante
Es importante
Es muy Importante
84
Anexo 3 – Acta de aceptación
85
Anexo 4 - Actas de Reunión
86
87
88
89
90
91
.
UNIVERSIDAD DE GUAYAQUIL
PROYECTO DE TITULACIÓN
AUTOR:
Luis Eduardo Paz Castillo
TUTOR:
Ing. Fabricio Javier Sánchez Moreno Mgs.
GUAYAQUIL – ECUADOR
2017
I
ÍNDICE GENERAL
II
ÍNDICE DE GRÁFICOS
Pág.
GRÁFICO N. 1
Pantalla de inicio de sesión ................................................................................. 2
GRÁFICO N. 2
Pantalla de registro de nuevos usuarios .............................................................. 3
GRÁFICO N. 3
Pantalla de recuperar la contraseña .................................................................... 3
GRÁFICO N. 4
Pantalla de visualización de estadísticas del inventario ....................................... 4
GRÁFICO N. 5
Pantalla de gestión de materiales registrados ...................................................... 5
GRÁFICO N. 6
Pantalla de ingreso de nuevo material al inventario ............................................. 5
GRÁFICO N. 7
Pantalla de edición de información de materiales ................................................ 6
GRÁFICO N. 8
Pantalla para desactivar materiales de inventario ................................................ 6
GRÁFICO N. 9
Pantalla para generar reporte de materiales ........................................................ 7
GRÁFICO N. 10
Página para visualizar el listado de categoría de materiales ................................ 7
GRÁFICO N. 11
Pantalla para agregar nueva categoría ................................................................ 8
GRÁFICO N. 12
Pantalla para editar categorías ............................................................................ 8
GRÁFICO N. 13
Pantalla para eliminar categorías ......................................................................... 9
GRÁFICO N. 14
Pantalla para abastecer el stock de materiales registrados ............................... 10
GRÁFICO N. 15
Pantalla de visualización de materiales abastecidos .......................................... 10
GRÁFICO N. 16
Pantalla de visualización de detalles de abastecimientos .................................. 10
GRÁFICO N. 17
Pantalla de cancelación de abastecimiento ....................................................... 11
GRÁFICO N. 18
Pantalla de visualización de proveedores .......................................................... 11
GRÁFICO N. 19
Pantalla de agregar nuevos proveedores .......................................................... 12
GRÁFICO N. 20
Pantalla de edición de información de proveedor............................................... 12
III
GRÁFICO N. 21
Pantalla de órdenes de trabajo registradas ........................................................ 13
GRÁFICO N. 22
Pantalla de registro de órdenes de trabajo ........................................................ 13
GRÁFICO N. 23
Pantalla de visualización de detalles de materiales ........................................... 14
GRÁFICO N. 24
Mensaje de confirmación para cancelar la orden de trabajo .............................. 14
GRÁFICO N. 25
Pantalla de visualización de clientes registrados ............................................... 15
GRÁFICO N. 26
Pantalla de edición de información de clientes .................................................. 15
GRÁFICO N. 27
Pantalla de gestión de órdenes de trabajo ......................................................... 16
GRÁFICO N. 28
Pantalla de visualización de progreso de las órdenes ........................................ 16
GRÁFICO N. 29
Pantalla de visualización de usuarios registrados .............................................. 16
GRÁFICO N. 30
Pantalla de edición de información de usuarios ................................................. 17
GRÁFICO N. 31
Pantalla de confirmación de eliminación de usuarios ......................................... 17
GRÁFICO N. 32
Estructura de la tabla PERSONA ....................................................................... 20
GRÁFICO N. 33
Estructura de la tabla ARTÍCULO ...................................................................... 20
GRÁFICO N. 34
Estructura de la tabla DETALLE_ORDEN.......................................................... 20
GRÁFICO N. 35
Estructura de la tabla ordenes ........................................................................... 21
GRÁFICO N. 36
Estructura de la tabla USERS ............................................................................ 22
GRÁFICO N. 37
Estructura de la tabla INGRESO ........................................................................ 22
GRÁFICO N. 38
Estructura de la tabla CATEGORÍA ................................................................... 22
GRÁFICO N. 39
Estructura de la tabla PASSWORD_RESETS ................................................... 23
GRÁFICO N. 40
Estructura de la tabla MIGRATIONS.................................................................. 23
GRÁFICO N. 41
Comprobación de falta de instalación de servidor local ..................................... 24
GRÁFICO N. 42
Aviso de control de cuentas de usuario activo ................................................... 24
IV
GRÁFICO N. 43
Pantalla de inicio de instalación ......................................................................... 25
GRÁFICO N. 44
Pantalla de selección de opciones de xampp .................................................... 25
GRÁFICO N. 45
Pantalla de ubicación de archivos de instalación ............................................... 26
GRÁFICO N. 46
Pantalla de aceptación de leer más sobre bitnami ............................................. 27
GRÁFICO N. 47
Pantalla de aceptación de instalación de xampp ............................................... 27
GRÁFICO N. 48
Pantalla en el trascurso de la instalación ........................................................... 28
GRÁFICO N. 49
Pantalla de permiso en las redes en el firewall .................................................. 28
GRÁFICO N. 50
Pantalla de finalización de instalación de xampp ............................................... 29
GRÁFICO N. 51
Pantalla de descarga manual de Composer ...................................................... 30
GRÁFICO N. 52
Pantalla de instalación de Composer ................................................................. 30
GRÁFICO N. 53
Pantalla de instalación de menús ...................................................................... 31
GRÁFICO N. 54
Pantalla de selección del lugar de instalación. ................................................... 31
GRÁFICO N. 55
Pantalla de aceptación de instalación ................................................................ 32
GRÁFICO N. 56
Pantalla de confirmación de instalación de Composer ....................................... 32
GRÁFICO N. 57
Pantalla de descarga de Laravel ........................................................................ 33
GRÁFICO N. 58
Pantalla de descarga de librerías ....................................................................... 34
GRÁFICO N. 59
Pantalla de culminación de descarga de Laravel ............................................... 34
GRÁFICO N. 60
Pantalla de inicio de Laravel .............................................................................. 35
V
Manual de Usuario
1. Introducción
1
2. Registro e ingreso al sistema
2
2.2. Registro de usuarios en el sistema
3
El usuario deberá ingresar el correo institucional con el cual se registró y recibirá
un link en este, donde puede cambiar la contraseña para tener acceso al sistema
otra vez.
3. Estadísticas
3.1. Inventario
Los usuarios podrán acceder a las estadísticas de los movimientos del inventario,
los gráficos mostrará análisis de datos por tiempos establecidos en lo siguiente:
Año
Mes
Día
4
4. Inventario
4.1. Materiales
5
4.1.2. Editar material
Si se desea eliminar algún material mal ingresado, se debe buscarlo, una vez
encontrado, seleccionar el botón eliminar, este pasará a un estado inactivo, donde
no aparecerá en el registro de órdenes de trabajo.
6
4.1.4. Reporte de materiales
4.2. Categoría
7
4.2.1. Agregar nueva categoría
8
4.2.3. Eliminar
Si se desea eliminar alguna categoría, se lo debe buscar con su nombre y una vez
encontrado, se selecciona el botón eliminar.
Una vez se presiona el botón de eliminar le saldrá un mensaje el cual debe aceptar
presionando el botón confirmar para poder completar la eliminación de la
categoría.
5. Abastecimiento
9
GRÁFICO N. 14 Pantalla para abastecer el stock de materiales registrados
Elaboración: Luis Eduardo Paz Castillo
Fuente: Datos del proyecto
5.2. Ingresos
10
5.2.2. Eliminar
5.3. Proveedores
11
5.4. Agregar nuevo proveedor
12
6. Órdenes de trabajo
13
6.3. Detalles
14
6.5. Clientes
6.6. Editar
15
6.7. Gestión
Esta página visualizarán los usuarios con el rol “invitado”, donde podrán
constatar el avance de su orden ingresada mediante una barra con porcentajes.
16
7.1. Editar
17
Manual Técnico
8. Introducción
El presente manual técnico tiene como finalidad describir el diseño del prototipo
para la gestión de las órdenes de trabajo en la Jefatura Editorial E Imprenta de la
Universidad de Guayaquil.
9. Objetivos
Objetivo General
Mostrar el desarrollo funcional del módulo y las opciones con las que cuenta el
usuario.
Objetivos Específicos
18
10. Contenido
10.1. Herramientas tecnológicas
Los ambientes web abarcan un amplio mercado para los potenciales usuarios que
se internan a las nuevas tecnologías específicamente hablando, las comunidades
virtuales. Estos, con el paso del tiempo desarrollaron un particular interés por los
antes mencionados conforme pasan los años. Estas nuevas tecnologías
involucran nuevos paradigmas de programación, modelado de contenidos,
herramientas multimedia, herramientas de conectividad a bases de datos,
herramientas de seguridad y hardware.
Otras Características
Características Avanzadas
Servidor Apache
19
12. Diccionario de Datos
20
GRÁFICO N. 35 Estructura de la tabla ordenes
Elaboración: Luis Eduardo Paz Castillo
Fuente: Datos del proyecto
21
GRÁFICO N. 36 Estructura de la tabla USERS
Elaboración: Luis Eduardo Paz Castillo
Fuente: Datos del proyecto
22
GRÁFICO N. 39 Estructura de la tabla PASSWORD_RESETS
Elaboración: Luis Eduardo Paz Castillo
Fuente: Datos del proyecto
23
14. Configuración de aplicaciones
Una vez obtenido el archivo de instalación de XAMPP, hay que hacer doble clic
sobre él para ponerlo en marcha. Al poner en marcha el instalador XAMPP nos
muestra un aviso que aparece si está activado el Control de Cuentas de Usuario
y recuerda que algunos directorios tienen permisos restringidos:
24
GRÁFICO N. 43 Pantalla de inicio de instalación
Elaboración: Luis Eduardo Paz Castillo
Fuente: Datos del proyecto
25
En la siguiente pantalla puede elegir la carpeta de instalación de XAMPP. La
carpeta de instalación predeterminada que trae por defecto es C:\xampp. Si se
desea cambiarla, haga clic en el icono de carpeta y busque y selecciones la
carpeta donde se desea instalar XAMPP.
26
GRÁFICO N. 46 Pantalla de aceptación de leer más sobre Bitnami
Elaboración: Luis Eduardo Paz Castillo
Fuente: Datos del proyecto
Una vez elegidas las opciones de instalación en las pantallas anteriores, esta
pantalla es la pantalla de confirmación de la instalación. Haga clic en el botón
"Next" para comenzar la instalación en el disco duro.
27
GRÁFICO N. 48 Pantalla en el trascurso de la instalación
Elaboración: Luis Eduardo Paz Castillo
Fuente: Datos del proyecto
28
Una vez terminada la copia de archivos, la pantalla final confirma que XAMPP ha
sido instalado. Si se deja marcada la casilla, se abrirá el panel de control de
XAMPP. Para cerrar el programa de instalación, haga clic en el botón "Finish".
29
GRÁFICO N. 51 Pantalla de descarga manual de Composer
Elaboración: Luis Eduardo Paz Castillo
Fuente: Datos del proyecto
Una vez que la descarga finalice, ejecuta el instalador y haz click en Next.
30
GRÁFICO N. 53 Pantalla de instalación de menús
Elaboración: Luis Eduardo Paz Castillo
Fuente: Datos del proyecto
A continuación nos pide que indiquemos la ruta del ejecutable de PHP, en mi caso
como estoy trabajando con XAMPP el ejecutable de PHP se encuentra en la ruta
C:\xampp\php\ (si usas WAMPP la ruta es C:\wamp\bin\php\php5.5.12) y
seleccionas php.exe, luego click en Next.
31
En este punto el instalador de Composer nos muestra la configuración de la
instalación, simplemente le damos click a Install.
Una vez esté todo instalado, aparecerán otras donde simplemente debes hacer
click en Next, y posteriormente en Finalizar; después de tantos Next, Next típicos
de Windows el instalador de Composer habrá puesto en nuestro PATH global la
ruta de la carpeta PHP y su propia carpeta Composer. Esto nos permite trabajar
desde consola escribiendo sólo PHP o Composer sin necesidad de indicar la ruta
del ejecutable. Para ver que todo está en orden vamos a realizar dos pequeñas
pruebas, así que es momento de abrir la consola, y teclear:
32
Con esto ya tenemos Composer instalado y funcionando en Windows, ahora solo
nos queda instalar Laravel, veamos cómo hacer esto posible.
Desde la consola, dirígete al directorio donde guardas tus proyectos web (si usas
XAMPP la ruta es C:\xampp\htdocs para WAMPP es C:\wamp\www), y teclea lo
siguiente:
1 cd C:\xampp\htdocs
Ahora crearemos el proyecto laravel escribiendo las siguientes palabras
mágicas:
composer create-project laravel/laravel nombre_del_proyecto --prefer-
1
dist
33
GRÁFICO N. 58 Pantalla de descarga de librerías
Elaboración: Luis Eduardo Paz Castillo
Fuente: Datos del proyecto
34
Finalmente para verificar que la creación de nuestro proyecto “pruebita” se realizó
de manera correcta, accede a http://localhost/nombre_del_proyecto/public en el
navegador de tu preferencia, donde debes ver lo siguiente:
16.1. Login
En el sistema web el Login del usuario envía sus datos y se obtienen mediante
una consulta a la base que verifica si existe o no el usuario que inicia sesión, si
existe permite el acceso al perfil.
class Login
{
use SerializesModels;
/**
* The authenticated user.
*
* @var \Illuminate\Contracts\Auth\Authenticatable
*/
public $user;
/**
* Indicates if the user should be "remembered".
*
35
* @var bool
*/
public $remember;
/**
* Create a new event instance.
*
* @param \Illuminate\Contracts\Auth\Authenticatable $user
* @param bool $remember
* @return void
*/
public function __construct($user, $remember)
{
$this->user = $user;
$this->remember = $remember;
}
}
class Login
{
use SerializesModels;
/**
* The authenticated user.
*
* @var \Illuminate\Contracts\Auth\Authenticatable
*/
public $user;
/**
* Indicates if the user should be "remembered".
*
* @var bool
*/
public $remember;
/**
* Create a new event instance.
*
* @param \Illuminate\Contracts\Auth\Authenticatable $user
* @param bool $remember
* @return void
*/
public function __construct($user, $remember)
{ $this->user = $user;
$this->remember = $remember; }}
36
16.3. Registro de nuevos usuarios
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading"><h4>Registro de invitados</h4></div>
<div class="panel-body">
<form class="form-horizontal" role="form" method="POST"
action="{{ url('/register') }}">
{{ csrf_field() }}
<div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}">
<label for="name" class="col-md-4 control-label">Nombres y
apellidos:</label>
<div class="col-md-6">
<input id="name" type="text" class="form-control"
name="name" value="{{ old('name') }}">
@if ($errors->has('name'))
<span class="help-block">
<strong>{{ $errors->first('name') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
<label for="email" class="col-md-4 control-label">Correo
institucional:</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control"
name="email" value="{{ old('email') }}">
@if ($errors->has('email'))
<span class="help-block">
<strong>{{ $errors->first('email') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group{{ $errors->has('password') ? ' has-error' :
'' }}">
37
<label for="password" class="col-md-4 control-
label">Contraseña:</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control"
name="password">
@if ($errors->has('password'))
<span class="help-block">
<strong>{{ $errors->first('password') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group{{ $errors->has('password_confirmation') ? '
has-error' : '' }}">
<label for="password-confirm" class="col-md-4 control-
label">Repita la contraseña:</label>
<div class="col-md-6">
<input id="password-confirm" type="password" class="form-
control" name="password_confirmation">
@if ($errors->has('password_confirmation'))
<span class="help-block">
<strong>{{ $errors->first('password_confirmation') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<button type="submit" class="btn btn-primary">
<i class="fa fa-btn fa-user"></i> Registrarse
</button>
</div>
</div>
<div class="col-md-6">
<input id="rol" type="rol" class="form-control" name="rol"
value="0" style="visibility:hidden" readonly>
@if ($errors->has('rol'))
<span class="help-block">
<strong>{{ $errors->first('rol') }}</strong>
</span>
@endif </div></div></form>
</div></div>
</div></div></div>
38
16.4. Request
Nos facilita todos los datos de la solicitud actual a través HTTP Request, un objeto
sobre el que podremos consultar información sobre el cliente que realiza la
solicitud y datos que pueda estar enviando.
16.4.1. ArticuloFormRequest
<?php
namespace Swot\Http\Requests;
use Swot\Http\Requests\Request;
class ArticuloFormRequest extends Request
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'idcategoria'=>'required',
'codigo'=>'required|max:50',
'nombre'=>'required|max:100',
'stock'=>'required|numeric',
'descripcion'=>'max:512',
'imagen'=>'mimes:jpeg,bmp,png'
];
}
}
16.4.2. AvanceFormRequest
<?php
namespace Swot\Http\Requests;
use Swot\Http\Requests\Request;
class AvanceFormRequest extends Request
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
39
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'tipo_comprobante'=>'max:24',
'serie_comprobante'=>'max:15',
'num_comprobante'=>'max:15',
'disenador'=>'max:200',
'operador'=>'max:200',
'artesano'=>'max:200',
'area'=>'max:20',
'aprobado'=>'max:2',
'aprobador'=>'max:255',
'tipo_plancha'=>'max:20',
'cantidad_plancha'=>'max:5',
'cantidad_tiro'=>'max:5',
'cantidad_retiro'=>'max:5',
];
}
}
16.4.3. CategoriaFormRequest
<?php
namespace Swot\Http\Requests;
use Swot\Http\Requests\Request;
class CategoriaFormRequest extends Request
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
40
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'nombre'=>'required|max:50',
'descripcion'=>'max:200',
];
}
}
16.4.4. IngresoFormRequest
<?php
namespace Swot\Http\Requests;
use Swot\Http\Requests\Request;
class IngresoFormRequest extends Request
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'idproveedor'=>'required',
'tipo_comprobante'=>'required|max:20',
'serie_comprobante'=>'max:7',
'num_comprobante'=>'required|max:10',
'idarticulo'=>'required',
'cantidad'=>'required',
'precio_compra'=>'required',
];
}
}
16.4.5. PersonaFormRequest
<?php
namespace Swot\Http\Requests;
use Swot\Http\Requests\Request;
41
class PersonaFormRequest extends Request
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'nombre'=>'required|max:100',
'tipo_documento'=>'required|max:20',
'num_documento'=>'required|max:15',
'direccion'=>'max:70',
'telefono'=>'max:15',
'email'=>'max:50'
];
}
}
16.4.6. UsuarioFormRequest
<?php
namespace Swot\Http\Requests;
use Swot\Http\Requests\Request;
class UsuarioFormRequest extends Request
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required|max:255',
42
'email' => 'required|email|max:255|unique:users',
'password' => 'required|min:6|confirmed',
'rol' => 'required|max:2',
];
}
}
16.4.7. OrdenesFormRequest
<?php
namespace Swot\Http\Requests;
use Swot\Http\Requests\Request;
class OrdenFormRequest extends Request
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'idcliente'=>'required',
'tipo_comprobante'=>'required|max:24',
'serie_comprobante'=>'required|max:15',
'num_comprobante'=>'required|max:15',
'idarticulo'=>'required',
'cantidad'=>'required',
'total_orden'=>'required',
'autoridad_responsable'=>'required|max:200',
'solicitante'=>'required|max:255',
'referencia_oficio'=>'max:50',
'detalle_oficio'=>'max:255',
'nombre_archivo'=>'max:150',
'medio_entrega'=>'max:20',
43
'formato_archivo'=>'max:10',
'muestra_impresa'=>'max:2',
'acabado'=>'max:10',
'disenador'=>'max:200',
'operador'=>'max:200',
'artesano'=>'max:200',
'recepcion'=>'required|max:100',
'area'=>'max:20',
'autorizado'=>'required|max:100',
'estado'=>'max:20',
'name'=>'max:255',
];
}
}
16.4.8. Artículo
<?php
namespace Swot;
use Illuminate\Database\Eloquent\Model;
class Articulo extends Model
{
protected $table='articulo';
protected $primaryKey='idarticulo';
public $timestamps=false;
protected $fillable =[
'idcategoria',
'codigo',
'nombre',
'stock',
'descripcion',
'imagen',
'estado'
];
protected $guarded =[
];
}
16.4.9. Barra de progreso
<?php
namespace Swot;
use Illuminate\Database\Eloquent\Model;
class Barra extends Model
{
44
protected $table='orden';
protected $primaryKey='idorden';
public $timestamps=false;
protected $fillable =[
'idcliente',
'tipo_comprobante',
'serie_comprobante',
'num_comprobante',
'estado',
'solicitante',
'area',
];
protected $guarded =[
];
}
16.4.10. Categoría
<?php
namespace Swot;
use Illuminate\Database\Eloquent\Model;
class Categoria extends Model
{
protected $table='categoria';
protected $primaryKey='idcategoria';
public $timestamps=false;
protected $fillable =[
'nombre',
'descripcion',
'condicion'
];
protected $guarded =[
];
}
<?php
namespace Swot;
use Illuminate\Database\Eloquent\Model;
class DetalleIngreso extends Model
{
protected $table='detalle_ingreso';
protected $primaryKey='iddetalle_ingreso';
public $timestamps=false;
45
protected $fillable =[
'idingreso',
'idarticulo',
'cantidad',
'precio_compra',
'precio_orden'
];
protected $guarded =[
];
}
16.4.12. Detalle de orden
<?php
namespace Swot;
use Illuminate\Database\Eloquent\Model;
class DetalleOrden extends Model
{
protected $table='detalle_orden';
protected $primaryKey='iddetalle_orden';
public $timestamps=false;
protected $fillable =[
'idorden',
'idarticulo',
'cantidad',
'precio_orden'
];
protected $guarded =[
];
}
16.4.13. Ingreso
<?php
namespace Swot;
use Illuminate\Database\Eloquent\Model;
class Ingreso extends Model
{
protected $table='ingreso';
protected $primaryKey='idingreso';
public $timestamps=false;
protected $fillable =[
'idproveedor',
'tipo_comprobante',
46
'serie_comprobante',
'num_comprobante',
'fecha_hora',
'impuesto',
'estado'
];
protected $guarded =[
];
}
16.4.14. Persona
<?php
namespace Swot;
use Illuminate\Database\Eloquent\Model;
class Persona extends Model
{
protected $table='persona';
protected $primaryKey='idpersona';
public $timestamps=false;
protected $fillable =[
'tipo_persona',
'nombre',
'tipo_documento',
'num_documento',
'direccion',
'telefono',
'email'
];
protected $guarded =[
];
}
16.4.15. Users
<?php
namespace Swot;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
protected $table='users';
protected $primaryKey='id';
protected $fillable = [
'name', 'email', 'password',
];
protected $hidden = [
47
'password', 'remember_token',
];
}
16.4.16. Órdenes
<?php
namespace Swot;
use Illuminate\Database\Eloquent\Model;
class Orden extends Model
{
protected $table='orden';
protected $primaryKey='idorden';
public $timestamps=false;
protected $fillable =[
'idcliente',
'tipo_comprobante',
'serie_comprobante',
'num_comprobante',
'fecha_hora',
'total_orden',
'estado',
'autoridad_responsable',
'solicitante',
'referencia_oficio',
'detalle_oficio',
'nombre_archivo',
'medio_entrega',
'formato_archivo',
'muestra_impresa',
'acabado',
'disenador',
'operador',
'artesano',
'autorizado',
'area',
];
protected $guarded =[
];
}
16.5. Middleware
48
16.5.1. Authenticate
<?php
namespace Swot\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class Authenticate
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->guest()) {
if ($request->ajax() || $request->wantsJson()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('login');
}
}
return $next($request);
}
}
16.5.2. EncryptCookies
<?php
namespace Swot\Http\Middleware;
use Illuminate\Cookie\Middleware\EncryptCookies as BaseEncrypter;
class EncryptCookies extends BaseEncrypter
{
/**
* The names of the cookies that should not be encrypted.
*
* @var array
*/
protected $except = [
//
];}
49
16.5.3. RedirectIfAuthenticated
<?php
namespace Swot\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('/');
}
return $next($request);
}
}
16.5.4. VerifyCsrfToken
<?php
namespace Swot\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//
];
}
50
16.6. Rutas
16.6.1. Routes
<?php
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/
Route::get('/', function () {
return view('auth/login');
});
Route::get('/acerca', function () {
return view('acerca');
});
Route::resource('almacen/categoria','CategoriaController');
Route::resource('almacen/articulo','ArticuloController');
Route::resource('ordens/cliente','ClienteController');
Route::resource('compras/proveedor','ProveedorController');
Route::resource('compras/ingreso','IngresoController');
Route::resource('ordens/orden','OrdenController');
Route::resource('seguridad/usuario','UsuarioController');
Route::resource('barras/barra','BarraController');
Route::resource('barras/progreso','AvanceController');
Route::auth();
Route::get('/home', 'HomeController@index');
//Reportes
Route::get('reportecategorias', 'CategoriaController@reporte');
Route::get('reportearticulos', 'ArticuloController@reporte');
Route::get('reporteclientes', 'ClienteController@reporte');
Route::get('reporteproveedores', 'ProveedorController@reporte');
Route::get('reporteordens', 'OrdenController@reporte');
Route::get('reporteorden/{id}', 'OrdenController@reportec');
51
Route::get('reporteingresos', 'IngresoController@reporte');
Route::get('reporteingreso/{id}', 'IngresoController@reportec');
Route::get('/{slug?}', 'HomeController@index');
16.7. Controllers
16.7.1. ArticuloController
<?php
namespace Swot\Http\Controllers;
use Illuminate\Http\Request;
use Swot\Http\Requests;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Input;
use Swot\Http\Requests\ArticuloFormRequest;
use Swot\Articulo;
use DB;
use Fpdf;
class ArticuloController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index(Request $request)
{
if ($request)
{
$query=trim($request->get('searchText'));
$articulos=DB::table('articulo as a')
->join('categoria as c','a.idcategoria','=','c.idcategoria')
->select('a.idarticulo','a.nombre','a.codigo','a.stock','c.nombre as
categoria','a.descripcion','a.imagen','a.estado')
->where('a.nombre','LIKE','%'.$query.'%')
->orwhere('a.codigo','LIKE','%'.$query.'%')
->orderBy('a.stock','asc')
->paginate(10);
52
return
view('almacen.articulo.index',["articulos"=>$articulos,"searchText"=>$query]);
}
}
public function create()
{
$categorias=DB::table('categoria')->where('condicion','=','1')->get();
return view("almacen.articulo.create",["categorias"=>$categorias]);
}
public function store (ArticuloFormRequest $request)
{
$articulo=new Articulo;
$articulo->idcategoria=$request->get('idcategoria');
$articulo->codigo=$request->get('codigo');
$articulo->nombre=$request->get('nombre');
$articulo->stock=$request->get('stock');
$articulo->descripcion=$request->get('descripcion');
$articulo->estado='Activo';
if (Input::hasFile('imagen')){
$file=Input::file('imagen');
$file->move(public_path().'/imagenes/articulos/',$file->getClientOriginalNa
me());
$articulo->imagen=$file->getClientOriginalName();
}
$articulo->save();
return Redirect::to('almacen/articulo');
}
public function show($id)
{
return view("almacen.articulo.show",["articulo"=>Articulo::findOrFail($id)]);
}
public function edit($id)
{
$articulo=Articulo::findOrFail($id);
$categorias=DB::table('categoria')->where('condicion','=','1')->get();
return
view("almacen.articulo.edit",["articulo"=>$articulo,"categorias"=>$categorias]);
}
public function update(ArticuloFormRequest $request,$id)
{
$articulo=Articulo::findOrFail($id);
53
$articulo->idcategoria=$request->get('idcategoria');
$articulo->codigo=$request->get('codigo');
$articulo->nombre=$request->get('nombre');
$articulo->stock=$request->get('stock');
$articulo->descripcion=$request->get('descripcion');
$articulo->estado='Activo';
if (Input::hasFile('imagen')){
$file=Input::file('imagen');
$file->move(public_path().'/imagenes/articulos/',$file->getClientOriginalNa
me());
$articulo->imagen=$file->getClientOriginalName();
}
$articulo->update();
return Redirect::to('almacen/articulo');
}
public function destroy($id)
{
$articulo=Articulo::findOrFail($id);
$articulo->Estado='Inactivo';
$articulo->update();
return Redirect::to('almacen/articulo');
}
public function reporte(){
//Obtenemos los registros
$registros=DB::table('articulo as a')
->join('categoria as c','a.idcategoria','=','c.idcategoria')
->select('a.idarticulo','a.nombre','a.codigo','a.stock','c.nombre as
categoria','a.descripcion','a.imagen','a.estado')
->orderBy('a.nombre','asc')
->get();
$pdf = new Fpdf();
$pdf::AddPage();
$pdf::SetTextColor(35,56,113);
$pdf::SetFont('Arial','B',11);
$pdf::Cell(0,10,utf8_decode("Listado Artículos"),0,"","C");
$pdf::Ln();
$pdf::Ln();
$pdf::SetTextColor(0,0,0); // Establece el color del texto
$pdf::SetFillColor(206, 246, 245); // establece el color del fondo de la celda
$pdf::SetFont('Arial','B',10);
//El ancho de las columnas debe de sumar promedio 190
$pdf::cell(30,8,utf8_decode("Código"),1,"","L",true);
$pdf::cell(80,8,utf8_decode("Nombre"),1,"","L",true);
54
$pdf::cell(65,8,utf8_decode("Categoría"),1,"","L",true);
$pdf::cell(15,8,utf8_decode("Stock"),1,"","L",true);
$pdf::Ln();
$pdf::SetTextColor(0,0,0); // Establece el color del texto
$pdf::SetFillColor(255, 255, 255); // establece el color del fondo de la celda
$pdf::SetFont("Arial","",9);
foreach ($registros as $reg)
{
$pdf::cell(30,6,utf8_decode($reg->codigo),1,"","L",true);
$pdf::cell(80,6,utf8_decode($reg->nombre),1,"","L",true);
$pdf::cell(65,6,utf8_decode($reg->categoria),1,"","L",true);
$pdf::cell(15,6,utf8_decode($reg->stock),1,"","L",true);
$pdf::Ln();
}
$pdf::Output();
exit;
}
}
16.7.2. AvanceController
<?php
namespace Swot\Http\Controllers;
use Illuminate\Http\Request;
use Swot\Http\Requests;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Input;
use Swot\Http\Requests\AvanceFormRequest;
use Swot\Orden;
use DB;
use Fpdf;
use Carbon\Carbon;
use Response;
use Illuminate\Support\Collection;
class AvanceController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index(Request $request)
{
if ($request)
{
55
$query=trim($request->get('searchText'));
$ordens=DB::table('orden as v')
->join('persona as p',
'v.idcliente',
'=',
'p.idpersona')
->join('detalle_orden as dv',
'v.idorden',
'=','dv.idorden')
->select(
'v.idorden',
'v.fecha_hora',
'p.nombre',
'v.tipo_comprobante',
'v.serie_comprobante',
'v.num_comprobante',
'v.impuesto',
'v.autoridad_responsable',
'v.solicitante',
'v.referencia_oficio',
'v.detalle_oficio',
'v.nombre_archivo',
'v.medio_entrega',
'v.formato_archivo',
'v.muestra_impresa',
'v.acabado',
'v.disenador',
'v.operador',
'v.artesano',
'v.autorizado',
'v.area',
'v.aprobado',
'v.aprobador',
'v.estado',
'v.recepcion',
'v.total_orden')
->where('v.num_comprobante','LIKE','%'.$query.'%')
->orderBy('v.idorden','desc')
->groupBy('v.idorden',
'v.fecha_hora',
'p.nombre',
'v.tipo_comprobante',
'v.serie_comprobante',
'v.num_comprobante',
56
'v.impuesto',
'v.autoridad_responsable',
'v.solicitante',
'v.referencia_oficio',
'v.detalle_oficio',
'v.nombre_archivo',
'v.medio_entrega',
'v.formato_archivo',
'v.muestra_impresa',
'v.acabado',
'v.disenador',
'v.operador',
'v.artesano',
'v.autorizado',
'v.area',
'v.aprobado',
'v.aprobador',
'v.estado')
->paginate(10);
return
view('barras.progreso.index',["ordens"=>$ordens,"searchText"=>$query]);
}
}
public function show($id)
{
$orden=DB::table('orden as o')
->join('persona as p',
'v.idcliente',
'=',
'p.idpersona')
->join('detalle_orden as dv',
'v.idorden',
'=',
'dv.idorden')
->select(
'v.idorden',
'v.fecha_hora',
'p.nombre',
'v.tipo_comprobante',
'v.serie_comprobante',
'v.num_comprobante',
'v.impuesto',
'v.estado',
'v.aprobado',
57
'v.aprobador',
'v.tipo_plancha',
'v.cantidad_plancha',
'v.cantidad_tiro',
'v.cantidad_retiro',
'v.total_orden')
->where('v.idorden','=',$id)
->first();
$detalles=DB::table('detalle_orden as d')
->join('articulo as a','d.idarticulo','=','a.idarticulo')
->select('a.nombre as articulo','d.cantidad','d.descuento','d.precio_orden')
->where('d.idorden','=',$id)
->get();
return
view("barras.progreso.show",["orden"=>$orden,"detalles"=>$detalles]);
}
public function edit($id)
{
return view("barras.progreso.edit",["orden"=>Orden::findOrFail($id)]);
}
public function update(AvanceFormRequest $request,$id)
{
$orden=Orden::findOrFail($id);
$orden->tipo_comprobante=$request->get('tipo_comprobante');
$orden->serie_comprobante=$request->get('serie_comprobante');
$orden->num_comprobante=$request->get('num_comprobante');
$orden->disenador=$request->get('disenador');
$orden->operador=$request->get('operador');
$orden->artesano=$request->get('artesano');
$orden->area=$request->get('area');
$orden->aprobado=$request->get('aprobado');
$orden->aprobador=$request->get('aprobador');
$orden->tipo_plancha=$request->get('tipo_plancha');
$orden->cantidad_plancha=$request->get('cantidad_plancha');
$orden->cantidad_tiro=$request->get('cantidad_tiro');
$orden->cantidad_retiro=$request->get('cantidad_retiro');
$orden->update();
return Redirect::to('barras/progreso');
} public function destroy($id) {
$orden=Orden::findOrFail($id);
$orden->Estado='C';
$orden->update();
return Redirect::to('barras/progreso');
} }
58
16.7.3. BarraController
<?php
namespace Swot\Http\Controllers;
use Illuminate\Http\Request;
use Swot\Http\Requests;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Input;
use Swot\Http\Requests\OrdenFormRequest;
use Swot\Orden;
use Swot\DetalleOrden;
use DB;
use Fpdf;
use Carbon\Carbon;
use Response;
use Illuminate\Support\Collection;
class BarraController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index(Request $request)
{
if ($request)
{
$query=trim($request->get('searchText'));
$ordens=DB::table('orden as v')
->join('persona as p',
'v.idcliente',
'=',
'p.idpersona')
->join('detalle_orden as dv',
'v.idorden',
'=','dv.idorden')
->select(
'v.idorden',
'v.fecha_hora',
'p.nombre',
'v.tipo_comprobante',
'v.serie_comprobante',
'v.num_comprobante',
'v.solicitante',
'v.referencia_oficio',
59
'v.area',
'v.estado',
'v.total_orden')
->where('v.num_comprobante','LIKE','%'.$query.'%')
->orwhere('v.serie_comprobante','LIKE','%'.$query.'%')
->orwhere('v.referencia_oficio','LIKE','%'.$query.'%')
->orwhere('p.nombre','LIKE','%'.$query.'%')
->orwhere('v.solicitante','LIKE','%'.$query.'%')
->orderBy('v.idorden','desc')
->groupBy('v.idorden',
'v.fecha_hora',
'p.nombre',
'v.tipo_comprobante',
'v.serie_comprobante',
'v.num_comprobante',
'v.solicitante',
'v.referencia_oficio',
'v.area',
'v.estado')
->paginate(10);
return
view('barras.barra.index',["ordens"=>$ordens,"searchText"=>$query]);
}
}
}
16.7.4. CategoriaController
<?php
namespace Swot\Http\Controllers;
use Illuminate\Http\Request;
use Swot\Http\Requests;
use Swot\Categoria;
use Illuminate\Support\Facades\Redirect;
use Swot\Http\Requests\CategoriaFormRequest;
use DB;
use Fpdf;
class CategoriaController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index(Request $request)
60
{
if ($request)
{
$query=trim($request->get('searchText'));
$categorias=DB::table('categoria')->where('nombre','LIKE','%'.$query.'%')
->where ('condicion','=','1')
->orderBy('idcategoria','desc')
->paginate(10);
return
view('almacen.categoria.index',["categorias"=>$categorias,"searchText"=>$query
]);
}
}
public function create()
{
return view("almacen.categoria.create");
}
public function store (CategoriaFormRequest $request)
{
$categoria=new Categoria;
$categoria->nombre=$request->get('nombre');
$categoria->descripcion=$request->get('descripcion');
$categoria->condicion='1';
$categoria->save();
return Redirect::to('almacen/categoria');
}
public function show($id)
{
return
view("almacen.categoria.show",["categoria"=>Categoria::findOrFail($id)]);
}
public function edit($id)
{
return
view("almacen.categoria.edit",["categoria"=>Categoria::findOrFail($id)]);
}
public function update(CategoriaFormRequest $request,$id)
{
$categoria=Categoria::findOrFail($id);
$categoria->nombre=$request->get('nombre');
$categoria->descripcion=$request->get('descripcion');
$categoria->update();
return Redirect::to('almacen/categoria');
}
61
public function destroy($id)
{
$categoria=Categoria::findOrFail($id);
$categoria->condicion='0';
$categoria->update();
return Redirect::to('almacen/categoria');
}
public function reporte(){
//Obtenemos los registros
$registros=DB::table('categoria')
->where ('condicion','=','1')
->orderBy('nombre','asc')
->get();
$pdf = new Fpdf();
$pdf::AddPage();
$pdf::SetTextColor(35,56,113);
$pdf::SetFont('Arial','B',11);
$pdf::Cell(0,10,utf8_decode("Listado Categorías"),0,"","C");
$pdf::Ln();
$pdf::Ln();
$pdf::SetTextColor(0,0,0); // Establece el color del texto
$pdf::SetFillColor(206, 246, 245); // establece el color del fondo de la celda
$pdf::SetFont('Arial','B',10);
//El ancho de las columnas debe de sumar promedio 190
$pdf::cell(50,8,utf8_decode("Nombre"),1,"","L",true);
$pdf::cell(140,8,utf8_decode("Descripción"),1,"","L",true);
$pdf::Ln();
$pdf::SetTextColor(0,0,0); // Establece el color del texto
$pdf::SetFillColor(255, 255, 255); // establece el color del fondo de la celda
$pdf::SetFont("Arial","",9);
foreach ($registros as $reg)
{
$pdf::cell(50,6,utf8_decode($reg->nombre),1,"","L",true);
$pdf::cell(140,6,utf8_decode($reg->descripcion),1,"","L",true);
$pdf::Ln();
}
$pdf::Output();
exit; } }
16.7.5. ClienteController
<?php
namespace Swot\Http\Controllers;
use Illuminate\Http\Request;
62
use Swot\Http\Requests;
use Swot\Persona;
use Illuminate\Support\Facades\Redirect;
use Swot\Http\Requests\PersonaFormRequest;
use DB;
use Fpdf;
class ClienteController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index(Request $request)
{
if ($request)
{
$query=trim($request->get('searchText'));
$personas=DB::table('persona')
->where('nombre','LIKE','%'.$query.'%')
->where ('tipo_persona','=','Cliente')
->orwhere('num_documento','LIKE','%'.$query.'%')
->where ('tipo_persona','=','Cliente')
->orderBy('idpersona','desc')
->paginate(7);
return
view('ordens.cliente.index',["personas"=>$personas,"searchText"=>$query]);
}
}
public function create()
{
return view("ordens.cliente.create");
}
public function store (PersonaFormRequest $request)
{
$persona=new Persona;
$persona->tipo_persona='Cliente';
$persona->nombre=$request->get('nombre');
$persona->tipo_documento=$request->get('tipo_documento');
$persona->num_documento=$request->get('num_documento');
$persona->direccion=$request->get('direccion');
$persona->telefono=$request->get('telefono');
$persona->email=$request->get('email');
$persona->save();
return Redirect::to('ordens/cliente');
63
}
public function show($id)
{
return view("ordens.cliente.show",["persona"=>Persona::findOrFail($id)]);
}
public function edit($id)
{
return view("ordens.cliente.edit",["persona"=>Persona::findOrFail($id)]);
}
public function update(PersonaFormRequest $request,$id)
{
$persona=Persona::findOrFail($id);
$persona->nombre=$request->get('nombre');
$persona->tipo_documento=$request->get('tipo_documento');
$persona->num_documento=$request->get('num_documento');
$persona->direccion=$request->get('direccion');
$persona->telefono=$request->get('telefono');
$persona->email=$request->get('email');
$persona->update();
return Redirect::to('ordens/cliente');
}
public function destroy($id)
{
$persona=Persona::findOrFail($id);
$persona->tipo_persona='Inactivo';
$persona->update();
return Redirect::to('ordens/cliente');
}
public function reporte(){
//Obtenemos los registros
$registros=DB::table('persona')
->where ('tipo_persona','=','Cliente')
->orderBy('idpersona','desc')
->get();
$pdf = new Fpdf();
$pdf::AddPage();
$pdf::SetTextColor(35,56,113);
$pdf::SetFont('Arial','B',11);
$pdf::Cell(0,10,utf8_decode("Listado Clientes"),0,"","C");
$pdf::Ln();
$pdf::Ln();
$pdf::SetTextColor(0,0,0); // Establece el color del texto
$pdf::SetFillColor(206, 246, 245); // establece el color del fondo de la celda
$pdf::SetFont('Arial','B',10);
64
//El ancho de las columnas debe de sumar promedio 190
$pdf::cell(80,8,utf8_decode("Nombre"),1,"","L",true);
$pdf::cell(35,8,utf8_decode("Documento"),1,"","L",true);
$pdf::cell(50,8,utf8_decode("Email"),1,"","L",true);
$pdf::cell(25,8,utf8_decode("Teléfono"),1,"","L",true);
$pdf::Ln();
$pdf::SetTextColor(0,0,0); // Establece el color del texto
$pdf::SetFillColor(255, 255, 255); // establece el color del fondo de la celda
$pdf::SetFont("Arial","",9);
foreach ($registros as $reg)
{
$pdf::cell(80,6,utf8_decode($reg->nombre),1,"","L",true);
$pdf::cell(35,6,utf8_decode($reg->num_documento),1,"","L",true);
$pdf::cell(50,6,utf8_decode($reg->email),1,"","L",true);
$pdf::cell(25,6,utf8_decode($reg->telefono),1,"","L",true);
$pdf::Ln();
}
$pdf::Output();
exit;
}
}
16.7.6. Controller
<?php
namespace Swot\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesResources;
class Controller extends BaseController
{
use AuthorizesRequests, AuthorizesResources, DispatchesJobs,
ValidatesRequests;
}
16.7.7. HomeController
<?php
namespace Swot\Http\Controllers;
use Swot\Http\Requests;
use Illuminate\Http\Request;
use DB;
65
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$comprasmes=DB::select('SELECT monthname(i.fecha_hora) as mes,
sum(di.cantidad*di.precio_compra) as totalmes from ingreso i inner join
detalle_ingreso di on i.idingreso=di.idingreso where i.estado="A" group by
monthname(i.fecha_hora) order by month(i.fecha_hora) desc limit 12');
$ordensmes=DB::select('SELECT monthname(v.fecha_hora) as mes,
sum(v.total_orden) as totalmes from orden v where v.estado="A" group by
monthname(v.fecha_hora) order by month(v.fecha_hora) desc limit 12');
$ordensdia=DB::select('SELECT DATE(v.fecha_hora) as dia,
sum(v.total_orden) as totaldia from orden v where v.estado="A" group by
v.fecha_hora order by day(v.fecha_hora) desc limit 15');
$productosvendidos=DB::select('SELECT a.nombre as
articulo,sum(dv.cantidad) as cantidad from articulo a inner join detalle_orden dv
on a.idarticulo=dv.idarticulo inner join orden v on dv.idorden=v.idorden where
v.estado="A" and year(v.fecha_hora)=year(curdate()) group by a.nombre order by
sum(dv.cantidad) desc limit 10');
$totales=DB::select('SELECT (select
ifnull(sum(di.cantidad*di.precio_compra),0) from ingreso i inner join
detalle_ingreso di on i.idingreso=di.idingreso where
DATE(i.fecha_hora)=curdate() and i.estado="A") as totalingreso, (select
ifnull(sum(v.total_orden),0) from orden v where DATE(v.fecha_hora)=curdate()
and v.estado="A") as totalorden');
return
view('home',["comprasmes"=>$comprasmes,"ordensmes"=>$ordensmes,"ordens
dia"=>$ordensdia,"productosvendidos"=>$productosvendidos,"totales"=>$totales
]); } }
66
16.7.8. IngresoController
<?php
namespace Swot\Http\Controllers;
use Illuminate\Http\Request;
use Swot\Http\Requests;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Input;
use Swot\Http\Requests\IngresoFormRequest;
use Swot\Ingreso;
use Swot\DetalleIngreso;
use DB;
use Fpdf;
use Carbon\Carbon;
use Response;
use Illuminate\Support\Collection;
class IngresoController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index(Request $request)
{
if ($request)
{
$query=trim($request->get('searchText'));
$ingresos=DB::table('ingreso as i')
->join('persona as p','i.idproveedor','=','p.idpersona')
->join('detalle_ingreso as di','i.idingreso','=','di.idingreso')
->select('i.idingreso','i.fecha_hora','p.nombre','i.tipo_comprobante','i.serie_compro
bante','i.num_comprobante','i.impuesto','i.estado',DB::raw('sum(di.cantidad*preci
o_compra) as total'))
->where('i.num_comprobante','LIKE','%'.$query.'%')
->orderBy('i.idingreso','desc')
->groupBy('i.idingreso','i.fecha_hora','p.nombre','i.tipo_comprobante','i.serie_com
probante','i.num_comprobante','i.impuesto','i.estado')
->paginate(10);
return
view('compras.ingreso.index',["ingresos"=>$ingresos,"searchText"=>$query]);
}
}
public function create()
67
{
$personas=DB::table('persona')->where('tipo_persona','=','Proveedor')->g
et();
$articulos = DB::table('articulo as art')
->select(DB::raw('CONCAT(art.codigo, " ",art.nombre) AS
articulo'),'art.idarticulo')
->where('art.estado','=','Activo')
->get();
return
view("compras.ingreso.create",["personas"=>$personas,"articulos"=>$articulos]);
}
public function store (IngresoFormRequest $request)
{
try{
DB::beginTransaction();
$ingreso=new Ingreso;
$ingreso->idproveedor=$request->get('idproveedor');
$ingreso->tipo_comprobante=$request->get('tipo_comprobante');
$ingreso->serie_comprobante=$request->get('serie_comprobante');
$ingreso->num_comprobante=$request->get('num_comprobante');
$mytime = Carbon::now('America/Lima');
$ingreso->fecha_hora=$mytime->toDateTimeString();
if ($request->get('impuesto')=='1')
{
$ingreso->impuesto='12';
//Impuesto de Ecuador 12%
}
else
{
$ingreso->impuesto='0';
}
$ingreso->estado='A';
$ingreso->save();
$idarticulo = $request->get('idarticulo');
$cantidad = $request->get('cantidad');
$precio_compra = $request->get('precio_compra');
$precio_orden = $request->get('precio_orden');
$cont = 0;
while($cont < count($idarticulo)){
$detalle = new DetalleIngreso();
$detalle->idingreso= $ingreso->idingreso;
$detalle->idarticulo= $idarticulo[$cont];
$detalle->cantidad= $cantidad[$cont];
68
$detalle->precio_compra= $precio_compra[$cont];
$detalle->precio_orden= $precio_orden[$cont];
$detalle->save();
$cont=$cont+1;
}
//recorre y almacena cada uno de los detalles
DB::commit();
}catch(\Exception $e)
{
DB::rollback();
}
return Redirect::to('compras/ingreso');
}
public function show($id)
{
$ingreso=DB::table('ingreso as i')
->join('persona as p','i.idproveedor','=','p.idpersona')
->join('detalle_ingreso as di','i.idingreso','=','di.idingreso')
->select('i.idingreso','i.fecha_hora','p.nombre','i.tipo_comprobante','i.serie_compro
bante','i.num_comprobante','i.impuesto','i.estado',DB::raw('sum(di.cantidad*preci
o_compra) as total'))
->where('i.idingreso','=',$id)
->first();//solo obtener el primer ingreso que cumpla
$detalles=DB::table('detalle_ingreso as d')
->join('articulo as a','d.idarticulo','=','a.idarticulo')
->select('a.nombre as
articulo','d.cantidad','d.precio_compra','d.precio_orden')
->where('d.idingreso','=',$id)
->get();//obtengo todos los detalles
return
view("compras.ingreso.show",["ingreso"=>$ingreso,"detalles"=>$detalles]);
}
public function destroy($id)
{
$ingreso=Ingreso::findOrFail($id);
$ingreso->Estado='C';
$ingreso->update();
return Redirect::to('compras/ingreso');
}
public function reportec($id){
//Obtengo los datos
$ingreso=DB::table('ingreso as i')
69
->join('persona as p','i.idproveedor','=','p.idpersona')
->join('detalle_ingreso as di','i.idingreso','=','di.idingreso')
->select('i.idingreso','i.fecha_hora','p.nombre','p.direccion','p.num_documento','i.ti
po_comprobante','i.serie_comprobante','i.num_comprobante','i.impuesto','i.estad
o',DB::raw('sum(di.cantidad*precio_compra) as total'))
->where('i.idingreso','=',$id)
->first();
$detalles=DB::table('detalle_ingreso as d')
->join('articulo as a','d.idarticulo','=','a.idarticulo')
->select('a.nombre as
articulo','d.cantidad','d.precio_compra','d.precio_orden')
->where('d.idingreso','=',$id)
->get();
$pdf = new Fpdf();
$pdf::AddPage();
$pdf::SetFont('Arial','B',14);
//Inicio con el reporte
$pdf::SetXY(170,20);
$pdf::Cell(0,0,utf8_decode($ingreso->tipo_comprobante));
$pdf::SetFont('Arial','B',14);
//Inicio con el reporte
$pdf::SetXY(170,40);
$pdf::Cell(0,0,utf8_decode($ingreso->serie_comprobante."-
".$ingreso->num_comprobante));
$pdf::SetFont('Arial','B',10);
$pdf::SetXY(35,60);
$pdf::Cell(0,0,utf8_decode($ingreso->nombre));
$pdf::SetXY(35,69);
$pdf::Cell(0,0,utf8_decode($ingreso->direccion));
//***Parte de la derecha
$pdf::SetXY(180,60);
$pdf::Cell(0,0,utf8_decode($ingreso->num_documento));
$pdf::SetXY(180,69);
$pdf::Cell(0,0,substr($ingreso->fecha_hora,0,10));
$total=0;
//Mostramos los detalles
$y=89;
foreach($detalles as $det){
$pdf::SetXY(20,$y);
$pdf::MultiCell(10,0,$det->cantidad);
$pdf::SetXY(32,$y);
$pdf::MultiCell(120,0,utf8_decode($det->articulo));
$pdf::SetXY(162,$y);
$pdf::MultiCell(25,0,$det->precio_compra);
70
$pdf::SetXY(187,$y);
$pdf::MultiCell(25,0,sprintf("%0.2F",($det->precio_compra*$det->cantidad)));
$total=$total+($det->precio_compra*$det->cantidad);
$y=$y+7;
}
$pdf::SetXY(187,153);
$pdf::MultiCell(20,0,"".sprintf("%0.2F", $ingreso->total-
($ingreso->total*$ingreso->impuesto/($ingreso->impuesto+100))));
$pdf::SetXY(187,160);
$pdf::MultiCell(20,0,"".sprintf("%0.2F",
($ingreso->total*$ingreso->impuesto/($ingreso->impuesto+100))));
$pdf::SetXY(187,167);
$pdf::MultiCell(20,0,"".sprintf("%0.2F", $ingreso->total));
$pdf::Output();
exit;
}
public function reporte(){
//Obtenemos los registros
$registros=DB::table('ingreso as i')
->join('persona as p','i.idproveedor','=','p.idpersona')
->join('detalle_ingreso as di','i.idingreso','=','di.idingreso')
->select('i.idingreso','i.fecha_hora','p.nombre','i.tipo_comprobante','i.serie_compro
bante','i.num_comprobante','i.impuesto','i.estado',DB::raw('sum(di.cantidad*preci
o_compra) as total'))
->orderBy('i.idingreso','desc')
->groupBy('i.idingreso','i.fecha_hora','p.nombre','i.tipo_comprobante','i.serie_com
probante','i.num_comprobante','i.impuesto','i.estado')
->get();
//Ponemos la hoja Horizontal (L)
$pdf = new Fpdf('L','mm','A4');
$pdf::AddPage();
$pdf::SetTextColor(35,56,113);
$pdf::SetFont('Arial','B',11);
$pdf::Cell(0,10,utf8_decode("Listado de Abastecimiento"),0,"","C");
$pdf::Ln();
$pdf::Ln();
$pdf::SetTextColor(0,0,0); // Establece el color del texto
$pdf::SetFillColor(206, 246, 245); // establece el color del fondo de la celda
$pdf::SetFont('Arial','B',10);
//El ancho de las columnas debe de sumar promedio 190
$pdf::cell(35,8,utf8_decode("Fecha"),1,"","L",true);
$pdf::cell(80,8,utf8_decode("Proveedor"),1,"","L",true);
$pdf::cell(45,8,utf8_decode("Comprobante"),1,"","L",true);
$pdf::cell(10,8,utf8_decode("Imp"),1,"","C",true);
71
$pdf::cell(25,8,utf8_decode("Total"),1,"","R",true);
$pdf::Ln();
$pdf::SetTextColor(0,0,0); // Establece el color del texto
$pdf::SetFillColor(255, 255, 255); // establece el color del fondo de la celda
$pdf::SetFont("Arial","",9);
foreach ($registros as $reg)
{
$pdf::cell(35,8,utf8_decode($reg->fecha_hora),1,"","L",true);
$pdf::cell(80,8,utf8_decode($reg->nombre),1,"","L",true);
$pdf::cell(45,8,utf8_decode($reg->tipo_comprobante.':
'.$reg->serie_comprobante.'-'.$reg->num_comprobante),1,"","L",true);
$pdf::cell(10,8,utf8_decode($reg->impuesto),1,"","C",true);
$pdf::cell(25,8,utf8_decode($reg->total),1,"","R",true);
$pdf::Ln();
}
$pdf::Output();
exit;
}
}
16.7.9. ProveedorController
<?php
namespace Swot\Http\Controllers;
use Illuminate\Http\Request;
use Swot\Http\Requests;
use Swot\Persona;
use Illuminate\Support\Facades\Redirect;
use Swot\Http\Requests\PersonaFormRequest;
use DB;
use Fpdf;
class ProveedorController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index(Request $request)
{
if ($request)
{
$query=trim($request->get('searchText'));
$personas=DB::table('persona')
->where('nombre','LIKE','%'.$query.'%')
72
->where ('tipo_persona','=','Proveedor')
->orwhere('num_documento','LIKE','%'.$query.'%')
->where ('tipo_persona','=','Proveedor')
->orderBy('idpersona','desc')
->paginate(7);
return
view('compras.proveedor.index',["personas"=>$personas,"searchText"=>$query])
;
}
}
public function create()
{
return view("compras.proveedor.create");
}
public function store (PersonaFormRequest $request)
{
$persona=new Persona;
$persona->tipo_persona='Proveedor';
$persona->nombre=$request->get('nombre');
$persona->tipo_documento=$request->get('tipo_documento');
$persona->num_documento=$request->get('num_documento');
$persona->direccion=$request->get('direccion');
$persona->telefono=$request->get('telefono');
$persona->email=$request->get('email');
$persona->save();
return Redirect::to('compras/proveedor');
}
public function show($id)
{
return
view("compras.proveedor.show",["persona"=>Persona::findOrFail($id)]);
}
public function edit($id)
{
return
view("compras.proveedor.edit",["persona"=>Persona::findOrFail($id)]);
}
public function update(PersonaFormRequest $request,$id)
{
$persona=Persona::findOrFail($id);
$persona->nombre=$request->get('nombre');
$persona->tipo_documento=$request->get('tipo_documento');
$persona->num_documento=$request->get('num_documento');
73
$persona->direccion=$request->get('direccion');
$persona->telefono=$request->get('telefono');
$persona->email=$request->get('email');
$persona->update();
return Redirect::to('compras/proveedor');
}
public function destroy($id)
{
$persona=Persona::findOrFail($id);
$persona->tipo_persona='Inactivo';
$persona->update();
return Redirect::to('compras/proveedor');
}
public function reporte(){
//Obtenemos los registros
$registros=DB::table('persona')
->where ('tipo_persona','=','Proveedor')
->orderBy('idpersona','desc')
->get();
$pdf = new Fpdf();
$pdf::AddPage();
$pdf::SetTextColor(35,56,113);
$pdf::SetFont('Arial','B',11);
$pdf::Cell(0,10,utf8_decode("Listado Proveedores"),0,"","C");
$pdf::Ln();
$pdf::Ln();
$pdf::SetTextColor(0,0,0); // Establece el color del texto
$pdf::SetFillColor(206, 246, 245); // establece el color del fondo de la celda
$pdf::SetFont('Arial','B',10);
//El ancho de las columnas debe de sumar promedio 190
$pdf::cell(80,8,utf8_decode("Nombre"),1,"","L",true);
$pdf::cell(35,8,utf8_decode("Documento"),1,"","L",true);
$pdf::cell(50,8,utf8_decode("Email"),1,"","L",true);
$pdf::cell(25,8,utf8_decode("Teléfono"),1,"","L",true);
$pdf::Ln();
$pdf::SetTextColor(0,0,0); // Establece el color del texto
$pdf::SetFillColor(255, 255, 255); // establece el color del fondo de la celda
$pdf::SetFont("Arial","",9);
foreach ($registros as $reg)
{
$pdf::cell(80,6,utf8_decode($reg->nombre),1,"","L",true);
$pdf::cell(35,6,utf8_decode($reg->num_documento),1,"","L",true);
$pdf::cell(50,6,utf8_decode($reg->email),1,"","L",true);
$pdf::cell(25,6,utf8_decode($reg->telefono),1,"","L",true);
74
$pdf::Ln();
}
$pdf::Output();
exit;
}
}
16.7.10. UsuarioController
<?php
namespace Swot\Http\Controllers;
use Illuminate\Http\Request;
use Swot\Http\Requests;
use Swot\User;
use Illuminate\Support\Facades\Redirect;
use Swot\Http\Requests\UsuarioFormRequest;
use DB;
class UsuarioController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index(Request $request)
{
if ($request)
{
$query=trim($request->get('searchText'));
$usuarios=DB::table('users')->where('name','LIKE','%'.$query.'%')
->orderBy('id','desc')
->paginate(10);
return
view('seguridad.usuario.index',["usuarios"=>$usuarios,"searchText"=>$query]);
}
}
public function create()
{
return view("seguridad.usuario.create");
}
public function store (UsuarioFormRequest $request)
{
$usuario=new User;
$usuario->name=$request->get('name');
75
$usuario->email=$request->get('email');
$usuario->password=bcrypt($request->get('password'));
$usuario->rol=$request->get('rol');
$usuario->save();
return Redirect::to('seguridad/usuario');
}
public function edit($id)
{
return view("seguridad.usuario.edit",["usuario"=>User::findOrFail($id)]);
}
public function update(UsuarioFormRequest $request,$id)
{
$usuario=User::findOrFail($id);
$usuario->name=$request->get('name');
$usuario->email=$request->get('email');
$usuario->password=bcrypt($request->get('password'));
$usuario->rol=$request->get('rol');
$usuario->update();
return Redirect::to('seguridad/usuario');
}
public function destroy($id)
{
$usuario = DB::table('users')->where('id', '=', $id)->delete();
return Redirect::to('seguridad/usuario');
}
}
16.7.11. OrdenesController
<?php
namespace Swot\Http\Controllers;
use Illuminate\Http\Request;
use Swot\Http\Requests;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Input;
use Swot\Http\Requests\OrdenFormRequest;
use Swot\Orden;
use Swot\DetalleOrden;
use DB;
use Fpdf;
use Carbon\Carbon;
use Response;
use Illuminate\Support\Collection;
class OrdenController extends Controller
76
{
public function __construct()
{
$this->middleware('auth');
}
public function index(Request $request)
{
if ($request)
{
$query=trim($request->get('searchText'));
$ordens=DB::table('orden as v')
->join('persona as p','v.idcliente','=','p.idpersona')
->join('detalle_orden as dv','v.idorden','=','dv.idorden')
->select('v.idorden','v.fecha_hora','p.nombre','v.tipo_comprobante','v.serie_compr
obante','v.num_comprobante','v.impuesto','v.autoridad_responsable','v.solicitante'
,'v.referencia_oficio','v.detalle_oficio','v.nombre_archivo','v.medio_entrega','v.form
ato_archivo','v.muestra_impresa','v.acabado','v.disenador','v.operador','v.artesan
o','v.autorizado','v.area','v.estado','v.recepcion','v.total_orden')
->where('v.num_comprobante','LIKE','%'.$query.'%')
->orwhere('v.serie_comprobante','LIKE','%'.$query.'%')
->orwhere('v.referencia_oficio','LIKE','%'.$query.'%')
->orwhere('p.nombre','LIKE','%'.$query.'%')
->orwhere('v.solicitante','LIKE','%'.$query.'%')
->orwhere('v.fecha_hora','LIKE','%'.$query.'%')
->orderBy('v.idorden','desc')
->groupBy('v.idorden','v.fecha_hora','p.nombre','v.tipo_comprobante','v.serie_co
mprobante','v.num_comprobante','v.impuesto','v.autoridad_responsable','v.solicit
ante','v.referencia_oficio','v.detalle_oficio','v.nombre_archivo','v.medio_entrega','v
.formato_archivo','v.muestra_impresa','v.acabado','v.disenador','v.operador','v.art
esano','v.autorizado','v.area','v.estado')
->paginate(10);
return
view('ordens.orden.index',["ordens"=>$ordens,"searchText"=>$query]);
}
}
public function create()
{
$personas=DB::table('persona')->where('tipo_persona','=','Cliente')->get();
$articulos = DB::table('articulo as art')
->join('detalle_ingreso as di','art.idarticulo','=','di.idarticulo')
->select(DB::raw('CONCAT(art.codigo, " ",art.nombre) AS articulo'),
'art.idarticulo',
'art.stock',
DB::raw('avg(di.precio_compra) as precio_promedio'))
77
->where('art.estado','=','Activo')
->where('art.stock','>','0')
->groupBy('articulo','art.idarticulo','art.stock')
->get();
return
view("ordens.orden.create",["personas"=>$personas,"articulos"=>$articulos]);
}
public function store (OrdenFormRequest $request)
{
try{
DB::beginTransaction();
$orden=new Orden;
$orden->idcliente=$request->get('idcliente');
$orden->tipo_comprobante=$request->get('tipo_comprobante');
$orden->serie_comprobante=$request->get('serie_comprobante');
$orden->num_comprobante=$request->get('num_comprobante');
$orden->autoridad_responsable=$request->get('autoridad_responsable');
$orden->solicitante=$request->get('solicitante');
$orden->referencia_oficio=$request->get('referencia_oficio');
$orden->detalle_oficio=$request->get('detalle_oficio');
$orden->nombre_archivo=$request->get('nombre_archivo');
$orden->medio_entrega=$request->get('medio_entrega');
$orden->formato_archivo=$request->get('formato_archivo');
$orden->muestra_impresa=$request->get('muestra_impresa');
$orden->acabado=$request->get('acabado');
$orden->disenador=$request->get('disenador');
$orden->operador=$request->get('operador');
$orden->artesano=$request->get('artesano');
$orden->autorizado=$request->get('autorizado');
$orden->area=$request->get('area');
$orden->recepcion=$request->get('recepcion');
$orden->total_orden=$request->get('total_orden');
$mytime = Carbon::now('America/Lima');
$orden->fecha_hora=$mytime->toDateTimeString();
if ($request->get('impuesto')=='1')
{
$orden->impuesto='12';
}
else
{
$orden->impuesto='0';
}
$orden->estado='A';
$orden->save();
78
$idarticulo = $request->get('idarticulo');
$cantidad = $request->get('cantidad');
$descuento = $request->get('descuento');
$precio_orden = $request->get('precio_orden');
$cont = 0;
while($cont < count($idarticulo)){
$detalle = new DetalleOrden();
$detalle->idorden= $orden->idorden;
$detalle->idarticulo= $idarticulo[$cont];
$detalle->cantidad= $cantidad[$cont];
$detalle->descuento= $descuento[$cont];
$detalle->precio_orden= $precio_orden[$cont];
$detalle->save();
$cont=$cont+1;
}
DB::commit();
}catch(\Exception $e)
{
DB::rollback();
}
return Redirect::to('ordens/orden');
}
public function show($id)
{
$orden=DB::table('orden as v')
->join('persona as p',
'v.idcliente',
'=',
'p.idpersona')
->join('detalle_orden as dv',
'v.idorden',
'=',
'dv.idorden')
->select(
'v.idorden',
'v.fecha_hora',
'p.nombre',
'v.tipo_comprobante',
'v.serie_comprobante',
'v.num_comprobante',
'v.impuesto',
'v.estado',
'v.disenador',
'v.artesano',
79
'v.operador',
'v.autorizado',
'v.total_orden')
->where('v.idorden','=',$id)
->first();
$detalles=DB::table('detalle_orden as d')
->join('articulo as a','d.idarticulo','=','a.idarticulo')
->select('a.nombre as articulo','d.cantidad','d.descuento','d.precio_venta')
->where('d.idventa','=',$id)
->get();
return view("ventas.venta.show",["venta"=>$venta,"detalles"=>$detalles]);
}
public function destroy($id)
{
$venta=Venta::findOrFail($id);
$orden->Estado='C';
$orden->update();
return Redirect::to('ordens/orden');
}
public function reportec($id){
//Obtengo los datos
$orden=DB::table('orden as v')
->join('persona as p','v.idcliente','=','p.idpersona')
->join('detalle_orden as dv','v.idorden','=','dv.idorden')
->select('v.idorden','v.fecha_hora','p.nombre','p.direccion','p.num_documento','v.ti
po_comprobante','v.serie_comprobante','v.num_comprobante','v.impuesto','v.est
ado','v.total_orden')
->where('v.idorden','=',$id)
->first();
$detalles=DB::table('detalle_orden as d')
->join('articulo as a','d.idarticulo','=','a.idarticulo')
->select('a.nombre as articulo','d.cantidad','d.descuento','d.precio_orden')
->where('d.idorden','=',$id)
->get();
$pdf = new Fpdf();
$pdf::AddPage();
$pdf::SetFont('Arial','B',14);
//Inicio con el reporte
$pdf::SetXY(170,20);
$pdf::Cell(0,0,utf8_decode($orden->tipo_comprobante));
$pdf::SetFont('Arial','B',14);
//Inicio con el reporte
80
$pdf::SetXY(170,40);
$pdf::Cell(0,0,utf8_decode($orden->serie_comprobante."-
".$orden->num_comprobante));
$pdf::SetFnt('Arial','B',10);
$pdf::SetXY(35,60);
$pdf::Cell(0,0,utf8_decode($orden->nombre));
$pdf::SetXY(35,69);
$pdf::Cell(0,0,utf8_decode($orden->direccion));
//***Parte de la derecha
$pdf::SetXY(180,60);
$pdf::Cell(0,0,utf8_decode($orden->num_documento));
$pdf::SetXY(180,69);
$pdf::Cell(0,0,substr($orden->fecha_hora,0,10));
$total=0;
//Mostramos los detalles
$y=89;
foreach($detalles as $det){
$pdf::SetXY(20,$y);
$pdf::MultiCell(10,0,$det->cantidad);
$pdf::SetXY(32,$y);
$pdf::MultiCell(120,0,utf8_decode($det->articulo));
$pdf::SetXY(162,$y);
$pdf::MultiCell(25,0,$det->precio_orden-$det->descuento);
$pdf::SetXY(187,$y);
$pdf::MultiCell(25,0,sprintf("%0.2F",(($det->precio_orden-
$det->descuento)*$det->cantidad)));
$total=$total+($det->precio_orden*$det->cantidad);
$y=$y+7;
}
$pdf::SetXY(187,153);
$pdf::MultiCell(20,0,"S/. ".sprintf("%0.2F", $orden->total_orden-
($orden->total_orden*$orden->impuesto/($orden->impuesto+100))));
$pdf::SetXY(187,160);
$pdf::MultiCell(20,0,"S/. ".sprintf("%0.2F",
($orden->total_orden*$orden->impuesto/($orden->impuesto+100))));
$pdf::SetXY(187,167);
$pdf::MultiCell(20,0,"S/. ".sprintf("%0.2F", $orden->total_orden));
$pdf::Output();
exit;
}
public function reporte(){
//Obtenemos los registros
$registros=DB::table('orden as v')
->join('persona as p','v.idcliente','=','p.idpersona')
81
->join('detalle_orden as dv','v.idorden','=','dv.idorden')
->select('v.idorden','v.fecha_hora','p.nombre','v.autoridad_responsable','v.tipo_co
mprobante','v.serie_comprobante','v.num_comprobante','v.impuesto','v.estado','v.
total_orden')
->orderBy('v.idorden','desc')
->groupBy('v.idorden','v.fecha_hora','p.nombre','v.autoridad_responsable','v.tipo_
comprobante','v.serie_comprobante','v.num_comprobante','v.impuesto','v.estado')
->get();
//Ponemos la hoja Horizontal (L)
$pdf = new Fpdf('L','mm','A4');
$pdf::AddPage();
$pdf::SetTextColor(35,56,113);
$pdf::SetFont('Arial','B',11);
$pdf::Cell(0,10,utf8_decode("Listado de Órdenes de Trabajo"),0,"","C");
$pdf::Ln();
$pdf::Ln();
$pdf::SetTextColor(0,0,0); // Establece el color del texto
$pdf::SetFillColor(206, 246, 245); // establece el color del fondo de la celda
$pdf::SetFont('Arial','B',10);
//El ancho de las columnas debe de sumar promedio 190
$pdf::cell(35,8,utf8_decode("Fecha"),1,"","L",true);
$pdf::cell(80,8,utf8_decode("Solicitante"),1,"","L",true);
$pdf::cell(45,8,utf8_decode("Orden de Trabajo"),1,"","L",true);
$pdf::cell(25,8,utf8_decode("Costo Total"),1,"","R",true);
$pdf::Ln();
$pdf::SetTextColor(0,0,0); // Establece el color del texto
$pdf::SetFillColor(255, 255, 255); // establece el color del fondo de la celda
$pdf::SetFont("Arial","",9);
foreach ($registros as $reg)
{
$pdf::cell(35,8,utf8_decode($reg->fecha_hora),1,"","L",true);
$pdf::cell(80,8,utf8_decode($reg->nombre.' de
'.$reg->autoridad_responsable),1,"","L",true);
$pdf::cell(45,8,utf8_decode($reg->tipo_comprobante.':
'.$reg->serie_comprobante.'-'.$reg->num_comprobante),1,"","L",true);
$pdf::cell(25,8,utf8_decode($reg->total_orden),1,"","R",true);
$pdf::Ln();
}
$pdf::Output();
exit;
}
}
82
16.8. Configuración de conexión a la base de datos MySql
APP_ENV=local
APP_DEBUG=true
APP_KEY=base64:zNv7OxwO4rehA/xUYpTjuaicJzgrtpymJHqWp8x7A60=
APP_URL=http://localhost
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=swot2
DB_USERNAME=root
DB_PASSWORD=
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
<?php
/**
* Laravel - A PHP Framework For Web Artisans
*
* @package Laravel
* @author Taylor Otwell <[email protected]>
*/
/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader for
| our application. We just need to utilize it! We'll simply require it
| into the script here so that we don't have to worry about manual
83
| loading any of our classes later on. It feels nice to relax.
|
*/
require __DIR__.'/../../swot/bootstrap/autoload.php';
/*
|--------------------------------------------------------------------------
| Turn On The Lights
|--------------------------------------------------------------------------
|
| We need to illuminate PHP development, so let us turn on the lights.
| This bootstraps the framework and gets it ready for use, then it
| will load up this application so that we can run it and send
| the responses back to the browser and delight our users.
|
*/
$app = require_once __DIR__.'/../../swot/bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$response = $kernel->handle(
$request = Illuminate\Http\Request::capture()
);
$response->send();
$kernel->terminate($request, $response);
84