13 Como programar Sistema de Cronogramas por Sucursales en Laravel (FullCalendar + SweetAlert2)
Duración: 10 minDescripción
📋 Lección 13: Cómo Programar un Sistema de Cronogramas por Sucursales en Laravel (FullCalendar + SweetAlert2) 🚀
En este capítulo se inicia el desarrollo del módulo principal y más avanzado del sistema: el Cronograma de Turnos por Sucursal (CronogramaController.php). Se integra el motor interactivo FullCalendar y la librería Laravel DomPDF para la generación de reportes e impresiones de horarios en formato PDF.
🔑 Conceptos Clave y Puntos Destacados
1. 🛠️ Rutas del Módulo de Cronograma
Se configuraron las rutas necesarias para manipular eventos y reportes dentro del calendario:
- Listado e Interfaz: Route::get('/cronograma', [CronogramaController::class, 'index'])
- Reporte PDF: Route::get('/cronograma/reporte', [CronogramaController::class, 'reporte'])
- Operaciones Ajax / Eventos:
- POST /cronograma/store: Registra la asignación de turno.
- PUT /cronograma/update: Actualiza una asignación existente.
- POST /cronograma/mover: Permite arrastrar y soltar (drag and drop) eventos dentro del calendario.
- DELETE /cronograma/destroy: Elimina un turno asignado.
2. 📄 Generación de Reportes con Laravel DomPDF
- Instalación: composer require barryvdh/laravel-dompdf
- Uso en el Controlador: Permite renderizar las asignaciones de una sucursal en vistas Blade (reporte.blade.php) y exportarlas directamente a un documento PDF para impresión o distribución.
3. 📅 Integración de FullCalendar (v6.1.21)
- Versión Seleccionada: Se utiliza la versión 6.1.21 de FullCalendar por su estabilidad e integración fluida con Laravel.
- Interfaz Centralizada: El módulo reúne la lógica principal en un solo archivo Blade (index.blade.php, con más de 500 líneas de código) que combina HTML, JavaScript y SweetAlert2.
- Filtrado Dinámico: Incluye un menú desplegable (<select>) para cambiar entre sucursales. Al elegir una sucursal, la vista procesa el parámetro $request->sucursal_id para cargar únicamente los eventos del calendario correspondientes a esa ubicación.
4. 🗄️ Actualización del Seeder (Base de Datos)
- Reinicio con Seeder: Ejecutado php artisan migrate:fresh --seed.
- Carga Completa: Se poblaron automáticamente 20 sucursales, 100 empleados, 10 categorías, 10 turnos predefinidos (Mañana, Tarde, Noche, etc.) y 10 registros de ausencias para simular escenarios reales de programación de personal.
🔜 Siguiente Paso
En el próximo capítulo se completará la lógica de asignación recurrente y validación de turnos, permitiendo registrar un turno para un solo día o aplicarlo a múltiples días seguidos, verificando automáticamente la disponibilidad del empleado (que no esté en su día libre o con ausencias/vacaciones).