12 Como programar el CRUD Completo de Ausencias de forma segura con registros relacionados Laravel

Duración: 16 min
Módulo: Reglas de Negocio: Módulos de Turnos y Ausencias Lección 2 de 2

Descripció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étodoFunció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.