@extends('layouts.app') @section('title', 'Dashboard') @section('content')
{{-- Header --}}

Dashboard

Ringkasan pelanggaran siswa

{{-- Gradient Stats Cards --}}

Pelanggaran Hari Ini

{{ $stats['today_violations'] }}

data terbaru

Total Pelanggaran

{{ $stats['total_violations'] }}

semua waktu

Siswa Aktif

{{ $stats['total_students'] }}

terdata

SP Draft

{{ $stats['active_sp'] }}

menunggu tindak lanjut

{{-- Grafik Tren Pelanggaran --}}

Tren Pelanggaran Siswa

Jumlah pelanggaran per hari

Total hari: Hari ini: {{ $dailyCurrent }} @if ($trendPercent > 0) +{{ $trendPercent }}% vs kemarin @elseif ($trendPercent < 0) {{ $trendPercent }}% vs kemarin @else Stabil vs kemarin @endif
{{-- Grafik Jenis Pelanggaran --}}

Pelanggaran per Jenis

Jenis pelanggaran paling banyak

{{-- Calendar --}}

Kalender Pelanggaran

{{-- Day headers --}}
{{-- Calendar grid --}}
{{-- Legend --}}
1 2 3+ Klik badge untuk lihat detail
{{-- Right Sidebar --}}
{{-- SP Thresholds --}} @if($spThresholds->count() > 0)

Ambang SP

Siswa per level

@foreach($spThresholds as $i => $threshold) @php // Batas atas level ini = ambang minimal level berikutnya $nextMin = $spThresholds[$i + 1]->min_points ?? null; $studentsAtRisk = \App\Models\Student::where('is_active', true)->get()->filter(function($s) use ($threshold, $nextMin) { $pts = $s->total_points; if ($nextMin !== null) { return $pts >= $threshold->min_points && $pts < $nextMin; } return $pts >= $threshold->min_points; }); $count = $studentsAtRisk->count(); @endphp

{{ $threshold->name }}

{{ $threshold->min_points }}{{ $nextMin !== null ? '–'.($nextMin - 1) : '+' }} poin

{{ $count }}

siswa

@if($count > 0)
@endif
@endforeach
@endif {{-- Top 5 Students --}}

Poin Tertinggi

Top 5 siswa

@forelse($topStudents as $student)

{{ $student->full_name }}

{{ $student->class_name }}

{{ $student->total_points }}
@empty

Belum ada data

@endforelse
@if(count($topStudents) > 0) @endif
@push('scripts') @endpush @endsection