{{-- resources/views/admin/kegiatan/data/dashboard.blade.php --}} @extends('layouts.app') @section('content') @php // -- Day-tab calculations -- $isoDay = $selectedDate->dayOfWeekIso; $monOfWeek = $selectedDate->copy()->subDays($isoDay - 1); $hariMapTab = [ 'Senin' => 'Senin','Selasa' => 'Selasa','Rabu' => 'Rabu', 'Kamis' => 'Kamis','Jumat' => 'Jumat','Sabtu' => 'Sabtu','Minggu' => 'Ahad' ]; $activeTab = $hariMapTab[$selectedDate->locale('id')->isoFormat('dddd')] ?? 'Senin'; $todayHari = $hariMapTab[now()->locale('id')->isoFormat('dddd')] ?? 'Senin'; $tabHari = [ ['nama' => 'Senin', 'offset' => 0], ['nama' => 'Selasa', 'offset' => 1], ['nama' => 'Rabu', 'offset' => 2], ['nama' => 'Kamis', 'offset' => 3], ['nama' => 'Jumat', 'offset' => 4], ['nama' => 'Sabtu', 'offset' => 5], ['nama' => 'Minggu', 'offset' => 6], ]; $kelompokGroups = $kelasList->groupBy('kelompok.nama_kelompok'); @endphp {{-- ============================================================ --}} {{-- PAGE HEADER --}} {{-- ============================================================ --}}

{{ $selectedDate->locale('id')->isoFormat('dddd, D MMMM Y') }}

@if(session('success'))
{{ session('success') }}
@endif {{-- ============================================================ --}} {{-- 1. KPI CARDS --}} {{-- ============================================================ --}}
{{ $totalKegiatanHariIni }}
Total Kegiatan
{{ abs($comparisonTotal) }} vs minggu lalu
{{ $kegiatanSelesai }}
Kegiatan Selesai
dari {{ $totalKegiatanHariIni }} kegiatan
{{ $avgKehadiran }}%
Rata-rata Kehadiran
{{ abs($comparisonAvg) }}% vs minggu lalu
{{ $kegiatanBerlangsung }}
Sedang Berlangsung
@if($kegiatanBerlangsung > 0)
Live Now
@else
Tidak ada kegiatan
@endif
{{-- ============================================================ --}} {{-- 2. DAY TABS --}} {{-- ============================================================ --}}
@foreach($tabHari as $tab) @php $tabDate = $monOfWeek->copy()->addDays($tab['offset']); $tabDateStr = $tabDate->format('Y-m-d'); $isActive = ($activeTab === $tab['nama']); $isToday = ($todayHari === $tab['nama'] && now()->format('W') === $selectedDate->format('W')); $params = array_merge( request()->only(['kelas', 'kategori_id']), ['tanggal' => $tabDateStr] ); @endphp {{ $tab['nama'] }} {{ $tabDate->format('d/m') }} @endforeach
{{-- FILTER BAR --}}
{{-- ============================================================ --}} {{-- 3. INSIGHTS PANEL --}} {{-- ============================================================ --}} @if(count($insights) > 0)

Insight Hari Ini

@foreach($insights as $insight)
{{ $insight['message'] }}
{{ $insight['detail'] }}
@if($insight['action_url']) {{ $insight['action_text'] }} @endif
@endforeach
@endif {{-- ============================================================ --}} {{-- 4. MAIN LAYOUT: Kegiatan Cards + Heatmap --}} {{-- ============================================================ --}}
{{-- LEFT: Kegiatan Cards --}}
@if($kegiatanHariIni->count() > 0)
@foreach($kegiatanHariIni as $kegiatan) @php $persen = $kegiatan->persen_kehadiran; $totalSantri = $kegiatan->total_santri_kegiatan; $totalHadir = $kegiatan->total_hadir; // hadir + terlambat $totalInput = $kegiatan->total_absensi; // sudah diinput (semua status) $belumAbsen = $kegiatan->belum_absen; // belum diinput sama sekali $terlambat = $kegiatan->total_terlambat; $isUmum = $kegiatan->kelasKegiatan->isEmpty(); // Warna progress bar $pClass = $persen >= 85 ? 'p-success' : ($persen >= 70 ? 'p-warning' : ($persen >= 50 ? 'p-orange' : 'p-danger')); // Hitung per kelas: sudah input berapa $infoPerKelas = $kegiatan->info_per_kelas ?? collect(); @endphp

{{ $kegiatan->nama_kegiatan }}

{{ date('H:i', strtotime($kegiatan->waktu_mulai)) }} – {{ date('H:i', strtotime($kegiatan->waktu_selesai)) }} {{ $kegiatan->kategori->nama_kategori }} @if($kegiatan->materi) {{ Str::limit($kegiatan->materi, 40) }} @endif @if($isUmum) Kegiatan Umum @else {{ $kegiatan->kelasKegiatan->pluck('nama_kelas')->implode(', ') }} @endif
@if($kegiatan->status_kegiatan == 'belum') Belum Dimulai @elseif($kegiatan->status_kegiatan == 'berlangsung') Berlangsung @else Selesai @endif
{{-- ============================================ --}} {{-- PROGRESS KEHADIRAN — DIPERBAIKI --}} {{-- ============================================ --}}
{{-- Baris judul + angka utama --}}
Kehadiran {{-- Keterangan terlambat = hadir --}} @if($terlambat > 0) (termasuk {{ $terlambat }} terlambat) @endif {{ $totalHadir }}/{{ $totalSantri }} santri  ({{ $persen }}%)
{{-- Sub-info: sudah diinput vs belum --}}
Sudah diinput: {{ $totalInput }} santri @if($belumAbsen > 0) Belum absen: {{ $belumAbsen }} santri @else Semua sudah diinput @endif
{{-- Progress bar multi-warna --}} @php $hadirMurni = $kegiatan->total_hadir_murni ?? ($totalHadir - $terlambat); $alpa = $kegiatan->total_alpa ?? 0; $izin = $kegiatan->total_izin ?? 0; $sakit = $kegiatan->total_sakit ?? 0; $pctHadir = $totalSantri > 0 ? round($hadirMurni / $totalSantri * 100) : 0; $pctTlmbat = $totalSantri > 0 ? round($terlambat / $totalSantri * 100) : 0; $pctIzin = $totalSantri > 0 ? round($izin / $totalSantri * 100) : 0; $pctSakit = $totalSantri > 0 ? round($sakit / $totalSantri * 100) : 0; $pctAlpa = $totalSantri > 0 ? round($alpa / $totalSantri * 100) : 0; $pctBelum = $totalSantri > 0 ? round($belumAbsen / $totalSantri * 100) : 0; @endphp
@if($pctHadir > 0)
{{ $hadirMurni > 0 && $pctHadir > 5 ? $hadirMurni : '' }}
@endif @if($pctTlmbat > 0)
{{ $terlambat > 0 && $pctTlmbat > 5 ? $terlambat : '' }}
@endif @if($pctIzin > 0)
{{ $izin > 0 && $pctIzin > 5 ? $izin : '' }}
@endif @if($pctSakit > 0)
{{ $sakit > 0 && $pctSakit > 5 ? $sakit : '' }}
@endif @if($pctAlpa > 0)
{{ $alpa > 0 && $pctAlpa > 5 ? $alpa : '' }}
@endif @if($pctBelum > 0)
{{ $belumAbsen > 0 && $pctBelum > 5 ? $belumAbsen : '' }}
@endif
{{-- Legend bar --}}
@if($hadirMurni > 0) Hadir @endif @if($terlambat > 0) Terlambat @endif @if($izin > 0) Izin @endif @if($sakit > 0) Sakit @endif @if($alpa > 0) Alpa @endif @if($belumAbsen > 0) Belum absen @endif
{{-- Info per kelas (khusus kegiatan dengan beberapa kelas) --}} @if(!$isUmum && $infoPerKelas->count() > 1)
Status per Kelas:
@foreach($infoPerKelas as $infoKls) @php // Hitung santri kelas ini yg sudah diinput dari data absensis $sudahKelas = $kegiatan->absensis->filter(function($ab) use ($infoKls) { return ($ab->santri->kelas_name ?? '') === $infoKls['nama']; })->count(); $totalKls = $infoKls['total_santri']; $belumKls = max(0, $totalKls - $sudahKelas); $sudahSemua = $belumKls === 0 && $totalKls > 0; @endphp
{{ $infoKls['nama'] }} {{ $sudahKelas }}/{{ $totalKls }} @if(!$sudahSemua && $belumKls > 0) ({{ $belumKls }} belum) @endif
@endforeach
@endif
{{-- end kegiatan-progress --}} {{-- Actions --}}
@endforeach
@else

Tidak Ada Kegiatan Dijadwalkan

Tidak ada kegiatan untuk {{ $selectedKelasId ? 'kelas ini' : 'hari ini' }} pada {{ $selectedDate->locale('id')->isoFormat('dddd, D MMMM Y') }}

Buat Kegiatan Baru
@endif
{{-- RIGHT: Heatmap Calendar --}}
Kalender Kehadiran
{{ now()->locale('id')->isoFormat('MMMM Y') }}
Sen
Sel
Rab
Kam
Jum
Sab
Ahd
@foreach($heatmapData as $day)
{{ \Carbon\Carbon::parse($day['date'])->format('j') }}
@endforeach
Legend:
>90%
80-90%
70-80%
<70%
No data
{{-- ============================================================ --}} {{-- 5. MODAL DETAIL ABSENSI (AJAX) --}} {{-- ============================================================ --}} {{-- ============================================================ --}} {{-- JAVASCRIPT --}} {{-- ============================================================ --}} @endsection