13 Como programar Sistema de Cronogramas por Sucursales en Laravel (FullCalendar + SweetAlert2)

Duración: 10 min
Módulo: Módulo de Cronograma, Reportes, Exportación e Interfaz Interactiva (FullCalendar) Lección 1 de 6

Descripció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).