@extends('layouts.app')
@section('title', 'Detail: ' . $kegiatan->nama_kegiatan)
@section('content')
{{-- ── NAVIGASI KEMBALI ── --}}
{{-- ── 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 ── --}}
{{-- ── 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)
@endforeach
@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
@endif
{{-- ── TABEL RIWAYAT ── --}}
{{-- Header tabel --}}
{{-- 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)
| # |
Tanggal |
Jam Absen |
Status |
Cara Absen |
@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
|
{{ $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 }}
|
@endforeach
@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