{{-- resources/views/santri/capaian/index.blade.php --}} @extends('layouts.app') @section('title', 'Capaian Materi') @section('content') {{-- ===== HERO ===== --}}

Capaian Materi

Pantau progress hafalan dan pembelajaran, {{ $santri->nama_lengkap }} • {{ $santri->kelasPrimary?->kelas?->nama_kelas ?? '-' }}

{{-- ===== CIRCLE CARDS ===== --}}
@php $avgPct = min(100, round($rataRataPersentase, 1)); $alquranPct = min(100, round($statistikKategori['Al-Qur\'an']['avg'], 1)); $hadistPct = min(100, round($statistikKategori['Hadist']['avg'], 1)); $tambahanPct = min(100, round($statistikKategori['Materi Tambahan']['avg'], 1)); $r = 34; $circ = round(2 * 3.14159 * $r, 2); function dashOffset($pct, $circ) { return round($circ * (1 - $pct/100), 2); } $selesaiPct = $totalCapaian > 0 ? min(100, round(($materiSelesai/$totalCapaian)*100, 1)) : 0; @endphp {{-- Overall --}}
{{ $avgPct }}%
Rata-rata
{{ $totalCapaian }} materi
{{-- Al-Qur'an --}}
{{ $alquranPct }}%
Al-Qur'an
{{ $statistikKategori["Al-Qur'an"]['count'] }} materi
{{-- Hadist --}}
{{ $hadistPct }}%
Hadist
{{ $statistikKategori['Hadist']['count'] }} materi
{{-- Materi Tambahan --}}
{{ $tambahanPct }}%
Tambahan
{{ $statistikKategori['Materi Tambahan']['count'] }} materi
{{-- Khatam --}}
{{ $materiSelesai }}
Khatam
dari {{ $totalCapaian }}
{{-- ===== ACCESS BANNER ===== --}} @if($capaianAccessOpen)
✍️
AKTIF

Akses Input Capaian Dibuka!

@if(!empty($capaianAccessConfig['catatan'])) 📋 {{ $capaianAccessConfig['catatan'] }} @else Ustadz/Ustadzah telah membuka akses untuk menginput data capaian kamu. Segera isi sebelum ditutup! @endif

@if(!empty($capaianAccessConfig['opened_by'])) {{ $capaianAccessConfig['opened_by'] }} @endif @if(!empty($capaianAccessConfig['opened_at'])) {{ \Carbon\Carbon::parse($capaianAccessConfig['opened_at'])->isoFormat('D MMM HH:mm') }} @endif @if($capaianSisaWaktu) Tutup dalam: {{ $capaianSisaWaktu }} @endif @if(!empty($capaianAccessConfig['id_semester'])) @php $semLabel = $semesters->where('id_semester', $capaianAccessConfig['id_semester'])->first(); @endphp @if($semLabel) {{ $semLabel->nama_semester }} @endif @endif
@else
🔒

Input Capaian Belum Tersedia

Ustadz/Ustadzah belum membuka akses input capaian. Nantikan informasinya ya!

@endif {{-- ===== MILESTONE BANNER ===== --}} @if($avgPct >= 100)
🏆
Alhamdulillah, Khatam Semua Materi!
Semua materi telah diselesaikan. Terus pertahankan!
@elseif($avgPct >= 75)
🔥
Hampir Finish! Tinggal {{ 100 - $avgPct }}% lagi
Progress sangat bagus! Pertahankan semangat belajar.
@elseif($avgPct >= 50)
Setengah Perjalanan! Terus Semangat
Sudah melewati setengah jalan. Sedikit lagi menuju finish!
@endif {{-- ===== TAB NAVIGATION — 3 tab saja (Grafik dihapus) ===== --}}
{{-- =================================================================== TAB 1: RINGKASAN Isi: KPI strip (tetap) + Kategori Cards (tetap) + [BARU] chart Progress per Kategori + [BARU] chart Progress Rata-rata per Semester + [BARU] chart Progress per Materi (horizontal bar) [DIHAPUS] Total Progress Keseluruhan (progress bar besar) =================================================================== --}}
{{-- KPI Strip — tetap sama --}}
{{ $totalCapaian }}
Total Materi
{{ $materiSelesai }}
Selesai
{{ $totalCapaian - $materiSelesai }}
Berlangsung
{{ $avgPct }}%
Rata-rata
{{-- Kategori Cards — tetap sama --}}
@foreach([ ['Al-Qur\'an', 'fas fa-book-quran', 'var(--success-color)', '#e8f5e9'], ['Hadist', 'fas fa-scroll', 'var(--info-color)', '#e3f2fd'], ['Materi Tambahan', 'fas fa-book', 'var(--warning-color)', '#fffde7'], ] as [$kat, $icon, $color, $bg]) @php $d = $statistikKategori[$kat]; $avg = min(100, round($d['avg'], 1)); @endphp

{{ $kat }}

Progress {{ $avg }}%
{{ $d['count'] }}
Materi
{{ $d['selesai'] }}
Selesai
{{ $d['count'] - $d['selesai'] }}
Proses
@endforeach
{{-- Charts: Bar Kategori + Line Semester (2 kolom) --}}

Progress per Kategori

Perbandingan rata-rata progress tiap kelompok materi.

Progress Rata-rata per Semester

Trend progress dari semester ke semester.

{{-- Horizontal bar: Progress per Materi (full width) --}}

Progress per Materi

Urutan progress dari yang paling sedikit hingga paling banyak.

{{-- /tab-overview --}} {{-- =================================================================== TAB 2: DAFTAR MATERI — tidak berubah =================================================================== --}}
@if($selectedSemester) Reset @endif
{{ $capaians->count() }} materi ditemukan
@if($capaianAccessOpen) Input Capaian @endif
@if($capaians->count() > 0) @php $grouped = $capaians->groupBy(fn($c) => $c->materi->kategori); @endphp @foreach([ ['Al-Qur\'an', 'fas fa-book-quran', 'var(--success-color)', 'badge-success'], ['Hadist', 'fas fa-scroll', 'var(--info-color)', 'badge-info' ], ['Materi Tambahan', 'fas fa-book', 'var(--warning-color)', 'badge-warning'], ] as [$kat, $icon, $color, $badge]) @if(isset($grouped[$kat]) && $grouped[$kat]->count() > 0)

{{ $kat }} {{ $grouped[$kat]->count() }} materi

@foreach($grouped[$kat] as $capaian) @php $pct = min(100, round($capaian->persentase, 1)); if ($pct >= 100) { $statColor = '#2e7d32'; $statIcon = 'fa-check-circle'; } elseif ($pct >= 75) { $statColor = '#1565c0'; $statIcon = 'fa-fire'; } elseif ($pct >= 50) { $statColor = '#e65100'; $statIcon = 'fa-bolt'; } elseif ($pct >= 25) { $statColor = '#f57f17'; $statIcon = 'fa-seedling'; } else { $statColor = '#c62828'; $statIcon = 'fa-circle'; } @endphp

{{ $capaian->materi->nama_kitab }}

{{ count($capaian->pages_array) }}/{{ $capaian->materi->total_halaman }} hal • {{ \Carbon\Carbon::parse($capaian->tanggal_input)->isoFormat('D MMM YYYY') }}
{{ $pct }}% {{ $pct >= 100 ? 'Khatam' : ($pct >= 75 ? 'Hampir' : ($pct >= 50 ? 'Tengah' : 'Proses')) }}
@endforeach
@endif @endforeach @else

Belum Ada Data

Belum ada capaian tercatat{{ $selectedSemester ? ' untuk semester yang dipilih' : '' }}.

@if($capaianAccessOpen) Input Capaian Sekarang @endif
@endif
{{-- /tab-materi --}} {{-- =================================================================== TAB 3: KALKULASI PROGRESS (dulu "Prediksi", tab Grafik dihapus) Isi: Header stats + Status card + Gantt estimasi per materi + Trend chart =================================================================== --}}
@php $currentPct = min(100, round($rataRataPersentase, 1)); $growthRate = $progressHistory['growth_rate'] ?? 0; $historyData = $progressHistory['history'] ?? []; $remaining = 100 - $currentPct; $semToFinish = null; if ($growthRate > 0 && $currentPct < 100) { $semToFinish = ceil($remaining / $growthRate); } elseif ($currentPct >= 100) { $semToFinish = 0; } $allCapaiansForPred = $progressHistory['all_capaians'] ?? collect(); @endphp {{-- Header stats — mirip pred-hero admin --}}
Progress Saat Ini
{{ $currentPct }}%
rata-rata semua materi
Kecepatan Belajar
{{ $growthRate > 0 ? '+' . $growthRate : ($growthRate < 0 ? $growthRate : '—') }}%
per semester (rata-rata)
Estimasi Khatam
@if($currentPct >= 100) ✓ Khatam @elseif($semToFinish !== null) {{ $semToFinish }} semester @else Stagnan @endif
lagi dari sekarang
{{-- Status card --}} @if($currentPct >= 100)
🏆
Alhamdulillah! Semua Materi Khatam!

Semua materi telah diselesaikan 100%. Terus pertahankan semangat!

@elseif($growthRate <= 0)
Perlu Perhatian

Progress tidak meningkat atau menurun antar semester. Yuk tingkatkan semangat belajar!

@else
{{ $semToFinish }}
Semester Lagi
{{ 100 - $currentPct }}%
Sisa Progress
+{{ $growthRate }}%
Growth/Semester
Proyeksi Menuju Khatam
@php $projSteps = min($semToFinish, 8); @endphp
@for($s = 0; $s <= $projSteps; $s++) @php $projPct = min(100, $currentPct + ($s * $growthRate)); $isDone = $projPct >= 100; @endphp
{{ round($projPct) }}%
{{ $s == 0 ? 'Skrg' : 'Sem+'.$s }}
@endfor
@endif {{-- Gantt: Estimasi Selesai per Materi --}}

Estimasi Selesai per Materi

Seberapa jauh tiap materi dari khatam, dan estimasi berapa semester lagi berdasarkan kecepatan belajarmu.

@if($allCapaiansForPred->count() > 0) @foreach([ ["Al-Qur'an", 'fas fa-book-quran', '#6FBA9D'], ['Hadist', 'fas fa-scroll', '#81C6E8'], ['Materi Tambahan', 'fas fa-book', '#FFD56B'], ] as [$kat, $icon, $color]) @php $katCaps = $allCapaiansForPred->filter(fn($c) => $c->materi && $c->materi->kategori === $kat); @endphp @if($katCaps->count() > 0)
{{ $kat }}
@foreach($katCaps->sortBy('persentase') as $cap) @php $pctCap = min(100, round($cap->persentase, 1)); $remCap = 100 - $pctCap; $semEst = ($growthRate > 0 && $pctCap < 100) ? ceil($remCap / $growthRate) : ($pctCap >= 100 ? 0 : null); $barColor = $pctCap >= 100 ? '#2e7d32,#66bb6a' : ($pctCap >= 75 ? '#1565c0,#64b5f6' : ($pctCap >= 50 ? '#e65100,#ffa726' : '#c62828,#ef5350')); @endphp
{{ \Illuminate\Support\Str::limit($cap->materi->nama_kitab, 20) }}
@if($pctCap > 12){{ $pctCap }}%@endif
@if($pctCap >= 100) Khatam @elseif($semEst !== null) +{{ $semEst }} sem lagi @else Stagnan @endif
@endforeach
@endif @endforeach @else
Belum ada data capaian.
@endif
Catatan: Prediksi dihitung berdasarkan rata-rata pertumbuhan progress per semester. Hasilnya bisa berubah tergantung semangat dan konsistensi belajar. Terus tingkatkan!
{{-- /tab-kalkulasi --}}
{{-- /padding inner --}}
{{-- /content-box --}} {{-- ===== SCRIPTS ===== --}} @endsection