{{-- resources/views/admin/kegiatan/riwayat/show.blade.php --}} @extends('layouts.app') @section('content') @php // Ambil range dari query string (diteruskan dari index) $defaultDari = now()->startOfWeek(\Carbon\Carbon::MONDAY)->format('Y-m-d'); $defaultSampai = now()->endOfWeek(\Carbon\Carbon::SUNDAY)->format('Y-m-d'); $filterDari = request('tanggal_dari', $defaultDari); $filterSampai = request('tanggal_sampai', $defaultSampai); $filterBulan = request('bulan', ''); if ($filterBulan) { $periodeLabel = 'Bulan ' . \Carbon\Carbon::parse($filterBulan . '-01')->locale('id')->isoFormat('MMMM Y'); } else { $periodeLabel = \Carbon\Carbon::parse($filterDari)->locale('id')->isoFormat('D MMM Y') . ' โ€“ ' . \Carbon\Carbon::parse($filterSampai)->locale('id')->isoFormat('D MMM Y'); } // Hitung KPI dari data yang sudah difilter (semua halaman, bukan hanya halaman ini) // $stats sudah dihitung di controller berdasarkan filter โ€” gunakan langsung // Tapi jika controller belum menghitung per filter, hitung dari koleksi paginator saat ini // Gunakan $stats dari controller jika ada, fallback ke hitung manual $statsHadir = $stats['Hadir'] ?? 0; $statsTerlambat = $stats['Terlambat'] ?? 0; $statsIzin = $stats['Izin'] ?? 0; $statsSakit = $stats['Sakit'] ?? 0; $statsAlpa = $stats['Alpa'] ?? 0; $statsPulang = $stats['Pulang'] ?? 0; @endphp {{-- Info Kegiatan --}}

{{ $kegiatan->nama_kegiatan }}

{{ $kegiatan->kategori->nama_kategori }} {{ date('H:i', strtotime($kegiatan->waktu_mulai)) }} - {{ date('H:i', strtotime($kegiatan->waktu_selesai)) }} {{ $kegiatan->hari }} @if($kegiatan->kelasKegiatan->count() > 0) {{ $kegiatan->kelasKegiatan->pluck('nama_kelas')->implode(', ') }} @else Umum @endif {{ $periodeLabel }}
{{-- Ringkasan Total Santri --}} @if(isset($totalSantriEligible))

Total Semua Santri: {{ $totalSantriEligible }}

Sudah absen: {{ $totalRecorded }}  ยท  Belum absen: {{ max(0, $totalSantriEligible - $totalRecorded) }}

{{ $persenHadir }}%
Kehadiran
{{-- Progress bar --}} @php $pctSudah = $totalSantriEligible > 0 ? round($totalRecorded / $totalSantriEligible * 100, 1) : 0; $pctBelumRiwayat = 100 - $pctSudah; @endphp
@if($pctSudah > 0)
{{ $totalRecorded }}
@endif @if($pctBelumRiwayat > 0 && ($totalSantriEligible - $totalRecorded) > 0)
{{ $totalSantriEligible - $totalRecorded }}
@endif
@endif {{-- 6 KPI Cards --}}
Hadir
{{ $statsHadir }}
Terlambat
{{ $statsTerlambat }}
Izin
{{ $statsIzin }}
Sakit
{{ $statsSakit }}
Alpa
{{ $statsAlpa }}
Pulang
{{ $statsPulang }}
{{-- Filter --}}
{{-- Pertahankan range periode dari index --}}
@if(request()->hasAny(['id_santri', 'id_kelas', 'status', 'tanggal_spesifik'])) @endif
{{-- Tabel Riwayat โ€” Grouped by Tanggal --}} @if($riwayats->count() > 0) @php $grouped = $riwayats->getCollection()->groupBy(function($item) { return $item->tanggal->format('Y-m-d'); })->sortKeysDesc(); @endphp @foreach($grouped as $tanggal => $records) @php $tglCarbon = \Carbon\Carbon::parse($tanggal); $hariIndo = $tglCarbon->locale('id')->isoFormat('dddd'); $tglFormatted = $tglCarbon->locale('id')->isoFormat('D MMMM Y'); $dayHadir = $records->where('status', 'Hadir')->count(); $dayTerlambat = $records->where('status', 'Terlambat')->count(); $dayIzin = $records->where('status', 'Izin')->count(); $daySakit = $records->where('status', 'Sakit')->count(); $dayAlpa = $records->where('status', 'Alpa')->count(); $dayPulang = $records->where('status', 'Pulang')->count(); $dayTotal = $records->count(); // Group per kelas kegiatan (khusus) atau kelas_name santri (umum) $isUmum = $kegiatan->kelasKegiatan->isEmpty(); if ($isUmum) { $recordsPerKelas = $records->groupBy(fn($r) => optional(optional($r->santri->kelasSantri->first())->kelas)->nama_kelas ?? 'Tanpa Kelas' )->sortKeys(); } else { $recordsPerKelas = collect(); $placedIds = []; foreach ($kegiatan->kelasKegiatan as $kls) { $inKelas = $records->filter(function($r) use ($kls, &$placedIds) { if (in_array($r->id, $placedIds)) return false; return $r->santri->kelasSantri->contains('id_kelas', $kls->id); }); foreach ($inKelas as $r) $placedIds[] = $r->id; if ($inKelas->count() > 0) $recordsPerKelas[$kls->nama_kelas] = $inKelas; } $lainnya = $records->filter(fn($r) => !in_array($r->id, $placedIds)); if ($lainnya->count() > 0) $recordsPerKelas['Kelas Lain'] = $lainnya; } @endphp
{{ $hariIndo }}, {{ $tglFormatted }} ({{ $dayTotal }} santri)
@if($dayHadir > 0) {{ $dayHadir }} @endif @if($dayTerlambat > 0) {{ $dayTerlambat }} @endif @if($dayIzin > 0) {{ $dayIzin }} @endif @if($daySakit > 0) {{ $daySakit }} @endif @if($dayAlpa > 0) {{ $dayAlpa }} @endif @if($dayPulang > 0) {{ $dayPulang }} @endif
@foreach($recordsPerKelas as $namaKelas => $kelasRecords)
{{ $namaKelas }} {{ $kelasRecords->count() }} santri
@foreach($kelasRecords->values() as $index => $riwayat) @endforeach
No ID Santri Nama Santri Status Waktu Metode
{{ $index + 1 }} {{ $riwayat->id_santri }} {{ $riwayat->santri->nama_lengkap }} {!! $riwayat->status_badge !!} {{ $riwayat->waktu_absen ? \Carbon\Carbon::parse($riwayat->waktu_absen)->format('H:i') : '-' }} @if($riwayat->metode_absen == 'RFID') RFID @elseif($riwayat->metode_absen == 'Import_Mesin') Mesin @else Manual @endif
@endforeach
@endforeach @else

Tidak Ada Riwayat

Tidak ada data absensi untuk periode {{ $periodeLabel }}.

@endif @endsection