@include('pdf.styles') @include('pdf.partials.header-pdf', ['empresa' => $empresa, 'title' => 'REPORTE DE ASISTENCIAS | '. $empresa->name])
Fecha de Generación: {{ now()->format('d/m/Y H:i:s') }}
Generado por: {{ auth()->user()->name ?? 'Sistema' }}
Período: @if($filtros['fecha_desde'] && $filtros['fecha_hasta']) {{ \Carbon\Carbon::parse($filtros['fecha_desde'])->format('d/m/Y') }} - {{ \Carbon\Carbon::parse($filtros['fecha_hasta'])->format('d/m/Y') }} @else Todos los registros @endif
Total de Registros: {{ $records->count() }}
Empleados: {{ $records->unique('empleado_id')->count() }}
Días Reportados: {{ $records->unique('fecha')->count() }}

RESUMEN ESTADÍSTICO

Registros Completos:
{{ $records->whereNotNull('entrada_at')->whereNotNull('salida_at')->count() }}
Registros Incompletos:
{{ $records->filter(function($a) { return is_null($a->entrada_at) || is_null($a->salida_at); })->count() }}
Tardanzas:
{{ $records->filter(function($a) { if (is_null($a->entrada_at)) return false; $horaEntrada = \Carbon\Carbon::parse($a->entrada_at); $empleado = $a->empleado; if ($empleado->turnos->isEmpty()) return false; foreach ($empleado->turnos as $turno) { $horaTurnoEntrada = \Carbon\Carbon::parse($turno->hora_entrada); $tolerancia = 30; $horaLimite = $horaTurnoEntrada->copy()->addMinutes($tolerancia); if ($horaEntrada > $horaLimite) { return true; } } return false; })->count() }}
Puntuales:
{{ $records->filter(function($a) { if (is_null($a->entrada_at)) return false; $horaEntrada = \Carbon\Carbon::parse($a->entrada_at); $empleado = $a->empleado; if ($empleado->turnos->isEmpty()) return false; foreach ($empleado->turnos as $turno) { $horaTurnoEntrada = \Carbon\Carbon::parse($turno->hora_entrada); $tolerancia = 30; $horaLimite = $horaTurnoEntrada->copy()->addMinutes($tolerancia); if ($horaEntrada <= $horaLimite) { return true; } } return false; })->count() }}
Empleados Ausentes:
{{ $empleadosAusentes ? $empleadosAusentes->count() : 0 }}
@if($empleadoFiltrado || $filtros['fecha_desde'] || $filtros['fecha_hasta'] || $filtros['mes'] || $filtros['anio'] || $filtros['tipo_registro'] || $turnoFiltrado || $filtros['tardanzas'])

FILTROS APLICADOS

@if($empleadoFiltrado) @endif @if($filtros['fecha_desde']) @endif @if($filtros['fecha_hasta']) @endif @if($turnoFiltrado) @endif @if($filtros['mes']) @endif @if($filtros['anio']) @endif @if($filtros['tipo_registro']) @endif @if($filtros['tardanzas']) @endif
Empleado: {{ $empleadoFiltrado->nombre ?? 'N/A' }}Desde: {{ \Carbon\Carbon::parse($filtros['fecha_desde'])->format('d/m/Y') }}Hasta: {{ \Carbon\Carbon::parse($filtros['fecha_hasta'])->format('d/m/Y') }}Turno: {{ $turnoFiltrado->descripcion }} ({{ \Carbon\Carbon::parse($turnoFiltrado->hora_entrada)->format('H:i') }} - {{ \Carbon\Carbon::parse($turnoFiltrado->hora_salida)->format('H:i') }})
Mes: {{ date('F', mktime(0, 0, 0, $filtros['mes'], 1)) }}Año: {{ $filtros['anio'] }}Tipo: @switch($filtros['tipo_registro']) @case('completa') Completa @break @case('solo_entrada') Solo Entrada @break @case('solo_salida') Solo Salida @break @case('incompleta') Incompleta @break @default {{ $filtros['tipo_registro'] }} @endswitch Tardanzas: @switch($filtros['tardanzas']) @case('1') Después de 10:30 PM @break @case('2') Después de 9:30 AM @break @case('3') Después de 3:30 PM @break @default {{ $filtros['tardanzas'] }} @endswitch
@endif

DETALLE DE ASISTENCIAS

@foreach ($records as $index => $asistencia) @php $empleado = $asistencia->empleado; $estado = ''; $puntualidad = ''; $horasTrabajadas = ''; // Determinar estado if ($asistencia->entrada_at && $asistencia->salida_at) { $estado = 'Completa'; } elseif ($asistencia->entrada_at) { $estado = 'Solo Entrada'; } elseif ($asistencia->salida_at) { $estado = 'Solo Salida'; } else { $estado = 'Sin Registro'; } // Determinar puntualidad basada en el turno del empleado if ($asistencia->entrada_at) { $horaEntrada = \Carbon\Carbon::parse($asistencia->entrada_at); $empleado = $asistencia->empleado; $esPuntual = false; // Verificar puntualidad para cada turno del empleado if (!$empleado->turnos->isEmpty()) { foreach ($empleado->turnos as $turno) { $horaTurnoEntrada = \Carbon\Carbon::parse($turno->hora_entrada); $tolerancia = 30; // 30 minutos de tolerancia $horaLimite = $horaTurnoEntrada->copy()->addMinutes($tolerancia); // Verificar si la entrada es antes o en la hora límite del turno if ($horaEntrada <= $horaLimite) { $esPuntual = true; break; } } } $puntualidad = $esPuntual ? 'Puntual' : 'Tardanza'; } // Calcular horas trabajadas if ($asistencia->entrada_at && $asistencia->salida_at) { $entrada = \Carbon\Carbon::parse($asistencia->entrada_at); $salida = \Carbon\Carbon::parse($asistencia->salida_at); $horasTrabajadas = $entrada->diffInHours($salida) . 'h ' . ($entrada->diffInMinutes($salida) % 60) . 'm'; } @endphp @endforeach
# Empleado Fecha y Hora Entrada Fecha y Hora Salida Estado Puntualidad Horas Trabajadas
{{ $index + 1 }} {{ $empleado->nombre }} {{ $empleado->apellido }}
{{ $empleado->codigo }}
@if($asistencia->entrada_at) {{ \Carbon\Carbon::parse($asistencia->entrada_at)->format('d/m/Y H:i:s') }} @else Sin registro @endif @if($asistencia->salida_at) {{ \Carbon\Carbon::parse($asistencia->salida_at)->format('d/m/Y H:i:s') }} @else Sin registro @endif {{ $estado }} @if($puntualidad) {{ $puntualidad }} @else - @endif {{ $horasTrabajadas ?: '-' }}
@if($empleadosAusentes && $empleadosAusentes->count() > 0)

EMPLEADOS AUSENTES

@foreach ($empleadosAusentes as $index => $ausencia) @endforeach
# Empleado Fecha Ausencia Turno Observación
{{ $index + 1 }} {{ $ausencia->empleado->nombre }} {{ $ausencia->empleado->apellido }}
{{ $ausencia->empleado->codigo }}
{{ \Carbon\Carbon::parse($ausencia->fecha_ausencia)->format('d/m/Y') }} @if($turnoFiltrado) {{ $turnoFiltrado->descripcion }} @else - @endif {{ $ausencia->observacion }}
@endif
Información del Sistema:
• Reporte generado automáticamente
• Puntualidad basada en hora de entrada del turno
• Tolerancia: 30 minutos después de la hora del turno
Leyenda:
Completa - Entrada y salida registradas
Incompleta - Falta entrada o salida
Tardanza - Entrada después de la hora límite del turno
Ausente - No registró entrada en la fecha