@extends('layouts.app') @section('title', 'Attendance Logs') @section('content')
{{-- ============================================================ Page Header ============================================================ --}}

Attendance Logs

Monitor raw attendance punches received from attendance devices.

@can('attendance-logs.view') Export CSV @endcan @can('attendance-logs.create') New Log @endcan
{{-- ============================================================ Filters ============================================================ --}}
{{-- Search --}}
{{-- --}}
{{-- Device --}}
{{-- Verification Mode --}}
{{-- Direction --}}
{{-- Processed Status --}}
{{-- From Date --}}
{{-- To Date --}}
{{-- Filter --}} {{-- Reset --}} @if(request()->hasAny([ 'search', 'attendance_device_id', 'verification_mode', 'direction', 'is_processed', 'date_from', 'date_to', ])) Reset @endif
{{-- ============================================================ Active Filters ============================================================ --}} @if( filled(request('search')) || filled(request('attendance_device_id')) || filled(request('verification_mode')) || filled(request('direction')) || (request('is_processed') !== null && request('is_processed') !== '') || filled(request('date_from')) || filled(request('date_to')) )
Active filters: @if(filled(request('search'))) {{-- --}} {{ request('search') }} @endif @if(filled(request('attendance_device_id'))) @php $selectedDevice = $attendanceDevices->firstWhere( 'id', (int) request('attendance_device_id') ); @endphp @if($selectedDevice) {{ $selectedDevice->name }} @endif @endif @if(filled(request('verification_mode'))) {{ ucfirst(request('verification_mode')) }} @endif @if(filled(request('direction'))) Direction: {{ strtoupper(request('direction')) }} @endif @if(request('is_processed') !== null && request('is_processed') !== '') @if(request('is_processed') === '1') Processed @else Pending @endif @endif @if(filled(request('date_from'))) From: {{ request('date_from') }} @endif @if(filled(request('date_to'))) To: {{ request('date_to') }} @endif
@endif {{-- ============================================================ Bulk Actions ============================================================ --}} {{-- ============================================================ Attendance Logs Table ============================================================ --}}
{{-- Table Header --}}

Attendance Log List

@if($attendanceLogs->total() > 0) Showing {{ number_format($attendanceLogs->firstItem()) }} to {{ number_format($attendanceLogs->lastItem()) }} of {{ number_format($attendanceLogs->total()) }} attendance logs. @else No attendance logs available. @endif

@if($attendanceLogs->total() > 0)
Page {{ $attendanceLogs->currentPage() }} of {{ $attendanceLogs->lastPage() }}
@endif
@forelse($attendanceLogs as $attendanceLog) {{-- Checkbox --}} {{-- User --}} {{-- Device --}} {{-- Punch Time --}} {{-- Verification --}} {{-- Direction --}} {{-- Processed --}} {{-- Actions --}} @empty @endforelse
User Device Punch Time Verification Direction Processed Actions
@can('attendance-logs.view') {{ $attendanceLog->device_user_id }} @else

{{ $attendanceLog->device_user_id }}

@endcan
@if($attendanceLog->rfid_card_number) RFID: {{ $attendanceLog->rfid_card_number }} @else No RFID @endif
@if($attendanceLog->attendanceDevice)

{{ $attendanceLog->attendanceDevice->name }}

@if($attendanceLog->attendanceDevice->location)

{{ $attendanceLog->attendanceDevice->location }}

@endif
@else @endif

{{ $attendanceLog->punched_at?->format('M d, Y') ?? '—' }}

{{ $attendanceLog->punched_at?->format('h:i:s A') ?? '—' }}

@switch($attendanceLog->verification_mode) @case('rfid') RFID @break @case('fingerprint') Fingerprint @break @case('face') Face @break @case('qr') QR @break @case('password') Password @break @case('manual') Manual @break @default Unknown @endswitch @if($attendanceLog->direction === 'in') IN @elseif($attendanceLog->direction === 'out') OUT @else Unknown @endif @if($attendanceLog->is_processed) Processed @if($attendanceLog->processed_at)

{{ $attendanceLog->processed_at->format('M d, h:i A') }}

@endif @else Pending @endif
{{-- View --}} @can('attendance-logs.view') @endcan {{-- Edit --}} @can('attendance-logs.edit') @endcan {{-- Delete --}} @can('attendance-logs.delete')
@csrf @method('DELETE')
@endcan
@if( filled(request('search')) || filled(request('attendance_device_id')) || filled(request('verification_mode')) || filled(request('direction')) || (request('is_processed') !== null && request('is_processed') !== '') || filled(request('date_from')) || filled(request('date_to')) )

No matching attendance logs found

No attendance logs match the current search or filter criteria.

Clear Filters @else

No attendance logs found

Attendance punches received from attendance devices will appear here.

@can('attendance-logs.create') New Log @endcan @endif
{{-- ======================================================== Pagination ======================================================== --}} @if($attendanceLogs->hasPages())
{{ $attendanceLogs->withQueryString()->links() }}
@endif
{{-- ================================================================ Bulk Delete Form ================================================================ --}} @endsection @push('scripts') @endpush