@extends('layouts.app') @section('title', 'Dashboard Santri') @section('content') @php $initials = strtoupper(substr($data['nama_santri'], 0, 1)); $poin = $data['poin_pelanggaran']; $avgCap = round(($data['progres_quran'] + $data['progres_hadist'] + $data['progres_materi_tambahan']) / 3, 1); $kpTotalHari = $statistikKepulangan['total_hari'] ?? 0; $kpSisa = $statistikKepulangan['sisa_kuota'] ?? 12; $kpPersen = $statistikKepulangan['persen_kuota'] ?? 0; $kpDisetujui = $statistikKepulangan['disetujui'] ?? 0; $kpMenunggu = $statistikKepulangan['menunggu'] ?? 0; $kpOver = $statistikKepulangan['over_limit'] ?? false; // Grouped Bar Kehadiran per Kategori // Bar kehadiran — bulan ini $barKategori = $absensiPerKategori['labels'] ?? []; $barHadir = $absensiPerKategori['hadir'] ?? []; $barAlpa = $absensiPerKategori['alpa'] ?? []; $barIzin = $absensiPerKategori['izin'] ?? []; $barSakit = $absensiPerKategori['sakit'] ?? []; // Bar kehadiran — minggu ini $barKatMgg = $absensiPerKategoriMinggu['labels'] ?? $barKategori; $barHadirMgg = $absensiPerKategoriMinggu['hadir'] ?? []; $barAlpaMgg = $absensiPerKategoriMinggu['alpa'] ?? []; $barIzinMgg = $absensiPerKategoriMinggu['izin'] ?? []; $barSakitMgg = $absensiPerKategoriMinggu['sakit'] ?? []; $bulanNama = now()->locale('id')->isoFormat('MMMM YYYY'); $mingguLabel = 'Minggu ini (' . now()->startOfWeek(\Carbon\Carbon::MONDAY)->locale('id')->isoFormat('D MMM') . ')'; // Status Input Capaian $ciIsOpen = $statusInputCapaian['is_open'] ?? false; $ciDeadline = $statusInputCapaian['deadline'] ?? null; $ciSudah = $statusInputCapaian['sudah_input'] ?? 0; $ciTotal = $statusInputCapaian['total_materi'] ?? 0; $ciPersen = $ciTotal > 0 ? round($ciSudah / $ciTotal * 100) : 0; $ciSegera = $ciIsOpen && $ciDeadline && \Carbon\Carbon::parse($ciDeadline)->isFuture() && \Carbon\Carbon::parse($ciDeadline)->diffInDays(now()) <= 7; $ciBadge = $ciIsOpen ? ($ciSegera ? 'ci-segera' : 'ci-buka') : 'ci-tutup'; $ciBLabel = $ciIsOpen ? ($ciSegera ? '⚠ Segera Tutup' : '✓ Input Dibuka') : '✕ Input Ditutup'; // Capaian per kategori (progress bar kecil di kartu input) $capKat = [ ["Al-Qur'an", $data['progres_quran'], '#22C97E'], ['Hadist', $data['progres_hadist'], '#3B82F6'], ['Tambahan', $data['progres_materi_tambahan'], '#F59E0B'], ]; @endphp
{{-- HERO --}}
{{ $initials }}

Halo, {{ Str::words($data['nama_santri'], 2) }} 👋

Kelas {{ $data['kelas'] }} @if($semesterAktif) {{ $semesterAktif->nama_semester }} @endif

{{ now()->locale('id')->isoFormat('dddd') }} {{ now()->locale('id')->isoFormat('D MMMM YYYY') }}
{{-- ALERTS --}} @if(isset($statusKesehatan) && $statusKesehatan)
🏥
Sedang dalam perawatan UKP sejak {{ $statusKesehatan->tanggal_masuk_formatted }} ({{ $statusKesehatan->lama_dirawat }} hari). Keluhan: {{ $statusKesehatan->keluhan }}. Lihat detail →
@endif @if(isset($kepulanganAktif) && $kepulanganAktif)
🏠
Sedang dalam masa kepulangan ({{ $kepulanganAktif->tanggal_pulang_formatted }} – {{ $kepulanganAktif->tanggal_kembali_formatted }}). Pastikan kembali tepat waktu! Lihat detail →
@endif {{-- KPI --}}
Ringkasan
Rp {{ number_format($data['saldo_uang_saku'],0,',','.') }}
Saldo Uang Saku
{{ $poin }}
Poin Pelanggaran
@if($poin==0)✓ Bersih @elseLihat @endif
{{ $avgCap }}%
Rata-rata Capaian Belajar
{{ now()->locale('id')->isoFormat('dddd') }}
Jadwal Kegiatan Aktif
{{-- KEPULANGAN --}}
Kepulangan Tahun {{ now()->year }}

Kuota Izin Kepulangan

Lihat Semua
{{ $kpTotalHari }} / 12 hari
Total hari terpakai
{{ $kpSisa }} hari
Sisa kuota
{{ $kpDisetujui }}
Kali disetujui
@if($kpMenunggu > 0)
{{ $kpMenunggu }} menunggu approval
@endif
{{ $kpTotalHari }} dari 12 hari kuota @if($kpOver)⚠ Melebihi kuota! @elseSisa {{ $kpSisa }} hari@endif
{{-- ════ STATUS INPUT CAPAIAN + BERITA ════ --}}
Input Capaian & Informasi
{{-- Status Input Capaian --}}

Status Input Capaian

Buka Halaman
@if($ciIsOpen && !$ciSegera)
@endif {{ $ciBLabel }}
@if($semesterAktif)
{{ $semesterAktif->nama_semester }}
@endif @if($ciIsOpen && $ciDeadline)
Deadline: {{ \Carbon\Carbon::parse($ciDeadline)->locale('id')->isoFormat('D MMMM YYYY') }} @if($ciSegera) • {{ \Carbon\Carbon::parse($ciDeadline)->diffForHumans() }} @endif
@elseif(!$ciIsOpen)
Input capaian sedang tidak dibuka.
@endif
@if($ciTotal > 0)
Progres pengisian materi {{ $ciSudah }} / {{ $ciTotal }}
{{ $ciPersen }}% sudah diisi
@else
Progres capaian per kategori
@endif
@foreach($capKat as [$kNama, $kPct, $kColor])
{{ $kNama }}
{{ $kPct }}%
@endforeach
{{-- Berita --}}

Berita Terbaru

Semua
{{-- limit & filter dikontrol controller: latest 5, tanpa filter tanggal --}} @forelse($beritaTerbaru as $berita)
{{ $berita->judul }}
{{ $berita->created_at->diffForHumans() }}
@empty
Belum ada berita terbaru
@endforelse
{{-- ════ VISUALISASI: GROUPED BAR KEHADIRAN ════ --}}
Kehadiran per Kategori Kegiatan

Kehadiran per Kategori

Detail
Hadir
Alpa
Izin
Sakit
{{-- PELANGGARAN --}} @if($poin > 0)
Catatan Pelanggaran Terkini

5 Pelanggaran Terakhir

{{ $poin }} poin total Semua
@forelse($pelanggaranTerbaru ?? [] as $pel) @empty @endforelse
TanggalPelanggaranPoin
{{ \Carbon\Carbon::parse($pel->tanggal)->locale('id')->isoFormat('D MMM YY') }} {{ $pel->kategori->nama_pelanggaran ?? ($pel->keterangan ?? '-') }} {{ $pel->poin }}
Tidak ada data
@endif
@endsection @section('scripts') @endsection