🏙️ Sistema de Control y Visitas a Vallas - Alcaldía de Cali
Este proyecto es un sistema de software desarrollado para la Alcaldía Distrital de Santiago de Cali con el objetivo de gestionar y controlar las solicitudes de inspección a vallas publicitarias dentro del distrito.
🎯 Descripción del Problema
La Alcaldía necesita un sistema centralizado para registrar solicitudes de control de visitas a vallas. Cada solicitud puede requerir una o varias inspecciones (visitas) por parte de un funcionario (visitador).
El sistema debe permitir al visitador registrar la información de cada visita y, crucialmente, limitar el número de visitas por solicitud a un máximo de cinco (5).
🚀 Arquitectura y Tecnologías
El proyecto está construido siguiendo una arquitectura Modelo-Vista-Controlador (MVC), separando la lógica de negocio, los datos y la interfaz de usuario.
Stack Tecnológico
Componente
Tecnología
Propósito
Backend
Controlador y lógica de negocio.
ORM
Modelo y mapeo de objetos a la BD.
Lenguaje
Lenguaje principal del backend.
Base de Datos
Almacenamiento de datos (compatible con MySQL).
Frontend
Estructura de la Vista.
Estilos
Diseño responsive y componentes UI.
Cliente
Comunicación asíncrona (Fetch API) con el backend.
🏗️ Componentes del Proyecto
- Modelo de Datos (MER)
El sistema se basa en tres entidades principales que gestiona Doctrine:
Visitador: Almacena los datos del funcionario que realiza la inspección.
Solicitud: Almacena la información de la valla y el motivo de la inspección.
Visita: Almacena los hallazgos de una inspección.
Relaciones Clave:
Solicitud (1) --- (N) Visita (Limitado a 5 por lógica de aplicación)
Visitador (1) --- (N) Visita
(Ver el archivo mer.md para el diagrama detallado).
- Lógica de Negocio (Controlador)
El archivo VisitaController.php expone una API RESTful (/api/visitas/crear) que recibe los datos (en formato JSON) desde el formulario de la Vista.
La lógica principal implementada es la restricción de 5 visitas:
Antes de guardar una nueva visita, el controlador consulta cuántas visitas existen asociadas a esa solicitud_id.
Si el conteo es >= 5, devuelve un error 400 Bad Request al formulario.
Si el conteo es < 5, persiste la nueva entidad Visita en la base de datos MariaDB.
- Consulta SQL Relevante
Se incluye una consulta (consulta.sql) para generar un reporte acumulado de visitas por visitador en un rango de fechas específico, útil para la reportería de la Alcaldía.
SELECT v.nombre_completo, v.cedula, COUNT(vis.id) AS total_visitas_acumuladas FROM Visita AS vis JOIN Visitador AS v ON vis.visitador_id = v.id WHERE vis.fecha_visita BETWEEN '2025-05-01 00:00:00' AND '2025-06-30 23:59:59' GROUP BY v.id, v.nombre_completo, v.cedula ORDER BY total_visitas_acumuladas DESC;
⚙️ Instalación y Despliegue
Siga estos pasos para poner en marcha el proyecto en un entorno de desarrollo local.
Clonar el repositorio:
git clone [URL-DE-TU-REPOSITORIO] cd [nombre-del-proyecto]
Instalar dependencias de Symfony 2 (usando Composer):
composer install
Configurar la Base de Datos:
Crea una base de datos en MariaDB (ej. cali_vallas_db).
Copia el archivo de configuración de parámetros:
cp app/config/parameters.yml.dist app/config/parameters.yml
Edita app/config/parameters.yml con tus credenciales de base de datos (host, nombre, usuario, contraseña).
Crear las tablas en la BD:
Doctrine leerá las entidades (Modelos) y creará el esquema de base de datos.
php app/console doctrine:schema:update --force
Ejecutar el servidor de desarrollo (Symfony 2):
php app/console server:run
El servidor se ejecutará (generalmente en http://localhost:8000).
El formulario de registro (registrar_visita.html) se puede abrir directamente en el navegador. Este formulario está diseñado para comunicarse con la API de Symfony que acabas de iniciar.