{{-- resources/views/admin/kegiatan/riwayat/show.blade.php --}} @extends('layouts.app') @section('content') @php $mode = $mode ?? 'hari_ini'; $dari = $dari ?? now()->format('Y-m-d'); $sampai = $sampai ?? now()->format('Y-m-d'); $tanggal = $tanggal ?? now()->format('Y-m-d'); $statsHadir = $stats['Hadir'] ?? 0; $statsTerlambat = $stats['Terlambat'] ?? 0; $statsIzin = $stats['Izin'] ?? 0; $statsSakit = $stats['Sakit'] ?? 0; $statsAlpa = $stats['Alpa'] ?? 0; $statsPulang = $stats['Pulang'] ?? 0; $backParams = ['mode' => $mode, 'dari' => $dari, 'sampai' => $sampai, 'tanggal' => $tanggal]; @endphp {{-- ── HEADER ───────────────────────────────────────────────────────────────── --}}

{{ $kegiatan->nama_kegiatan }}

Kembali
{{-- ── BANNER INFO ──────────────────────────────────────────────────────────── --}}

{{ $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 Kegiatan Umum @endif {{ $periodeLabel }}
{{-- ── TOTAL SANTRI RINGKASAN ───────────────────────────────────────────────── --}} @if(isset($totalSantriEligible))
Total Santri Seharusnya Hadir: {{ $totalSantriEligible }}
Sudah tercatat: {{ $totalRecorded }}  ·  Belum tercatat: {{ max(0, $totalSantriEligible - $totalRecorded) }}
{{ $persenHadir }}%
Kehadiran
@php $pctSudah = $totalSantriEligible > 0 ? round($totalRecorded / $totalSantriEligible * 100, 1) : 0; $pctBlm = 100 - $pctSudah; @endphp
@if($pctSudah > 0)
{{ $totalRecorded > 0 && $pctSudah > 8 ? $totalRecorded : '' }}
@endif @if($pctBlm > 0 && ($totalSantriEligible - $totalRecorded) > 0)
{{ ($totalSantriEligible - $totalRecorded) > 0 && $pctBlm > 8 ? ($totalSantriEligible - $totalRecorded) : '' }}
@endif
@endif {{-- ── 6 KPI CARDS ─────────────────────────────────────────────────────────── --}}
{{ $statsHadir }}
Hadir
{{ $statsTerlambat }}
Terlambat
{{ $statsIzin }}
Izin
{{ $statsSakit }}
Sakit
{{ $statsAlpa }}
Alpa
{{ $statsPulang }}
Pulang
{{-- ── FILTER ───────────────────────────────────────────────────────────────── --}}
{{-- Pertahankan parameter periode --}}
@if($mode !== 'hari_ini')
@endif @if(request()->hasAny(['id_santri','id_kelas','status','tanggal_spesifik'])) Hapus Filter @endif
{{-- ── TABEL RIWAYAT DIKELOMPOK PER TANGGAL ────────────────────────────────── --}} @if($riwayats->count() > 0) @php $grouped = $riwayats->getCollection()->groupBy(fn($item) => $item->tanggal->format('Y-m-d'))->sortKeysDesc(); $isUmum = $kegiatan->kelasKegiatan->isEmpty(); @endphp @foreach($grouped as $tanggal => $records) @php $tglC = \Carbon\Carbon::parse($tanggal); $hariStr = $tglC->locale('id')->isoFormat('dddd'); $tglStr = $tglC->locale('id')->isoFormat('D MMMM Y'); $dHadir = $records->where('status','Hadir')->count(); $dTerlambat = $records->where('status','Terlambat')->count(); $dIzin = $records->where('status','Izin')->count(); $dSakit = $records->where('status','Sakit')->count(); $dAlpa = $records->where('status','Alpa')->count(); $dPulang = $records->where('status','Pulang')->count(); $dTotal = $records->count(); // Kelompok per kelas (sama seperti show sebelumnya) if ($isUmum) { $perKelas = $records->groupBy(fn($r) => optional(optional($r->santri->kelasSantri->first())->kelas)->nama_kelas ?? 'Tanpa Kelas' )->sortKeys(); } else { $perKelas = collect(); $placedIds = []; foreach ($kegiatan->kelasKegiatan as $kls) { $inKls = $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 ($inKls as $r) $placedIds[] = $r->id; if ($inKls->count() > 0) $perKelas[$kls->nama_kelas] = $inKls; } $lainnya = $records->filter(fn($r) => !in_array($r->id, $placedIds)); if ($lainnya->count() > 0) $perKelas['Kelas Lain'] = $lainnya; } @endphp
{{-- Day header --}}
{{ $hariStr }}, {{ $tglStr }} ({{ $dTotal }} santri)
@if($dHadir > 0) {{ $dHadir }} @endif @if($dTerlambat > 0) {{ $dTerlambat }} @endif @if($dIzin > 0) {{ $dIzin }} @endif @if($dSakit > 0) {{ $dSakit }} @endif @if($dAlpa > 0) {{ $dAlpa }} @endif @if($dPulang > 0) {{ $dPulang }} @endif
{{-- Day body --}}
@foreach($perKelas as $namaKelas => $kelasRecords) {{-- Kelas sub-header --}}
{{ $namaKelas }}
{{ $kelasRecords->count() }} santri
{{-- Santri table --}} @foreach($kelasRecords->values() as $idx => $riwayat) @endforeach
No ID Nama Santri Status Waktu Metode Riwayat
{{ $idx + 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 Riwayat
@endforeach
{{-- end rv-day-body --}}
{{-- end rv-day-group --}} @endforeach
{!! $riwayats->appends(request()->query())->links('pagination::simple-bootstrap-4') !!}
@else

Tidak Ada Data

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

@if(request()->hasAny(['id_santri','id_kelas','status','tanggal_spesifik']))

Coba hapus filter untuk melihat semua data.

@endif
@endif @endsection