@extends('layouts.app')
@section('title', 'Kegiatan & Absensi')
@section('content')
{{-- ── HERO ── --}}
Kegiatan & Absensi
{{ $santri->nama_lengkap }} · Kelas {{ $namaKelas }}
{{ \Carbon\Carbon::now()->locale('id')->isoFormat('dddd') }}
{{ \Carbon\Carbon::now()->locale('id')->isoFormat('D MMMM YYYY') }}
{{ $santri->nis ?? $santri->id_santri }}
{{ $persentaseKehadiran }}% kehadiran
@if($streak > 0)
Streak {{ $streak }}x hadir
@endif
{{-- ── KPI (mengikuti range statistik) ── --}}
{{ $persentaseKehadiran }}%
Persentase
{{ $izinRange + $sakitRange }}
Izin / Sakit
{{-- ── TABS: Statistik – Jadwal – Riwayat ── --}}
Statistik
Jadwal
@if($jadwalDalamRange->count() > 0)
{{ $jadwalDalamRange->count() }}
@endif
Riwayat
{{-- ╔══════════════════════════════════════════╗ --}}
{{-- ║ PANEL STATISTIK ║ --}}
{{-- ╚══════════════════════════════════════════╝ --}}
{{-- Filter statistik --}}
{{-- Tren Kehadiran --}}
Tren Kehadiran
{{ $diffDays<=31?'Harian':'Mingguan' }}
{{-- Distribusi Status --}}
{{-- Konsistensi Score + Kalender sejajar --}}
{{-- Konsistensi Score Card --}}
Konsistensi Score per Kegiatan
@if($consistencyScores->count() > 0)
@foreach($consistencyScores as $idx => $cs)
#{{ $idx + 1 }}
{{ $cs->nama_kegiatan }}
{{ $cs->nama_kategori }}
{{ $cs->hadir }}/{{ $cs->total }} hadir
@if($cs->alpa > 0)
{{ $cs->alpa }} alpa
@endif
@if($cs->tier === 'top')
@elseif($cs->tier === 'good')
@elseif($cs->tier === 'fair')
@elseif($cs->tier === 'warn')
@else
@endif
{{ $cs->badge }}
@endforeach
@else
Belum ada data kehadiran dalam periode ini.
@endif
@if($consistencyScores->count() > 4)
Lihat {{ $consistencyScores->count() - 4 }} kegiatan lainnya
@endif
{{-- end konsistensi card --}}
{{-- Kalender Mini — kompak, hanya bulan terakhir dalam range --}}
@php $calMonth = collect($heatmapMonths)->last(); @endphp
@if($calMonth)
{{-- Legend --}}
@foreach(['#f3f4f6','#bbf7d0','#4ade80','#16a34a','#064e2d'] as $hc)
@endforeach
Hadir
{{-- Grid --}}
@foreach(['S','S','R','K','J','S','M'] as $hn)
{{ $hn }}
@endforeach
@for($e = 1; $e < $calMonth['firstDayOfWeek']; $e++)
@endfor
@foreach($calMonth['days'] as $day)
{{ $day['day'] }}
@endforeach
@endif
{{-- end 2-col grid --}}
{{-- end panel-statistik --}}
{{-- ╔══════════════════════════════════════════╗ --}}
{{-- ║ PANEL JADWAL ║ --}}
{{-- ╚══════════════════════════════════════════╝ --}}
@if($jadwalDalamRange->count() > 0)
@php
$hariOrder = ['Senin','Selasa','Rabu','Kamis','Jumat','Sabtu','Ahad'];
$jadGrouped = $jadwalDalamRange->groupBy('hari')
->sortBy(fn($v,$k) => array_search($k, $hariOrder));
@endphp
@foreach($jadGrouped as $hari => $jadwals)
{{ $hari }}
@if($hari === $hariIni) (Hari Ini) @endif
@foreach($jadwals as $jadwal)
@php
// Tampilkan status: hari ini pakai absensiHariIni, lainnya dari range
$statusAbsen = $hari === $hariIni
? ($absensiHariIni[$jadwal->kegiatan_id] ?? null)
: ($absensiDalamRange[$jadwal->kegiatan_id] ?? null);
$sc = $statusAbsen ? 's-' . strtolower($statusAbsen) : 's-belum';
@endphp
{{ date('H:i', strtotime($jadwal->waktu_mulai)) }}
{{ date('H:i', strtotime($jadwal->waktu_selesai)) }}
{{ $jadwal->nama_kegiatan }}
{{ $jadwal->kategori->nama_kategori }}
@if($jadwal->materi)
{{ Str::limit($jadwal->materi, 28) }}
@endif
@if($statusAbsen)
{{ $statusAbsen }}
@elseif($hari === $hariIni)
Belum
@endif
@endforeach
@endforeach
@else
Tidak ada kegiatan terjadwal dalam periode ini.
@endif
{{-- ╔══════════════════════════════════════════╗ --}}
{{-- ║ PANEL RIWAYAT ║ --}}
{{-- ╚══════════════════════════════════════════╝ --}}
@if($riwayats->count() > 0)
No
Tanggal
Kegiatan
Kategori
Waktu Absen
Status
Aksi
@foreach($riwayats as $idx => $absensi)
{{ $riwayats->firstItem() + $idx }}
{{ \Carbon\Carbon::parse($absensi->tanggal)->format('d M Y') }}
{{ \Carbon\Carbon::parse($absensi->tanggal)->locale('id')->dayName }}
{{ $absensi->kegiatan->nama_kegiatan }}
{{ $absensi->kegiatan->kategori->nama_kategori }}
{{ $absensi->waktu_absen ? \Carbon\Carbon::parse($absensi->waktu_absen)->format('H:i') : '-' }}
{{ $absensi->status }}
@endforeach
{{ $riwayats->links() }}
@else
Tidak ada riwayat absensi dalam periode ini.
@endif
{{-- CHART.JS --}}
@endsection