14 Guardar, Modificar y Eliminar asignaciones dentro del Cronograma por Sucursales en Laravel

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

Descripción

📋 Lección 14: Guardar, Modificar y Eliminar Asignaciones en el Cronograma por Sucursales en Laravel 🚀

En esta lección se implementan las operaciones fundamentales de interacción dentro del Cronograma de Turnos (CronogramaController.php), permitiendo crear, editar y eliminar eventos/asignaciones directamente interactuando con la interfaz del calendario dinámico (FullCalendar + SweetAlert2).

🔑 Conceptos Clave y Puntos Destacados

1. ➕ Guardado de Asignaciones (store)

  • Interacción Modal: Al hacer clic en un día dentro del calendario, se despliega un formulario modal para seleccionar el empleado y el turno correspondiente para la sucursal activa.
  • Validaciones de Disponibilidad: Se verifica que el empleado no tenga ya asignado un turno en la misma fecha antes de guardar la información.
  • Asignación Múltiple/Recurrente: Permite registrar turnos de forma individual o distribuirlos dinámicamente en bucle a lo largo de un rango de días.

2. ✏️ Edición de Asignaciones (update)

  • Recuperación de Datos: Al pulsar sobre un evento/tarjeta en el calendario, se abre el modal prellenado con los datos actuales del turno y del empleado.
  • Comprobación de Conflictos: Si se reasigna el turno a otro empleado o se cambia el horario, el controlador valida que el nuevo empleado no presente cruces o duplicidad de horarios para ese mismo día.
  • Persistencia: Al confirmar los cambios, los tags o barras de evento se re-renderizan inmediatamente en FullCalendar adoptando el color representativo asignado a dicho turno.

3. 🗑️ Eliminación Segura (destroy)

  • Confirmación Visual: Se activa un aviso mediante SweetAlert2 que solicita la confirmación directa del usuario (¿Eliminar asignación de [Nombre de Empleado]?).
  • Limpieza en BD y Vista: Al confirmar, el método destroy($id) remueve el registro de la tabla cronogramas en MySQL y remueve automáticamente la barra del evento del calendario sin recargar la pantalla.