12 Como programar el CRUD Completo de Ausencias de forma segura con registros relacionados Laravel
Duración: 16 minDescripción
📋 Lección 12: Cómo Programar el CRUD Completo de Ausencias de Forma Segura con Registros Relacionados en Laravel 🚀
En este capítulo construimos el módulo de Ausencias (AusenciaController.php), un prerrequisito clave antes de desarrollar los cronogramas laborales. Este módulo permite gestionar permisos, vacaciones y bajas médicas, garantizando la validación previa para no asignar turnos a empleados ausentes. Además, se implementa un Factory/Seeder para poblar el sistema con un volumen realista de datos.
🔑 Conceptos Clave y Puntos Destacados
1. 🧪 Poblado masivo con Datos Realistas (Factory y Seeders)
- Generación de Empleados: Se creó EmpleadoFactory.php con PHP Artisan Make Factory para sembrar 100 empleados con sus respectivos usuarios (User), asignación de roles (ModelHasRole) mediante Spatie Permissions y contraseñas encriptadas.
- Comando de Refresco: Ejecutado php artisan migrate:fresh --seed para reiniciar la base de datos y cargar información estructurada con nombres, documentos (DNI) y correos coherentes.
2. 🛡️ Validaciones Avanzadas en Formularios
En AusenciaController@store y @update, se establecieron reglas para asegurar la coherencia lógica de las fechas:
- empleado_id: Requerido y existente en la tabla empleados.
- tipo: Validado entre opciones permitidas (Permiso, Vacaciones, Baja Médica).
- fecha_inicio y fecha_fin: Regla after:fecha_inicio para evitar inconsistencias donde la fecha final sea anterior a la de inicio.
3. 🔍 Filtro de Empleados Activos
- Al cargar el formulario de creación (create()), únicamente se listan empleados cuyo estado sea Activo (Empleado::where('estado', 'activo')->get()), omitiendo a los inactivos.
4. ⚙️ Ciclo de Vida y Flujo CRUD
| Método | Función Principal |
|---|---|
| index() | Carga ansiosa (Ausencia::with('empleado')->get()) y despliega los registros con soporte para DataTables. |
| create() | Consulta empleados activos y los envía al formulario <select>. |
| store() | Valida la solicitud, establece el estado inicial como pendiente y registra la ausencia. |
| edit() | Obtiene la ausencia por su ID y recarga la lista de empleados para su edición. |
| update() | Actualiza los datos y habilita el cambio de estado (ej. de pendiente a aprobado). |
| destroy() | Ejecuta el borrado del registro tras confirmación visual con SweetAlert2. |
🔜 Siguiente Paso
Con la gestión de ausencias completada, el sistema cuenta con todas las dependencias necesarias (Usuarios, Empleados, Categorías, Sucursales, Turnos y Ausencias) para iniciar el módulo central: el Cronograma Interactivo de Turnos utilizando la librería FullCalendar.