Skip to content

AyuntamientoVeracruz/CeroFilas

Repository files navigation

Quality Gate Status

Proyecto de generación, confirmación y evaluación de citas programadas y turnos para la atención de trámites realizados por el Gobierno de la Ciudad de Veracruz.

Acerca de Cero Filas

Cero Filas nace por iniciativa del H. Ayuntamiento de Veracruz en la administración 2018 - 2021 encabezada por el Maestro Fernando Yunes Márquez, Presidente Municipal Constitucional, el objetivo de dicha iniciativa es que a través de herramientas digitales, se le dé la oportunidad al ciudadano de escoger fecha y hora para asistir a la realización de un trámite y con ello:

  • Evitar las largas filas para la atención a la realización de trámites
  • Disminuir el tiempo de espera del ciudadano para ser atendido
  • Eficientar el proceso del tramitador para atender a un ciudadano

La solicitud de una cita se lleva acabo a través de la plataforma Cero Filas, ingresando a cerofilas.veracruzmunicipio.gob.mx

.

El tramitador tendrá acceso a la plataforma ingresando a cerofilas.veracruzmunicipio.gob.mx/sistema, es aquí donde podrá visualizar las citas y turnos pasados, citas y turnos actuales y los futuros. Dentro de esta plataforma, el tramitador podrá crear un historial del ciudadano o acceder a él a través de la CURP.

Para mejorar la atención del tramitador al ciudadano, se le da al tramitante la herramienta de la evaluación, esta se realizará una vez que haya concluido la atención, y llegará mediante correo electrónico, aquí podrá calificar la atención y dejar comentarios acerca de la atención recibida y su experiencia al realizar el trámite.

De la misma manera, se cuenta con un administrador de oficina (ingresando al mismo sistema) que podrá gestionar los catálogos de trámites y los tramitadores que desempeñarán ese trámite, así como sus horarios de atención de cada uno de ellos. Podrán gestionar las ausencias de los tramitadores para planificar de mejor manera la atención al ciudadano.

Se trata de una aplicación backend y frontend, construido con el framework Laravel 5.5 (PHP 7.1) usando como gestor de base de datos MySQL (5.0+). Tanto vistas, modelo y controlador se usaron a plenitud con el framework Laravel. Contiene formularios convencionales e invocaciones por ajax a backend con información que tiene acceso a base de datos.

Base de datos

Se hace uso de una base de datos para almacenar la información de las citas y los turnos en las entidades: turnos, citas. Para llegar a estas entidades, se necesitan tener catálogos de: usuarios, tramites, oficinas, dependencias. Y algunas entidades de relación adicionales: configuraciones, holdingcitas, tramitesxoficinas, tramitesxusers, valoraciones, ausencias, videos y marquesinas.

A continuación se explica cada una de estas entidades.

Tabla de citas

Tabla llamada citas. Esta entidad almacena las citas programadas por los visitantes del portal. Hace uso de las entidades catálogo como tramites, oficinas.

Nombre de la columna Columna obligatoria / opcional Tipo de dato Detalle
id_cita Obligatoria Numerico¹ Identificador autonumerico de la cita
tramite_id Obligatoria Numerico¹ Idenfificador de trámite de la tabla "tramites"
oficina_id Obligatoria Numerico¹ Idenfificador de oficina de la tabla "oficinas"
fechahora Obligatoria Fechahora Fecha y hora de la cita
nombre_ciudadano Obligatoria Texto Nombre(s) del ciudadadno que registra la cita
appaterno_ciudadano Obligatoria Texto Apellido paterno del ciudadano
apmaterno_ciudadano Obligatoria Texto Apellido materno del ciudadano
email Opcional Texto Email del ciudadano
curp Obligatoria Texto CURP del ciudadano
telefono Opcional³ Texto Teléfono del ciudadano
folio Opcional Texto Folio único de la cita de 8 caracteres
ip Opcional Texto IP de la computadora que registra la cita
statuscita Opcional Texto² Estatus de la cita (null or cancelada)
created_by Opcional Numerico¹ Identificador de usuario creador del registro
created_at Opcional Marca de tiempo Marca de tiempo de creación del registro
updated_by Opcional Numerico¹ Identificador de usuario modificador del registro
updated_at Opcional Marca de tiempo Marca de tiempo de modificación del registro

¹ Tener en cuenta que es importante formatear los numeros de forma tal que el separador decimal sea . y no deben contar con separadores de miles, comillas, caracter de moneda, ni otros caracteres especiales.

² Los estatus de la cita son: cancelada, null. Cuando una cita es creada, no tiene un estatus, solo es modificada al ser cancelada.

Tabla de turnos

Tabla llamada turnos. Esta entidad almacena los turnos (check-in de ciudadanos), es cuando un ciudadano con cita o sin cita se presenta en las oficinas y marca su presencia, si trae cita, entonces trae consigo un folio de cita o QR. Hace uso de las entidades catálogo como tramites, oficinas, citas, users.

Nombre de la columna Columna obligatoria / opcional Tipo de dato Detalle
id_turno Obligatoria Numerico¹ Identificador autonumerico del turno
cita_id Opcional Numerico¹ Idenfificador de cita de la tabla "citas"
oficina_id Obligatoria Numerico¹ Idenfificador de oficina de la tabla "oficinas"
user_id Opcional Numerico¹ Idenfificador de tramitador de la tabla "users"
tramite_id Obligatoria Numerico¹ Idenfificador de trámite de la tabla "tramites"
fechahora_inicio Opcional Fechahora Fecha y hora de inicio de atención del turno
fechahora_fin Opcional Fechahora Fecha y hora de fin de atención del turno
observaciones Opcional TextoLargo Observaciones registradas por el tramitador sobre la atención del turno
nombre_ciudadano Opcional Texto Nombre(s) del ciudadadno que registra el turno
curp Obligatoria Texto CURP del ciudadano
email Opcional Texto Email del ciudadano
estatus Obligatoria Enum² Estatus del turno
folio Obligatoria Texto Folio único del turno de 8 caracteres
tiempoaproxmin Obligatoria Numerico¹ Tiempo aproximado en minutos en que será atendido el turno
created_by Opcional Numerico¹ Identificador de usuario creador del registro
created_at Opcional Marca de tiempo Marca de tiempo de creación del registro
updated_by Opcional Numerico¹ Identificador de usuario modificador del registro
updated_at Opcional Marca de tiempo Marca de tiempo de modificación del registro

¹ Tener en cuenta que es importante formatear los numeros de forma tal que el separador decimal sea . y no deben contar con separadores de miles, comillas, caracter de moneda, ni otros caracteres especiales.

² Los estatus del turno son: creado, enproceso, finalizado, cancelado. Estos estatus van cambiando conforme acciones del sistema.

Tabla de usuarios

Tabla llamada users. Esta entidad almacena los usuarios del sistema (tramitadores, administrador de oficina, kiosko, turnera y super administrador). Cada tipo de usuario cuenta con diferentes acciones dentro del sistema. Hace uso de las entidades catálogo como oficinas.

Nombre de la columna Columna obligatoria / opcional Tipo de dato Detalle
id_user Obligatoria Numerico¹ Identificador autonumerico del usuario
tipo_user Obligatoria Enum² Tipo de usuario del sistema
estatus Obligatoria Enum³ Estatus del usuario
email Opcional Texto Email del usuario con el que hara login en el sistema
password Opcional Texto Password del usuario con el que hara login en el sistema
nombre Obligatoria Texto Nombre(s) del usuario
oficina_id Obligatoria Numerico¹ Idenfificador de oficina de la tabla "oficinas"
disponible_turno Opcional Enum⁴ Indica si el usuario esta disponible para atender turnos
ventanilla Opcional Texto Clave alfanumerica para indicar la ventanilla donde atiende el usuario los turnos
REMEMBER_TOKEN Opcional Texto¹ Token de sesión del usuario
created_by Opcional Numerico¹ Identificador de usuario creador del registro
created_at Opcional Marca de tiempo Marca de tiempo de creación del registro
updated_by Opcional Numerico¹ Identificador de usuario modificador del registro
updated_at Opcional Marca de tiempo Marca de tiempo de modificación del registro

¹ Tener en cuenta que es importante formatear los numeros de forma tal que el separador decimal sea . y no deben contar con separadores de miles, comillas, caracter de moneda, ni otros caracteres especiales.

² Los tipos de usuario del sistema son: superadmin, admin_oficina, kiosko, tramitador, turnera. El superadmin permite administrar todos los usuarios del sistema, el adminoficina administra los usuarios y tramites de su jurisdiccion, kiosko permite recibir a los ciudadanos por turno o cita, turnera nos permite ver en pantalla los turnos y su asignación a ventanilla de atención.

³ Los usuarios pueden estar activos o inactivos, un usuario inactivo no puede iniciar sesión en el sistema, ni es tomado en cuenta para los calculos de los horarios disponibles de una oficina.

⁴ Un usuario puede (si) o no (no) estar disponible para atender un turno.

Tabla de tramites

Tabla llamada tramites. Esta entidad almacena los tramites del sistema. Un tramite puede estar asignado a una dependencia (una dependencia puede tener 1 o mas oficinas). Hace uso de las entidades catálogo como dependencias.

Nombre de la columna Columna obligatoria / opcional Tipo de dato Detalle
id_tramite Obligatoria Numerico¹ Identificador autonumerico del tramite
nombre_tramite Obligatoria Texto Nombre del tramite
requisitos Opcional Texto Requisitos del tramite
tiempo_minutos Obligatoria Entero Tiempo en minutos que dura el tramite
costo Obligatoria Texto Costo del tramite, puede ser texto
codigo Obligatoria Texto Codigo unico del tramite
dependencia_id Opcional Numerico¹ Idenfificador de dependencia de la tabla "dependencias"
warning_message Opcional Texto Mensaje de alerta al momento de desplegar requisitos
created_by Opcional Numerico¹ Identificador de usuario creador del registro
created_at Opcional Marca de tiempo Marca de tiempo de creación del registro
updated_by Opcional Numerico¹ Identificador de usuario modificador del registro
updated_at Opcional Marca de tiempo Marca de tiempo de modificación del registro

¹ Tener en cuenta que es importante formatear los numeros de forma tal que el separador decimal sea . y no deben contar con separadores de miles, comillas, caracter de moneda, ni otros caracteres especiales.

Tabla de oficinas

Tabla llamada oficinas. Esta entidad almacena las oficinas. Una oficina forma parte de una dependencia, esto quiere decir, que una dependencia puede tener mas de una oficina. Hace uso de las entidades catálogo como dependencias.

Nombre de la columna Columna obligatoria / opcional Tipo de dato Detalle
id_oficina Obligatoria Numerico¹ Identificador autonumerico de la oficina
nombre_oficina Obligatoria Texto Nombre de la oficina
slug Opcional Texto Slug del nombre la oficina
dependencia_id Obligatoria Numerico¹ Idenfificador de dependencia de la tabla "dependencias"
coords Obligatoria Texto Coordenadas de la oficina, formato: lat, long
direccion Opcional Texto Direccion en texto de la oficina
created_by Opcional Numerico¹ Identificador de usuario creador del registro
created_at Opcional Marca de tiempo Marca de tiempo de creación del registro
updated_by Opcional Numerico¹ Identificador de usuario modificador del registro
updated_at Opcional Marca de tiempo Marca de tiempo de modificación del registro

¹ Tener en cuenta que es importante formatear los numeros de forma tal que el separador decimal sea . y no deben contar con separadores de miles, comillas, caracter de moneda, ni otros caracteres especiales.

Tabla de dependencias

Tabla llamada dependencias. Esta entidad almacena las dependencias. Una oficina forma parte de una dependencia, esto quiere decir, que una dependencia puede tener mas de una oficina. Solo el administrador de la base de datos puede crear una dependencia.

Nombre de la columna Columna obligatoria / opcional Tipo de dato Detalle
id_dependencia Obligatoria Numerico¹ Identificador autonumerico de la dependencia
nombre_dependencia Obligatoria Texto Nombre de la dependencia
created_by Opcional Numerico¹ Identificador de usuario creador del registro
created_at Opcional Marca de tiempo Marca de tiempo de creación del registro
updated_by Opcional Numerico¹ Identificador de usuario modificador del registro
updated_at Opcional Marca de tiempo Marca de tiempo de modificación del registro

¹ Tener en cuenta que es importante formatear los numeros de forma tal que el separador decimal sea . y no deben contar con separadores de miles, comillas, caracter de moneda, ni otros caracteres especiales.

Tabla de configuraciones

Tabla llamada configuraciones. Esta entidad almacena las configuraciones como lo es la API key de google maps. Solo el administrador de la base de datos puede crear una dependencia.

Nombre de la columna Columna obligatoria / opcional Tipo de dato Detalle
id_configuracion Obligatoria Numerico¹ Identificador autonumerico de la configuracion
service_name Obligatoria Texto Nombre del servicio
service_key Obligatoria Texto Key del servicio

¹ Tener en cuenta que es importante formatear los numeros de forma tal que el separador decimal sea . y no deben contar con separadores de miles, comillas, caracter de moneda, ni otros caracteres especiales.

Tabla de reserva de citas

Tabla llamada holdingcitas. Esta entidad almacena la reserva de la cita, cuando un ciudadano en el portal esta seleccionando una fecha esta fecha es retenida para que no pueda ser usada por al menos 5 minutos si es que no fue seleccionada al final. Hace uso de las entidades catálogo como tramites, oficinas. Tabla de almacenamiento temporal.

Nombre de la columna Columna obligatoria / opcional Tipo de dato Detalle
id_holdingcita Obligatoria Numerico¹ Identificador autonumerico de la reserva de cita
tramite_id Opcional Numerico¹ Idenfificador de trámite de la tabla "tramites"
oficina_id Obligatoria Numerico¹ Idenfificador de oficina de la tabla "oficinas"
fechahora Obligatoria Fechahora Fecha y hora de la cita
folio Obligatoria Texto Folio único de la reserva de cita de 8 caracteres
created_at Opcional Marca de tiempo Marca de tiempo de creación del registro
updated_at Opcional Marca de tiempo Marca de tiempo de modificación del registro

¹ Tener en cuenta que es importante formatear los numeros de forma tal que el separador decimal sea . y no deben contar con separadores de miles, comillas, caracter de moneda, ni otros caracteres especiales.

Tabla de tramites por oficina

Tabla llamada tramitesxoficinas. Esta entidad almacena la relación de tramites y oficina. Hace uso de las entidades catálogo como tramites, oficinas.

Nombre de la columna Columna obligatoria / opcional Tipo de dato Detalle
id_tramitesxoficinas Obligatoria Numerico¹ Identificador autonumerico de la relacion tramite x oficina
tramite_id Obligatoria Numerico¹ Idenfificador de trámite de la tabla "tramites"
oficina_id Obligatoria Numerico¹ Idenfificador de oficina de la tabla "oficinas"
apply_date Opcional Fechahora Fecha y hora de la cita
created_by Opcional Numerico¹ Identificador de usuario creador del registro
created_at Opcional Marca de tiempo Marca de tiempo de creación del registro
updated_by Opcional Numerico¹ Identificador de usuario modificador del registro
updated_at Opcional Marca de tiempo Marca de tiempo de modificación del registro

¹ Tener en cuenta que es importante formatear los numeros de forma tal que el separador decimal sea . y no deben contar con separadores de miles, comillas, caracter de moneda, ni otros caracteres especiales.

Tabla de tramites por usuario

Tabla llamada tramitesxusers. Esta entidad almacena la relación de tramites y usuarios. Hace uso de las entidades catálogo como tramites, users.

Nombre de la columna Columna obligatoria / opcional Tipo de dato Detalle
id_tramitesxusers Obligatoria Numerico¹ Identificador autonumerico de la relacion tramite x usuario
tramite_id Obligatoria Numerico¹ Idenfificador de trámite de la tabla "tramites"
user_id Obligatoria Numerico¹ Idenfificador de usuario de la tabla "users"
lunes_inicio Opcional Tiempo Hora de inicio el dia lunes de ese tramite y usuario
lunes_fin Opcional Tiempo Hora de fin el dia lunes de ese tramite y usuario
martes_inicio Opcional Tiempo Hora de inicio el dia martes de ese tramite y usuario
martes_fin Opcional Tiempo Hora de fin el dia martes de ese tramite y usuario
miercoles_inicio Opcional Tiempo Hora de inicio el dia miercoles de ese tramite y usuario
miercoles_fin Opcional Tiempo Hora de fin el dia miercoles de ese tramite y usuario
jueves_inicio Opcional Tiempo Hora de inicio el dia jueves de ese tramite y usuario
jueves_fin Opcional Tiempo Hora de fin el dia jueves de ese tramite y usuario
viernes_inicio Opcional Tiempo Hora de inicio el dia viernes de ese tramite y usuario
viernes_fin Opcional Tiempo Hora de fin el dia viernes de ese tramite y usuario
sabado_inicio Opcional Tiempo Hora de inicio el dia sabado de ese tramite y usuario
sabado_fin Opcional Tiempo Hora de fin el dia sabado de ese tramite y usuario
created_by Opcional Numerico¹ Identificador de usuario creador del registro
created_at Opcional Marca de tiempo Marca de tiempo de creación del registro
updated_by Opcional Numerico¹ Identificador de usuario modificador del registro
updated_at Opcional Marca de tiempo Marca de tiempo de modificación del registro

¹ Tener en cuenta que es importante formatear los numeros de forma tal que el separador decimal sea . y no deben contar con separadores de miles, comillas, caracter de moneda, ni otros caracteres especiales.

Tabla de evaluaciones

Tabla llamada valoraciones. Esta entidad almacena la evaluación solicitad al ciudadano respecto a la atención del tramitador, y a su vez, esta misma almacena la calificación otorgada en caso de ser realizada la evaluación, esto derivado del turno de atención. Hace uso de las entidades catálogo como turnos.

Nombre de la columna Columna obligatoria / opcional Tipo de dato Detalle
id_valoracion Obligatoria Numerico¹ Identificador autonumerico de la evaluacion
turno_id Obligatoria Numerico¹ Idenfificador de turno de la tabla "turnos"
folio Obligatoria Texto Folio único de la evaluacion de 8 caracteres
estrellas Opcional Tiempo Estrellas del ciudadano hacia el tramitador por la atencion recibida
respuesta1 Opcional Tiempo Respuesta 1 de la atencion recibida
respuesta2 Opcional Tiempo Respuesta 2 de la atencion recibida
observaciones Opcional Tiempo Texto libre de observaciones de la atención brindada
created_by Opcional Numerico¹ Identificador de usuario creador del registro
created_at Opcional Marca de tiempo Marca de tiempo de creación del registro
updated_by Opcional Numerico¹ Identificador de usuario modificador del registro
updated_at Opcional Marca de tiempo Marca de tiempo de modificación del registro

¹ Tener en cuenta que es importante formatear los numeros de forma tal que el separador decimal sea . y no deben contar con separadores de miles, comillas, caracter de moneda, ni otros caracteres especiales.

Tabla de ausencias

Tabla llamada ausencias. Esta entidad almacena las ausencias que cada tramitador puede tener. El administrador de oficina gestiona las vacaciones (que es la disponibilidad que tendra el tramitador a futuro de sus tramites). Hace uso de las entidades catálogo como users.

Nombre de la columna Columna obligatoria / opcional Tipo de dato Detalle
id_ausencia Obligatoria Numerico¹ Identificador autonumerico de la ausencia
user_id Obligatoria Numerico¹ Idenfificador de usuarios de la tabla "users"
fecha_inicio Obligatoria Texto Fecha de inicio de la ausencia del usuario
fecha_fin Obligatoria Tiempo Fecha de fin de la ausencia del usuario
motivo Opcional Tiempo Motivo de la ausencia del usuario
created_by Opcional Numerico¹ Identificador de usuario creador del registro
created_at Opcional Marca de tiempo Marca de tiempo de creación del registro
updated_by Opcional Numerico¹ Identificador de usuario modificador del registro
updated_at Opcional Marca de tiempo Marca de tiempo de modificación del registro

¹ Tener en cuenta que es importante formatear los numeros de forma tal que el separador decimal sea . y no deben contar con separadores de miles, comillas, caracter de moneda, ni otros caracteres especiales.

Tabla de videos

Tabla llamada videos. Esta entidad almacena los videos que cada oficina pasara en su pantalla si hace uso de una pantalla de espera "Turnera". Solo el administrador de la base de datos puede crear un video.

Nombre de la columna Columna obligatoria / opcional Tipo de dato Detalle
id_video Obligatoria Numerico¹ Identificador autonumerico del video
urlvideo Obligatoria Texto URL del video dentro de la carpeta public_html/videos
oficina_id Obligatoria Numerico¹ Idenfificador de oficina de la tabla "oficinas"
orden Obligatoria Numerico¹ Orden de secuencia del video por oficina

¹ Tener en cuenta que es importante formatear los numeros de forma tal que el separador decimal sea . y no deben contar con separadores de miles, comillas, caracter de moneda, ni otros caracteres especiales.

Tabla de marquesinas

Tabla llamada marquesinas. Esta entidad almacena las marquesinas que cada oficina pasara en su pantalla si hace uso de una pantalla de espera "Turnera". Solo el administrador de la base de datos puede crear una marquesina.

Nombre de la columna Columna obligatoria / opcional Tipo de dato Detalle
id_marquesina Obligatoria Numerico¹ Identificador autonumerico de la marquesina
textomarquesina Obligatoria Texto Texto de la marquesina
oficina_id Obligatoria Numerico¹ Idenfificador de oficina de la tabla "oficinas"

¹ Tener en cuenta que es importante formatear los numeros de forma tal que el separador decimal sea . y no deben contar con separadores de miles, comillas, caracter de moneda, ni otros caracteres especiales.

Archivos necesarios para el correcto funcionamiento del sitio

Proyecto Laravel

El proyecto Laravel se compone de las siguientes carpetas:

Y también de los siguientes archivos:

Archivo SQL de DB

El archivo SQL de DB es el siguiente:

  • cerofila_db.sql El cual como requisito hay que crear manualmente un registro de usuario de tipo superadmin, con el mail de preferencia, y con un password encriptado ($2y$12$FGFyCBpT6HQ5aEvsx8rClu24ijnYfG9YcwBNhASecS8jxKoGk9FqW) que significa 123456

Archivos publicos

Los archivos publicos estan dentro de la siguiente carpeta:

Instrucciones para desarrolladores

Para realizar modificaciones al sitio actual, realizar los siguientes pasos:

  • Si se desean agregar o modificar las imagenes de la app pública, puede hacerse accediendo a public_html/images
  • Si se desean agregar o modificar las imagenes de la app de administración, puede hacerse accediendo a public_html/sis/images
  • Si se desean agregar o modificar las scripts de js de la app pública, puede hacerse accediendo a public_html/js
  • Si se desean agregar o modificar las scripts de js de la app de administración, puede hacerse accediendo a public_html/sis/js

Adaptación estetica

Para realizar modificaciones de estilos al sitio actual, realizar lo siguiente:

Levantar el proyecto en un ambiente productivo

Requerimientos

Sólo requiere un servidor web que tenga los siguientes servicios:

  • Apache (y opcionalmente tener los los trabajos de Cron activos).
  • MySQL 5 o superior (que tenga habilitada la opción de ejecutar Eventos)
  • PHP 7.1 (con su extensión mysqli activa)

Instalación por primera vez

  1. Clonar el proyecto usando git.
  2. Descomprimir el archivo vendor.zip.
  3. Renombrar el archivo env a .env.
  4. En en su gestor de MySQL de su preferencia, ejecutar el archivo cerofila_db.sql para crear la base de datos en el servidor destino.
  • Insertar un registro en la tabla users con un usuario tipo superadmin con el mail que usará de acceso el administrador del sistema, y con el siguiente password (ya encriptado en md5): $2y$12$FGFyCBpT6HQ5aEvsx8rClu24ijnYfG9YcwBNhASecS8jxKoGk9FqW - que significa: 123456 - posteriormente puede cambiar el password una vez iniciada sesión.
  • Insertar un registro en la tabla configuraciones con el valor para service_name de google_maps, y en service_key el valor de API Key de tu cuenta de google maps.
  • Revisar que este habilitada la opción de ejecutar Eventos de MySQL.
  • Crear un procedimiento con nombre setAssignment con el siguiente contenido:
BEGIN	
   DECLARE finished,finishedusers BOOLEAN DEFAULT FALSE;
   DECLARE idOficina,idUser,idTurno,counter BIGINT DEFAULT 0;
   DECLARE curOficinas CURSOR FOR 
   		SELECT id_oficina FROM oficinas ORDER BY id_oficina ASC;
   DECLARE CONTINUE HANDLER 
   		FOR NOT FOUND SET finished = TRUE;
   OPEN curOficinas;        
   getOficina: LOOP
   
   	FETCH curOficinas INTO idOficina;
   	IF finished THEN 
   		CLOSE curOficinas;
   		LEAVE getOficina;
   	END IF;
   							
   	BLOCKUSERS: BEGIN
   	
   	DECLARE curUsers CURSOR FOR
   			SELECT id_user FROM users WHERE oficina_id=idOficina and disponibleturno="si" and estatus="activo"
   			and id_user not in 
   			(select user_id from turnos where estatus='enproceso' and oficina_id=idOficina) ORDER BY id_user ASC;
   	DECLARE CONTINUE HANDLER
   			FOR NOT FOUND SET finishedusers = TRUE;
   	OPEN curUsers; 
   	getUsers: LOOP
   		
   		FETCH curUsers INTO idUser;   
   											
   		IF finishedusers THEN
   			SET finishedusers = FALSE;
   			CLOSE curUsers;    
   			LEAVE getUsers;
   		END IF;
   		
   		SELECT count(*) into counter
   		FROM turnos 
   		LEFT JOIN tramitesxusers ON tramitesxusers.tramite_id=turnos.tramite_id 
   		WHERE oficina_id=idOficina and turnos.estatus='creado' and Date(turnos.created_at)=CURDATE() and tramitesxusers.user_id=idUser
   		ORDER BY cita_id IS NOT NULL desc, turnos.created_at asc LIMIT 1;
   		
   		IF counter>0 THEN
   			SELECT id_turno INTO idTurno
   			FROM turnos 
   			LEFT JOIN tramitesxusers ON tramitesxusers.tramite_id=turnos.tramite_id 
   			WHERE oficina_id=idOficina and turnos.estatus='creado' and Date(turnos.created_at)=CURDATE() and tramitesxusers.user_id=idUser
   			ORDER BY cita_id IS NOT NULL desc, turnos.created_at asc LIMIT 1;    
   			UPDATE turnos SET user_id=idUser,estatus='enproceso',fechahora_inicio=NOW() 
   			WHERE id_turno = idTurno;
   
   		END IF;				
   		
   	END LOOP getUsers;
   	
   	END BLOCKUSERS;
   		
   END LOOP getOficina;
   
END
  • Crear un evento llamado setAssignment de tipo recurrente que se ejecute cada 5 segundos con fecha de inicio ahora sin fecha de fin, que mande a llamar al procedimiento setAssignment que acabamos de crear.
  • Crear otro evento llamado expireholdingcita de tipo recurrente que se ejecute cada 1 minuto con fecha de inicio ahora sin fecha de fin con el siguiente contenido:
DELETE FROM holdingcitas 
WHERE TIMESTAMPDIFF(MINUTE, created_at , NOW()) > 5
  • Crear otro evento llamado setavailability de tipo recurrente que se ejecute cada 1 día con fecha de inicio día actual 8pm sin fecha de fin con el siguiente contenido:
UPDATE users 
SET disponibleturno='no'
  1. Editar el archivo .env. con el contenido de los datos de conexión a la base de datos recientemente creada (en el apartado DB_DATABASE,DB_USERNAME,DB_PASSWORD). También más abajo en este mismo archivo debemos configurar nuestros datos de conexión al correo que ejecutará envíos.
  2. Crear un folder con el nombre cerofilas en la carpeta raíz del servidor destino (no meter en public_html).
  3. En este folder copiar las carpetas mencionadas (que ya descargamos) en Proyecto Laravel (y la reciente carpeta vendor que se descomprimió).
  4. También en el mismo folder copiar los archivos mencionados (que ya descargamos) en Proyecto Laravel, incluido el reciente archivo .env que editamos con los datos de conexión (ya no incluir la subida de la carpeta vendor.zip). Y en este mismo folder de cerofilas crear las carpeta storage/app/images y storage/framework/sessions.
  5. En la carpeta public_html que descargamos hay un archivo htaccess, renombrar a .htaccess.
  6. Este archivo y todos los demás archivos y carpetas del folder public_html copiarlas a la carpeta public_html del servidor destino.
  7. Para ver que todo marche bien, ejecutar la url del dominio de nuestro servidor destino, veremos la app pública de creación de citas.
  8. Y probar la url del dominio /sistema y usar el usuario que creamos con el password 123456. Deberíamos ingresar a la app de administración. Si es así, ya podemos crear nuestros usuarios, trámites y relaciones.
  9. Opcionalmente, si queremos que el sistema envie recordatorios diarios, debemos agregar a los trabajos de Cron el siguiente comando wget http://urldedominio/sendrecordatorios (donde urldedominio es la url de tu servidor destino), indicando que se ejecute diariamente a las 8am.

Licencia

Este proyecto esta licenciado bajo la Licencia MIT - vea el archivo LICENSE para más detalles.

Autores

About

Cero filas

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published