@extends('layouts.app') @section('content') {{-- ===== FILTER BAR ===== --}}
Filter: @if($kelas || $selectedSemester != ($semesterAktif->id_semester ?? '')) Reset @endif
{{-- ===== TAB NAVIGATION ===== --}}
{{-- ==================== TAB 1: RINGKASAN ==================== --}}
{{-- KPI --}}
Santri Aktif
{{ $totalSantriAktif }}
Sedang belajar
Rata-rata Progress
{{ number_format($rataRataProgress, 1) }}%
Keseluruhan
Santri Khatam
{{ $santrisKhatam->count() }}
Semua materi selesai
{{-- Statistik per Kategori --}}
@foreach($statistikKategori as $kat => $stats)
{{ $kat }}
{{ number_format($stats['avg'], 1) }}%
{{ $stats['count'] }} capaian • {{ $stats['selesai'] }} selesai
@endforeach
{{-- Charts: Semester Comparison + Distribusi --}}
Progress Rata-rata Per Semester

Trend progress rata-rata setiap kelas antar semester.

Distribusi Progress
{{-- ==================== TAB 2: RANKING KELAS ==================== --}}

Rekap Per Kelas

@foreach($kelasList as $idx => $k) @endforeach
@foreach($kelasList as $idx => $k)
@if(isset($rekapKelas[$k]['summary'])) @php $s = $rekapKelas[$k]['summary']; @endphp
{{ $s['total_santri'] }}
Total Santri
{{ $s['avg_progress'] }}%
Rata-rata Progress
{{ $s['total_selesai'] }}
Total Materi Selesai
{{ $s['santri_tuntas'] }}
Santri Tuntas 100%
@endif @if(count($rekapKelas[$k]['ranking']) > 0)
@foreach($rekapKelas[$k]['ranking'] as $rIdx => $r) @endforeach
# Nama Santri Progress Materi Bar Al-Qur'an Hadist Tambahan Aksi
{{ $rIdx+1 }} {{ $r['santri']->nama_lengkap }}
{{ $r['santri']->nis }}
{{ number_format($r['avg_progress'],1) }}% {{ $r['selesai'] }}/{{ $r['total_materi_kelas'] }}
{{ number_format($r['alquran'],0) }}% {{ number_format($r['hadist'],0) }}% {{ number_format($r['tambahan'],0) }}% @if($r['is_full_khatam'])
@csrf
@else Detail @endif
@php $kelasModelObj = $kelasModels->where('nama_kelas', $k)->first(); @endphp Lihat Semua Santri Kelas {{ $k }} ({{ $rekapKelas[$k]['total_aktif'] }} santri)
@if(count($rekapKelas[$k]['ranking']) >= 2)
Tertinggi
{{ $rekapKelas[$k]['ranking'][0]['santri']->nama_lengkap }} — {{ number_format($rekapKelas[$k]['ranking'][0]['avg_progress'],1) }}%
Terendah @php $last = end($rekapKelas[$k]['ranking']); @endphp
{{ $last['santri']->nama_lengkap }} — {{ number_format($last['avg_progress'],1) }}%
@endif @else
Belum ada data ranking
@endif @if($rekapKelas[$k]['khatam']->count() > 0)
Santri Khatam ({{ $rekapKelas[$k]['khatam']->count() }})
@foreach($rekapKelas[$k]['khatam'] as $ks)
{{ $ks->nama_lengkap }} ({{ $ks->nis }})
@csrf
@endforeach
@endif
@endforeach
{{-- ==================== TAB 4: ANALISIS MATERI ==================== --}}

Materi Completion Rate Per Semester

@if(count($materiCompletionRate) > 0)
@foreach($allSemestersOrdered as $sem) @endforeach @foreach($materiCompletionRate as $mcr) @foreach($allSemestersOrdered as $sem) @php $rate = $mcr['rates'][$sem->id_semester] ?? null; @endphp @endforeach @endforeach
Materi Kategori Kelas{{ $sem->nama_semester }}
{{ $mcr['materi']->nama_kitab }} {!! $mcr['materi']->kategori_badge !!} {!! $mcr['materi']->kelas_badge !!} {{ $rate !== null ? $rate.'%' : '-' }}
@else
Belum ada data materi
@endif

Bottleneck Analysis

Materi yang menjadi bottleneck — banyak santri stuck di bawah 50%.

@if(count($bottleneckMateri) > 0) @foreach(array_slice($bottleneckMateri, 0, 3) as $bn) @if($bn['stuck_percentage'] > 0)
{{ number_format($bn['stuck_percentage'],0) }}% santri stuck di {{ $bn['materi']->nama_kitab }} — rata-rata {{ number_format($bn['avg_progress'],1) }}%
@endif @endforeach @foreach($bottleneckMateri as $bn) @endforeach
Materi Kategori Total Stuck % Stuck Avg Progress
{{ $bn['materi']->nama_kitab }} {!! $bn['materi']->kategori_badge !!} {{ $bn['total_santri'] }} {{ $bn['stuck_santri'] }} {{ number_format($bn['stuck_percentage'],0) }}%
{{ number_format($bn['avg_progress'],1) }}%
@else
Tidak ada bottleneck terdeteksi
@endif
{{-- ==================== TAB 5: KALKULASI PROGRESS ==================== --}}

Estimasi Selesai Per Kelas {{ $santrisAktif->count() }} santri aktif

Kalkulasi estimasi semester selesai berdasarkan rata-rata pertumbuhan progress antar semester. "Stagnan" = tidak ada pertumbuhan atau menurun.

{{-- Tab Kelas --}}
@foreach($kelasList as $idx => $k) @endforeach
@foreach($kelasList as $idx => $k)
@if(isset($projectedByKelas[$k]) && count($projectedByKelas[$k]) > 0)
Menampilkan {{ count($projectedByKelas[$k]) }} santri kelas {{ $k }}
@foreach($projectedByKelas[$k] as $pg)
{{ \Illuminate\Support\Str::limit($pg['santri']->nama_lengkap, 18) }}
@php $prog = min($pg['current_progress'], 100); $gc = $prog >= 80 ? '#66bb6a,#2e7d32' : ($prog >= 50 ? '#ffa726,#f57f17' : '#ef5350,#c62828'); @endphp
{{ number_format($prog, 0) }}%
@if($pg['current_progress'] >= 100) Khatam @elseif($pg['semesters_to_grad'] !== null) +{{ $pg['semesters_to_grad'] }} sem
{{ $pg['growth_rate'] > 0 ? '+' : '' }}{{ $pg['growth_rate'] }}%/sem @else Stagnan @endif
Detail
@endforeach
@php $kelasModelObj2 = $kelasModels->where('nama_kelas', $k)->first(); @endphp Lihat Detail Capaian Kelas {{ $k }}
@else
Belum ada data kalkulasi untuk kelas {{ $k }}
@endif
@endforeach
Estimasi dihitung berdasarkan rata-rata pertumbuhan progress per semester dari data historis yang tersedia.
{{-- ==================== TAB 6: LAPORAN ==================== --}}
@if($semesterSummary)

Semester Summary — {{ $semesterSummary['semester']->nama_semester }}

{{ $semesterSummary['total_santri'] }}
Total Santri
{{ number_format($semesterSummary['avg_progress'],1) }}%
Rata-rata Progress
{{ $semesterSummary['kenaikan'] >= 0 ? '+' : '' }}{{ number_format($semesterSummary['kenaikan'],1) }}% dari {{ $semesterSummary['prev_semester']?->nama_semester ?? 'N/A' }}
{{ $semesterSummary['santri_khatam'] }}
Khatam Semua Materi
{{ $semesterSummary['santri_remedial_count'] }}
Perlu Remedial (<30%)
Materi Terbanyak Dikhatamkan
@forelse($semesterSummary['materi_khatam'] as $mk)
{{ $mk['materi']->nama_kitab ?? '-' }} {{ $mk['count'] }} santri
@empty Belum ada @endforelse
Materi Paling Sedikit Progress
@forelse($semesterSummary['materi_min'] as $mm)
{{ $mm['materi']->nama_kitab ?? '-' }} {{ $mm['avg'] }}%
@empty Tidak ada data @endforelse
@if($semesterSummary['santri_remedial_count'] > 0)
Santri Perlu Remedial
@foreach($semesterSummary['santri_remedial'] as $sr) {{ $sr->nama_lengkap }} ({{ $sr->kelas }}) @endforeach
@endif
@else
Pilih semester pada filter untuk melihat laporan
@endif

Export Rapor Per Santri

Input Capaian Baru Daftar Capaian Master Materi
{{-- ===== CHART.JS ===== --}} @endsection