@extends('layouts.app') @section('title', 'Detail: ' . $kegiatan->nama_kegiatan) @section('content') {{-- ── NAVIGASI KEMBALI ── --}}
Kembali ke Jadwal {{ $kegiatan->nama_kegiatan }}
{{-- ── HERO — Info Kegiatan + Ringkasan ── --}}

{{ $kegiatan->nama_kegiatan }}

{{ $kegiatan->kategori->nama_kategori }} Setiap {{ $kegiatan->hari }} {{ date('H:i', strtotime($kegiatan->waktu_mulai)) }} – {{ date('H:i', strtotime($kegiatan->waktu_selesai)) }} @if($kegiatan->materi) {{ Str::limit($kegiatan->materi, 35) }} @endif
{{-- 3 angka paling penting --}}
@php $clr = $persentaseHadir >= 85 ? 'clr-great' : ($persentaseHadir >= 70 ? 'clr-ok' : 'clr-bad'); @endphp
{{ $persentaseHadir }}%
Tingkat Kehadiran
hadir + terlambat
{{ $hadirEfektif }}
Kali Hadir
dari {{ $totalAbsensi }} tercatat
{{ $stats['Alpa'] ?? 0 }}
Kali Alpa
tidak masuk tanpa izin
{{-- ── FILTER PERIODE ── --}}
@foreach([ 'this_week' => 'Minggu Ini', 'this_month' => 'Bulan Ini', 'last_month' => 'Bulan Lalu', 'last_3m' => '3 Bulan', 'all' => 'Semua Data', ] as $v => $l) @endforeach
{{ $dateFrom->locale('id')->isoFormat('D MMM YYYY') }} – {{ $dateTo->locale('id')->isoFormat('D MMM YYYY') }}
{{-- ── 6 STAT PILLS ── --}}
@php $pillData = [ ['label' => 'Hadir', 'val' => $stats['Hadir'] ?? 0, 'icon' => 'check-circle', 'cls' => 'p-green'], ['label' => 'Terlambat', 'val' => $stats['Terlambat'] ?? 0, 'icon' => 'clock', 'cls' => 'p-amber'], ['label' => 'Izin', 'val' => $stats['Izin'] ?? 0, 'icon' => 'info-circle', 'cls' => 'p-blue'], ['label' => 'Sakit', 'val' => $stats['Sakit'] ?? 0, 'icon' => 'heartbeat', 'cls' => 'p-purple'], ['label' => 'Alpa', 'val' => $stats['Alpa'] ?? 0, 'icon' => 'times-circle', 'cls' => 'p-red'], ['label' => 'Pulang', 'val' => $stats['Pulang'] ?? 0, 'icon' => 'home', 'cls' => 'p-teal'], ]; @endphp @foreach($pillData as $p)
{{ $p['val'] }}
{{ $p['label'] }}
@endforeach
{{-- ── INSIGHT BANNER — pesan mudah dipahami santri ── --}} @php $alpaCount = $stats['Alpa'] ?? 0; $insightCls = $persentaseHadir >= 85 ? 'good' : ($persentaseHadir >= 65 ? 'warn' : 'bad'); if ($insightCls === 'good') { $insightIcon = '🎉'; $insightJudul = 'Kehadiranmu sangat baik!'; $insightMsg = "Kamu hadir $hadirEfektif dari $totalAbsensi sesi yang tercatat. Pertahankan ya!"; } elseif ($insightCls === 'warn') { $insightIcon = '⚠️'; $insightJudul = 'Kehadiranmu perlu ditingkatkan.'; $insightMsg = "Tingkat kehadiranmu $persentaseHadir% dalam periode ini. Yuk lebih rajin lagi!"; } else { $insightIcon = '❗'; $insightJudul = 'Kehadiranmu sangat rendah.'; $insightMsg = "Hanya $persentaseHadir% dari sesi yang dihadiri. Ada $alpaCount kali alpa. Segera konsultasikan ke pembimbing."; } @endphp @if($totalAbsensi > 0)
{{ $insightIcon }}
{{ $insightJudul }} {{ $insightMsg }}
@endif {{-- ── KALENDER VISUAL + DISTRIBUSI ── --}} @php // $absensiByDate sudah dikirim dari controller: ['Y-m-d' => 'Status', ...] // Mencakup SEMUA data dalam range, bukan hanya halaman saat ini $statusMeta = [ 'Hadir' => ['bg'=>'#d1fae5','text'=>'#065f46','border'=>'#6ee7b7','dot'=>'#2bbd8e','icon'=>'✓'], 'Terlambat' => ['bg'=>'#fef3c7','text'=>'#92400e','border'=>'#fcd34d','dot'=>'#f59e0b','icon'=>'⏰'], 'Izin' => ['bg'=>'#dbeafe','text'=>'#1e40af','border'=>'#93c5fd','dot'=>'#3b82f6','icon'=>'I'], 'Sakit' => ['bg'=>'#ede9fe','text'=>'#5b21b6','border'=>'#c4b5fd','dot'=>'#8b5cf6','icon'=>'🏥'], 'Alpa' => ['bg'=>'#fee2e2','text'=>'#991b1b','border'=>'#fca5a5','dot'=>'#e53e3e','icon'=>'✗'], 'Pulang' => ['bg'=>'#ccfbf1','text'=>'#0f766e','border'=>'#5eead4','dot'=>'#0d9488','icon'=>'🏠'], ]; $distItems = [ ['label'=>'Hadir', 'val'=>$stats['Hadir'] ?? 0, 'color'=>'#2bbd8e', 'emoji'=>'✅'], ['label'=>'Terlambat', 'val'=>$stats['Terlambat'] ?? 0, 'color'=>'#f59e0b', 'emoji'=>'⏰'], ['label'=>'Izin', 'val'=>$stats['Izin'] ?? 0, 'color'=>'#3b82f6', 'emoji'=>'ℹ️'], ['label'=>'Sakit', 'val'=>$stats['Sakit'] ?? 0, 'color'=>'#8b5cf6', 'emoji'=>'🏥'], ['label'=>'Alpa', 'val'=>$stats['Alpa'] ?? 0, 'color'=>'#e53e3e', 'emoji'=>'❌'], ['label'=>'Pulang', 'val'=>$stats['Pulang'] ?? 0, 'color'=>'#0d9488', 'emoji'=>'🏠'], ]; $hariSingkat = ['Monday'=>'Sen','Tuesday'=>'Sel','Wednesday'=>'Rab', 'Thursday'=>'Kam','Friday'=>'Jum','Saturday'=>'Sab','Sunday'=>'Ahd']; @endphp {{-- Kalender Visual --}}
Kalender Kehadiran {{ $dateFrom->locale('id')->isoFormat('D MMM') }} – {{ $dateTo->locale('id')->isoFormat('D MMM YYYY') }}
Tiap kotak = 1 hari dalam periode filter. Warna = status absensimu. Kotak abu-abu = tidak ada catatan absensi di hari itu.
@foreach($statusMeta as $sLabel => $sMeta)
{{ $sLabel }}
@endforeach
Tidak ada catatan
@php $cursor = $dateFrom->copy(); @endphp @while($cursor->lte($dateTo)) @php $tgl = $cursor->format('Y-m-d'); $status = $absensiByDate[$tgl] ?? null; $meta = $status ? ($statusMeta[$status] ?? null) : null; $hariId = $hariSingkat[$cursor->format('l')] ?? substr($cursor->format('l'), 0, 3); $tglFmt = $cursor->format('d/m'); $isToday = $tgl === \Carbon\Carbon::today()->format('Y-m-d'); @endphp @if($meta)
{{ $meta['icon'] }} {{ $tglFmt }} {{ $hariId }} {{ $status }}
@else
{{ $tglFmt }} {{ $hariId }} Belum
@endif @php $cursor->addDay(); @endphp @endwhile
{{-- Distribusi Status --}}
Perincian Status {{ $totalAbsensi }} total sesi tercatat
@if($totalAbsensi > 0)
@foreach($distItems as $d) @if($d['val'] > 0 || in_array($d['label'], ['Hadir','Alpa']))
{{ $d['emoji'] }}
{{ $d['label'] }}
{{ $d['val'] }}×
{{ round($d['val']/$totalAbsensi*100) }}%
@endif @endforeach
@else

Belum ada data absensi.

@endif
{{-- ── TABEL RIWAYAT ── --}}
{{-- Header tabel --}}
Rekap Kehadiran
{{-- Periode aktif — jelas terlihat --}}
{{ $dateFrom->locale('id')->isoFormat('D MMM YYYY') }}  –  {{ $dateTo->locale('id')->isoFormat('D MMM YYYY') }} @php $presetLabels = [ 'this_week' => 'Minggu Ini', 'this_month' => 'Bulan Ini', 'last_month' => 'Bulan Lalu', 'last_3m' => '3 Bulan Terakhir', 'all' => 'Semua Data', 'custom' => 'Kustom', ]; @endphp @if(isset($presetLabels[$preset])) ({{ $presetLabels[$preset] }}) @endif
{{ $riwayats->total() }} sesi
{{-- Sub-info: kalimat penjelas --}}
Menampilkan {{ $riwayats->total() }} catatan absensi kegiatan {{ $kegiatan->nama_kegiatan }} dari tanggal {{ $dateFrom->locale('id')->isoFormat('D MMM YYYY') }} sampai {{ $dateTo->locale('id')->isoFormat('D MMM YYYY') }}. @if($riwayats->hasPages()) Halaman {{ $riwayats->currentPage() }} dari {{ $riwayats->lastPage() }}. @endif
@if($riwayats->count() > 0)
@foreach($riwayats as $idx => $absensi) @php $statusLower = strtolower($absensi->status); $rowCls = $statusLower === 'alpa' ? 'row-alpa' : ''; $metode = $absensi->metode_absen ?? ''; $metodeLabel = $metode === 'Import_Mesin' ? 'Mesin' : ($metode ?: 'Manual'); $metodeIcon = $metode === 'RFID' ? 'id-card' : ($metode === 'Import_Mesin' ? 'desktop' : 'hand-pointer'); @endphp @endforeach
# Tanggal Jam Absen Status Cara Absen
{{ $riwayats->firstItem() + $idx }}
{{ \Carbon\Carbon::parse($absensi->tanggal)->format('d M Y') }}
{{ \Carbon\Carbon::parse($absensi->tanggal)->locale('id')->isoFormat('dddd') }}
@if($absensi->waktu_absen) {{ \Carbon\Carbon::parse($absensi->waktu_absen)->format('H:i') }} WIB @else @endif @if($absensi->status === 'Hadir') @elseif($absensi->status === 'Terlambat') @elseif($absensi->status === 'Izin') @elseif($absensi->status === 'Sakit') @elseif($absensi->status === 'Alpa') @elseif($absensi->status === 'Pulang') @endif {{ $absensi->status }} {{ $metodeLabel }}
{{ $riwayats->appends(request()->query())->links() }}
@else

Belum ada catatan absensi dalam periode ini.

Periode aktif: {{ $dateFrom->locale('id')->isoFormat('D MMM YYYY') }} – {{ $dateTo->locale('id')->isoFormat('D MMM YYYY') }}. Coba pilih periode yang lebih luas di filter atas.

@endif
@endsection