Está en la página 1de 84

UNIVERSIDAD DE EL SALVADOR

FACULTAD DE INGENIERÍA Y ARQUITECTURA


ESCUELA DE INGENIERÍA DE SISTEMAS INFORMÁTICOS
SISTEMAS DE INFORMACIÓN GERENCIAL

“Sistema de Información Gerencial para apoya la gestión


de compra importación y venta de transportes Stella”.

SEGUNDA ETAPA

CATEDRÁTICO: Oscar Rodríguez

INTEGRANTES
:
CARNÉ NOMBRES
MG12012 Martínez Guerrero, Claudia Patricia
MU13002 Munto Uceda, Alex Alfonso
SD13010 Santamaria Diaz, Tobias Alexander
QT12001 Quintanilla Ticas, José Elvis

Ciudad Universitaria, 05 de julio de 2020


Segunda Etapa | Sistemas de Información Gerencial

Contenido
Introducción ............................................................................................................................................................... 4
Objetivos ..................................................................................................................................................................... 5
Objetivo general .................................................................................................................................................. 5
Objetivos específicos ......................................................................................................................................... 5
Construcción .............................................................................................................................................................. 6
Definición de estándares .................................................................................................................................. 6
Estándar de reportes...................................................................................................................................... 6
Estándar de salidas ......................................................................................................................................... 6
Estándar de código fuente (PHP puro) ................................................................................................... 6
Nombre de las entidades de la base de datos .................................................................................... 7
Nomenclatura de nombres de los campos de la base de datos .................................................. 7
Estándar de contraseñas y nombres de usuario ...................................................................................... 7
Estructura de bases de datos............................................................................................................................... 8
Estructura de bases de datos .......................................................................................................................... 8
Creación de la base de datos....................................................................................................................... 10
Pantallas del sistema ........................................................................................................................................... 11
Procesos de mantenimiento ........................................................................................................................ 11
Pantallas de parámetros de entrada ......................................................................................................... 11
Pantallas de menú ............................................................................................................................................ 12
Procesos.................................................................................................................................................................... 14
Procesos de mantenimiento ........................................................................................................................ 14
Procesos de cálculo ......................................................................................................................................... 15
Consultas ............................................................................................................................................................. 16
Reportes ............................................................................................................................................................... 21
Seguridad ................................................................................................................................................................. 24
Backups de la base de datos ........................................................................................................................ 24
Perfiles de acceso y seguridad .................................................................................................................... 24
Perfiles de acceso.................................................................................................................................................. 26
Pruebas ..................................................................................................................................................................... 28
Componentes individuales ........................................................................................................................... 28
Campos de texto .......................................................................................................................................... 28
Elementos select........................................................................................................................................... 28
Mensajes de error ........................................................................................................................................ 29
Componentes integrados .............................................................................................................................. 30
Documentación...................................................................................................................................................... 33

2
Segunda Etapa | Sistemas de Información Gerencial

MANUAL DE USUARIO ................................................................................................................................... 33


MANUAL TÉCNICO ........................................................................................................................................... 38
Procedimientos almacenados .......................................................................................................................... 54
Generado de backups ........................................................................................................................................ 56
Configuración de tareas programadas. .......................................................................................................... 57
MANUAL DE INSTALACIÓN Y DESINSTALACIÓN ................................................................................ 61
Instalación del sistema............................................................................................................................... 61
Desinstalación del Sistema....................................................................................................................... 64
Implementación ..................................................................................................................................................... 66
Requerimientos DE RECURSOS HUMANOS ........................................................................................... 66
Recurso humano del equipo de trabajo ............................................................................................. 66
Recurso humano de usuarios .................................................................................................................. 67
Plan de trabajo .................................................................................................................................................. 69
Plan capacitación .............................................................................................................................................. 70
Costos de implementación ........................................................................................................................... 70
Estructura de Instalación ............................................................................................................................... 71
Seguimiento y control .................................................................................................................................... 71
Elementos del prototipo .................................................................................................................................... 73
Conclusiones ........................................................................................................................................................... 82
Recomendaciones ................................................................................................................................................. 83
Bibliografía .............................................................................................................................................................. 84

3
Segunda Etapa | Sistemas de Información Gerencial

Introducción

En las empresas se toman decisiones esenciales e importantes las cuales permiten que estas sigan a
flote y de mantenerse a pesar de los cambios económicos, sociales y políticos; estas decisiones
deben tomarse en el momento adecuado por lo cual es necesario que los ejecutivos o gerentes
tengan un apoyo a través de un sistema de información gerencial que le permita en un mínimo de
tiempo tener toda la información necesaria, para analizarla y en base a su experiencia tomar la
mejor decisión a sus problemas.

Por tal motivos, se desea desarrollar un sistema de información gerencial para apoya la gestión de
compra importación y venta de transportes Stella que ayude a sus gerentes en la toma de decisiones
en la planificación de sus costos, para la elaboración de este sistema se realiza una investigación de
la situación actual de la empresa, la determinación de los requerimientos informáticos apoyados de
la entrevista con los gerentes y la investigación, de los cuales se diseñaran 4 salidas, con sus
respectivas entradas y procesos.

Se establece los estándares a utilizar en todo el ciclo de vida del desarrollo del software y los
criterios de seguridad que se tomaran en cuenta para asegurar la confiabilidad del sistema.
También se han identificado los datos que serán necesarios para el funcionamiento del sistema de
información gerencial, que son la base transaccional para el modelado de la base de datos gerencial.

4
Segunda Etapa | Sistemas de Información Gerencial

Objetivos

Objetivo general

Desarrollar un Sistema de Información Gerencial para apoya la gestión de compra importación y


venta de transportes Stella, que facilite la toma de decisiones a los usuarios de los niveles
estratégico y táctico, presentando información resumida según el rol del usuario; utilizando para ello
las fechas estratégicas para analizar los costos de los traslados o tiempo que tardan de zarpes y
descargas.

Objetivos específicos
• Construir en un Sistema de Información Gerencial para apoya la gestión de compra importación
y venta de transportes Stella.

• Realizar las pruebas individuales e integrales del Sistema de Información Gerencial.

• Documentar debidamente todas las partes elementales del sistema de información gerencial
para apoya la gestión de compra importación y venta de transportes Stella.

• Implementar la solución correspondiente del sistema de información gerencial para uso y


funcionamiento óptimo para la empresa

5
Segunda Etapa | Sistemas de Información Gerencial

Construcción

Definición de estándares
Ayudando a trabajar de una mejor manera y a estandarizar el desarrollo del proyecto se han
definido diferentes estándares de programación que regularicen los aspectos para denominar o
nombrar una variable, considerando el espaciado en cada una de las líneas del código.

A continuación, se definen los motivos por el cual es útil definir los estándares:

• Hacen más fácil el trabajo de dar mantenimiento a una aplicación. Se dice que el
mantenimiento que se le da a una aplicación se establece con el 80% del coste del ciclo
de vida de la aplicación.
• Al establecer estándares de programación se mejora la legibilidad del código, y a su vez
permiten la comprensión rápida del mismo.
• Permite que cualquier programador entienda y pueda mantener la aplicación.

Estándar de reportes
• Número de página, título del reporte en la parte superior.
• Botones Copy, Excel, CSV y Print.

Estándar de salidas
• Tipo de letra: Helvética Neue 16px.
• Márgenes: 20px superior, 20px inferior, 20px izquierdo, 20px derecho.
• Tipo y tamaño de papel: El tamaño de los reportes puede ser tamaño carta o tamaño
oficio, según lo que sea conveniente.
• Orientación: Horizontal o vertical.

Estándar de código fuente (PHP puro)


Sangría: La regla en general de la gran mayoría de los entornos de desarrollo establecen que la
sangría será de 4 caracteres.

Comentarios: Distinguimos dos tipos de comentarios:

• Comentarios de bloque: Un comentario en bloque es un fragmento del programa que será


ignorado por el compilador y por tanto no será ejecutado como código.
/*
Esto
es
un
comentario
en
bloque
de
varias
líneas
*/

6
Segunda Etapa | Sistemas de Información Gerencial

• Comentarios de línea: es utilizado para las notas rápidas sobre el código complejo o para
desactivar temporalmente una línea de código PHP. Es necesario añadir // o # antes del
código.
// Esto es otro comentario de línea
# Esto es otro comentario de línea

Longitud de línea: la longitud máxima de línea no debe superar los 80 caracteres debido a que si
exceden esa longitud presentan problemas de visualización del código, otra razón por la cual se
establece este límite por la impresión del documento con el código fuente, para ayudar a la
visualización en papel.

Declaraciones: Una declaración es una comprobación de los caracteres siguientes o anteriores al


punto de coincidencia actual que en realidad no consumen carácter alguno.

$inicioConsulta;

// Identificador del inicio de la consulta

Nomenclatura de nombres:

• Procedimientos almacenados: El nombre de los procedimientos almacenados será el


mismo nombre de la tabla del informe que genera ( proceso ETL que genera el informe).
• Métodos y variables: Los métodos deben ser verbos o nombres nemónicos escritos con
la primera letra siempre en minúsculas. Cuando el método esté compuesto por varias
palabras cada una de ellas tendrá la primera letra en mayúsculas.

Nombre de las entidades de la base de datos


• El nombre de la base de datos será en singular.
• Los nombres de las bases de datos serán en minúscula, si contiene más de una palabra,
van a ir unidas todas las palabras.
• La longitud mínima que debe tener es de 4 caracteres hasta 20 caracteres.

Nomenclatura de nombres de los campos de la base de datos


• Los nombres de los campos de la base gerencial tienen los mismos nombres que tiene la
base de datos transaccional, nombres en mayúsculas y nombres en minúsculas.
• Los nombres compuestos por más de una palabra irán separados por un guion bajo” _”.
• La longitud mínima de caracteres debe ser 2 y la máxima 20.

Estándar de contraseñas y nombres de usuario


• Los nombres de usuario solamente se constituirán del nombre del mismo. Ejemplo:
nombre.
• La contraseña 5 letras minúsculas y 5 caracteres (¡@$#%^&*)

7
Segunda Etapa | Sistemas de Información Gerencial

Estructura de bases de datos

Estructura de bases de datos


Se presenta a continuación el modelo lógico de la base de datos del sistema gerencial.

A continuación de muestra la estructura de la base de datos gerencial, todas las tablas superiores
guardan un informe cada una y en la parte de abajo a la derecha las tablas de configuración, abajo a
la izquierda las tablas de acceso y bitácora de acceso.

8
Segunda Etapa | Sistemas de Información Gerencial

Se presenta a continuación el modelo físico de la base de datos del sistema gerencial.

9
Segunda Etapa | Sistemas de Información Gerencial

Se presenta a continuación el modelo conceptual de la base de datos del sistema gerencial.

Creación de la base de datos


Debido al tamaño del script de la base de datos, este se agregará en un archivo anexo en el correo
de entrega. El archivo contiene toda la estructura de la base de datos gerencial junto con los
procedimientos almacenados que el sistema utiliza.

Anexo 1 “script de la base de datos”.

10
Segunda Etapa | Sistemas de Información Gerencial

Pantallas del sistema

Procesos de mantenimiento
Configuración de los informes.

Esta pantalla permite cambiar los parámetros de todos los informes que se generan en nuestro caso
los parámetros de
fechas para cada tipo
de informe.

Pantallas de parámetros de entrada


Solicitar informes.

En la siguiente pantalla se ingresan los datos del informe requerido, el sistema busca en informe que
coincide con esos parámetros y este es retornado y mostrado al usuario si ya ha sido generado.

11
Segunda Etapa | Sistemas de Información Gerencial

Descarga de backup

Esta pantalla le permite al usuario con privilegios la descarga de un backup de la base para cierta
fecha los backups se generan cada día a la media noche en las horas de menos tráfico de datos.

Pantallas de menú
Debido a que el sistema ha sido creado en una

12
Segunda Etapa | Sistemas de Información Gerencial

single page, es decir una sola carga de la página decidimos recurrir a un formato extremadamente
simple y reducido que permite todas realizar todas las funciones sin necesidad de navegar por varios
menús.

A continuación, se muestran el menú que contiene el sistema.

13
Segunda Etapa | Sistemas de Información Gerencial

Procesos

Procesos de mantenimiento
Para darle manteamiento al sistema tenemos la pantalla de configuración de los informes para
seleccionar el informe y fecha que se desea: jmvb

Para el mantenimiento de la base de datos tenemos la pantalla de Descarga de Backup, para obtener
un respaldo de base de datos ya sea de su sistema base transaccional como para la base gerencial

14
Segunda Etapa | Sistemas de Información Gerencial

Procesos de cálculo
Procesos para requerimientos estratégicos:

• RE1- Calendario virtual que indique las fechas estimadas de llegada.

Seleccione el informe que se desea configurar, luego se selecciona el rango de fecha inicial y final
que se desea y generara el informe de calendario virtual que indique las fechas de llegada al país y
puertos (destino de los barcos con los contenedores.) en una tabla y se mostrar en un calendario el
día que zarpo y en otro la fecha que se estima de llegada.

• RE2- Costo del traslado de los autos por tierra

Seleccione el informe que se desea configurar, luego se selecciona el rango de fecha inicial y final
que se desea y generara el informe de los costos del traslado de los autos (gasto en grúas- las grúas
son un servicio de traslado dado por varias empresas), donde mostrar la empresa que presto el
servicio de grúa y su costos con fletes en una y tabla resumida, ya esto se puede obtener una
comparación de precios para optar por la empresa que salga más factible en sus costos de movilidad
de vehículo.

• R3- Total de gatos de traslado los autos en estados unidos por mes.

Seleccione el informe que se desea configurar, luego se selecciona el rango de fecha inicial y final
que se desea y generara el informe gasto en trasporte de vehículos, donde se muestra el total de
gasto que género en transporte en el mes.

Procesos para requerimientos Tácticos:

• RT1.a Top Clientes Por Ganancia

Seleccione el informe que se desea configurar, luego se selecciona el rango de fecha inicial y final
que se desea y generara el informe el cual es un resumen de los clientes que más han comprado, se
muestra el importador y la ganancia de cada uno.

• RT1.b - Top Clientes Por Numero De Compras.

Seleccione el informe que se desea configurar, luego se selecciona el rango de fecha inicial y final
que se desea y generara el informe el Top de los clientes que más han comprado según la cantidad
de vehículos comprados, se muestra el nombre del importador y la cantidad ordenar de mayor a
menor.

15
Segunda Etapa | Sistemas de Información Gerencial

Consultas
Consultas para reportes estratégicos

RE1- Calendario virtual que indique las fechas estimadas de llegada.


select c.CONTENEDOR_ID ,p.booking, ps.PUERTO_S_NOMBRE, pe.PUERTO_E_NOMBRE ,
p.fecha_carga, p.fecha_zarpe, p.fecha_destino
from produconte p
left join puerto_e pe
on pe.PUERTO_E_ID=p.PUERTO_E_ID
left join puerto_s ps
on ps.PUERTO_S_ID=p.PUERTO_S_ID
left join contenedor c
on c.CONTENEDOR_ID = p.id_produconte
where p.fecha_zarpe < '2020-12-01' and p.fecha_destino > '2020-01-01'
group by c.CONTENEDOR_ID
order by p.fecha_destino desc

RE2- Costo del traslado de los autos por tierra


select c.id_com, c.nombreEmpresa, SUM(e.GRUA_COSTO) as gruaCosto,
SUM(e.FLETE_COSTO) as fleteCosto, SUM(e.STORAGES_COSTOS) as storageCostos from
compania c
left join asignacion a
on a.id_com = c.id_com
left join compra com
on com.COMPRA_ID=a.COMPRA_ID
left join vehiculo_importado v
on v.COMPRA_ID= com.COMPRA_ID
left join envio e
on e.VEHICULO_ID = v.VEHICULO_ID
where com.COMPRA_FECHA < '2020-12-01' and com.COMPRA_FECHA> '2020-01-01'
group by c.id_com

RE3- Total de gatos de traslado los autos en estados unidos.


select SUM(e.GRUA_COSTO) + SUM(e.FLETE_COSTO) + SUM(e.STORAGES_COSTOS) as total ,
1 as grup from
compania c
left join asignacion a
on a.id_com = c.id_com
left join compra com
on com.COMPRA_ID=a.COMPRA_ID
left join vehiculo_importado v
on v.COMPRA_ID= com.COMPRA_ID
left join envio e
on e.VEHICULO_ID = v.VEHICULO_ID
where com.COMPRA_FECHA < '2020-12-01' and com.COMPRA_FECHA> '2020-01-01'
group by grup
;

16
Segunda Etapa | Sistemas de Información Gerencial

Procesos para requerimientos Tácticos:

RT1.a Top Clientes Por Ganancia


SELECT I.IMPORTADOR_ID, I.IMPORTADOR_NOMBRE, count(C.LOTE ) as num_compras,
( -(SUM(E.FLETE_COSTO)+SUM(E.GRUA_COSTO)) +
(SUM(E.GRUA_PRECIO)+SUM(E.FLETE_PRECIO)) - E.STORAGES_COSTOS) as ganancia
FROM importador I
left join compra C
on I.IMPORTADOR_ID=C.IMPORTADOR_ID
left join vehiculo_importado Vi
on Vi.COMPRA_ID=C.COMPRA_ID
left join envio E
on E.VEHICULO_ID = Vi.VEHICULO_ID
where C.COMPRA_FECHA< '2020-12-01' and C.COMPRA_FECHA> '2020-01-01' and
I.IMPORTADOR_ID!=10
group by I.IMPORTADOR_ID order by ganancia desc;

RT1.b - Top Clientes Por Numero De Compras.


SELECT I.IMPORTADOR_ID, I.IMPORTADOR_NOMBRE, C.COMPRA_FECHA, count(C.LOTE ) as
num_compras,
( -(SUM(E.FLETE_COSTO)+SUM(E.GRUA_COSTO)) +
(SUM(E.GRUA_PRECIO)+SUM(E.FLETE_PRECIO)) - E.STORAGES_COSTOS) as ganancia
FROM importador I
left join compra C
on I.IMPORTADOR_ID=C.IMPORTADOR_ID
left join vehiculo_importado Vi
on Vi.COMPRA_ID=C.COMPRA_ID
left join envio E
on E.VEHICULO_ID = Vi.VEHICULO_ID
where C.COMPRA_FECHA< '2020-12-01' and C.COMPRA_FECHA> '2020-01-01' and
I.IMPORTADOR_ID!=10
group by I.IMPORTADOR_ID order by num_compras desc ;

17
Segunda Etapa | Sistemas de Información Gerencial

Consultas de los procesos almacenados para los reportes estratégicos


Los procedimientos almacenados se utilizan para agrupar las instrucciones de SQL y cualquier lógica
asociada necesaria para llevar a cabo una tarea. Cuando un procedimiento almacenado es ejecutado
por primera vez se compila, se crea y se guarda en memoria su plan de ejecución., luego SQL utiliza
ese plan de ejecución cuando se vuelve a llamar al procedimiento sin volver a compilarlo
nuevamente. Nos proporcionan a nosotros los usuarios un acceso fácil a la base de datos, se puede
tener acceso a la base de datos sin tener que conocer los detalles de la arquitectura de tablas -
simplemente se ejecutan los procedimientos almacenados que llevan a cabo las tareas solicitadas.

Los procedimientos almacenados ofrecen ventajas importantes:

• Rendimiento: al ser ejecutados por el motor de base de datos ofrecen un rendimiento


inmejorable ya que no es necesario transportar datos a ninguna parte. Cualquier proceso
externo tiene una penalidad de tiempo adicional dada por el transporte de datos.
• Potencia: el lenguaje para procedimientos almacenados es muy potente. Permiten ejecutar
operaciones complejas en pocos pasos ya que poseen un conjunto de instrucciones
avanzado.
• Centralización: al formar parte de la base de datos los procedimientos almacenados están en
un lugar centralizado y pueden ser ejecutados por cualquier aplicación que tenga acceso a la
misma.

RE1- Procesos almacenados del calendario virtual que indique las fechas estimadas de llegada.
CREATE DEFINER=`usuario2`@`%` PROCEDURE `dbgerencial`.`aaif2`(IN `IDinforme` INT,
`FI` DATE, `FF` DATE)
begin
insert into dbGerencial.AAIF2(
select IDinforme as informe,c.CONTENEDOR_ID ,p.booking,
ps.PUERTO_S_NOMBRE,
pe.PUERTO_E_NOMBRE , p.fecha_carga, p.fecha_zarpe, p.fecha_destino, 0
as id
from inbakcar.produconte p
left join inbakcar.puerto_e pe
on pe.PUERTO_E_ID=p.PUERTO_E_ID
left join inbakcar.puerto_s ps
on ps.PUERTO_S_ID=p.PUERTO_S_ID
left join inbakcar.contenedor c
on c.CONTENEDOR_ID = p.id_produconte
where p.fecha_zarpe < FF and p.fecha_destino > FI
group by c.CONTENEDOR_ID
order by p.fecha_destino desc );
END

RE2- Procesos almacenados de costo del traslado de los autos por tierra.
CREATE DEFINER=`usuario2`@`%` PROCEDURE `dbgerencial`.`aaif3`(IN `IDinforme` INT,
`FI` DATE, `FF` DATE)
begin
insert into dbGerencial.AAIF3(
select IDinforme as informe, c.id_com, c.nombreEmpresa, SUM(e.GRUA_COSTO)
as gruaCosto, SUM(e.FLETE_COSTO) as fleteCosto, SUM(e.STORAGES_COSTOS) as
storageCostos, 0 as id from
inbakcar.compania c
left join inbakcar.asignacion a
on a.id_com = c.id_com

18
Segunda Etapa | Sistemas de Información Gerencial

left join inbakcar.compra com


on com.COMPRA_ID=a.COMPRA_ID
left join inbakcar.vehiculo_importado v
on v.COMPRA_ID= com.COMPRA_ID
left join inbakcar.envio e
on e.VEHICULO_ID = v.VEHICULO_ID
where com.COMPRA_FECHA < FF and com.COMPRA_FECHA> FI group by c.id_com);
END

RE3- Procesos almacenados del total de gatos de traslado los autos en estados unidos.
CREATE DEFINER=`usuario2`@`%` PROCEDURE `dbgerencial`.`aaif7_a`(IN `IDinforme`
INT, `FI` DATE, `FF` DATE)
begin
insert into dbGerencial.AAIF7_A(
select IDinforme as informe,SUM(e.GRUA_COSTO) + SUM(e.FLETE_COSTO) +
SUM(e.STORAGES_COSTOS) as total , 1 as grup, 0 as id from
inbakcar.compania c
left join inbakcar.asignacion a
on a.id_com = c.id_com
left join inbakcar.compra com
on com.COMPRA_ID=a.COMPRA_ID
left join inbakcar.vehiculo_importado v
on v.COMPRA_ID= com.COMPRA_ID
left join inbakcar.envio e
on e.VEHICULO_ID = v.VEHICULO_ID
where com.COMPRA_FECHA < FF and com.COMPRA_FECHA> FI group by grup
) ;
END

19
Segunda Etapa | Sistemas de Información Gerencial

Procesos para requerimientos Tácticos:


RT1.a - Procesos almacenados del Top Clientes Por Ganancia
CREATE DEFINER=`usuario2`@`%` PROCEDURE `dbgerencial`.`aaif1_a`(IN `IDinforme`
INT, `FI` DATE, `FF` DATE)
begin
insert into dbGerencial.AAIF1_A(
select IDinforme as informe, I.IMPORTADOR_ID, I.IMPORTADOR_NOMBRE,
count(C.LOTE ) as num_compras,
( -(SUM(E.FLETE_COSTO)+SUM(E.GRUA_COSTO)) +
(SUM(E.GRUA_PRECIO)+SUM(E.FLETE_PRECIO)) - E.STORAGES_COSTOS) as ganancia, 0 as id
FROM inbakcar.importador I
left join inbakcar.compra C
on I.IMPORTADOR_ID=C.IMPORTADOR_ID
left join inbakcar.vehiculo_importado Vi
on Vi.COMPRA_ID=C.COMPRA_ID
left join inbakcar.envio E
on E.VEHICULO_ID = Vi.VEHICULO_ID
where C.COMPRA_FECHA< FF and C.COMPRA_FECHA> FI and
I.IMPORTADOR_ID!=10
group by I.IMPORTADOR_ID order by ganancia desc
);
END

RT1.b - Procesos almacenados del Top Clientes Por Numero De Compras.


CREATE DEFINER=`usuario2`@`%` PROCEDURE `dbgerencial`.`aaif1_b`(IN `IDinforme`
INT, `FF` DATE, `FI` DATE)
begin
insert into dbGerencial.AAIF1_B(
SELECT IDinforme as informe, I.IMPORTADOR_ID, I.IMPORTADOR_NOMBRE,
C.COMPRA_FECHA, count(C.LOTE ) as num_compras,
( -(SUM(E.FLETE_COSTO)+SUM(E.GRUA_COSTO)) +
(SUM(E.GRUA_PRECIO)+SUM(E.FLETE_PRECIO)) - E.STORAGES_COSTOS) as ganancia, 0 AS id
FROM inbakcar.importador I
left join inbakcar.compra C
on I.IMPORTADOR_ID=C.IMPORTADOR_ID
left join inbakcar.vehiculo_importado Vi
on Vi.COMPRA_ID=C.COMPRA_ID
left join inbakcar.envio E
on E.VEHICULO_ID = Vi.VEHICULO_ID
where C.COMPRA_FECHA< FI and C.COMPRA_FECHA> FF and I.IMPORTADOR_ID!=10
group by I.IMPORTADOR_ID order by num_compras desc
);
END

20
Segunda Etapa | Sistemas de Información Gerencial

Reportes
Reportes Estratégicos

RE1- Calendario virtual que indique las fechas estimadas de llegada.

21
Segunda Etapa | Sistemas de Información Gerencial

RE2- Costo del traslado de los autos por tierra

RE3- Total de gatos de traslado los autos en estados unidos por mes.

22
Segunda Etapa | Sistemas de Información Gerencial

Reportes Tácticos

RT1.a- Top Clientes Por Ganancia

RT1.b- Top Clientes Por Numero De


Compras.

23
Segunda Etapa | Sistemas de Información Gerencial

Seguridad

Backups de la base de datos


Respecto a los backups de la base de datos agregamos un apartado para descargar el backup de la
base de datos tanto gerencial como transaccional. Agregamos el script de la base de datos gerencial
en los archivos anexos con la tarea. El backup solo puede ser generado por el programador. Ya que
es el encargado de su manejo.

Perfiles de acceso y seguridad


Con respecto a la seguridad hay varios niveles:

Del lado del cliente

1- Conexión encriptada con HTTPS, (Protocolo SSL/TLS) entre el cliente y el servidor.

Http significa protocolo de transferencia de hipertexto y es la base de la comunicación de datos en


Internet. Mientras que HTTP es la versión original, una versión más segura se ha creado llamado
hyper text transferencia protocolo secure (HTTPS), que mantiene los datos enviados entre el
navegador Web y el sitio Web de destino seguro y seguro a través de la encriptación.

El uso de HTTPS mantiene la transferencia de datos confidenciales entre un navegador y un sitio web
encriptado, lo que ayuda a proteger a los clientes. Cualquier persona que use Google o Chrome es
un cliente de Google y quiere hacer todo lo posible para hacerlos felices. En este caso, agregar una
advertencia cuando la seguridad no está presente alerta a sus clientes sobre un problema potencial.

2- Una vez implementado en el servidor de agrega seguridad de las cabeceras, para evitar
inyecciones de codigo en JavaScript. Además de proteger la página de inyecciones de
contenido externo en caso de un ataque desde la misma red en la que se busque meter
código malicioso a la página web.
Cuando accedemos a un sitio web, el servidor contesta, además de con el contenido de la
web, con una serie de cabeceras que son interpretadas por el navegador. Estas cabeceras
son utilizadas por el servidor y por el navegador para el envío de información.
HTTP Strict Transport Security
Esta cabecera es utilizada para evitar que la web sea cargada en HTTP. El servidor indica al
navegador que nuestra web solo se debe cargar en HTTPS y el navegador bloqueará futuros
accesos si se intenta acceder al dominio mediante HTTP.
X-Frame-Options
Con X-Frame-Options evitamos que nuestra web sea cargada como un iframe en otra web.
Esto nos ayuda a protegernos frente a ataques de tipo Clickjacking.
Estos son los tres posibles ejemplos de uso:
Content-Security-Policy

24
Segunda Etapa | Sistemas de Información Gerencial

Esta cabecera sirve para indicar al navegador qué contenidos dinámicos de terceros se
permiten cargar. Esto ayuda en la protección frente a ataques de tipo Cross-Site Scripting.

Del lado del servidor

3- Todas las consultas están correctamente parametrizadas para no dejar espacio a inyecciones sql.

Una consulta parametrizada en realidad no reemplaza cadenas. Si usa la sustitución de


cadenas, el motor de SQL realmente ve una consulta que se parece a
SELECT * FROM mytable WHERE user='wayne'

Si usas a ? parámetro, entonces el motor SQL ve una consulta que se parece a


SELECT * FROM mytable WHERE user=<some value>

Lo que significa que incluso antes de ver la cadena "wayne", puede analizar completamente
la consulta y comprender, en general, lo que hace la consulta. Pega "wayne" en su propia
representación de la consulta, no en la cadena SQL que describe la consulta. Por lo tanto, la
inyección SQL es imposible, ya que ya pasamos la etapa SQL del process.

4- Cada servicio esta validado para que solo la persona con permisos pueda acceder.

5- Todas las peticiones de informes son registradas en una bitácora de informes en la que se guarda
la hora, el usuario, el tipo de reporte que pidió y con qué parámetros de entrada.

6- Todos los informes son generados por código SQL lo que implica que para hacer que un informe
se genere distinto es necesario tener la clave de la base de datos del sistema, lo que aumenta la
seguridad.

Una de las razones más beneficiosas para crear procedimientos almacenados mysql es la capa
adicional de seguridad que se coloca en la base de datos para la aplicación que solicita datos. Si la

25
Segunda Etapa | Sistemas de Información Gerencial

cuenta de usuario creada para la aplicación o el sitio web se configura únicamente con permisos de
ejecución, la cuenta de usuario no podrá acceder directamente a las tablas que tenemos por debajo.

Esto ayuda a evitar que un hacker acceda directamente a las tablas de la base de datos. El riesgo en
el que se incurre si un pirata informático utiliza esa cuenta de usuario que ejecuta un procedimiento
almacenado es mucho menor que con una cuenta de usuario que tenga permisos plenos de
inserción, actualización y eliminación directamente en las tablas.

7- todos los permisos son fijos en código en otras palabras código quemado lo que dificultaría a un
hacker el cambio de los permisos de un usuario. Aunque la desventaja es que no se pueden cambiar
los permisos de cada rol de manera sencilla.

Perfiles de acceso
Los usuarios del sistema son:

• Juan Gonzáles (usuario estratégico)


• Jilberto Holla (usuario táctico)
• José Munguía (Analista programador)

A continuación, se detalla una lista de los roles y sus permisos:

rol Permisos
1 Analista programador Acceso completo, a reportes, configuración, generar backups.
2 Usuario estratégico Acceso a reportes solamente
3 usuario táctico Acceso a reportes y configuración de los reportes del sistema.

Los permisos son agregados del lado del servidor en una variable de sesión al momento de crear la
sesión de usuario por lo que no es editable del lado del usuario y se mantiene mientras la sesión

26
Segunda Etapa | Sistemas de Información Gerencial

dura(600 segundos) por lo que en caso un usuario olvide cerrar sesión esta se cierra
automáticamente si no la usa.

El programador se encarga de todos los cambios en el sistema y corrección de errores en caso sea
necesario y además en su rol como empleado se desempeña como fullStak y DBA.

El usuario estratégico es el dueño de la empresa y se encarga de la toma de decisiones a largo plazo


por lo que se le permite tanto configuración como acceso a los informes.

El usuario táctico tiene acceso solamente a informes ya que se desempeña en el área administrativa
pero no tiene la potestad para generar todos los informes que gustan por lo que tiene que consultar
con el usuario estratégico´.

27
Segunda Etapa | Sistemas de Información Gerencial

Pruebas

Componentes individuales
Se describen la serie de componentes individuales que se utilizan en la solución de construcción del
sistema, con el objetivo de tener los datos exactos para las correctas pruebas de las soluciones ya
sea con datos buenos o datos malos, que permitan garantizar no solo el correcto funcionamiento del
sistema de información gerencial sino también garantizar a los dueños de la solución un trabajo de
calidad que les genere una ventaja competitiva con los datos que el sistema debe generar.

Campos de texto

En este tipo de campo de texto acepa únicamente el tipo de texto en formato fecha, compuesto por
meses, días y años, exactamente en ese orden.

Datos buenos

03/22/2020, 09/15/2020, 12/31/2020

Datos malos

“hola mundo”, 0987654321, ¡”#$%&/()=, “ ”

Datos buenos

12/23/2017, 08/09/2018, 12/12/2019

Datos Malos

12-23-17, 08-09-18, 12-12-19

2017/12/12, 2018/05/09, 2019/08/01

Elementos select

Todos los elementos “Select” son los elementos utilizados para poder seleccionar los diferentes
datos que el usuario desee visualizar, para poder generar el reporte

para seleccionar un cierto dato que el usuario necesite para realizar la generación del reporte en el
que se encuentre próximo a generar. Solo es necesario seleccionar en este caso de ejemplo un
nombre, el usuario no podrá escribir o modificar el texto ya presenté en el elemento, lo cual
garantiza una mayor seguridad y mayor facilidad para el usuario.

Datos buenos

28
Segunda Etapa | Sistemas de Información Gerencial

Se muestra la selección de un elemento.

Datos Malos

La inserción de elementos por medio del teclado de cualquier tipo de dato sería errónea.

La modificación de la información que ya aparece en el elemento “select”.

Al permitir que el sistema se le dé la opción de seleccionar un nombre sería un error que lo validara,
el sistema debería de arrojar un aviso para corregirlo.

Mensajes de error

Tipo de control/entrada Prueba


Formulario Reporte de aaif1_a, aaif1_b, aaif2_, aaif3, aaif7_a
Fecha inicio Filtro vacío
Fecha fin Filtro vacío
Descripción Completa este campo

Tipo de control/entrada Prueba


Formulario Reporte aaif1_b ¨Top Clientes Por Numero De Compras¨
Fecha inicio 2020-06-01
Fecha fin 2020-06-.14
Descripción Haz coincidir el formato solicitado. Ingresa un carácter no
valido para el campo.

29
Segunda Etapa | Sistemas de Información Gerencial

Tipo de control/entrada Prueba


Formulario Descargar backups
Fecha 2020-06-30
Descripción Usuario Contador intentado descargar backups, no tiene los
privilegios para dicha operación.

Tipo de control/entrada Prueba


Formulario Informe AAIF1_A, Informe AAIF1_B, Informe AAIF2, Informe
AAIF3, AAIF7_A
Fecha inicio 2020-06-01
Fecha fin 2020-06-30
Descripción Pedir un reporte si haber seleccionado de la lista alguno.

Componentes integrados

Salidas : informe AAIF1_A, Informe AAIF1_B, Informe AAIF2, Informe AAIF3, AAIF7_A
Control/Entrada : Selección
Dato Resultado
No seleccionar opción alguna. Este campo es obligatorio, por lo que debe
introducir datos.
Selección de una El reporte es generado

Salidas : informe AAIF1_A.


Control/Entrada : Fecha (desde hasta)
Datos: Fecha Inicio – Fecha Fin Resultado
2000-01-01 / 2000-01-30 No se genera el reporte porque está vacío
2020-01-01 / 2020-01-30 El reporte es generado

30
Segunda Etapa | Sistemas de Información Gerencial

Salidas : Todos los Informes


Control/Entrada : Selección
Dato Resultado
No seleccionar opción alguna. Al no seleccionar toma como predeterminado
“Ver Uno”
Selección de “Ver Todos” Muestra todos los Reportes

Salidas : Historial
Control/Entrada : Fecha
Dato Resultado
Vacío No se genera el reporte
2020-12-12 Muestra un reporte con el historial de
informes que ha solicitado cada usuario.

31
Segunda Etapa | Sistemas de Información Gerencial

Salidas: informe AAIF2. Calendario fechas estimadas de llegada de embarques


Control/Entrada : Fecha
Datos: Fecha Inicio – Fecha Fin Resultado
2020-01-01 /2020-12-12 Se genera el Calendario con las fechas
estimadas

32
Segunda Etapa | Sistemas de Información Gerencial

Documentación
MANUAL DE USUARIO
FUNCIONES DEL SISTEMA
Este Manual de Usuario es una guía para la utilización del “Sistema de Información Gerencial para
apoya la gestión de compra importación y venta de transportes Stella” que le permitirá a la empresa
facilitar ciertos procedimientos que se hacían manualmente, así como también ayudar a los usuarios
a tomar decisiones con los reportes que genera el sistema. A continuación, se presenta una seria de
funciones que puede hacer el sistema con su respectiva explicación para realizarlas.

Iniciar sesión y cerrar sesión.

Iniciar sesión:
Ingrese a la aplicación desde el navegador, mostrará la ventana de inicio de sesión, en la cual deberá
ingresar los datos de usuario que se le han asignado, según el tipo de usuario.

Luego de haber introducido el Usuario y Contraseña le aparecerá la pantalla de inicio del sistema
según el tipo de usuario. Al acceder como administrador solo tendrá privilegios a acceder al menú de
administrador, y así sucesivamente para los demás tipos de usuarios.

Cerrar sesión:
Para cerrar la sesión, dar clic en “LOGOUT”, que está ubicado en la esquina superior izquierda de la
pantalla.

33
Segunda Etapa | Sistemas de Información Gerencial

El sistema mostrar nuevamente el registro de Inicio de Sesión.


Creación De Reportes

Configuración de informe:
La pantalla de configuración de informe tiene el siguiente formulario a llenar:

1. Seleccione un menú: esta sección tiene una lista a desplegar donde se mostrará la lista de
informes a seleccionar, debe escoger el número de informe que desea configurar.
2. Fecha inicial: en esta parte se colocará la fecha inicial desde la cual se tomará la fecha a buscar la
información del informe, posee un calendario desplegado para facilitar la selección de fecha.
3. Seleccionar una opción: Se desplegará 2 opciones a seleccionar:
1- “Hasta el presente”: que es la fecha actual del día presente que se encuentre de forma
automática;
2- “Hasta una fecha específica” que es el ingreso de la fecha de final a ingresar de forma
manual.
4. Fecha final: en esta parte se colocará la fecha final del cual se llegará la búsqueda de la
información del informe, posee un calendario desplegado para facilitar la selección de fecha.
5. Actualizar Configuración: una vez llenado el formulario se presionará el botón para actualizar la
configuración del contenido de los informes.

4
5

Luego de haber completado el llenado se continuará con el llenado de “Solicitar Informe”

34
Segunda Etapa | Sistemas de Información Gerencial

Solicitar Informe:
La pantalla de Solicitar Informe tiene el siguiente formulario a llenar:

1. Seleccione un menú: esta sección tiene una lista a desplegar donde se mostrará la lista de
informes a seleccionar, debe escoger el número de informe que desea solicitar.
2. Fecha inicial: en esta parte se colocará la fecha inicial desde la cual se tomará la fecha a solicitar
la información del informe, posee un calendario desplegado para facilitar la selección de fecha.
3. Fecha final: en esta parte se colocará la fecha final hasta la cual se llegará la búsqueda de la
información del informe, posee un calendario desplegado para facilitar la selección de fecha.
4. Pedir: una vez llenado el formulario se presionará el botón “pedir” el cual mostrar en la parte
inferior el informe que se seleccionó a solicitar.

3
4

35
Segunda Etapa | Sistemas de Información Gerencial

Si se desea visualizar todos los informes deberá ir a la barra superior del sistema y seleccionar
“INFORMES” el cual desplegará 2 opciones:
1- Ver todos: esta opción mostrara todos los informes en la parte inferior donde se realizó el
llenado de formularios correspondiente.
2- Ver uno: esta opción mostrara solo el formulario que se selección en a generar en las
configuraciones de informes a solicitar.

1
2

Opciones del informe:


La pantalla del Informe se tiene las siguientes opciones:

1. Título de informe: En la parte superior aparecerá el número de informe y su título.


2. Opciones de descargar: En esta sección se posee varias opciones para descargar el informe ya
sea si se desea copiar la tabla, descargar en formato Excel o imprimir el informe.
3. Opciones de búsqueda: Posee un buscador para facilitar el filtro de información si se desea
conocer un dato especifico.
4. Contenido del informe: En esta sección se muestra el contenido del informe en forma de tabla,
donde se detalla los datos solicitados según el informe que se configuro anteriormente.

1 3
2

36
Segunda Etapa | Sistemas de Información Gerencial

Descarga de backup:
La pantalla de “Descarga de backup” tiene el siguiente formulario a llenar:

1. Fecha: en esta parte se colocará la fecha final hasta la cual se desea generar un respaldo de la
base de datos, posee un calendario desplegado para facilitar la selección de fecha.
2. Selección de la base: Se desplegará 2 opciones a seleccionar:
1. Respaldo transaccional: genera un respaldo de la base de datos del sistema transaccional de
la empresa.
2. Respaldo gerencial: genera un respaldo de la base de datos de sistema gerencial.
3. Dowload (descargar): Una vez seleccionada la fecha y el tipo de base que se desea realizar un
respaldo se presionara el botón descargar el cual generar un archivo sql de la base de daos que
fue seleccionara.

2
3

37
Segunda Etapa | Sistemas de Información Gerencial

MANUAL TÉCNICO
En el presente documento se describe el funcionamiento de código en las distintas partes del
sistema, dando facilidad a los futuros programadores para aplicar los cambios necesarios al sistema.

Los principales elementos que componen el sistema son:

• Formulario: Un formulario es un conjunto de controles (botones, cajas de texto,


casillas de verificación, botones radio, etc.) que permiten al usuario introducir datos y
enviarlos al servidor web para su procesamiento.
• DataTables: DataTables es una poderosa biblioteca de JavaScript para agregar
funciones de interacción a las tablas HTML, y aunque la simplicidad es un principio
de diseño central para el proyecto en su conjunto, puede parecer bastante
desalentador para comenzar.
• JQuery: jQuery es una biblioteca multiplataforma de JavaScript, creada inicialmente por John
Resig, que permite simplificar la manera de interactuar con los documentos HTML,
manipular el árbol DOM, manejar eventos, desarrollar animaciones y agregar interacción
con la técnica AJAX a páginas web.
• FullCalendar: FullCalendar es un plugin de jQuery que ofrece un calendario de tamaño
completo, con la función de ‘arrastrar y soltar’. Se utiliza AJAX para traer eventos en la
marcha cada mes y se puede configurarlo fácilmente.
• Servicios WEB: es una tecnología que utiliza un conjunto de protocolos y estándares que
sirven para intercambiar datos entre aplicaciones. Distintas aplicaciones de software
desarrolladas en lenguajes de programación diferentes, y ejecutadas sobre cualquier
plataforma.
• Peticiones HTTP: HTTP define un conjunto de métodos de petición para indicar la
acción que se desea realizar para un recurso determinado. Aunque estos también
pueden ser sustantivos, estos métodos de solicitud a veces son llamados HTTP
verbs.
• Sesiones: Una sesión en php es un archivo temporal en el servidor que permite recordar a un
usuario que se conecta al servidor esta sesión contiene un ID el cual se guarda en el
dispositivo del cliente, más específicamente en una cookie de su navegador.
• Procedimientos almacenados: En bases de datos son funciones escritas con lenguaje SQL las
cuales permiten hacer consultas a múltiples bases de datos y que también se encuentran
protegidas dentro de la base de datos.
• Tareas: Las tareas en Windows permiten programar la ejecución de comandos en el sistema
para diferentes horarios, en nuestro caso archivos de tipo .bat que contienen las
instrucciones para ejecutar los archivos php que se encargan de sincronizar los datos y de
ejecutar los backup de la base.

Para lograr el objetivo se muestra un diagrama de la arquitectura del sistema, indicando los puntos
en los cuales se hace uso de cada elemento:

38
Segunda Etapa | Sistemas de Información Gerencial

Diagrama de arquitectura.

Datatables.

Instalación

Incluir las bibliotecas ya descargadas en el proyecto


<script type="text/javascript" language="javascript" src="https://www.sistemagerencial.com.local/jsExt/jquery-
3.3.1.js"></script>

<script type="text/javascript" language="javascript" src="https://www.sistemagerencial.com.local/jsExt/jquery-


3.3.1.js"></script>

<script type="text/javascript" language="javascript"


src="https://www.sistemagerencial.com.local/jsExt/jquery.dataTables.min.js"></script>

<script type="text/javascript" language="javascript"


src="https://www.sistemagerencial.com.local/jsExt/dataTables.buttons.min.js"></script>

<script type="text/javascript" language="javascript"


src="https://www.sistemagerencial.com.local/jsExt/buttons.flash.min.js"></script>

<script type="text/javascript" language="javascript"


src="https://www.sistemagerencial.com.local/jsExt/jszip.min.js"></script>

<script type="text/javascript" language="javascript"


src="https://www.sistemagerencial.com.local/jsExt/vfs_fonts.js"></script>

<script type="text/javascript" language="javascript"


src="https://www.sistemagerencial.com.local/jsExt/buttons.html5.min.js"></script>

<script type="text/javascript" language="javascript"


src="https://www.sistemagerencial.com.local/jsExt/buttons.print.min.js"></script>

39
Segunda Etapa | Sistemas de Información Gerencial

Algunas funciones extra de dataTables son las de generar o exportar datos a csv, Excel, o imprimir.

El siguiente paso es la configuración, para cada tabla se declara una variable en un script esta
variable servirá para poder ejecutar la actualización de la tabla:
<script type="text/javascript" class="init" >

var tabla1_a;

$(document).ready(function () { //Al iniciar el sistema iniciar las tablas con sus conexiones a cada servicio

tabla2 = $("#tabla2").DataTable({ //hacer referencia al id de la tabla en html

ajax: {

type: "POST",

url: host + "/servicios/getInformes.php", //hacer referencia a la ruta en del servicio

dataSrc: "",

xhrFields: { withCredentials: true },

error: function (jqXHR, textStatus, errorThrown) {

alertify.error("Necesita internet o no tiene permisos!"); //en caso de error del servidor

},

beforeSend: function (request) {},

data: function (d) { //mandamos los parametros para la petición inicial de los datos

d.fechaI = getFechaI();

d.fechaF = getFechaF();

d.sess = cook();

d.informe = getInformeTipo();

},

columns: [ //a continuación describimos las columnas en las que caeran los datos

data: "id",

sWidth: "30px",

sClass: "center",

},

CONTENEDOR_ID: "CONTENEDOR_ID", },{

booking: "booking",},{

PUERTO_S_NOMBRE: "PUERTO_S_NOMBRE",},{

PUERTO_E_NOMBRE: "PUERTO_E_NOMBRE",},{

fecha_carga: "fecha_carga",},{

40
Segunda Etapa | Sistemas de Información Gerencial

fecha_zarpe: "fecha_zarpe",},{

fecha_destino: "fecha_destino",},

],

},

responsive: true,

lengthMenu: [ //configuramos la cantidad de páginas que se podrán configurar

[5, 10, 20, -1],

[5, 10, 20, "All"],

],

dom: "Blfrtip",

buttons: ["copyHtml5", "excelHtml5", "csvHtml5", "print"],//los botones que deseamos agregar

pageLength: 20,

cache: false,

order: [[0, "desc"]],

columnDefs: [ //configuración de cada columna por separado

targets: [0],//número de columna que configuramos

visible: true,// si queremos que se muestre la columna

searchable: true,// si queremos omitirla en las búsquedas

},

targets: [1],

visible: true,

searchable: true,

},

targets: [2],

visible: true,

searchable: true,

},

targets: [3],

visible: true,

searchable: true,

},

41
Segunda Etapa | Sistemas de Información Gerencial

],

});

</script>

Mientras en html las tablas se configuran de esta forma siempre con id para identificarlas
<table id="tabla2" class="display dataTable" style="margin: auto;max-width: 700px;" role="grid" aria-
describedby="example_info"> // cada tabla debe tener su ID

<thead>

<tr role="row">

<th>CONTENEDOR_ID</th>// columnas que reciben los datos

<th>booking</th>

<th>PUERTO_S_NOMBRE</th>

<th>PUERTO_E_NOMBRE</th>

<th>fecha_carga</th>

<th>fecha_zarpe</th>

<th>fecha_destino</th>

</tr>

</thead>

<tbody></tbody>

</table>

Las tablas de esa forma quedan enlazadas con un servicio por lo tanto con una consulta sql
directamente y es actualizable completamente sin necesidad re recargar la página. Para actualizar
toda la data de una tabla con sus valores basta con ejecutar el nombre de la variable de la tabla.
ajax.reload así: tabla1_a.ajax.reload();

AJAX + formularios + JQuery

Los formularios se estructuran de manera normal, pero con un id y un botón para ejecutar su acción.
<form id="loginForm" class="form-signin"> // Cada formulario lleva su ID

<div class="form-label-group">

<input type="text" name="user" id="user" class="form-control" placeholder="Email address"


required="true" autofocus="">

<label for="nombre">Nombre</label>

</div>

<div class="form-label-group">

// parámetros en etiquetas input, llegaran al servidor con el nombre que se agregue en el name

<input type="password" name="pass" id="pass" class="form-control" placeholder="Password"


required="true">

<label for="inputPassword">Contraseña</label>

</div>

42
Segunda Etapa | Sistemas de Información Gerencial

<div class="custom-control custom-checkbox mb-3">

<input type="checkbox" class="custom-control-input" id="customCheck1">

<label class="custom-control-label" for="customCheck1">Remember password</label>

</div>

<div class="form-group">

<div class="col-sm-10 col-sm-offset-2">

//el siguiente botón permite llamar a la función que ejecutara la petición por ajax

<button class="btn btn-primary" id="btnLogin" name="submit" type="submit"


value="Login">Login</button>

</div>

</div>

</form>

</div>

Del lado de javaScript capturamos el formulario y ejecutamos una llama Ajax de la siguiente forma:
const $formularioLogin = document.querySelector("#loginForm");

$formularioLogin.addEventListener("submit", (event) => { //Agreagar el evento del boton

event.preventDefault(); //evitamos que el formulario recargue la página

const formData = new FormData(event.currentTarget); //obtenemos el formulario con los datos

formData.set("login", ""); //para agregar parámetros al formulario

var btnEnviar = $("#btnLogin");

$.ajax({ // Acá inicia la llamada por Ajax que enviará y traerá los datos del servidor

type: "POST", //configuramos el método

processData: false,

enctype: "multipart/form-data", //configuramos que enviamos un formulario

contentType: false, // NEEDED, DON'T OMIT THIS (requires jQuery 1.6+

url: host + "/servicios/login.php", //configuramos la dirección del servicio que tiene los datos

data: formData, //agregamos el formulario a la data que enviaremos

beforeSend: function () { //acciones a ejecutar después de enviarlo

btnEnviar.val("Validando"); // Para input de tipo button

btnEnviar.attr("disabled", "disabled");

},

complete: function (data) { //acciones al completar el envío

var cook = "";

cook = data.responseText; //Obtenemos la respuesta en forma de texto

cook = JSON.parse(cook);

43
Segunda Etapa | Sistemas de Información Gerencial

if ( cook.exito == 0 ) {

alertify.error("Credenciales incorrectas!");

}else{

document.getElementById("viewLoggin").style.display = "none";

alertify.success("Logueado exitosamente!");

document.cookie = "PHPSESSID=" + cook["sesion"] + "; max-age=3600; path=/"; //en este caso agregamos la
cookie al navegador

btnEnviar.val("Iniciada");

btnEnviar.removeAttr("disabled");

$("#user").val("");

$("#pass").val("");

},

success: function (data) { // al programar comportamiento al terminar la llamada

try {

} catch (error) { //en caso de error programar lo siguiente

var msg2 = alertify.success("Default message");

msg2.delay(1000).setContent("CONTACTE CON SOPORTE, PUEDE SER QUE EL ARCHIVO O LOS PAGOS NO SE


ASIGNARAN CORRECTAMENTE");

},

error: function (data) {

alert("Problemas al tratar de enviar el formulario");

},

});

return false;

});

Verificar envío y respuestas a través de Ajax

En la siguiente imagen podemos ver la URL en la que funciona nuestro servicio de login en este caso
en …/servicios/login.php .Podemos ver también el estatus 200 correcto, y al final podemos ver lo
parámetros que se han mandado en el formulario.

En la pestaña timing podremos ver el tiempo de respuesta, y en Response veremos algo


extremadamente útil, la respuesta del servidor con los datos de salida

44
Segunda Etapa | Sistemas de Información Gerencial

La respuesta del servidor es la siguiente:

45
Segunda Etapa | Sistemas de Información Gerencial

Ese es el mensaje de éxito con los datos incluyendo una cookie se sesión que podemos utilizar ya en
el navegador. Ahora vamos a ver como se procesan los datos en el servidor y como crear servicios
web en php.

Servicios web

Un servicio web es un sistema de software que permite comunicar dos sistemas, aunque sean
completamente distintos como java con php, o Android y php o ios, siempre que los elementos
puedan ejecutar peticiones http y tengan internet básicamente cualquier dispositivo con internet.

Un servicio de php se crea usando un archivo php con cualquier nombre con la extensión php el cual
esté expuesto directamente a internet como si fuese una página web que recibe para metros por get
post u otros métodos, el código php es ejecutado en el servidor y la respuesta se imprime dentro del
servicio, pudiendo devolver arreglos, datos en json, vectores o una siempre cadena.

A continuación, como ejemplo el código del archivo servicios/login.php


<?php

require_once("funciones/conexion.php"); //agregar funciones para conectarse a la base

header ("Access-Control-Allow-Origin: http://www.sistemagerencial.com.local");

header ("Access-Control-Allow-Methods: POST");

header ("Access-Control-Allow-Headers: *");

header ("Access-Control-Allow-Credentials:true");

if($_SERVER['REQUEST_METHOD']=='POST'){ // si el método de la petición fue post continuar

$name= $mysqliDos->real_escape_string( $_POST['user']); //obtenernos el parámetro que mandamos del formulario y


validamos que no contenga código malicioso

$pass= $mysqliDos->real_escape_string( $_POST['pass']); //obtenemos el pass del usuario y verificamos que no contenga
código malicioso

46
Segunda Etapa | Sistemas de Información Gerencial

$sentencia=$mysqliDos->prepare("SELECT U.nombre, U.pass, U.correo, U.rol, U.id FROM dbgerencial.usuarios U

left join dbgerencial.roles r

on u.rol = r.id

where U.nombre = ?");

if($sentencia==false ){ // si la sentencia ni es válida hacer

vardump( $sentencia);

}else{

$sentencia->bind_param('s', $name ); // ejecutar sentencia sql y traer el usuario

$sentencia->execute();

$resultado=$sentencia->get_result();

$datos= mysqli_fetch_array($resultado);// guardo los resultados

if(!empty($datos) and password_verify($pass , $datos[1])){ //verifico la contraseña guardada

session_start(); //Si todo es correcto creamos una sesión en el server

$sesionId = session_id();

$_SESSION['idUser'] = $datos[4]; // Agregamos parámetros a la sesión para mantenerla activa en el server

$_SESSION['nombre'] = $datos[0];

$_SESSION['rol'] = $datos[3];

$_SESSION['correo'] = $datos[2];

// creamos un array de resultados el cual se mandará como respuesta al navegador.

$arr = array( 'exito'=>1 , 'nombre'=>"$datos[0]", 'sesion'=> $sesionId , 'rol'=>"$datos[3]");

echo json_encode($arr);

}else {

$arr = array( 'exito'=>0 );

echo json_encode($arr) ;//imprimimos las respuestas para que lleguen al navegador

$sentencia->close(); //cerramos la sentencia

$mysqliDos->close(); // cerramos las conexiones

$mysqliUno->close();

?>

Servicios web enlazados a datatables

Nos hace falta ver como se configura y responde a una tabla de dataTables en el lado del cliente,
para que esta se pueda actualizar desde ahí.

47
Segunda Etapa | Sistemas de Información Gerencial

Como ejemplo de esto usaremos el archivo getInformes que se encarga de retornar todos los
informes, este se ubicada en …/servicios/getInformes.php
...

$sentencia=$mysqliDos->prepare("

SELECT info.IMPORTADOR_ID, info.IMPORTADOR_NOMBRE, info.num_compras, info.id

FROM aaif1_b info

left join informe histo on histo.id = info.informe

where (histo.fechai= ? and histo.fechaf = ? );

");

//datos enviados por la tabla que ya configuramos

$sentencia->bind_param( 'ss', $fechaI ,$fechaF );

$sentencia->execute();

$result= $sentencia->get_result();//Ejecutamos y obtenemos los datos de la consulta

if($result!=null){//Si tenemos resultados responder

$datos= mysqli_fetch_all($result); // crear array asociativo

echo json_encode ($datos); //enviar array como repuesta

}else {

$arr = array( 'exito'=>-1 ); //En otro caso mandar código de error

echo json_encode($arr); //retornar como un json

exit;

$sentencia->close();

$mysqliDos->close();

?>

Sincronizador de informes.

El sincronizador de informes es un archivo php que utilizar la tabla de configuraciones para obtener
las fechas de los reportes que se han guardado.

El archivo sincronizador se ubica en …/servicios/sincronizador.php y se encarga de tomar la


configuración del sistema (fechas iniciales, finales y el tipo de fecha final) con esa información y los
tipos de informe empieza a generar los informes siempre y cuando aún no estén generados, como
por ejemplo si en el sistema se ha configurado un informe de tipo 1 para el 1 de enero al 20 de enero
este solo se ejecutará una vez y se guardará. Este es el archivo que será llamado por una tarea del
sistema todos los días a la media noche. La forma de ejecutar este archivo es ejecutar los siguientes
comandos en la consola de Windows:

1. cd C:\xampp\htdocs\webGerenciales\servicios

48
Segunda Etapa | Sistemas de Información Gerencial

2. php sincronizador.php

se genera esta salida en pantalla. En la que inicialmente muestra las fechas para cada informe y
luego muestra los procedimientos almacenadas que se ejecutan.

A continuación, comentamos las partes más importantes del código:


<?php

require_once("funciones/conexion.php"); //agregar conexión especial para la base de datos//agregar conexión especial


para la base de datos

//extraemos los datos de la tabla de configuración

$sentencia=$mysqliDos->prepare("

SELECT c.fechai, c.fechaf, c.id as idConfig, i.id as informeId, ti.id as idTipoInf, ti.nombre, c.fechafvariable as t

FROM configainfor c

left join tipoinforme ti on ti.id= c.idtipo

left join informe i on i.id=(select max(id) from informe );

");

$sentencia->execute();

$result= $sentencia->get_result();

//Declaramos las variables de fechas y tipos de fechas para cada informe

$id=0;

$FI1=0; $FI2=0; $FI3=0; $FI4=0; $FI5=0; $FI6=0; $FI7=0; $FI8=0; $FI9=0; $FI10=0;

$FF1=0; $FF2=0; $FF3=0; $FF4=0; $FF5=0; $FF6=0; $FF7=0; $FF8=0; $FF9=0; $FF10=0;

$t1="r"; $t2="r"; $t3="r"; $t4="r"; $t5="r"; $t6="r"; $t7="r"; $t8="r"; $t9="r"; $t10="r";

$contador=1;

49
Segunda Etapa | Sistemas de Información Gerencial

//rellenamos las variables con los datos de configuración

while ($fila = $result->fetch_assoc()) {

printf ("%s - %s - %s - %s - %s -%s\n",

$fila["fechai"], $fila["fechaf"], $fila["idConfig"],

$fila["informeId"], $fila["idTipoInf"] , $fila["nombre"] );

//Obtenemos las fechas iniciales

$id= $fila["informeId"];

if($contador==1){ $FI1=$fila["fechai"]; }elseif($contador==2){ $FI2=$fila["fechai"];}elseif($contador==3){


$FI3=$fila["fechai"];}

elseif($contador==4){$FI4=$fila["fechai"];}elseif($contador==5){ $FI5=$fila["fechai"];}
elseif($contador==6){$FI6=$fila["fechai"] ;}

elseif($contador==7){$FI7=$fila["fechai"];}elseif($contador==8){ $FI8=$fila["fechai"];}elseif($contador==9){
$FI9=$fila["fechai"];}

elseif($contador==10){$FI10=$fila["fechai"];}

if($contador==1){ $FF1=$fila["fechaf"]; }elseif($contador==2){ $FF2=$fila["fechaf"];}elseif($contador==3){


$FF3=$fila["fechaf"];}

elseif($contador==4){$FF4=$fila["fechaf"];}elseif($contador==5){ $FF5=$fila["fechaf"];}
elseif($contador==6){$FF6=$fila["fechaf"] ;}

elseif($contador==7){$FF7=$fila["fechaf"];}elseif($contador==8){ $FF8=$fila["fechaf"];}elseif($contador==9){
$FF9=$fila["fechaf"];}

elseif($contador==10){$FF10=$fila["fechaf"];}

//obtenemos las fechas finales

if($contador==1){ $FF1=$fila["fechaf"]; $t1=$fila["t"];}elseif($contador==2){ $FF2=$fila["fechaf"];


$t2=$fila["t"];}elseif($contador==3){ $t3=$fila["t"]; $FF3=$fila["fechaf"];}

elseif($contador==4){$t4=$fila["t"]; $FF4=$fila["fechaf"];}elseif($contador==5){$t5=$fila["t"]; $FF5=$fila["fechaf"];}


elseif($contador==6){$t6=$fila["t"];$FF6=$fila["fechaf"] ;}

elseif($contador==7){$t7=$fila["t"]; $FF7=$fila["fechaf"];}elseif($contador==8){$t8=$fila["t"];
$FF8=$fila["fechaf"];}elseif($contador==9){$t9=$fila["t"];$FF9=$fila["fechaf"];}

elseif($contador==10){ $t10=$fila["t"];$FF10=$fila["fechaf"];}

$contador++;

//si la fecha final se ha configurado para cambiar entonces se cambia al día actual

$fActual=date("Y").'-'. date("m").'-'.date("d");

if($t1=="0") $FF1= $fActual; if($t2=="0") $FF2= $fActual; if($t3=="0") $FF3= $fActual; if($t4=="0") $FF4= $fActual;

if($t5=="0") $FF5= $fActual; if($t6=="0") $FF6= $fActual; if($t7=="0") $FF7= $fActual; if($t8=="0") $FF8= $fActual;

if($t9=="0") $FF9= $fActual; if($t10=="0") $FF10= $fActual;

50
Segunda Etapa | Sistemas de Información Gerencial

//buscamos si el informe con esas fechas ya se ha generado entonces no se repite

$repetido=[];

$sentencia=$mysqliDos->prepare("select

(select count(*) as hay FROM dbgerencial.informe

where idtipo='1' and fechai=? and fechaf=?

limit 1) as a,

(select count(*) as hay FROM dbgerencial.informe

where idtipo='2' and fechai=? and fechaf=?

limit 1) as b,

(select count(*) as hay FROM dbgerencial.informe

where idtipo='3' and fechai=? and fechaf=?

limit 1) as c,

(select count(*) as hay FROM dbgerencial.informe

where idtipo='4' and fechai=? and fechaf=?

limit 1) as d,

(select count(*) as hay FROM dbgerencial.informe

where idtipo='5' and fechai=? and fechaf=?

limit 1) as e,

(select count(*) as hay FROM dbgerencial.informe

where idtipo='8' and fechai=? and fechaf=?

limit 1) as h,

(select max(i.id) as id from informe i ) as maxIdInforme

");

$sentencia->bind_param('ssssssssssss', $FI1, $FF1, $FI2,$FF2, $FI3,$FF3, $FI4,$FF4, $FI5, $FF5, $FI8,$FF8); $sentencia-
>execute();

$resultado=$sentencia->get_result();$datos= mysqli_fetch_array($resultado);

//La variable resultado contiene un vector con valor 0 si el informe ya se generó

$idval=intval($datos[6]);

echo "hayta", $idval;

try{

$tipo=0;

//a partir de acá generamos y validamos los informes

if($datos[0]==0){

try {

51
Segunda Etapa | Sistemas de Información Gerencial

//creamos un registro en el historial de informes tabla llamada informe

$idval= $idval+1; $tipo=$tipo+1;

$informe=$mysqliDos->prepare("INSERT INTO dbgerencial.informe(fechai, fechaf, idtipo) VALUES(?, ?, ?);");

$informe->bind_param("ssi", $FI1, $FF1, $tipo );

$informe->execute();

//Cada informe se genera llamando a un procedimiento almacenada con el comando call

$sentencia = $mysqliDos->prepare("call aaif1_a( ?,?,? );"); echo "\n call aaif1_a( ",$idval,",'",$FI1,"','",$FF1,"' );";

$sentencia->bind_param( "iss", $idval, $FI1, $FF1 );

$sentencia->execute();

//echo "\n informe programado 1-", $idval,"-",$tipo, "/", $FI1 , "/",$FF1 ;

} catch (mysqli_sql_exception $e) {throw $e;}

sleep(3);

}else echo "\n Ya ha sido generado: 1_a";

if($datos[1]==0){

try {

$idval= $idval+1; $tipo=$tipo+1;

$informe=$mysqliDos->prepare("INSERT INTO dbgerencial.informe(fechai, fechaf, idtipo) VALUES(?, ?, ?);");

$informe->bind_param( "ssi", $FI2, $FF2, $tipo );

$informe->execute();

$sentencia = $mysqliDos->prepare("call aaif1_b( ?,?,? );"); echo "\n call aaif1_b( ",$idval,",'",$FI2,"','",$FF2,"' );";

$sentencia->bind_param( "iss", $idval, $FI2, $FF2 );

$sentencia->execute();

//echo "\n informe programado 2 -", $idval,"-",$tipo , "/", $FI2 , "/",$FF2 ;

} catch (mysqli_sql_exception $e) {throw $e;}

sleep(3);

}else echo "\n Ya ha sido generado: 1_b";

if($datos[2]==0){

try {

$idval= $idval+1; $tipo=$tipo+1;

$informe=$mysqliDos->prepare("INSERT INTO dbgerencial.informe(fechai, fechaf, idtipo) VALUES(?, ?, ?);");

$informe->bind_param( "ssi", $FI3, $FF3, $tipo );

52
Segunda Etapa | Sistemas de Información Gerencial

$informe->execute();

$sentencia = $mysqliDos->prepare("call aaif2( ?,?,? );"); echo "\n call aaif2( ",$idval,",'",$FI3,"','",$FF3,"' );";

$sentencia->bind_param( "iss", $idval, $FI3, $FF3 );

$sentencia->execute();

//echo "\n informe programado 3 -", $idval,"-",$tipo , "/", $FI3 , "/",$FF3 ;

} catch (mysqli_sql_exception $e) {throw $e;}

sleep(3);

}else echo "\n Ya ha sido generado: 2";

if($datos[3]==0){

try {

$idval= $idval+1; $tipo=$tipo+1;

$informe=$mysqliDos->prepare("INSERT INTO dbgerencial.informe(fechai, fechaf, idtipo) VALUES(?, ?, ?);");

$informe->bind_param( "ssi", $FI4, $FF4, $tipo );

$informe->execute();

$sentencia = $mysqliDos->prepare("call aaif3( ?,?,? );"); echo "\n call aaif3( ",$idval,",'",$FI4,"','",$FF4,"' );";

$sentencia->bind_param( "iss", $idval, $FI4, $FF4 );

$sentencia->execute();

//echo "\n informe programado 4 -", $idval,"-",$tipo , "/", $FI4 , "/",$FF4 ;

} catch (mysqli_sql_exception $e) {throw $e;}

sleep(3);

}else echo "\n Ya ha sido generado: 3";

if($datos[4]==0){

try {

$idval= $idval+1; $tipo=$tipo+1;

$informe=$mysqliDos->prepare("INSERT INTO dbgerencial.informe(fechai, fechaf, idtipo) VALUES(?, ?, ?);");

$informe->bind_param( "ssi", $FI5, $FF5, $tipo );

$informe->execute();

$sentencia = $mysqliDos->prepare("call aaif4( ?,?,? );"); echo "\n call aaif4( ",$idval,",'",$FI5,"','",$FF5,"' );";

$sentencia->bind_param( "iss", $idval, $FI5, $FF5 );

$sentencia->execute();

//echo "\n informe programado 5 -", $idval,"-",$tipo , "/", $FI5 , "/",$FF5 ;

} catch (mysqli_sql_exception $e) {throw $e;}

53
Segunda Etapa | Sistemas de Información Gerencial

sleep(3);

}else echo "\n Ya ha sido generado: 4";

//Generamos el último informe con sus parámetros y fin

if($datos[5]==0){

try {

$idval= $idval+1; $tipo=8;

$informe=$mysqliDos->prepare("INSERT INTO dbgerencial.informe(fechai, fechaf, idtipo) VALUES(?, ?, ?);");

$informe->bind_param( "ssi", $FI8, $FF8, $tipo );

$informe->execute();

$sentencia = $mysqliDos->prepare("call aaif7_a( ?,?,? );"); echo "\n call aaif7_a( ",$idval,",'",$FI8,"','",$FF8,"' );";

$sentencia->bind_param( "iss", $idval, $FI8, $FF8 );

$sentencia->execute();

//echo "\n informe programado 7_a -", $idval,"-",$tipo , "/", $FI8 , "/",$FF8 ;

} catch (mysqli_sql_exception $e) {throw $e;}

sleep(3);

}else echo "\n Ya ha sido generado: 8";

} catch(PDOException $e) {

echo $e->getMessage();

return false;

$sentencia->close();

$mysqliDos->close();

?>

Procedimientos almacenados
Todos los informes se realizan ejecutando procedimientos almacenados a continuación mostramos
el código general que se sigue para cada informe.

Los procedimientos almacenados se guardan dentro de la base de datos gerencial en el apartado de


procedimientos.

54
Segunda Etapa | Sistemas de Información Gerencial

#se deben mandar 3 parametros de entrada fechas, y tipo de informe

CREATE DEFINER=`usuario2`@`%` PROCEDURE `dbgerencial`.`aaif1_a`(in IDinforme int, FI date, FF date)

Begin

#el comando insert into es un comando de inserción masiva de datos

insert into dbGerencial.AAIF1_A(

#el select interno ejecuta la consulta para generar el informe y el resultado es insertado en la tabla que guarda los informes

select IDinforme as informe, I.IMPORTADOR_ID, I.IMPORTADOR_NOMBRE, count(C.LOTE ) as num_compras,

( -(SUM(E.FLETE_COSTO)+SUM(E.GRUA_COSTO)) + (SUM(E.GRUA_PRECIO)+SUM(E.FLETE_PRECIO)) -

E.STORAGES_COSTOS) as ganancia, 0 as id

55
Segunda Etapa | Sistemas de Información Gerencial

FROM inbakcar.importador I

left join inbakcar.compra C

on I.IMPORTADOR_ID=C.IMPORTADOR_ID

left join inbakcar.vehiculo_importado Vi

on Vi.COMPRA_ID=C.COMPRA_ID

left join inbakcar.envio E

on E.VEHICULO_ID = Vi.VEHICULO_ID

where C.COMPRA_FECHA< FF and C.COMPRA_FECHA> FI and I.IMPORTADOR_ID!=10

group by I.IMPORTADOR_ID order by ganancia desc

);

END

Generado de backups
Para generar backups necesitamos crear un archivo .bat que nos permite ejecutar comandos de la
consola de Windows, así que este
echo off

set FECHA=%date:/=-% //obtenemos la fecha del día actual

echo %FECHA% //mostramos la fecha

cd..

cd C:\xampp\mysql\bin //iremos a la ruta de mysql para usar una aplicación de ahí.

mysqldump -u root --password="" --port=3306 dbgerencial >

C:\xampp\htdocs\webGerenciales\servicios\Backups\respaldoGerencial.sql

cd..

cd C:\xampp\mysql\bin

56
Segunda Etapa | Sistemas de Información Gerencial

mysqldump -u root --password="" --port=3306 inbakcar >

C:\xampp\htdocs\webGerenciales\servicios\Backups\respaldoTransaccional.sql

cd C:\xampp\htdocs\webGerenciales\servicios\Backups\

set datetimef=%date:~-4%-%date:~3,2%-%date:~0,2% //generamos la fecha para usarla en el nombre

echo %datetimef%

ren respaldoGerencial.sql %datetimef%_respaldoGerencial.sql //renombramos los archivos y quedan guardados en la


carpeta

ren respaldoTransaccional.sql %datetimef%_respaldoTransaccional.sql

Configuración de tareas programadas.


Windows nos permite programar tareas de ejecución de programas en este caso archivos .bat que a
su vez permiten ejecutar listas de comandos de la consola en Windows, los pasos para configurar
una tarea son los siguientes:

1. Escribir task Scheduler en el inicio de Windows, y dar clic en el siguiente icono:

2. Se muestra la siguiente ventana, daremos clic en nueva tarea y le pondremos un nombre,


daremos siguiente.

57
Segunda Etapa | Sistemas de Información Gerencial

3. Configuramos la hora, y repetir cada día y daremos siguiente.

58
Segunda Etapa | Sistemas de Información Gerencial

4. Escogemos iniciar un programa y le damos siguiente.

5. Seleccionaremos el script dando clic en examinar:

59
Segunda Etapa | Sistemas de Información Gerencial

6. Buscamos el archivo .bat que se encarga de generarnos los backup

60
Segunda Etapa | Sistemas de Información Gerencial

7. Daremos clic en siguiente y finalizar, con esto tendremos ya lista la tarea y se estará
ejecutando todos los días a la hora seleccionada.

MANUAL DE INSTALACIÓN Y DESINSTALACIÓN

Instalación del sistema

Configuración del servidor


Por ser una aplicación web se puede tener como servidor un Web Host para alojar la aplicación,
también se puede configurar un servidor local doméstico para correr la aplicación.

Requerimientos mínimos de hardware


Para el caso de utilizar una PC que haga el trabajo de servidor es necesario ciertos requisitos de
hardware.

CPU:

Lo recomendable es tener un procesador Intel® Core™ i7-4770K

Memoria RAM:

Para el caso de la memoria RAM que es la que permite el uso simultaneo de muchas aplicaciones se
recomienda 8GB para poder utilizar el sistema operativo anfitrión, así como los distintos paquetes
de software que se utilizarán para utilizarla como servidor.

Almacenamiento:

Sistema de archivos NTFS con 1 SSD 500GB de espacio disponible.

61
Segunda Etapa | Sistemas de Información Gerencial

Adicionalmente son necesarios los complementos como ratón, teclado y monitor.

También es necesario que se posea una infraestructura de red acorde a las necesidades y con acceso
a internet.

En el caso de que la aplicación se aloje en un web host, son los distintos sitios que ofrecen tales
servicios los que ponen distintos planes con requisitos acordes a estos, que van desde planes
gratuitos (con muy pocos recursos y muy pocas facilidades) hasta planes pagados con mayores
recursos para el sitio, así como herramientas adicionales para mejorar el rendimiento de la
aplicación.

Versiones de software que se utilizarán


PHP versión 7.2.28

MySQL 5.7 o superior

Apache 2.4 o superior

Sistema operativo anfitrión Microsoft Windows 10.

Requisitos previos de instalación


1. Primeramente, instalamos el servidor web Apache mediante XAMPP.

Link: https://sourceforge.net/projects/xampp/files/XAMPP%20Windows/7.2.28/xampp-windows-
x64-7.2.28-0-VC15-installer.exe/download

Paso 1: Irse al directorio del disco local (C:), y buscar la carpeta de Windows y en ella buscar la
carpeta System32 y luego la carpeta drivers y dentro de ella buscar la carpeta etc., dentro de ella
encontrarás un archivo llamado hosts.

Paso 2: Abrir el archivo hosts con un editor de texto y escribir lo siguiente al final del archivo:

127.0.0.1 www.sistemaGerencial.com.local

62
Segunda Etapa | Sistemas de Información Gerencial

Paso 3: Irse al directorio del disco local (C:) y buscar la carpeta xampp, luego dentro de ella buscar la
carpeta de apache, luego en la carpeta conf, irse a la carpeta extra y buscar el archivo httpd-
vhosts.conf que sirve para la configuración del host virtual, lo abrimos para editarlo y añadir lo
siguiente:

## site.test
<VirtualHost *:80>
DocumentRoot "C:\xampp\htdocs\webGerenciales"
ServerAlias *.sistemaGerencial.com.local
</VirtualHost>
<VirtualHost *:443>
DocumentRoot "C:\xampp\htdocs\webGerenciales"
ServerAdmin alex.uceda@hotmail.com
ServerName sistemaGerencial.com.local:443
ServerAlias sistemaGerencial.com.local
SSLEngine on
ErrorLog "C:/xampp/htdocs/errors/ssl_error.log"
TransferLog "C:/xampp/htdocs/errors/ssl_access.log"
SSLCertificateFile "conf/ssl.crt/certificate.crt"
SSLCertificateKeyFile "conf/ssl.key/private.key"
</VirtualHost>

63
Segunda Etapa | Sistemas de Información Gerencial

Donde el Puerto 80 es para http y el puerto 443 es para https.

Paso 4: Para configurar la base de datos ir a la carpeta webGerenciales, ubicada en la carpeta htdocs
de la carpeta de xampp. Ir a la carpeta de servicios y luego a la carpeta de funciones.

Al abrir el archivo conexión, nos encontramos con las dos primeras líneas de código que son las que
hacen la conexión con la base de datos.

Esta primera línea hace referencia a la conexión con la base de datos transaccional.

$mysqliUno=new mysqli("localhost","usuario2","asd123","inbakcar"

Y esta segunda línea hace referencia a la conexión con la base de datos gerencial.

$mysqliDos=new mysqli("localhost","usuario2","asd123","dbgerencial");

Desinstalación del Sistema


Requisitos y recomendaciones previas

Antes de proceder a desinstalar, primeramente, se procede a hacer un respaldo de los datos y un


respaldo de la versión funcional del sistema, para que, al momento de querer volver a instalar el
sistema en otro servidor, los datos se conserven íntegros, así como también la versión del sistema.

Para hacer un backup de la base de datos, se puede usar la función de backup del sistema o
phpMyAdmin para crear el backup.

Se selecciona la base de datos luego se le da la opción exportar para poder generar el archivo, el cual
puede ser .sql o de otro tipo de extensión.

Eliminación de las bases de datos y usuarios

1- Encender los servidores de apache y mysql en xamp

64
Segunda Etapa | Sistemas de Información Gerencial

2- Acceder a la ruta de php myadmin: http://localhost/phpmyadmin/

3- Seleccionar la base de datos.

4- Dar clic en operaciones.

5- Dar clic en eliminar base de datos

Seguir los mismos pasos para ambas bases de datos gerencial y transaccional.

Eliminar configuración y archivos del sistema

Por ser un sistema creado para ambiente web para desinstalarlo lo único que debemos hacer es
borrar la carpeta donde se encuentra la aplicación:

1- Borrar la carpeta C:\xampp\htdocs\webGerenciales y borrar la carpeta completa.

2- Ir a la papelera de reciclaje y borrar la carpeta del sistema que está en la papelera.

3- Ir al directorio del disco local (C:) y buscar la carpeta C:\xampp\apache\conf\extra, buscar el


archivo httpd-vhosts.conf que contiene la información de la ruta del sistema y la configuración del
servidor virtual dentro del archivo eliminar las líneas de código siguientes:

<VirtualHost *:80>

DocumentRoot "C:\xampp\htdocs\webGerenciales"

ServerAlias *.sistemaGerencial.com.local

</VirtualHost>

<VirtualHost *:443>

DocumentRoot "C:\xampp\htdocs\webGerenciales"

ServerAdmin alex.uceda@hotmail.com

ServerName sistemaGerencial.com.local:443

ServerAlias sistemaGerencial.com.local

SSLEngine on

ErrorLog "C:/xampp/htdocs/errors/ssl_error.log"

TransferLog "C:/xampp/htdocs/errors/ssl_access.log"

SSLCertificateFile "conf/ssl.crt/certificate.crt"

SSLCertificateKeyFile "conf/ssl.key/private.key"

</VirtualHost>

65
Segunda Etapa | Sistemas de Información Gerencial

Implementación
Requerimientos DE RECURSOS HUMANOS

Recurso humano del equipo de trabajo


Este equipo estará conformado por los creadores del Sistema Gerencial, quienes nos encargaremos
de la instalación y la capacitación de los usuarios. Los puestos que ocuparemos serán:

➢ PROGRAMADOR.
DATOS GENERALES.
Denominación del Puesto: Programador del SIG
Misión del puesto: Mantener el sistema funcionando correctamente y ser capaz de desarrollar
nuevas funciones.
REQUISITOS DEL PUESTO.
• Conocimiento de SQL y bases de datos relacionales.
• Manejo de bases de datos en SQL Server.
• Creación de aplicaciones en C#.
• Cumplimiento de estándares.
• Experiencia en programación orientada a objetos.
Formación académica: Estudiante de Ingeniería Informática min. 4ª año o graduado de carrera
a fin.
Experiencia previa: Configuración y mantenimiento de aplicaciones en entorno Windows al
menos 1 proyecto.
COMPETENCIAS DEL PROYECTO.
• Toma de decisiones.
• Resolución de problemas.
• Compromiso.

➢ CAPACITADOR.

DATOS GENERALES.
Denominación del Puesto: Capacitador.
Misión del puesto: Instruir a los usuarios en el uso del sistema anticipándose a sus inquietudes.
REQUISITOS DEL PUESTO.
• Conocimiento del SIG para apoyar la gestión de compra, importación y venta de
Transportes Stella.
• Capacidad de expresión oral.
Formación académica: Estudiante de Ingeniería Informática min. 4ª año o graduado de carrera
a fin.
Experiencia previa: Experiencia en el manejo de sistemas elaborados para el SO Windows y
en el trato de usuarios.
COMPETENCIAS DEL PROYECTO.
• Liderazgo.

66
Segunda Etapa | Sistemas de Información Gerencial

• Empatía.
• Motivación.
• Compromiso.

Recurso humano de usuarios


Los usuarios que utilizaran el Sistema de Información Gerencial son tres: El Administrador
Informático, Usuarios tácticos y Usuarios estratégicos.

➔ Administrador Informático: Se encargará de las especificaciones técnicas del Sistema de


Información Gerencial por lo que tendrá privilegios de administrador y responsabilidades de
información que solo él podrá manejar. Debe cumplir el siguiente perfil:

DATOS GENERALES.
Denominación del Puesto: Administrador Informático
Misión del puesto: Crear el entorno adecuado para que los usuarios hagan pleno uso del
sistema.
REQUISITOS DEL PUESTO.
• Administrador de Proyectos.
• Despliegue de base de datos en SQL Server.
• Instalación y configuración del aplicativo en Windows.
• Mantenimiento de sistemas computacionales.
• Administración de backups de la base de datos
Formación académica: Estudiante de Ingeniería Informática min. 4ª año o graduado de carrera
a fin.
Experiencia previa: Configuración y mantenimiento de aplicaciones en entorno Windows al
menos 1 proyecto.
COMPETENCIAS DEL PROYECTO.
• Toma de decisiones.
• Capacidad de análisis.
• Comunicación.
• Compromiso.

➔ Usuario Estratégico: éste tomará las decisiones más importantes dentro de la organización,
tiene acceso a todos los informes y al backups de la base de datos gerenciales.

USUARIO ESTRATEGICO
Cargo: Dueño, director de la compañía
Educación Conocimientos intermedios de
computación, Administrador de
empresas.
Descripción
El señor Juan Gonzales deberá tomar decisiones sobre el proceso de traslado de los
lotes de automóviles que se importan desde el extranjero, para el cual el tendrá
acceso a todos los informes y podrá obtener el backups de la base de datos
Gerenciales y Transaccional

67
Segunda Etapa | Sistemas de Información Gerencial

➔ Usuario Táctico: El contador de la organización se ha identificado como el usuario táctico


para el Sistema de Información Gerencial, este tendrá acceso solo a generar los informes en
la fecha que lo solicite.

USUARIO Táctico
Cargo: Contador General
Educación Conocimientos intermedios de
computación, Administrador de
Finanzas, o carreras afines.
Descripción
El señor Jilberto Holla es el contador de la empresa, en el sistema de información
gerencial podrá generar los reportes relacionados a presupuestos, resumen de gastos y
ganancias que generan las operaciones de traslado, importación y venta de
automóviles.

68
Segunda Etapa | Sistemas de Información Gerencial

Plan de trabajo

Se muestra una lista de actividades a realizar para la ejecución de nuestro plan de trabajo para la
implementación del Sistema de Información Gerencial.
Actividad Duración Responsable
(días)
1. Preparación del equipo servidor:
a. Instalación o Actualización del Sistema
Operativo Requerido para el
funcionamiento de la aplicación.
b. Verificación de acceso al servidor • Administrador
1
desde las maquinas cliente. Informático
c. Verificación de Microsoft Office 2010
para la exportación de reportes
d. Configuración de una impresora a la
red interna de la organización.
2. Instalación del Sistema de Información
Gerencial para el apoyo en la gestión de
Compra, importación y venta de • Administrador
Transportes Stella. Informático
1
a. Configuración de la Base de datos y el • Equipo de Trabajo
despliegue de este.
b. Instalación del SIG en cada máquina
cliente.
3. Verificación del funcionamiento adecuado
del SIG
a. Test de funciones para usuario • Administrador
administrador 2 Informático
b. Test de funciones para usuario • Equipo de Trabajo
estratégico
c. Test de funciones para usuario táctico.
4. Capacitación de personal involucrado
3 Equipo de Trabajo
5. Seguimiento y Control 15 Equipo de Trabajo

69
Segunda Etapa | Sistemas de Información Gerencial

Plan capacitación

El plan de Capacitación se realizará en 3 sesiones para la explicación y el manejo del SIG.


Sesión Duración Descripción
- Se espera generar confianza para el
uso del sistema gerencial.
- Se hará una explicación de los
Capacitación para módulos creados, la gestión de los
6 horas
Administrador Informático usuarios del sistema, claves de acceso
y configuraciones generales del SIG.
- Soporte y aclaración de dudas sobre la
funcionalidad del sistema.
Capacitación para Usuario - Se expondrá las generalidades del
Estratégico sistema.
- La muestra funcional del sistema se
realizará en 45 minutos, mostrando a
3 horas detalle a detalle cada una de las
funciones del sistema en ejecución
- Aclaración de dudas sobre la
funcionalidad a nivel estratégico del
sistema.
Capacitación para usuario - Explicación de las generalidades del
Táctico sistema
- Demostración de las funciones a las
3 horas que podrá acceder este usuario y los
reportes que podrá generar.
- Aclaración de dudas referentes a la
funcionalidad del sistema.

Costos de implementación

Costos Unidad Cantidad Costo Unitario Costo Total


Pasajes
Por Día 22 $0.50 $11.00
Terrestres
Viáticos H/día 22 $ 4.50 $99.00
Separatas Unidad 4 $ 12.00
$3.00
anilladas
Salario de H/ día 18
Equipo de $17.50 $315.00
Trabajo
Salario de H/día 12
$22.50 $270.00
capacitador
Imprevistos % 25 $30.50
TOTAL $737.50

Beneficios Valor
Reducción de tiempo $350.00
Información oportuna $250.00

70
Segunda Etapa | Sistemas de Información Gerencial

Accesibilidad $200.00
Otros beneficios $250.00
Total $1,050.00

Retorno de la Inversión: ROI = BENEFICIOS/COSTOS= $1,050.00/$737.5 = 1.423%

Estructura de Instalación

Seguimiento y control

Como Garantía de nuestro trabajo se dará un margen de un mes para resolver cualquier problema
que presente el SIG en cuestión de bugs y funcionalidad, al terminar este plazo pasara a ser un
servicio de consultoría el cual tendrá un costo por servicios.

Dentro del mes de garantía se estará monitoreando la puesta en marcha del Sistema de Información
Gerencial para que funciones con lo requerido y poder declarar la implementación finalizada.

Daremos seguimientos a las configuraciones del sistema mediante un registro de eventos e


incidencias que se den en este plazo, podrán reportarnos por correo los inconvenientes que se les ha
presentado y les daremos las correcciones factibles para estas fallas.

71
Segunda Etapa | Sistemas de Información Gerencial

Formato para Formulario de Registro de Eventos o Incidencias

TRANSPORTES STELLA S.A. DE C.V.


Registro de Incidencias en el Sistema de Información Gerencial

Fecha y hora

Persona encargada

Acción

Descripción:

Resultado

Comentarios:

Firma

72
Segunda Etapa | Sistemas de Información Gerencial

Elementos del prototipo


Pantalla de login:

Pantallas de menú.
Las pantallas de menú se realizaron bajo singleplayer, las 3 pantallas de menú se encuentran en una
misma pantalla para manejar la configuración de una manera más rápido evitando tiempos de carga.

73
Segunda Etapa | Sistemas de Información Gerencial

Pantalla de captura de datos de usuarios de SIG.


Se tiene usuarios fijos en parte por seguridad de la empresa, pero se tiene un reporte de historial de
registro de solicitudes donde aparecen un listado de la bitácora de los pedidos de informes
solicitados por cada usuario.

Pantalla de ejecución del ETL.


Se muestra la información de reportes que se está extrayendo de los informes, obteniendo la fecha
del informe y el tipo.

74
Segunda Etapa | Sistemas de Información Gerencial

También se pueden realizar tareas programadas a través del Windows para el cual se debe ejecutar
el “Programador de tareas” y seleccionar “Crear tarea básica…”.

75
Segunda Etapa | Sistemas de Información Gerencial

Colocar el nombre, en este caso “sincronizador”; y dar en Siguiente

Seleccionar cuando se desea que se inicie la tarea.

76
Segunda Etapa | Sistemas de Información Gerencial

Como se selección diariamente se mostrar la siguiente opción (estas pueden cambiar dependiendo
la selección de inicio de la tarea), donde se selecciona día de inicia, hora y cuantos días desea que se
repita la tarea.

Buscar el archivo “RespladoDBG.bat” para ser ejecutado el sincronizador y las actividades quedaran
programadas a realizar.

77
Segunda Etapa | Sistemas de Información Gerencial

Al ejecutar el comando php sincornizador.php se puede observar los informes que han sido
programados.

78
Segunda Etapa | Sistemas de Información Gerencial

Pantallas de parámetros.
Solicitando datos para el informe 1

Solicitando datos para el informe 3

79
Segunda Etapa | Sistemas de Información Gerencial

Reporte táctico:

Reporte Estratégico:

80
Segunda Etapa | Sistemas de Información Gerencial

81
Segunda Etapa | Sistemas de Información Gerencial

Conclusiones
Los sistemas de información gerencial son muy importantes para el desarrollo de toda empresa,
porque brindan herramientas muy útiles que apoyan a los usuarios del negocio táctico y estratégico,
en la toma de decisiones para conducir de la manera más acertada la empresa que manejan, un
usuario del negocio ya sea táctico o estratégico en la labor de toma de decisiones pues necesita de
información pertinente ya sea generada por un sistema de información gerencial o información
recabada manualmente.

Se utilizaron los datatables el cual se pueden utilizar tanto en tablas generadas con html o con
cualquier lenguaje de programación como php o asp.net, debido a que Jquery es un framework
programado en Javascript es multiplataforma y compatible con la mayoría de los navegadores,
dando beneficios como ordenar alfabéticamente o numéricamente columnas de datos de la tabla
html, paginar resultados con números de páginas y filtrar cada columna por algún criterio.

Para mayor control de las fechas de los zarpes y desembarque se implementó “FullCalendar” para
mostrar las fechas en los calendarios, es la magnífica presentación de eventos en un calendario cuyo
formato es bastante personalizable (vista diaria, semanal y mensual) y su personalizable integración
con interacción del usuario su uso es tan sencillo facilitando a los usuarios a realizar búsquedas por
medio del calendario.

De igual forma el uso de la tecnología Ajax Mejor experiencia de usuario permite que las páginas se
modifiquen sin tener que volver a cargarse, dándole al usuario la sensación de que los cambios se
producen instantáneamente. Este comportamiento es propio de los programas de escritorio a los
que la mayoría de los usuarios están más acostumbrados. La experiencia se vuelve mucho más
interactiva; Optimización de recursos al no recargarse la página se reduce el tiempo implicado en
cada transacción; También se utiliza menos ancho de banda y alta compatibilidad es soportado por
casi todas las plataformas Web.

82
Segunda Etapa | Sistemas de Información Gerencial

Recomendaciones

• Para el buen funcionamiento del Sistema Informático, se sugiere hacer uso de los manuales
proporcionados por el equipo de desarrollo.
• Usar el sistema de información gerencial, ya que está diseñado para cubrir las necesidades
de la empresa, los manuales ayudarán a que el uso del mismo sea menos complicado.
• En el área técnica y estratégica son de vital importancia para toda institución, con este
sistema se pretende facilitar la toma de decisiones para asegurar un funcionamiento óptimo
de la empresa a lo largo de mucho tiempo.

83
Segunda Etapa | Sistemas de Información Gerencial

Bibliografía
[1] JavaScript Calendar (2019) [En línea] Disponible en: https://fullcalendar.io/

[2] Manual de PHP [En línea] Disponible en: https://www.php.net/manual/es/index.php

[3] Sistemas de Información Gerencial (2018) [En línea] Disponible en: https://www.tecnologias-
informacion.com/sigerencial.html

[4] Curso de PHP y MYSQL (2015) Disponible en:


https://www.youtube.com/watch?v=I75CUdSJifw&list=PLU8oAlHdN5BkinrODGXToK9oPAlnJxmW_

[5] PHP y MYSQL https://www.youtube.com/watch?v=pn2v9lPakHQ

84

También podría gustarte