Sunteți pe pagina 1din 80

INSTITUTO TECNOLÓGICO SUPERIOR DE LIBRES

Organismo Público Descentralizado del Gobierno del Estado de Puebla

INGENIERÍA EN SISTEMAS COMPUTACIONALES

TEMA:
MIGRACIÓN DE APLICACIONES PYMES A TECNOLOGÍAS WEB

REPORTE TÉCNICO FINAL

PRESENTA:
JOSÉ TRINIDAD LUNA FERNÁNDEZ

LIBRES, PUEBLA, FEBRERO 2019


AGRADECIMIENTOS

Primero que nada, quiero dar gracias Dios por haberme permitido llegar hasta aquí,
por ser mi guía en la vida y brindarme apoyo cada vez que lo necesite, por darme una
vida en la cual las tristezas son opacadas por las alegrías.

También quiero dar gracias a mis padres ya que, sin ellos, sin su apoyo
incondicional y amor nada de esto sería posible, gracias por toda la educación que me
han dado. Gracias a mí padre José Trinidad, por enseñarme como ser un hombre y
una persona de bien en la vida, y a mi madre Martha por enseñarme cómo afrontar la
vida, a mis hermanos y familiares que siempre me apoyaron y dieron ánimos.

Por último, pero no menos importante a todos mis amigos y seres queridos
gracias por las alegrías y cada momento que pasamos juntos y pasaremos. A todos
gracias que sin ustedes nada esto sería posible.

ii
RESUMEN

El propósito de este proyecto es construir un Sistema Web que solucione los


problemas de gestión de inventarios, ventas y compras de PYMES, ya que hasta el
momento solo se tiene una aplicación de Escritorio que satisface estás necesidades.
Para ello se hará una construcción de un nuevo Sistema en base a la aplicación de
Escritorio ya existente.

El proyecto será documentado siguiendo la metodología SCRUM, ya que es la


que mejor se adapta a éste y permite una generación de Software de manera iterativa
y progresiva. Cabe mencionar que el proyecto está dividido en dos partes, la parte
Back-End y la parte Front-End, permitiendo un desarrollo aún más ágil.

La parte Back-End del Sistema se desarrolló con el lenguaje de programación


PHP en su versión 7 y MySQL como gestor de Base de Datos, siguiendo el patrón
arquitectura MVC. La parte Front-End se construyó utilizando tecnología HTML5,
CSS3 y JavaScript y otras tecnologías de vanguardia.

El Sistema Web permitirá el acceso y búsqueda de información en cualquier


momento que se desee, así como también un control eficiente de todos los registros
del inventario.

Palabras Clave: Aplicación de Escritorio, Sistema Web, Metodología SCRUM,


Back-End, PHP, MySQL, Base de Datos.

iii
ÍNDICE

CAPÍTULO I GENERALIDADES DEL PROYECTO

1.1 Introducción ....................................................................................................... 2

1.2 Descripción de la empresa u organización y del puesto o área del trabajo ....... 3

1.2.1 Misión y visión ............................................................................................. 3

1.2.2 Ubicación .................................................................................................... 4

1.3 Problemas a resolver, priorizándolos ................................................................. 4

1.4 Objetivos ............................................................................................................ 5

1.4.1 Objetivo general .......................................................................................... 5

1.4.2 Objetivos específicos .................................................................................. 5

1.5 Justificación ....................................................................................................... 6

1.6 Alcances ............................................................................................................ 8

1.7 Limitaciones ....................................................................................................... 8

1.8 Competencias a desarrollar ............................................................................... 8

CAPÍTULO II MARCO TEÓRICO

2.1 Introducción ..................................................................................................... 10

2.2 Lenguajes de Programación ............................................................................ 11

2.3 Lenguajes de Programación usados en el lado Back-End............................... 11

2.3.1 PHP ........................................................................................................... 12

2.3.2 Programación Orientada a Objetos en PHP .............................................. 12

2.3.3 Clases en PHP .......................................................................................... 13


iv
2.4 Frameworks usados en la Parte Back-End ...................................................... 13

2.4.1 Laravel ...................................................................................................... 14

2.4.2 Laravel en la creación de APIs .................................................................. 15

2.4.3 Eloquent en el manejo de Bases de Datos ............................................... 16

2.5 Sistemas de Bases de Datos ........................................................................... 16

2.5.1 Características de un Sistema de Base de Datos ..................................... 17

2.5.2 Modelo Entidad Relación .......................................................................... 18

2.5.3 Sistemas Gestores de Bases de Datos ..................................................... 18

2.5.4 MySQL ...................................................................................................... 19

2.5.5 PHPMyAdmin ............................................................................................ 19

2.6 La Web ............................................................................................................ 20

2.6.1 Servidor Web ............................................................................................ 20

2.6.2 Navegador Web ........................................................................................ 20

2.7 Metodología SCRUM ....................................................................................... 21

2.8 Elementos de Scrum........................................................................................ 22

2.8.1 Roles ......................................................................................................... 22

2.8.2 Poda de Requerimiento............................................................................. 23

2.8.3 Product Backlog ........................................................................................ 23

2.8.4 Sprint ......................................................................................................... 24

CAPÍTULO III DESARROLLO-METODOLOGÍA

3.1 Primer Sprint “Generación de la Base de Datos” ............................................. 26

3.1.1 Diseño de los Datos .................................................................................. 26

3.2 Segundo Sprint “Construcción del Back-End en el Módulo Usuarios” ............. 28

v
3.3 Tercer Sprint “Construcción del Back-End en el Módulo Categorías” .............. 30

3.4 Cuarto Sprint “Construcción del Back-End en el Módulo Proveedores” .......... 31

3.5 Quinto Sprint “Construcción del Back-End en el Módulo Productos” ............... 32

3.6 Sexto Sprint “Construcción del Back-End en el Módulo Clientes” ................... 34

3.7 Séptimo Sprint “Construcción del Back-End en el Módulo Ventas” ................. 35

CAPÍTULO IV RESULTADOS

4.1 Módulo Usuarios .............................................................................................. 38

4.2 Módulo Categorías .......................................................................................... 40

4.3 Módulo Proveedores ........................................................................................ 42

4.4 Módulo Productos ............................................................................................ 44

4.5 Módulo Clientes ............................................................................................... 46

4.6 Módulo de Ventas ............................................................................................ 48

4.7 Pruebas Técnicas ............................................................................................ 50

CONCLUSIONES Y RECOMENDACIONES ............................................................ 51

FUENTES DE INFORMACIÓN ................................................................................. 53

GLOSARIO ............................................................................................................... 55

ACRÓNIMOS ............................................................................................................ 56

ANEXOS ................................................................................................................... 58

Anexo 1. Diseño del Módulo Usuarios ................................................................... 58

vi
Anexo 2. Diseño del Módulo Categorías ............................................................... 60

Anexo 3. Diseño del Módulo Proveedores ............................................................. 61

Anexo 4. Diseño del Módulo Productos ................................................................. 63

Anexo 5. Diseño del Módulo Clientes .................................................................... 66

Anexo 6. Diseño del Módulo Ventas. ..................................................................... 68

vii
ÍNDICE DE TABLAS

Tabla 3.1 Definición del Equipo de Trabajo ............................................................... 26


Tabla 3.2 Product Backlog del Primer Sprint ............................................................. 26
Tabla 3.3 Equipo de Trabajo del Segundo Sprint ...................................................... 28
Tabla 3.4 Product Backlog del Segundo Sprint ......................................................... 29
Tabla 3.5 Equipo de Trabajo del Tercer Sprint .......................................................... 30
Tabla 3.6 Product Backlog del Tercer Sprint ............................................................. 30
Tabla 3.7 Equipo de Trabajo del Cuarto Sprint ......................................................... 31
Tabla 3.8 Product Backlog del Cuarto Sprint ............................................................ 32
Tabla 3.9 Equipo de Trabajo del Quinto Sprint.......................................................... 32
Tabla 3.10 Product Backlog del Quinto Sprint ........................................................... 33
Tabla 3.11 Equipo de Trabajo del Sexto Sprint ......................................................... 34
Tabla 3.12 Product Backlog del Sexto Sprint ............................................................ 34
Tabla 3.13 Equipo de Trabajo del Séptimo Sprint ..................................................... 35
Tabla 3.14 Product Backlog del Séptimo Sprint ........................................................ 36
Tabla 4.1 Descripción de las Pruebas Técnicas ........................................................ 50

viii
ÍNDICE DE FIGURAS

Figura 1.1 Ubicación de la Empresa ........................................................................... 4


Figura 2.1 PHP embebido ......................................................................................... 12
Figura 2.2 Funcionamiento general de un API .......................................................... 15
Figura 2.3 Funcionamiento de Eloquent en Laravel .................................................. 16
Figura 2.4 Sistemas Gestores De Base De Datos .................................................... 19
Figura 2.5 Ciclo de desarrollo ágil ............................................................................. 22
Figura 2.6 Descripción del Ciclo de Scrum ............................................................... 24
Figura 3.1 Tablas de la Base de Datos ..................................................................... 27
Figura 3.2 Esquema de la Base de Datos ................................................................. 28
Figura 4.1 Respuesta del Controlador ....................................................................... 38
Figura 4.2 Resultado Final del Módulo Usuarios ....................................................... 39
Figura 4.3 Respuesta del Controlador Categorías .................................................... 40
Figura 4.4 Resultado final del módulo Categorías ..................................................... 41
Figura 4.5 Respuesta del Controlador Proveedores ................................................. 42
Figura 4.6 Vista final del módulo Proveedores .......................................................... 43
Figura 4.7 Respuesta del Controlador Productos...................................................... 44
Figura 4.8 Vista final del módulo Productos .............................................................. 45
Figura 4.9 Respuesta del Controlador del módulo Clientes ...................................... 46
Figura 4.10 Resultado final del módulo Clientes ....................................................... 47
Figura 4.11 Respuesta del Controlador de Ventas.................................................... 48
Figura 4.12 Resultado obtenido en el Módulo de Ventas .......................................... 49

ix
MIGRACIÓN DE APLICACIONES PYMES A TECNOLOGÍAS WEB

x
CAPÍTULO I

Capítulo 1 GENERALIDADES DEL


PROYECTO
1.1 Introducción
En la actualidad hay una gran tendencia por los Sistemas Web, no solo por llevar a
cabo tareas de forma eficiente y rápida, sino también porque son capaces de realizar
tareas que un Sistema de escritorio ejecuta. A diferencia de una Aplicación de
escritorio que es instalada y ejecutada en una computadora, un Sistema Web puede
ser accedido desde cualquier dispositivo por medio de un navegador con conexión a
internet.

La Consultoría Dextera de México S. De R.L de C.V cuenta con programas


desarrollados en Visual Basic 6.0 basadas en escritorio. Visual Basic es un lenguaje
de programación y entorno de desarrollo integrado (IDE). Se deriva del lenguaje de
programación BASIC más antiguo, y por lo tanto se considera un lenguaje de
programación útil y relativamente fácil de aprender para los principiantes. Visual Basic
6.0 fue la última edición del software. Microsoft dejó de proporcionar soporte en el
2005, y por completo en el 2008.

Desde el último soporte que Microsoft proporcionó a Visual Basic hasta hoy ya
han pasado 10 años, lo que es su tiempo fue considerado innovador ahora está
quedando obsoleto.

Hoy en día la Consultoría Dextera de México S. De R.L de C.V tiene la


necesidad de migrar y actualizar los programas de escritorio a un Sistema Web más
robusto, accesible, rápido y ágil permitiendo así hacer más eficiente a la empresa.

2
1.2 Descripción de la empresa u organización y del puesto o área del
trabajo
Dextera es una empresa mexicana con más de 10 años de experiencia en consultoría
especializada en proveer soluciones al área de recursos humanos a través de
tecnología y procesos, orientada a la innovación constante. Es por ello la necesidad
de personal en el área de desarrollo de proyectos tecnológicos, ya que cuenta
productos que son softwares de escritorio para PYMES. Estas aplicaciones
actualmente se están quedando atrás con el surgimiento de nuevas tendencias
tecnológicas, siendo así, la tarea principal es rediseñar los softwares que se están
quedando obsoletos y actualizarlos para traerlos de vuelta como Aplicaciones Web.

1.2.1 Misión y visión


Misión:

Nuestra capacidad para innovar y el compromiso con nuestros clientes son factores
que nos distinguen, además de que proporcionamos servicios y productos de la más
alta calidad, en un entorno altamente colaborativo.

Visión:

Gracias a nuestro enfoque local y global, deseamos ser líderes en la puesta en marcha
de soluciones de capital humano en México y América Latina.

3
1.2.2 Ubicación
La empresa Dextera de México S. De R.L de C.V, se localiza en la calle Mario Paní
400-1, Col. Santa Fé. Del. Cuajimalpa de Morelos, México, CDMX, como se muestra
en la Figura 1.1

Figura 1.1 Ubicación de la Empresa

1.3 Problemas a resolver, priorizándolos


El problema principal que radica actualmente en la Consultoría Dextera de México S.
De R.L de C.V es que las pequeñas y medianas empresas que se proveen de sus
servicios, se encuentran en un proceso de transición hacia la digitalización de las
nuevas tendencias tecnológicas. Es por ello que surge la necesidad de hacer una
migración de un una de sus aplicaciones de escritorio más importantes y usada, ya
que está construida en lenguajes de programación obsoletos.

También se pretende hacer que el Sistema Web sea Responsivo haciéndolo


capaz de ser desplegado desde el navegador de cualquier dispositivo, generando así
una mayor eficiencia en las actividades de la empresa.

Por último, se generará un Sistema que será en divido en dos capas, la Back-
End y la Front-End, ambas capas trabajarán en conjunto. El Sistema será una base
para futuras actualizaciones y mejoras.

4
1.4 Objetivos

1.4.1 Objetivo general


Diseñar e implementar un Sistema usando tecnologías Web que permita la migración
de aplicaciones de punto de ventas desarrolladas en Visual Basic 6.0.

1.4.2 Objetivos específicos

 Generar un Sistema Back-End inteligente capaz de proveer respuesta a todas


las peticiones realizadas por la parte Front-End o parte visual del proyecto.
 Construir en conjunto con la parte cliente un MVC (modelo vista controlador).
 Proveer seguridad y configuración eficiente en el servidor.
 Construir un modelo base que pueda ser retomado a futuro con diferentes
tecnologías.

5
1.5 Justificación
El uso de nuevas tecnologías de comunicación permite una interacción más asertiva
entre las organizaciones y sus integrantes. La Consultoría Dextera de México S. De
R.L de C.V cuenta con programas desarrollados en Visual Basic 6.0 basadas en
escritorio para Pymes. Estos programas son Sistemas de Inventarios que permiten a
las PYMES mantener un control de su empresa, de sus empleados, de los productos
y servicios que ofrecen. Al ser programas de escritorio estos se encuentran instalados
en la computadora central. Actualmente los usuarios de estos softwares tienen la
necesidad de acceder a los datos desde cualquier lugar y desde cualquier dispositivo
a su alcance, lo cual es imposible al ser solo una aplicación que solo puede ser
manejada desde el lugar que se instaló.

Para ello se pretende desarrollar un Sistema Web genérico el cual contendrá la


migración de estos softwares y de todas sus características, entre los siguientes
podemos destacar la creación de un módulo para de la gestión de todos los Usuarios
que se encargarán de manejar el Sistema, que a su vez será capaz de asignar Roles
específicos a cada Usuario registrado, entre los ellos se tienen un Administrador el
cual es capaz de acceder a toda la funcionalidad del Sistema y un vendedor el cual
solo tiene acceso a ciertas áreas. Un módulo encargado de la gestión de los productos,
en el cual se registrarán todos los productos que se manejen dentro la empresa, el tipo
de producto, su valor y la cantidad en existencia. Por último, se diseñarán los módulos
de gestión de clientes y el módulo de ventas realizadas por la empresa. Todos los
datos del Sistema serán almacenados en MYSQL, un Sistema Gestos de Base de
Datos.

De esta forma, podemos decir que los Sistemas Web a desarrollar serán de
fácil manejo, ya que permitirán administrar todas las características del Sistema de una
manera eficiente desde cualquier dispositivo, así también servirá como un Sistema
Web base que quizá con el tiempo y el surgimiento de nuevas tecnologías éste pueda
ser escalado o actualizado en la parte Front-End o Back-End del proyecto y seguir
funcionando.

6
La migración de estas aplicaciones basadas en escritorio se realiza con el
propósito de rediseñar los softwares que se están quedando obsoletos y actualizarlos
para traerlos de vuelta como Sistemas Web, las cuales son más fáciles de usar y más
amigables con los usuarios.

Es importante mencionar que se minimizará costos operativos al querer tener


acceso a la información que se necesite, ya que se podrán disponer a través de un
Sistema Web de forma rápida y ágil. Al mismo tiempo permitiendo un mayor alcance y
presencia en el mundo virtual, permitiendo así la posibilidad de actualización continua.
Este proyecto cubre una necesidad de la empresa, ya que al ser una empresa
tecnológica también debe mantenerse a la vanguardia.

7
1.6 Alcances
El diseño de este Sistema Web tendrá los siguientes alcances:

 Por medio de este Sistema se podrá llevar un control de todos los usuarios,
clientes, productos y ventas.

 Acceso a la información del Sistema por medio del navegador de cualquier


dispositivo.

 Agilizar la búsqueda de información almacenada en una base de datos


mediante el diseño de páginas dinámicas.

 Contar con un control de acceso al Sistema.

1.7 Limitaciones
 La falta de comunicación del Sistema Front-End con el Sistema Back-End.

 La aplicación solo funcionará de manera local.

1.8 Competencias a desarrollar


 Conocimientos, metodologías y modelos de calidad para la industria del
software.
 Iniciativa, proactividad y capacidad de análisis para la resolución de problemas.
 Construir o adaptar clases, módulos u otras piezas de software. Reutilizar
componentes existentes integrándolos con código propio.
 Verificar los programas producidos probándolos en forma unitaria.
 Revisar el código para resolver defectos y mejorarlo.
 Desarrollar habilidades para trabajar en grupo.
 Comunicación escrita, para redactar las ideas de forma gramaticalmente
correcta.

8
CAPÍTULO II

Capítulo 2 MARCO TEÓRICO

9
2.1 Introducción
Este capítulo se abordará toda la información que sustenta el desarrollo del Proyecto,
en el cual se detallan y definen los conceptos básicos, complementarios y específicos.
Primero se parte con definición de lenguajes de programación con el fin de
comprender la diferencia entre lenguaje y un lenguaje de programación, así como
también que tipos de lenguajes serán usados en el desarrollo de la parte Back-End de
este proyecto.
Posteriormente se describe qué es un Framework Web, para qué sirve Laravel,
su uso en el desarrollo de APIs Webs, qué es Eloquent de Laravel, su funcionamiento
en el manejo de Base de Datos y toda la información referente a Sistema de Base de
Datos, también una descripción de la Web y sobre qué es un Servidor Web.
Por último, se define la metodología SCRUM, la cual fue utilizada en el
desarrollo de este Proyecto.

10
2.2 Lenguajes de Programación
Para entender que es un lenguaje de programación primero debemos entender que es
un lenguaje, (Celaya) define que Lenguaje es el empleo de notaciones, señales y
vocales (voz, palabras) para expresar ideas, comunicarse, y establecer relaciones
entre los seres humanos. Un lenguaje no sólo consta de “palabras”, sino también de
su pronunciación y los métodos para combinar las palabras en frases y oraciones; los
lenguajes se forman mediante combinaciones de palabras definidas en un diccionario
terminológico previamente establecido.

Aunque existen muchas clasificaciones, en general se puede distinguir entre


dos clases de lenguajes: los lenguajes naturales (inglés, alemán, español, etc.) y los
lenguajes artificiales o formales (matemático, lógico, computacional, etc.). Un
ejemplo de lenguaje artificial son los lenguajes de programación utilizados para
desarrollar programas informáticos.

Ahora bien, un Lenguaje de Programación es un conjunto de reglas, notaciones,


símbolos y/o caracteres que permiten a un programador poder expresar el
procesamiento de datos y sus estructuras en la computadora. Cada lenguaje posee
sus propias sintaxis. También se puede decir que un programa es un conjunto de
órdenes o instrucciones que resuelven un problema específico. (Celaya)

2.3 Lenguajes de Programación usados en el lado Back-End


La Programación del lado del servidor es una tecnología que consiste en el
procesamiento de una petición de un usuario mediante la interpretación de un script
en el Servidor Web para generar páginas HTML dinámicamente como respuesta.

Todo lo que suceda dentro del Servidor es llamado procesamiento del lado del
Servidor, o server-side processing. Cuando tu aplicación necesita interactuar con el
Servidor (por ejemplo, para cargar o guardar datos), ésta realiza una petición del lado
del cliente (request) desde el navegador, a través de la red usando invocaciones
remotas a métodos (remote procedure call, RPC). Mientras se está procesando una
llamada RPC, tu servidor está ejecutando código del lado del servidor. (Gerardo, s.f.)

11
2.3.1 PHP
El autor (Arias) define a PHP (acrónimo recursivo de PHP: Hypertext Preprocessor)
como un lenguaje interpretado libre, usado originalmente solamente para el desarrollo
de aplicaciones presentes y actuaran del lado del servidor, capaces de generar
contenido dinámico.

Ahora bien, complementando la definición (Cobo, 2005) dice que PHP se


caracteriza por su potencia, versatilidad, robustez y modularidad. Los programas
escritos en PHP son embebidos directamente en el HTML y ejecutados por el Servidor
Web a través de un intérprete antes de transferir la cliente lo que ha solicitado. En la
Figura 2.1 se muestra como combinar PHP y HTML.

Figura 2.1 PHP embebido

2.3.2 Programación Orientada a Objetos en PHP


La Programación Orientada a Objetos (POO) es un tipo de programación agregada a
PHP 5 que hace de la construcción compleja, modular y reusable de aplicaciones web
mucho más fácil Con el lanzamiento de PHP 5, los programadores en PHP finalmente
tienen el poder de programar como los grandes. Así como Java y C#, PHP finalmente
tiene una completa infraestructura POO.
La POO trata acerca de crear código modular, de manera que nuestro código
PHP orientado a objetos será contenido en archivos dedicados que serán insertados
en una página PHP usando "includes" de PHP. En este caso todo el código PHP OO
estará en el archivo PHP: class_lib.php OOP se revuelve alrededor de una estructura
12
construida llamada 'clase' (class). Las clases son los encargados de definir las
plantillas que posteriormente son usadas para la definición de objetos. (Mischook,
2018)

2.3.3 Clases en PHP


Según el Manual Oficial de PHP, una Clase es: Una colección de variables y funciones
que trabajan con estas variables. Las variables se definen utilizando var y las funciones
utilizando function.

La definición básica de clases comienza con la palabra clave class, seguido por
un nombre de clase, continuado por un par de llaves que encierran las definiciones de
las propiedades y métodos pertenecientes a la clase. El nombre de clase puede ser
cualquier etiqueta válida que no sea una palabra reservada de PHP. Un nombre válido
de clase comienza con una letra o un guion bajo, seguido de la cantidad de letras,
números o guiones bajos que sea.

Declaración de Clases finales En PHP 5 incorpora clases finales que no pueden


ser heredadas por otra. Se definen anteponiendo la palabra clave final.

Los objetos pueden heredar propiedades y métodos de otros objetos. Para ello,
PHP permite la “extensión” (herencia) de clases, cuya característica representa la
relación existente entre diferentes objetos. Para definir una clase como extensión de
una clase “madre” se utiliza la palabra clave extends. (Bahit, 2018)

2.4 Frameworks usados en la Parte Back-End


Los frameworks de lado servidor (es decir, "los frameworks de aplicaciones web") son
frameworks software que hacen más fácil escribir, mantener y escalar aplicaciones
web. Proporcionan herramientas y bibliotecas que simplifican tareas comunes de
desarrollo web, incluyendo enrutado de URLs a los manejadores apropiados,
interactuación con bases de datos, soporte de sesiones y autorizaciones de usuario,
formateado de la salida (ejem., HTML, JSON, XML), y mejora de la seguridad contra
los ataques Web. (Pino, 2018)

13
2.4.1 Laravel
Laravel es un framework de código abierto para el desarrollo de aplicaciones web en
PHP 5,6,7 que posee una sintaxis simple, expresiva y elegante. Fue creado en 2011
por Taylor Otwell, inspirándose en Ruby on Rails y Symfony, de los cuales ha adoptado
sus principales ventajas.

Laravel facilita el desarrollo simplificando el trabajo con tareas comunes como


la autenticación, el enrutamiento, gestión sesiones, el almacenamiento en caché,
etc. Algunas de las principales características y ventajas de Laravel son:

 Está diseñado para desarrollar bajo el patrón MVC (modelo - vista -


controlador), centrándose en la correcta separación y modularización del
código. Lo que facilita el trabajo en equipo, así como la claridad, el
mantenimiento y la reutilización del código.
 Integra un sistema ORM de mapeado de datos relacional llamado Eloquent,
aunque también permite la construcción de consultas directas a base de datos
mediante su Query Builder.
 Permite la gestión de bases de datos y la manipulación de tablas desde
código, manteniendo un control de versiones de las mismas mediante su
sistema de Migraciones.
 Utiliza un sistema de plantillas para las vistas llamado Blade, el cual hace uso
de la cache para darle mayor velocidad. Blade facilita la creación de vistas
mediante el uso de layouts, herencia y secciones.
 Facilita la extensión de funcionalidad mediante paquetes o librerías externas.
De esta forma es muy sencillo añadir paquetes que nos faciliten el desarrollo
de una aplicación y nos ahorren mucho tiempo de programación.
 Incorpora un intérprete de línea de comandos llamado Artisan que nos
ayudará con un montón de tareas rutinarias como la creación de distintos
componentes de código, trabajo con la base de datos y migraciones, gestión
de rutas, cachés, colas, tareas programadas, etc. (Gallego A. J., 2017)

14
2.4.2 Laravel en la creación de APIs
(Castelo, s.f.) Primero, se debe entender qué se considera exactamente una API
RESTful. REST significa REpresentational State Transfer y es un estilo arquitectónico
para la comunicación de red entre aplicaciones, que se basa en un protocolo sin estado
(generalmente HTTP) para la interacción, en la Figura 2.2 se muestra el
Funcionamiento General de un API.

Figura 2.2 Funcionamiento general de un API

Los recursos API presentan una forma de transformar fácilmente los modelos
en respuestas JSON. Actúa como una capa de transformación que se encuentra
entre los modelos Eloquent y las respuestas JSON que realmente son devueltas por
nuestra API. Los recursos API están formados por dos entidades: una clase de
recursos y una colección de recursos. Una clase de recurso representa un modelo
único que debe transformarse en una estructura JSON, mientras que una colección
de recursos se utiliza para transformar colecciones de modelos en una estructura
JSON. (Enyinnaya, 2018)

En las API de REST, se usan los verbos HTTP como acciones y los puntos
finales son los recursos sobre los que se actúa. Los verbos HTTP que existen son:

 GET: Recuperar recursos.


 POST: Crear recursos.
15
 PUT: Actualizar recursos.
 DELETE: Eliminar recursos

2.4.3 Eloquent en el manejo de Bases de Datos


Eloquent es el ORM que incluye Laravel para manejar de una forma fácil y sencilla los
procesos correspondientes al manejo de bases de datos en proyectos, gracias a las
funciones que provee podremos realizar complejas consultas y peticiones de base de
datos sin escribir una sola línea de código SQL. (Jeff, 2015)

(Gallego A. J., 2017) En Laravel se hace uso de un ORM llamado Eloquent,


un ORM es un Mapeo Objeto-Relacional por sus siglas en inglés (Object-Relational
mapping), que es una forma de mapear los datos que se encuentran en la base de
datos almacenados en un lenguaje de script SQL a objetos de PHP y viceversa, esto
surge con la idea de tener un código portable con el que no tengamos la necesidad de
usar lenguaje SQL dentro de nuestras clases de PHP. En la Figura 2.3 se muestra el
funcionamiento de Eloquent.

Figura 2.3 Funcionamiento de Eloquent en Laravel

2.5 Sistemas de Bases de Datos


Un sistema de bases de datos (Date, 2001) es básicamente un sistema computarizado
para llevar registros. Es posible considerar a la propia base de datos como una especia
de armario electrónico para archivar; es decir, es un depósito o contenedor de una

16
colección de archivos de datos computarizados. Los usuarios del sistema pueden
realizar una variedad de operaciones sobre dichos archivos; por ejemplo:

 Agregar nuevos archivos vacíos a la base de datos;


 Insertar datos dentro de los archivos existentes;
 Recuperar datos de los archivos existentes;
 Modificar datos de los archivos existentes;
 Eliminar datos de los archivos existentes;
 Eliminar archivos existentes de la base de datos.

2.5.1 Características de un Sistema de Base de Datos


Las características (Cardoso, 2006) que presenta un Sistema de bases de datos son
las siguientes:
 Diccionario de Datos: Es un conjunto de tablas que contiene la siguiente
información:
Diseño físico de las Bases de datos (BD) construidas, estructuras de
almacenamiento, caminos de acceso, tamaños de archivos y registros;
descripción de los usuarios de la BD. EL diccionario de datos permite a
cualquier usuario, obtener información sobre la BD misma.
 Control de redundancia: Mientras menos duplicidad exista entre los datos, más
consistente será la información, ya que la duplicidad complica el mantenimiento
de los datos hasta el peligro de perder la consistencia.
 Seguridad: Deben existir mecanismos que permitan garantizar que cada quien
ve y hace solo lo que puede y debe hacer en la BD.
 Almacenamiento persistente de datos y estructuras de almacenamiento: Una
vez creada una tabla, su estructura quedará protegida hasta que se ejecute,
sobre ella, algún cambio explícito.
 Mecanismos para definir e implementar reglas: Restricciones declarativas como
las claves primarias, foráneas, mandatoriedad, unicidad, restricciones de
dominio simples (Tipos de datos, rangos, valores máximos, etc.) que, asociados

17
a los eventos de inserción actualización y eliminación, garanticen la integridad
del contenido de la BD en todo momento.
 El contenido de una BD puede ser visto a través de múltiples interfaces.
 A través del diseño lógico (Tablas relacionales) se esconde, al usuario, la
complejidad del almacenamiento físico que está por detrás de cada sistema de
bases de datos.
 Siempre deben existir mecanismos y herramientas que permitan y faciliten el
respaldo y recuperación de una BD.

2.5.2 Modelo Entidad Relación


Los diagramas o modelos entidad-relación (denominado por sus siglas, ERD “Diagram
Entity relationship”) son una herramienta para el modelado de datos de un sistema de
información. Estos modelos expresan entidades relevantes para un sistema de
información, sus interrelaciones y propiedades. (Valdés, 2007)

El diseño de relaciones entre las tablas de una base de datos puede ser la
siguiente:

 Relaciones de uno a uno: una instancia de la entidad A se relaciona con una y


solamente una de la entidad B.
 Relaciones de uno a muchos: cada instancia de la entidad A se relaciona con
varias instancias de la entidad B.
 Relaciones de muchos a muchos: cualquier instancia de la entidad A se
relaciona con cualquier instancia de la entidad B.

2.5.3 Sistemas Gestores de Bases de Datos


(Valdés, 2007) Los Sistemas de Gestión de Base de Datos (en inglés DataBase
Management System) son un tipo de software muy específico, dedicado a servir de
interfaz entre la base de datos, el usuario y las aplicaciones que la utilizan. Se compone
de un lenguaje de definición de datos, de un lenguaje de manipulación de datos y de
un lenguaje de consulta. En la Figura 2.4 se muestran los diferentes Sistemas
Gestores de Base de Datos que existen.

18
Figura 2.4 Sistemas Gestores De Base De Datos

2.5.4 MySQL
MySQL es un sistema gestor de bases de datos. Pero la virtud fundamental y la clave
de su éxito es que se trata de un sistema de libre distribución y de código abierto. Lo
primero significa que se puede descargar libremente de Internet (por ejemplo, de la
dirección (www.mysql.com); lo segundo (código abierto) significa que cualquier
programador puede remodelar el código de la aplicación para mejorarlo. (Sánchez,
2004)
MySQL es un interpretador de SQL, es un servidor de base de datos. MySQL
permite crear base de datos y tablas, insertar datos, modificarlos, eliminarlos,
ordenarlos, hacer consultas y realizar muchas operaciones, etc., resumiendo:
administrar bases de datos.

2.5.5 PHPMyAdmin
Herramienta web para controlar y manejar bases de datos MySQL. Corre bajo lenguaje
de programación PHP. Actualmente puede crear y eliminar Bases de Datos, crear,
eliminar y alterar tablas, borrar, editar y añadir campos, ejecutar cualquier sentencia
SQL, administrar claves en campos, administrar privilegios, exportar datos en varios
formatos y está disponible en 50 idiomas. Se encuentra disponible bajo la licencia GPL.
(García, 2007)

19
2.6 La Web
WEB (World Wide Web, o www), es un conjunto de documentos (webs)
interconectados por enlaces de hipertexto, disponibles en Internet que se pueden
comunicar a través de la tecnología digital. Se entiende por “hipertexto” la mezcla de
textos, gráficos y archivos de todo tipo, en un mismo documento. (Latorre, 2018)

2.6.1 Servidor Web


Un servidor web es un programa creado para transferir páginas web a través de la
implementación del protocolo HTTP. Por extensión, se denomina servidor a la
computadora donde se ejecuta dicho tipo de software.

Los servidores suelen utilizarse para almacenar archivos digitales. Los clientes,
por lo tanto, se conectan a través de la red con el servidor y acceden a dicha
información. En ocasiones, un ordenador puede cumplir con las funciones de servidor
y de cliente de manera simultánea. (Porto & Gardey, 2010)

2.6.2 Navegador Web


Un navegador de Internet es una herramienta informática que nos permite acceder a
toda la información contenida en Internet. Esta información se organiza en un conjunto
de datos multimedia que incluyen textos, imágenes, vídeos y sonidos, se denominan
páginas Web.

Los navegadores Web más utilizados son Google Chrome, Firefox, Opera,
Safari y Internet Explorer. (Carlos, 2018)

20
2.7 Metodología SCRUM
Scrum es una metodología ágil de gestión de proyectos cuyo objetivo primordial es
elevar al máximo la productividad de un equipo. Reduce al máximo la burocracia y
actividades no orientadas a producir software que funcione y produce resultados en
periodos muy breves de tiempo. Como método, Scrum enfatiza valores y prácticas de
gestión, sin pronunciarse sobre los requerimientos, prácticas de desarrollo,
implementación y demás cuestiones técnicas. Más bien delega completamente en el
equipo la responsabilidad de decidir la mejor manera de trabajar para ser lo más
productivos posibles. (Citón, 2006)

Scrum al ser una metodología de desarrollo ágil tiene como base la idea de
creación de ciclos breves para el desarrollo, que comúnmente se llaman iteraciones y
que en Scrum se llamarán “Sprints”.

Para entender el ciclo de desarrollo de Scrum es necesario conocer las 5 fases


que definen el ciclo de desarrollo ágil:

1.Concepto: Se define de forma general las características del producto y se


asigna el equipo que se encargará de su desarrollo.

2. Especulación: en esta fase se hacen disposiciones con la información


obtenida y se establecen los límites que marcarán el desarrollo del producto, tales
como costes y agendas. Se construirá el producto a partir de las ideas principales y se
comprueban las partes realizadas y su impacto en el entorno. Esta fase se repite en
cada iteración y consiste, en rasgos generales, en:

 Desarrollar y revisar los requisitos generales.


 Mantener la lista de las funcionalidades que se esperan.
 Plan de entrega. Se establecen las fechas de las versiones, hitos e iteraciones.
Medirá el esfuerzo realizado en el proyecto.

3. Exploración: Se incrementa el producto en el que se añaden las funcionalidades


de la fase de especulación.

21
4. Revisión: El equipo revisa todo lo que se ha construido y se contrasta con el
objetivo deseado.

5. Cierre: Se entregará en la fecha acordada una versión del producto deseado. Al


tratarse de una versión, el cierre no indica que se ha finalizado el proyecto, sino que
seguirá habiendo cambios, denominados “mantenimiento”, que hará que el producto
final se acerque al producto final deseado. (Gallego M. T., s.f.)

En la Figura 2.5 se muestran las 5 fases del desarrollo ágil.

Figura 2.5 Ciclo de desarrollo ágil

2.8 Elementos de Scrum


Para entender todo el proceso de desarrollo del Scrum, se describirá de forma general
las fases, los roles los demás elementos que lo componen.

2.8.1 Roles
Scrum tiene una estructura muy simple. Todas las responsabilidades del proyecto se
reparten en 3 Roles: (Citón, 2006)

 Product Owner (Dueño del Producto): Es la persona que toma las decisiones,
y es la que realmente conoce el negocio del cliente y su visión del producto. Se

22
encarga de escribir las ideas del cliente, las ordena por prioridad y las coloca
en el Product Backlog.
 ScrumMaster (Líder de Proyecto): Es el encargado de comprobar que el
modelo y la metodología funciona. Eliminará todos los inconvenientes que
hagan que el proceso no fluya e interactuará con el cliente y con los gestores.
 Development Team (Equipo De Desarrollo): suele ser un equipo pequeño de
unas 5-9 personas y tienen autoridad para organizar y tomar decisiones para
conseguir su objetivo. Está involucrado en la estimación del esfuerzo de las
tareas del Backlog. (Gallego M. T., s.f.)

2.8.2 Poda de Requerimiento


La poda de requerimientos es una buena práctica implícita en modelos ágiles, y
consiste en hacer lo que el cliente realmente desea, no más. La primera actividad en
un proyecto manejado con SCRUM es armar una lista exhaustiva de los
requerimientos originales del sistema. Posteriormente se realiza una revisión para
evaluar qué requerimientos son realmente necesarios, cuáles pueden posponerse y
cuáles eliminarse. Para ello debe identificarse un representante con capacidad de
decisión, priorizar los requerimientos en base a su importancia y acordar cuáles son
los prioritarios para la fecha de entrega. (Chancusi & Manuel, 2012)

2.8.3 Product Backlog


Con los requerimientos priorizados y podados se arma el Backlog de Producto. Este
es una forma de registrar y organizar el trabajo pendiente para el producto (actividades
y requerimientos).
Es un documento dinámico que incorpora constantemente las necesidades del
Sistema. Por lo tanto, nunca llega a ser una lista completa y definitiva. Se mantiene
durante todo el ciclo de vida y es responsabilidad del Product Owner. (Citón, 2006)

23
2.8.4 Sprint
Un Sprint es el periodo de tiempo durante el que se desarrolla un incremento de
funcionalidad. Constituye el núcleo de SCRUM, que divide de esta forma el desarrollo
de un proyecto en un conjunto de pequeñas “carreras”. (Citón, 2006)

El corazón de Scrum es el Sprint, es un bloque de tiempo (time-box) de un mes


o menos durante el cual se crea un incremento de producto “Terminado” utilizable y
potencialmente desplegable. Es más conveniente si la duración de los Sprints es
consistente a lo largo del esfuerzo de desarrollo.

Cada nuevo Sprint comienza inmediatamente después de la finalización del


Sprint anterior. En la Figura 2.6 se describe el Ciclo de Scrum. Los Sprints contienen
y consisten en la Planificación del Sprint (Sprint Planning), los Scrums Diarios (Daily
Scrums), el trabajo de desarrollo, la Revisión del Sprint (Sprint Review), y la
Retrospectiva del Sprint (Sprint Retrospective). (Schwaber & Sutherland, 2016)

Figura 2.6 Descripción del Ciclo de Scrum

24
CAPÍTULO III

Capítulo 3 DESARROLLO-METODOLOGÍA

25
En este capítulo se abordará toda la información que hace referencia a la construcción
del Proyecto por medio de la metodología SCRUM en la cual se detallarán los Sprints,
por cada módulo del Proyecto se genera un Sprint, en ellos se describe su alcance,
objetivo y diseño.

3.1 Primer Sprint “Generación de la Base de Datos”


El Primer Sprint del Proyecto está conformado por el Equipo de Trabajo como se
muestra en la Tabla 3.1, el Product Backlog denotado en la Tabla 3.2 y el seguimiento
del Sprint donde se describirá la generación de una nueva Base de Datos.

ROL Persona Descripción

Administración del proyecto desde la


Product Owner Ing. Saul Ortiz Baeza
perspectiva de la empresa.

Asegurar que el proceso SCRUM se


Scrum Master Ing. Saul Ortiz Baeza
lleve a cabo.

Codificación de la las funcionalidades


Scrum Team José Trinidad Luna Fernández
del Proyecto.

Tabla 3.1 Definición del Equipo de Trabajo

ID Tareas (Task) Importancia Descripción

Generación de la Base de Se debe generar una Base de Datos para


1 Muy Alta
Datos del Sistema Web. el Proyecto.

Tabla 3.2 Product Backlog del Primer Sprint

Objetivo: Desarrollar la Base de Datos que gestionará y proveerá la información


al Sistema.

Alcance: Construir una Base de Datos con MySQL capaz de almacenar toda la
información necesaria de todos los módulos del Sistema Web.

3.1.1 Diseño de los Datos


En el apartado se presenta los requerimientos y el esquema de la Base de Datos del
Sistema Web.

26
Requerimientos: La BD debe contener 6 tablas: “categorías, clientes,
productos, proveedores, usuarios y ventas”, con los campos necesarios para
almacenar toda la información.

En la Figura 3.1 se muestra el contenido de las Base de Datos creada en MySQL


utilizando phpMyAdmin.

Figura 3.1 Tablas de la Base de Datos

En la Figura 3.2 se muestra el diagrama completo de la Base de Datos en el


cual se exponen los campos de cada una de las 6 tablas, así como también su tipo de
dato y las relaciones que tienen.

27
Figura 3.2 Esquema de la Base de Datos

3.2 Segundo Sprint “Construcción del Back-End en el Módulo


Usuarios”
El Segundo Sprint del Proyecto está conformado por el Equipo de Trabajo descrito en
la Tabla 3.3, el Product Backlog denotado en la Tabla 3.4, el diseño del Segundo Sprint
se encuentra explicado en el Anexo 1. Diseño del Módulo Usuarios en dónde se
muestra todo el código del Modelo y Controlador del Módulo Usuarios.

ROL Persona Descripción

Administración del proyecto desde la


Product Owner Ing. Saul Ortiz Baeza
perspectiva de la empresa.

Asegurar que el proceso SCRUM se


Scrum Master Ing. Saul Ortiz Baeza
lleve a cabo.

Codificación de la las funcionalidades


Scrum Team José Trinidad Luna Fernández
del Proyecto.

Tabla 3.3 Equipo de Trabajo del Segundo Sprint

28
ID Tareas (Task) Importancia Descripción

Generar el Ingreso al
1 Muy Alta Se debe generar un ingreso al Sistema Web.
Sistema

El controlador de la parte Back-End debe ser


Consultar los Usuarios en la
2 Alta capaz de consultar los Usuarios registrados en el
en la Base de Datos.
Sistema.

El controlador de la parte Back-End debe ser


Registrar Usuario en la Base
3 Alta capaz de registrar a nuevos Usuarios en el
de Datos
Sistema.

El controlador de la parte Back-End debe ser


Actualizar Datos del Usuario
4 Alta capaz de Actualizar la información de los
en la Base de Datos
Usuarios registrados en el Sistema.

El controlador de la parte Back-End debe ser


Eliminar Usuario en la Base
5 Alta capaz de Eliminar los Usuarios que están
de Datos
registrados en el Sistema.

Tabla 3.4 Product Backlog del Segundo Sprint

Objetivo: Crear un control de acceso al Sistema, así como también consultar,


modificar, registrar y eliminar a los Usuarios del Sistema.

Alcance: Construir un controlador capaz de responder a todas las peticiones


hechas por Front-End.

29
3.3 Tercer Sprint “Construcción del Back-End en el Módulo
Categorías”
El Tercer Sprint del Proyecto está conformado por el Equipo de Trabajo descrito en la
Tabla 3.5, el Product Backlog expresado en la Tabla 3.6 ,el diseño del Tercer Sprint se
encuentra explicado en el Anexo 2. Diseño del Módulo Categorías en dónde se
muestra todo el código del Modelo y Controlador del Módulo Categorías.

ROL Persona Descripción

Administración del proyecto desde la


Product Owner Ing. Saul Ortiz Baeza
perspectiva de la empresa.

Asegurar que el proceso SCRUM se


Scrum Master Ing. Saul Ortiz Baeza
lleve a cabo.

Codificación de la las funcionalidades


Scrum Team José Trinidad Luna Fernández
del Proyecto.

Tabla 3.5 Equipo de Trabajo del Tercer Sprint

ID Tareas (Task) Importancia Descripción

El controlador de la parte Back-End debe ser


Consultar las Categorías en
1 Alta capaz de consultar las Categorías registradas
la Base de Datos.
en el Sistema.

El controlador de la parte Back-End debe ser


Registrar las Categorías en
2 Alta capaz de registrar nuevas Categorías en el
la Base de Datos
Sistema.

Actualizar los Datos de las El controlador de la parte Back-End debe ser


3 Categorías en la Base de Alta capaz de Actualizar la información de las
Datos Categorías registradas en el Sistema.

El controlador de la parte Back-End debe ser


Eliminar Categoría en la
4 Alta capaz de Eliminar las Categorías que están
Base de Datos
registradas en el Sistema.

Tabla 3.6 Product Backlog del Tercer Sprint

30
Objetivo: Crear un controlador y modelo capaz de consultar, modificar, registrar
y eliminar a las Categorías del Sistema.

Alcance: Construir un controlador capaz de responder a todas las peticiones


hechas por Front-End en el módulo Categorías.

3.4 Cuarto Sprint “Construcción del Back-End en el Módulo


Proveedores”
El Cuarto Sprint del Proyecto está conformado por el Equipo de Trabajo descrito en la
Tabla 3.7, el Product Backlog expresado en la Tabla 3.8 ,el diseño del Cuarto Sprint
se encuentra explicado en el Anexo 3. Diseño del Módulo Proveedores en dónde se
muestra todo el código del Modelo y Controlador del Módulo Proveedores.

ROL Persona Descripción

Administración del proyecto desde la


perspectiva de la empresa.
Product Owner Ing. Saul Ortiz Baeza

Asegurar que el proceso SCRUM se


Scrum Master Ing. Saul Ortiz Baeza
lleve a cabo.

Codificación de la las funcionalidades


Scrum Team José Trinidad Luna Fernández
del Proyecto.

Tabla 3.7 Equipo de Trabajo del Cuarto Sprint

ID Tareas (Task) Importancia Descripción

El controlador de la parte Back-End debe ser


Consultar los Proveedores
1 Alta capaz de consultar los Proveedores registradas
en la Base de Datos.
en el Sistema.

El controlador de la parte Back-End debe ser


Registrar los Proveedores
2 Alta capaz de registrar nuevos Proveedores en el
en la Base de Datos
Sistema.

31
Actualizar los Datos de los El controlador de la parte Back-End debe ser
3 Proveedores en la Base de Alta capaz de Actualizar la información de los
Datos Proveedores registradas en el Sistema.

El controlador de la parte Back-End debe ser


Eliminar Proveedores en la
4 Alta capaz de Eliminar los Proveedores que están
Base de Datos
registradas en el Sistema.

Tabla 3.8 Product Backlog del Cuarto Sprint

Objetivo: Crear un controlador y modelo capaz de consultar, modificar, registrar


y eliminar a los Proveedores del Sistema.

Alcance: Construir un controlador capaz de responder a todas las peticiones


hechas por Front-End en el módulo Proveedores.

3.5 Quinto Sprint “Construcción del Back-End en el Módulo


Productos”
El Quinto Sprint del Proyecto está conformado por el Equipo de Trabajo descrito en la
Tabla 3.9, el Product Backlog expresado en la Tabla 3.10, el diseño del Quinto Sprint
se encuentra explicado en el Anexo 4. Diseño del Módulo Productos en dónde se
muestra todo el código del Modelo y Controlador del Módulo Productos.

ROL Persona Descripción

Administración del proyecto desde la


perspectiva de la empresa.
Product Owner Ing. Saul Ortiz Baeza

Asegurar que el proceso SCRUM se


Scrum Master Ing. Saul Ortiz Baeza
lleve a cabo.

Codificación de la las funcionalidades


Scrum Team José Trinidad Luna Fernández
del Proyecto.

Tabla 3.9 Equipo de Trabajo del Quinto Sprint

32
ID Tareas (Task) Importancia Descripción

El controlador de la parte Back-End debe ser


Consultar los Productos en
1 Alta capaz de consultar los Productos registradas en
la Base de Datos.
el Sistema.

El controlador de la parte Back-End debe ser


Registrar los Productos en la
2 Alta capaz de registrar nuevos Productos en el
Base de Datos
Sistema.

Actualizar los Datos de los El controlador de la parte Back-End debe ser


3 Productos en la Base de Alta capaz de Actualizar la información de los
Datos Productos registradas en el Sistema.

El controlador de la parte Back-End debe ser


Eliminar Productos en la
4 Alta capaz de Eliminar los Productos que están
Base de Datos
registradas en el Sistema.

Tabla 3.10 Product Backlog del Quinto Sprint

Objetivo: Crear un controlador y modelo capaz de consultar, modificar, registrar


y eliminar a los Productos del Sistema.

Alcance: Construir un controlador capaz de responder a todas las peticiones


hechas por Front-End en el módulo Productos.

33
3.6 Sexto Sprint “Construcción del Back-End en el Módulo Clientes”
El Sexto Sprint del Proyecto está conformado por el Equipo de Trabajo descrito en la
Tabla 3.11, el Product Backlog expresado en la Tabla 3.12 y el diseño del Sexto Sprint
se encuentra explicado en el Anexo 5. Diseño del Módulo Clientes en dónde se
muestra todo el código del Modelo y Controlador del Módulo Clientes.

ROL Persona Descripción

Administración del proyecto desde la


perspectiva de la empresa.
Product Owner Ing. Saul Ortiz Baeza

Asegurar que el proceso SCRUM se


Scrum Master Ing. Saul Ortiz Baeza
lleve a cabo.

Codificación de la las funcionalidades


Scrum Team José Trinidad Luna Fernández
del Proyecto.

Tabla 3.11 Equipo de Trabajo del Sexto Sprint

ID Tareas (Task) Importancia Descripción

El controlador de la parte Back-End debe ser


Consultar los Clientes en la
1 Alta capaz de consultar los Clientes registradas en el
Base de Datos.
Sistema.

El controlador de la parte Back-End debe ser


Registrar los Clientes en la
2 Alta capaz de registrar nuevos Clientes en el
Base de Datos
Sistema.

El controlador de la parte Back-End debe ser


Actualizar los Datos de los
3 Alta capaz de Actualizar la información de los
Clientes en la Base de Datos
Clientes registradas en el Sistema.

El controlador de la parte Back-End debe ser


Eliminar Cliente en la Base
4 Alta capaz de Eliminar los Clientes que están
de Datos
registradas en el Sistema.

Tabla 3.12 Product Backlog del Sexto Sprint

34
Objetivo: Crear un controlador y modelo capaz de consultar, modificar, registrar
y eliminar a los Clientes del Sistema.

Alcance: Construir un controlador capaz de responder a todas las peticiones


hechas por Front-End en el módulo Clientes.

3.7 Séptimo Sprint “Construcción del Back-End en el Módulo


Ventas”
El Séptimo Sprint del Proyecto está conformado por el Equipo de Trabajo descrito en
la Tabla 3.13, el Product Backlog expresado en la Tabla 3.14 y el diseño del Séptimo
Sprint se encuentra explicado en el Anexo 6. Diseño del Módulo Ventas. en dónde se
muestra todo el código del Modelo y Controlador del Módulo Ventas.

ROL Persona Descripción

Administración del proyecto desde la


perspectiva de la empresa.
Product Owner Ing. Saul Ortiz Baeza

Asegurar que el proceso SCRUM se


Scrum Master Ing. Saul Ortiz Baeza
lleve a cabo.

Codificación de la las funcionalidades


Scrum Team José Trinidad Luna Fernández
del Proyecto.

Tabla 3.13 Equipo de Trabajo del Séptimo Sprint

ID Tareas (Task) Importancia Descripción

El controlador de la parte Back-End debe ser


Consultar las Ventas en la
1 Alta capaz de consultar las Ventas registradas en el
Base de Datos.
Sistema.

Registrar las Ventas en la El controlador de la parte Back-End debe ser


2 Alta
Base de Datos capaz de registrar nuevas Ventas en el Sistema.

35
El controlador de la parte Back-End debe ser
Actualizar los Datos de las
3 Alta capaz de Actualizar la información de las Ventas
Ventas en la Base de Datos
registradas en el Sistema.

El controlador de la parte Back-End debe ser


Eliminar Ventas en la Base
4 Alta capaz de Eliminar las Ventas que están
de Datos
registradas en el Sistema.

El controlador de la parte Back-End debe ser


Imprimir un reporte de
5 Baja capaz de generar un Reporte de las Ventas que
Ventas
están registradas en el Sistema.

Tabla 3.14 Product Backlog del Séptimo Sprint

Objetivo: Crear un controlador y modelo capaz de consultar, modificar, registrar


y eliminar a las Ventas del Sistema.

Alcance: Construir un controlador capaz de responder a todas las peticiones


hechas por Front-End en el módulo Ventas.

36
CAPÍTULO IV

Capítulo 4 RESULTADOS

37
En el capítulo IV se muestran los resultados de las pruebas técnicas realizadas al
implantar el Sistema Web, obteniendo respuestas satisfactorias en los controladores
de cada módulo.

4.1 Módulo Usuarios


En la Figura 4.1 se muestra la respuesta del Controlador Usuarios en formato JSON
al ser accedido a éste mediante una petición de tipo GET.

Figura 4.1 Respuesta del Controlador

38
La Figura 4.2 muestra el resultado final logrado en el módulo de Usuarios con
todos los datos conseguidos desde el Controlador y reordenados por la parte Front-
End.

Figura 4.2 Resultado Final del Módulo Usuarios

39
4.2 Módulo Categorías
La Figura 4.3 muestra la respuesta que proporciona el Controlador del módulo
Categorías la cual es retornada en formato JSON, estos datos serán procesados por
la otra parte del proyecto y mostrados gráficamente.

Figura 4.3 Respuesta del Controlador Categorías

40
En la Figura 4.4 se muestra la interfaz final del módulo Categorías, en ella esta
una tabla que contiene todos los datos obtenidos desde el Controlador.

Figura 4.4 Resultado final del módulo Categorías

41
4.3 Módulo Proveedores
En la Figura 4.5 se muestra el resultado de la respuesta del Controlador encargado
del módulo Proveedores, la cual retorna en formato JSON.

Figura 4.5 Respuesta del Controlador Proveedores

42
En la Figura 4.6 muestra la interfaz final que compone el Módulo Proveedores,
el cual contiene una tabla que describe todos los proveedores registrados en la Base
de Datos, los datos son traídos desde el Controlador y mostrados por la parte Front-
End del proyecto.

Figura 4.6 Vista final del módulo Proveedores

43
4.4 Módulo Productos
En la Figura 4.7 se muestra una descripción de la respuesta que retorna el Controlador
encargado del módulo de Productos al acceder a él desde una petición de tipo GET,
este nos regresa todos los datos con un formato JSON.

Figura 4.7 Respuesta del Controlador Productos

44
La Figura 4.8 muestra el resultado final de este módulo, el cual se describe una
tabla con todos los productos que se han registrado en el Sistema Web, dicha tabla es
llenada con los datos que retorna el Controlador de este módulo.

Figura 4.8 Vista final del módulo Productos

45
4.5 Módulo Clientes
En la Figura 4.9 se describe la respuesta que retorna el Controlador del módulo
Clientes, en ella regresan todos los datos en un formato JSON para después ser
interpretados por la otra parte del proyecto.

Figura 4.9 Respuesta del Controlador del módulo Clientes

46
La Figura 4.10 muestra el resultado final obtenido en el módulo Clientes, en el
se describe una tabla que contiene toda la información de los clientes registrados en
el Sistema.

Figura 4.10 Resultado final del módulo Clientes

47
4.6 Módulo de Ventas
En la Figura 4.11 se muestra la respuesta que regresa el Controlador encargado del
módulo Ventas, el cual al ser accedido nos retorna todos los datos en un formato
JSON, datos que serán manipulados en la otra parte del proyecto.

Figura 4.11 Respuesta del Controlador de Ventas

48
La Figura 4.12 muestra el resultado final obtenido en el Módulo de ventas. En
el se describe una tabla donde esta toda la información de las ventas hechas en el
Sistema.

Figura 4.12 Resultado obtenido en el Módulo de Ventas

49
4.7 Pruebas Técnicas
En la Tabla 4.1 se describen todas las pruebas técnicas que se realizaron en el
Sistema Web.

Prueba Status Observaciones

El funcionamiento de todas las Tablas que


Funcionamiento de la Base de componen la Base de Datos es correcta y
Realizado
Datos funcional.

La respuesta de todos los Controladores


Prueba unitaria de todos los que proveen de toda la lógica al Sistema es
Realizado
Controladores del Sistema muy buena y funcional.

Las conexiones entre todos los modelos del


Prueba unitaria de todos los Sistema y la Base de Datos es muy buena
Realizado
modelos del Sistema y funciona de manera correcta.

La carga de información realizada en cada


Prueba de Carga de Información módulo es correcta y responde de manera
Realizado
en el Sistema buena.

La eliminación de información en cada


Prueba de Eliminación de módulo del Sistema es correcta y responde
Realizado
Información en el Sistema de forma muy buena con la Base de Datos.

La edición de información en cada módulo


Prueba de Edición de Información del Sistema es correcta y responde de
Realizado
en el Sistema buena manera con la Base de Datos.

Tabla 4.1 Descripción de las Pruebas Técnicas

50
CONCLUSIONES Y RECOMENDACIONES

El objetivo inicial del proyecto era diseñar un Sistema Web de control de inventarios
que sustituyera la aplicación de Escritorio que las PYMES usan, ya que esa aplicación
está construida en lenguajes obsoletos que hoy en día están fuera de soporte.

Analizando el problema se llegó a la conclusión que en un México donde las


empresas necesitan estar a la vanguardia de los productos y servicios que ofrecen,
también requieren Software que ofrezca un crecimiento y mejor manejo de su
información.

La implementación del Sistema Web generó buenos resultados, ya que diversos


usuarios pueden hacer uso de éste desde diferentes lugares de la empresa y no solo
desde uno como se tenía anteriormente, además el Sistema al ser una Aplicación Web
responsiva, puede ser desplegada desde el navegador de casi cualquier dispositivo,
generando respuestas y peticiones en tiempo real a la Base de Datos.

Mi conclusión es que las empresas mexicanas necesitan que sus aplicaciones


o Sistemas estén a la vanguardia para que puedan seguir ofreciendo productos y
servicios de calidad, además que al generar que un ingeniero en Sistemas rediseñe
una aplicación conlleva muchas ventajas, ya que en algún momento otra persona con
más conocimiento pueda seguir mejorando el Sistema.

Por recomendación se tendría que generar un respaldo del Sistema Web y de


la Base de Datos, ya que nunca se sabe cuándo puede fallar el Servidor en el cual sea
alojado.

51
COMPETENCIAS DESARROLLADAS

COMPETENCIA DESARROLLADA Y
¿DÓNDE SE APLICÓ?
APLICADA

Capacidad de análisis y síntesis. Cuando se consultó bibliografía para justificare.

Revisar el código para resolver defectos


Se aplicó al termino de cada Sprint del proyecto.
y mejorarlo.

Conocimientos, metodologías y modelos Se aplicó en la elección de una metodología ágil para el


de calidad para la industria del software. diseño de Software como lo es SCRUM.

Construir o adaptar clases, módulos u


otras piezas de software. Reutilizar Se aplicó en la construcción de los Controladores y
componentes existentes integrándolos modelos de cada módulo del Proyecto.
con código propio.

Verificar los programas producidos Se aplicó siempre al termino de cada módulo o Sprint
probándolos en forma unitaria. del proyecto.

52
FUENTES DE INFORMACIÓN

Arias, M. Á. (s.f.). Aprende programación Web con PHP y MySQL (Segunda ed.). IT Campus
Academy. Recuperado el 8 de Noviembre de 2018, de
https://books.google.com.mx/books?hl=es&lr=&id=mP00DgAAQBAJ&oi=fnd&pg=PA1
3&dq=Programación+de+php&ots=DLOfqF6MmZ&sig=MHZ1clcARunzuuezp8-
GN6G5zao#v=onepage&q=Programación%20de%20php&f=false
Bahit, E. (09 de 11 de 2018). POO y MVC en PHP: El paradigma de la Programación Orientada
a Objetos en PHP y el patrón de arquitectura de Software MVC. Obtenido de
creativecommons: http://www1.herrera.unt.edu.ar/biblcet/wp-
content/uploads/2014/12/eugeniabahitpooymvcenphp.pdf
Cardoso, L. (2006). Sistemas de bases de datos II: Teoría aplicada para profesores y
estudiantes. Caracas: UCABC.
Castelo, A. (s.f.). Laravel API Tutorial: How to Build and Test a RESTful API. Recuperado el 9
de Noviembre de 2018, de https://www.toptal.com/laravel/restful-laravel-api-tutorial
Celaya, I. T. (s.f.). Lenguajes. Recuperado el 5 de Noviembre de 2018, de
http://www.iqcelaya.itc.mx/~vicente/Programacion/Lenguajes.pdf
Chancusi, T., & Manuel, K. (11 de 2012). Método Ágil Scrum, aplicado a la implantación de un
sistema informático para el proceso de recolección masiva de información con
Tecnología Móvil. Recuperado el 21 de Diciembre de 2018, de
http://repositorio.espe.edu.ec/bitstream/21000/5893/1/T-ESPE-034427.pdf
Citón, M. L. (2006). SlideShare. Recuperado el 21 de Diciembre de 2018, de MÉTODO ÁGIL
SCRUM APLICADO AL DESARROLLO DE UN SOFTWARE DE TRANZABILIDAD:
https://es.slideshare.net/testlucero/metodo-agil-scrum
Cobo, Á. (2005). PHP y MySQL Tecnologías para el desarrollo de. España: Ediciones Díaz de
Santos. Recuperado el 8 de Noviembre de 2018, de
https://books.google.com.mx/books?hl=es&lr=&id=zMK3GOMOpQ4C&oi=fnd&pg=PR
17&dq=Programación+de+php&ots=Fgjr25Cdql&sig=Z-8qAgLR7qzDr2sWb-
49tzCa9FM#v=onepage&q=Programación%20de%20php&f=false
Date, C. (2001). Sistemas de bases de datos. Mexico: PEARSON.
Enyinnaya, C. (28 de Marzo de 2018). Build a REST API with Laravel API resources.
Recuperado el 9 de Noviembre de 2010, de https://blog.pusher.com/build-rest-api-
laravel-api-resources/

53
Gallego, A. J. (2017). Laravel 5. GitBook. Recuperado el 9 de Noviembre de 2018, de
https://ajgallego.gitbooks.io/laravel-5/content/
Gallego, M. T. (s.f.). Gestion de Poryectos Informácios. Recuperado el 21 de Diciembre de
2018, de Metodología Scrum:
http://openaccess.uoc.edu/webapps/o2/bitstream/10609/17885/1/mtrigasTFC0612me
moria.pdf
García, A. A. (Diciembre de 2007). Desarrollo de herramientas web de gestión docente.
Recuperado el 21 de Diciembre de 2018, de
http://repositorio.upct.es/bitstream/handle/10317/179/pfc2475.pdf
Gerardo, A. F. (s.f.). Programación Web. (Universidad Autonoma del Estado de Hidalgo)
Recuperado el 5 de Diciembre de 2018, de 2.1 Procesamiento del Lado del Servidor:
http://cidecame.uaeh.edu.mx/lcc/mapa/PROYECTO/libro40/21_procesamiento_del_la
do_del_servidor.html
Jeff. (15 de Mayo de 2015). Aprende a usar Eloquent el ORM de Laravel. (Styde) Recuperado
el 9 de Noviembre de 2018, de https://styde.net/aprende-a-usar-eloquent-el-orm-de-
laravel/
Mischook, S. (09 de 11 de 2018). Aprenda Programación Orientada a Objetos (POO) en PHP.
Obtenido de killerphp: https://www.killerphp.com/downloads/object-oriented-
php/downloads/tutorial_oop_en_php_para_killerphp.com.pdf
Pino, J. D. (18 de Diciembre de 2018). Frameworks Web de lado servidor. (M. W. docs, Ed.)
Recuperado el 9 de Noviembre de 2018, de
https://developer.mozilla.org/es/docs/Learn/Server-
side/Primeros_pasos/Web_frameworks
Sánchez, J. (2004). MySQL guía rápida. Recuperado el 9 de Noviembre de 2018, de
http://www.cartagena99.com/recursos/programacion/apuntes/mysql.pdf
Valdés, D. P. (26 de Octubre de 2007). ¿Qué son las bases de datos? Obtenido de Mestros
de la Web by Platzi: http://www.maestrosdelweb.com/que-son-las-bases-de-datos/

54
GLOSARIO

Back-End: Es la parte del desarrollo web que se encarga de que toda la lógica de una
página web funcione.

Front-End: Es la parte de un programa o dispositivo a la que un usuario puede acceder


directamente. Son todas las tecnologías de diseño y desarrollo web que corren en el
navegador y que se encargan de la interactividad con los usuarios.

Embebido: En programación o desarrollo de páginas Web, embeber significa


insertar(incrustar) código de un lenguaje dentro de otro lenguaje.

Framework: Es el esquema o estructura que se establece y que se aprovecha para


desarrollar y organizar un software determinado.

55
ACRÓNIMOS

PYME: Pequeñas Y Medianas Empresas.

API: (Application Programming Interface) Interfaz De Programación De Aplicaciones.

PHP: Acrónimo recursivo en inglés De PHP: Hypertext Preprocessor (Preprocesador


de Hipertexto).

BASIC: Beginners All purpose Symbolic Instruction Code, o en español Código


simbólico de instrucciones de propósito general para principiantes.

MVC: Modelo Vista y Controlador.

RPC: En inglés, Remote Procedure Call, en español Llamada A Procedimiento


Remoto.

HTML: Hyper Text Markup Languaje, o Lenguaje de Marcas de Hipertexto.

URL: Uniform Resource Locator o Localizador De Recursos Uniforme.

XML: eXtensible Markup Language, o Lenguaje de Etiquetado Extensible.

JSON: JavaScript Object Notation o Notación de Objetos de JavaScript.

REST: Representational State Transfer o también Transferencia De Estado


Representacional.

HTTP: Hyper Text Transfer Protocol, o protocolo de transferencia de hipertexto.

SQL: Structured Query Language o en español Lenguaje De Consulta Estructurada.

ORM: Object-Relational Mapping en español el Mapeo Objeto-Relacional.

BD: Base de datos.

ERD: Entity Relationship Diagram en español Modelo Entidad-Relación.

56
GLP: Licencia Pública General.

AJAX: Asynchronous JavaScript And XML.

57
ANEXOS

Anexo 1. Diseño del Módulo Usuarios


En esta sección se describirá el contenido del controlador y del modelo encargado del
módulo de Usuarios.

Controlador: El siguiente código es el encargado de proveer toda la


funcionalidad del Ingreso al Sistema y de las siguientes operaciones establecidas en
el Product Backlog.

<?php
class ControladorUsuarios {
/* =============================================
INGRESO DE USUARIO
============================================= */

static public function ctrIngresoUsuario() {

if (isset($_POST["ingUsuario"])) {

if (preg_match('/^[a-zA-Z0-9]+$/', $_POST["ingUsuario"]) &&


preg_match('/^[a-zA-Z0-9]+$/', $_POST["ingPassword"])) {

$encriptar = crypt($_POST["ingPassword"],
'$2a$07$asxx54ahjppf45sd87a5a4dDDGsystemdev$');

$tabla = "usuarios";

$item = "usuario";
$valor = $_POST["ingUsuario"];

$respuesta = ModeloUsuarios::MdlMostrarUsuarios($tabla, $item, $valor);

if ($respuesta["usuario"] == $_POST["ingUsuario"] && $respuesta["password"] == $encriptar)


{

if ($respuesta["estado"] == 1) {

$_SESSION["iniciarSesion"] = "ok";
$_SESSION["id"] = $respuesta["id"];
$_SESSION["nombre"] = $respuesta["nombre"];
$_SESSION["usuario"] = $respuesta["usuario"];
$_SESSION["foto"] = $respuesta["foto"];
$_SESSION["perfil"] = $respuesta["perfil"];

/* =============================================
REGISTRAR FECHA PARA SABER EL ÚLTIMO LOGIN
============================================= */

58
date_default_timezone_set('America/Mexico_City');

$fecha = date('Y-m-d');
$hora = date('H:i:s');

$fechaActual = $fecha . ' ' . $hora;

$item1 = "ultimo_login";
$valor1 = $fechaActual;

$item2 = "id";
$valor2 = $respuesta["id"];

$ultimoLogin = ModeloUsuarios::mdlActualizarUsuario($tabla, $item1, $valor1, $item2,


$valor2);

if ($ultimoLogin == "ok") {

if ($_SESSION["perfil"] == "Supervisor") {

echo '<script>

window.location = "productos";

</script>';
} else if ($_SESSION["perfil"] == "Vendedor") {

echo '<script>

window.location = "ventas";

</script>';
} else {

echo '<script>

window.location = "inicio";

</script>';
}
}
} else {

echo '<br>
<div class="alert alert-danger">El usuario aún
no está activado</div>';
}
} else {

echo '<br><div class="alert alert-danger">Error al ingresar, vuelve a intentarlo</div>';


}
}
}
}

59
Anexo 2. Diseño del Módulo Categorías
En esta sección se expondrá el código fuente del controlador y modelo utilizado en el
módulo de Categorías.

Controlador: El siguiente código es el encargado de hacer las validaciones


correspondientes y métodos del módulo Categorías.

<?php
class ControladorCategorias{

/*=============================================
CREAR CATEGORIAS
=============================================*/

static public function ctrCrearCategoria(){

if(isset($_POST["nuevaCategoria"])){

if(preg_match('/^[a-zA-Z0-9ñÑáéíóúÁÉÍÓÚ ]+$/', $_POST["nuevaCategoria"])){

$tabla = "categorias";

$datos = $_POST["nuevaCategoria"];

$respuesta = ModeloCategorias::mdlIngresarCategoria($tabla, $datos);

if($respuesta == "ok"){

echo'<script>

swal({
type: "success",
title: "La categoría ha sido guardada correctamente",
showConfirmButton: true,
confirmButtonText: "Cerrar",
closeOnConfirm: false
}).then((result) => {
if (result.value) {

window.location = "categorias";

}
})

</script>';

}else{

60
echo'<script>

swal({
type: "error",
title: "¡La categoría no puede ir vacía o llevar
caracteres especiales!",
showConfirmButton: true,
confirmButtonText: "Cerrar",
closeOnConfirm: false
}).then((result) => {
if (result.value) {

window.location = "categorias";

}
})

</script>';

Anexo 3. Diseño del Módulo Proveedores


En esta sección se describirá el código fuente del controlador y modelo empleado en
la construcción de la parte Back-End del módulo Proveedores.

Controlador: El siguiente código es el encargado de hacer las validaciones


correspondientes y métodos del módulo Proveedores.

<?php
class ControladorProveedores {
/*=============================================
= MOSTRAR PROVEEDORES =
=============================================*/

static public function ctrMostrarProveedores($item, $valor){

$tabla = "proveedores";

$respuesta = ModeloProveedores::mdlMostrarProveedores($tabla, $item,


$valor);

return $respuesta;

/*=============================================
= CREAR PROVEEDOR =
61
=============================================*/

static public function ctrCrearProveedores(){

if(isset($_POST["nuevoProveedor"])){

if(preg_match('/^[#\.\-a-zA-Z0-9 ]+$/', $_POST["nuevaDireccion"])&&


preg_match('/^[()\-0-9 ]+$/', $_POST["nuevoTelefono"])&&
preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-
zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/', $_POST["nuevoEmail"])&&
preg_match('/^[#\.\-a-zA-Z0-9 ]+$/', $_POST["nuevoGiro"])){

$tabla = "proveedores";

$datos = array("nombre"=>$_POST["nuevoProveedor"],
"direccion"=>$_POST["nuevaDireccion"],
"telefono"=>$_POST["nuevoTelefono"],
"email"=>$_POST["nuevoEmail"],
"giro"=>$_POST["nuevoGiro"]);

$respuesta = ModeloProveedores::mdlIngresarProveedor($tabla,
$datos);

if($respuesta == "ok"){

echo'<script>

swal({
type: "success",
title: "El proveedor ha sido guardado correctamente",
showConfirmButton: true,
confirmButtonText: "Cerrar",
closeOnConfirm: false
}).then((result) => {
if (result.value) {

window.location =
"proveedores";

}
})

</script>';

}else{

echo'<script>

swal({
type: "error",
title: "¡El proveedor no puede ir vacío o llevar
caracteres especiales!",
62
showConfirmButton: true,
confirmButtonText: "Cerrar",
closeOnConfirm: false
}).then((result) => {
if (result.value) {

window.location = "proveedores";

}
})

</script>';

Anexo 4. Diseño del Módulo Productos


En esta sección se describirá el código fuente del controlador y modelo empleado en
la construcción de la parte Back-End del módulo Productos.

Controlador: El siguiente código es el encargado de hacer las validaciones


correspondientes y métodos del módulo Productos.

<?php

class ControladorProductos{

/*=============================================
CREAR PRODUCTO
=============================================*/

static public function ctrCrearProducto(){

if(isset($_POST["nuevaDescripcion"])){

if(preg_match('/^[a-zA-Z0-9ñÑáéíóúÁÉÍÓÚ ]+$/', $_POST["nuevaDescripcion"])


&&
preg_match('/^[0-9]+$/', $_POST["nuevoStock"]) &&
preg_match('/^[0-9]+$/', $_POST["nuevoPrecioCompra"]) &&
preg_match('/^[0-9]+$/', $_POST["nuevoPrecioVenta"])){

/*=============================================
VALIDAR IMAGEN
=============================================*/

63
$ruta = "vistas/img/productos/default/anonymous.png";

if(isset($_FILES["nuevaImagen"]["tmp_name"])){

list($ancho, $alto) =
getimagesize($_FILES["nuevaImagen"]["tmp_name"]);

$nuevoAncho = 500;
$nuevoAlto = 500;

/*=============================================
CREAMOS EL DIRECTORIO DONDE VAMOS A GUARDAR
LA FOTO DEL USUARIO
=============================================*/

$directorio = "vistas/img/productos/".$_POST["nuevoCodigo"];

mkdir($directorio, 0755);

/*=============================================
DE ACUERDO AL TIPO DE IMAGEN APLICAMOS LAS
FUNCIONES POR DEFECTO DE PHP
=============================================*/

if($_FILES["nuevaImagen"]["type"] == "image/jpeg"){

/*=============================================
GUARDAMOS LA IMAGEN EN EL DIRECTORIO

=============================================*/

$aleatorio = mt_rand(100,999);

$ruta =
"vistas/img/productos/".$_POST["nuevoCodigo"]."/".$aleatorio.".jpg";

$origen =
imagecreatefromjpeg($_FILES["nuevaImagen"]["tmp_name"]);

$destino = imagecreatetruecolor($nuevoAncho,
$nuevoAlto);

imagecopyresized($destino, $origen, 0, 0, 0, 0,
$nuevoAncho, $nuevoAlto, $ancho, $alto);

imagejpeg($destino, $ruta);

if($_FILES["nuevaImagen"]["type"] == "image/png"){

/*=============================================
64
GUARDAMOS LA IMAGEN EN EL DIRECTORIO

=============================================*/

$aleatorio = mt_rand(100,999);

$ruta =
"vistas/img/productos/".$_POST["nuevoCodigo"]."/".$aleatorio.".png";

$origen =
imagecreatefrompng($_FILES["nuevaImagen"]["tmp_name"]);

$destino = imagecreatetruecolor($nuevoAncho,
$nuevoAlto);

imagecopyresized($destino, $origen, 0, 0, 0, 0,
$nuevoAncho, $nuevoAlto, $ancho, $alto);

imagepng($destino, $ruta);

$tabla = "productos";

$datos = array("id_categoria" => $_POST["nuevaCategoria"],


"codigo" => $_POST["nuevoCodigo"],
"descripcion" =>
$_POST["nuevaDescripcion"],
"stock" => $_POST["nuevoStock"],
"precio_compra" =>
$_POST["nuevoPrecioCompra"],
"precio_venta" =>
$_POST["nuevoPrecioVenta"],
"proveedor" => $_POST["nuevoProveedor"],
"imagen" => $ruta);

$respuesta = ModeloProductos::mdlIngresarProducto($tabla, $datos);

if($respuesta == "ok"){

echo'<script>

swal({
type: "success",
title: "El producto ha sido guardado
correctamente",
showConfirmButton: true,
confirmButtonText: "Cerrar"
}).then((result) => {
if (result.value) {

window.location =
"productos";
65
}
})

</script>';

}else{

echo'<script>

swal({
type: "error",
title: "¡El producto no puede ir con los campos vacíos
o llevar caracteres especiales!",
showConfirmButton: true,
confirmButtonText: "Cerrar"
}).then((result) => {
if (result.value) {

window.location = "productos";

}
})

</script>';
}
}

Anexo 5. Diseño del Módulo Clientes


En esta sección se describirá el código fuente del controlador y modelo empleado en
la construcción de la parte Back-End del módulo Clientes.

Controlador: El siguiente código es el encargado de hacer las validaciones


correspondientes y métodos del módulo Clientes.

<?php

class ControladorClientes{

/*=============================================
CREAR CLIENTES
=============================================*/

static public function ctrCrearCliente(){

if(isset($_POST["nuevoCliente"])){

66
if(preg_match('/^[a-zA-Z0-9ñÑáéíóúÁÉÍÓÚ ]+$/', $_POST["nuevoCliente"]) &&
preg_match('/^[0-9]+$/', $_POST["nuevoDocumentoId"]) &&
preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-
zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/', $_POST["nuevoEmail"]) &&
preg_match('/^[()\-0-9 ]+$/', $_POST["nuevoTelefono"]) &&
preg_match('/^[#\.\-a-zA-Z0-9 ]+$/', $_POST["nuevaDireccion"])){

$tabla = "clientes";

$datos = array("nombre"=>$_POST["nuevoCliente"],
"documento"=>$_POST["nuevoDocumentoId"],
"email"=>$_POST["nuevoEmail"],
"telefono"=>$_POST["nuevoTelefono"],
"direccion"=>$_POST["nuevaDireccion"],

"fecha_nacimiento"=>$_POST["nuevaFechaNacimiento"]);

$respuesta = ModeloClientes::mdlIngresarCliente($tabla, $datos);

if($respuesta == "ok"){

echo'<script>

swal({
type: "success",
title: "El cliente ha sido guardado correctamente",
showConfirmButton: true,
confirmButtonText: "Cerrar",
closeOnConfirm: false
}).then((result) => {
if (result.value) {

window.location = "clientes";

}
})

</script>';

}else{

echo'<script>

swal({
type: "error",
title: "¡El cliente no puede ir vacío o llevar caracteres
especiales!",
showConfirmButton: true,
confirmButtonText: "Cerrar",
closeOnConfirm: false
}).then((result) => {
if (result.value) {

window.location = "clientes";
67
}
})

</script>';
}
}
}

Anexo 6. Diseño del Módulo Ventas.


En esta sección se describirá el código fuente del controlador y modelo empleado en
la construcción de la parte Back-End del módulo Ventas.

Controlador: El siguiente código es el encargado de hacer las validaciones


correspondientes y métodos del módulo Ventas.

<?php

class ControladorVentas{

/*=============================================
CREAR VENTA
=============================================*/

static public function ctrCrearVenta(){

if(isset($_POST["nuevaVenta"])){

/*=============================================
ACTUALIZAR LAS COMPRAS DEL CLIENTE Y REDUCIR EL STOCK Y
AUMENTAR LAS VENTAS DE LOS PRODUCTOS
=============================================*/

$listaProductos = json_decode($_POST["listaProductos"], true);

$totalProductosComprados = array();

foreach ($listaProductos as $key => $value) {

array_push($totalProductosComprados, $value["cantidad"]);

$tablaProductos = "productos";

$item = "id";
$valor = $value["id"];
$orden = null;

$traerProducto = ModeloProductos::mdlMostrarProductos($tablaProductos,
$item, $valor, $orden);

$item1a = "ventas";
$valor1a = $value["cantidad"] + $traerProducto["ventas"];
68
$nuevasVentas =
ModeloProductos::mdlActualizarProducto($tablaProductos, $item1a, $valor1a, $valor);

$item1b = "stock";
$valor1b = $value["stock"];

$nuevoStock =
ModeloProductos::mdlActualizarProducto($tablaProductos, $item1b, $valor1b, $valor);

$tablaClientes = "clientes";

$item = "id";
$valor = $_POST["seleccionarCliente"];

$traerCliente = ModeloClientes::mdlMostrarClientes($tablaClientes, $item,


$valor);

$item1a = "compras";
$valor1a = array_sum($totalProductosComprados) + $traerCliente["compras"];

$comprasCliente = ModeloClientes::mdlActualizarCliente($tablaClientes,
$item1a, $valor1a, $valor);

$item1b = "ultima_compra";

date_default_timezone_set('America/Mexico_City');

$fecha = date('Y-m-d');
$hora = date('H:i:s');
$valor1b = $fecha.' '.$hora;

$fechaCliente = ModeloClientes::mdlActualizarCliente($tablaClientes, $item1b,


$valor1b, $valor);

/*=============================================
GUARDAR LA COMPRA
=============================================*/

$tabla = "ventas";

$datos = array("id_vendedor"=>$_POST["idVendedor"],
"id_cliente"=>$_POST["seleccionarCliente"],
"codigo"=>$_POST["nuevaVenta"],
"productos"=>$_POST["listaProductos"],
"impuesto"=>$_POST["nuevoPrecioImpuesto"],
"neto"=>$_POST["nuevoPrecioNeto"],
"total"=>$_POST["totalVenta"],
"metodo_pago"=>$_POST["listaMetodoPago"]);

$respuesta = ModeloVentas::mdlIngresarVenta($tabla, $datos);

if($respuesta == "ok"){

69
echo'<script>

localStorage.removeItem("rango");

swal({
type: "success",
title: "La venta ha sido guardada correctamente",
showConfirmButton: true,
confirmButtonText: "Cerrar"
}).then((result) => {
if (result.value) {

window.location = "ventas";

}
})

</script>';

70

S-ar putea să vă placă și