@extends('layouts.app') @section('content') {{-- ========== INLINE STYLES ========== --}} {{-- ========== FILTER BAR ========== --}}
Filter:
@if($kelas || $selectedSemester != ($semesterAktif->id_semester ?? '')) Reset @endif
{{-- ========== TAB NAVIGATION ========== --}}
{{-- ==================== TAB 1: RINGKASAN ==================== --}}
{{-- KPI Cards --}}
Total Capaian
{{ $totalCapaian }}
Data tercatat
Santri Aktif
{{ $totalSantriAktif }}
Sedang belajar
Rata-rata Progress
{{ number_format($rataRataProgress, 1) }}%
Keseluruhan
Materi Selesai
{{ $capaianSelesai }}
100% khatam
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 --}}
Progress per Kategori
Distribusi Progress
{{-- ==================== TAB 2: RANKING KELAS ==================== --}}

Rekap Per Kelas dengan Status Khatam

@foreach($kelasList as $idx => $k) @endforeach
@foreach($kelasList as $idx => $k)
{{-- Summary Stats --}} @if(isset($rekapKelas[$k]['summary']))
{{ $rekapKelas[$k]['summary']['total_santri'] }}
Total Santri Aktif
{{ $rekapKelas[$k]['summary']['avg_progress'] }}%
Rata-rata Progress
{{ $rekapKelas[$k]['summary']['total_selesai'] }}
Total Materi Selesai
{{ $rekapKelas[$k]['summary']['santri_tuntas'] }}
Santri Tuntas (100%)
@endif @if(count($rekapKelas[$k]['ranking']) > 0) @foreach($rekapKelas[$k]['ranking'] as $rIdx => $r) @endforeach
# Nama Santri Progress Materi Progress Bar Al-Qur'an Hadist Tambahan Aksi
@if($rIdx < 3) {{ $rIdx + 1 }} @else {{ $rIdx + 1 }} @endif {{ $r['santri']->nama_lengkap }}
{{ $r['santri']->nis }}
{{ number_format($r['avg_progress'], 1) }}% {{ $r['selesai'] }}/{{ $r['total_materi_kelas'] }} selesai
{{ number_format($r['alquran'], 0) }}% {{ number_format($r['hadist'], 0) }}% {{ number_format($r['tambahan'], 0) }}% @if($r['is_full_khatam'])
@csrf
@else Detail @endif
{{-- Top & Bottom --}} @if(count($rekapKelas[$k]['ranking']) >= 3)
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 untuk kelas {{ $k }}
@endif {{-- Khatam Section --}} @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 3: TREND SEMESTER ==================== --}}
{{-- Line Chart: Comparison Per Kelas Per Semester --}}
Comparison Chart — Progress Rata-rata Per Semester

Trend progress rata-rata setiap kelas antar semester. Evaluasi apakah semester ini lebih baik dari sebelumnya.

{{-- SoS Growth Table --}}

Semester-over-Semester Growth {{ count($sosGrowth) }} santri

Perbandingan pertumbuhan progress tiap santri antar semester. Identifikasi yang stagnan atau menurun.

@if(count($sosGrowth) > 0)
@foreach($allSemestersOrdered as $sem) @endforeach @foreach($sosGrowth as $sg) @foreach($sg['progress'] as $i => $prog) @endforeach @endforeach
Santri Kelas{{ $sem->nama_semester }}
{{ $sg['nama'] }} {{ $sg['kelas'] }}
{{ $prog }}%
@if($i > 0) @php $g = $sg['growth'][$i]; @endphp
{{ $g > 0 ? '+' : '' }}{{ $g }}%
@endif
@else
Belum ada data pertumbuhan
@endif
{{-- SoS Growth Chart --}}
Growth Chart — Top 10 Santri
{{-- ==================== TAB 4: ANALISIS MATERI ==================== --}}
{{-- Materi Completion Rate --}}

Materi Completion Rate Per Semester

Persentase santri yang menyelesaikan tiap materi per semester. Prediksi kapan semua santri selesai.

@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 --}}

Bottleneck Analysis

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

@if(count($bottleneckMateri) > 0) @foreach(array_slice($bottleneckMateri, 0, 5) as $bn) @if($bn['stuck_percentage'] > 0)
{{ number_format($bn['stuck_percentage'], 0) }}% santri stuck di materi {{ $bn['materi']->nama_kitab }} ({{ $bn['materi']->kategori }}) — {{ $bn['stuck_santri'] }} dari {{ $bn['total_santri'] }} santri, rata-rata progress {{ number_format($bn['avg_progress'], 1) }}%
@endif @endforeach @foreach($bottleneckMateri as $bn) @endforeach
Materi Kategori Total Santri Stuck (<50%) % 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 6: PREDIKSI ==================== --}}
{{-- Historical Progress Tracker --}}

Historical Progress Tracker

Timeline progress tiap santri per semester dalam bentuk milestone.

@if(count($projectedGraduation) > 0)
@foreach(array_slice($projectedGraduation, 0, 12) as $pg)
{{ $pg['santri']->nama_lengkap }}
{{ $pg['santri']->kelas }} • {{ $pg['santri']->nis }}
{{ number_format($pg['current_progress'], 0) }}%
@foreach($pg['history'] as $h)
{{ $h['sem'] }}
Progress: {{ number_format($h['avg'], 1) }}%
@endforeach
@endforeach
@else
Belum ada data historis
@endif
{{-- Projected Graduation Timeline (Gantt) --}}

Projected Graduation Timeline

Prediksi kapan santri akan lulus (100% semua materi) berdasarkan pace semester sebelumnya.

@if(count($projectedGraduation) > 0)
@foreach($projectedGraduation as $pg)
{{ \Illuminate\Support\Str::limit($pg['santri']->nama_lengkap, 20) }}
@php $prog = min($pg['current_progress'], 100); $gradColor = $prog >= 80 ? '#66bb6a,#2e7d32' : ($prog >= 50 ? '#ffa726,#f57f17' : '#ef5350,#c62828'); @endphp
{{ number_format($prog, 0) }}%
@if($pg['semesters_to_grad'] !== null && $pg['semesters_to_grad'] > 0)
@endif
@if($pg['current_progress'] >= 100) Khatam @elseif($pg['semesters_to_grad'] !== null) +{{ $pg['semesters_to_grad'] }} semester
{{ $pg['growth_rate'] > 0 ? '+' : '' }}{{ $pg['growth_rate'] }}%/sem @else Stagnan @endif
@endforeach
Catatan: Prediksi berdasarkan rata-rata pertumbuhan progress per semester. Santri "Stagnan" = tidak ada pertumbuhan atau menurun.
@else
Belum ada data untuk prediksi
@endif
{{-- ==================== TAB 7: LAPORAN ==================== --}}
{{-- Semester Summary Report --}} @if($semesterSummary)

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

{{-- Summary KPI Grid --}}
{{ $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'] ? $semesterSummary['prev_semester']->nama_semester : 'N/A' }}
{{ $semesterSummary['santri_khatam'] }}
Naik Kelas / Khatam
{{ $semesterSummary['santri_remedial_count'] }}
Perlu Remedial (<30%)
{{-- Materi Stats --}}
{{-- Materi Paling Banyak Dikhatamkan --}}
Materi Paling Banyak Dikhatamkan
@if($semesterSummary['materi_khatam']->count() > 0) @foreach($semesterSummary['materi_khatam'] as $mk)
{{ $mk['materi']->nama_kitab ?? '-' }} {{ $mk['count'] }} santri
@endforeach @else Belum ada materi yang dikhatamkan @endif
{{-- Materi Paling Sedikit Progress --}}
Materi Paling Sedikit Progress
@if($semesterSummary['materi_min']->count() > 0) @foreach($semesterSummary['materi_min'] as $mm)
{{ $mm['materi']->nama_kitab ?? '-' }} {{ $mm['avg'] }}%
@endforeach @else Tidak ada data @endif
{{-- Santri Remedial List --}} @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 Section --}}

Export Rapor Per Santri

Generate rapor per santri per semester dengan progress, perbandingan, dan catatan. Buka halaman rapor lalu cetak (Ctrl+P) sebagai PDF.

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