{{-- Header --}}

Poin Kedisiplinan

Sistem Monitoring Poin & Sanksi Siswa

{{-- TOMBOL SETTING --}} @if(in_array(strtolower(auth()->user()->role), ['admin', 'kepala_sekolah'])) @endif
{{ date('d M Y') }}
{{-- KOLOM KIRI (2/3): FORM INPUT --}}

Form Input Pelanggaran

{{-- 1. CARI SISWA --}}
@if($search) @endif
{{-- Hasil Pencarian Dropdown --}} @if(!empty($searchResults) && count($searchResults) > 0)
    @foreach($searchResults as $result)
  • {{ $result->nama }}
    Kelas: {{ $result->kelas->nama_kelas ?? '-' }} • NIS: {{ $result->nis }}
  • @endforeach
@endif @error('siswa_id') Siswa harus dipilih dari daftar. @enderror
{{-- JENIS PELANGGARAN --}}
@error('master_pelanggaran_id') Pilih jenis pelanggaran. @enderror
{{-- TANGGAL & KETERANGAN --}}
{{-- TOMBOL SIMPAN --}}
{{-- KOLOM KANAN (1/3): INFO SISWA --}}
@if($selectedSiswa)
@if($selectedSiswa->foto) @else @endif

{{ $selectedSiswa->nama }}

{{ $selectedSiswa->kelas->nama_kelas ?? '-' }} • {{ $selectedSiswa->nis }}

Poin Aktif ({{ date('F') }})

{{ $poinBulanIni }}
@if($poinBulanIni >= 10) Terkena Sanksi @else Batas Sanksi: 10 Poin @endif

Terakhir Melanggar

@if($riwayatPelanggaran->isNotEmpty()) @php $latest = $riwayatPelanggaran->first(); @endphp

{{ $latest->masterPelanggaran->jenis_pelanggaran }}

+{{ $latest->masterPelanggaran->poin }}
{{ date('d F Y', strtotime($latest->tanggal)) }}
@else

Belum ada pelanggaran.

@endif
@else

Data Siswa

Pilih siswa untuk melihat profil.

@endif
{{-- MODAL ALERT MERAH (Auto Popup) --}} @if($showSanctionAlert)

PERINGATAN SANKSI

Siswa {{ $selectedSiswa->nama }} telah mencapai batas toleransi.

Total Poin Bulan Ini

{{ $poinBulanIni }}

Tindakan Wajib:
  • Dilarang mengikuti kegiatan Renang.
  • Dilarang mengikuti kegiatan Piket Kelas.
@endif {{-- Notifikasi Sukses --}} @if (session()->has('success'))

Berhasil!

{{ session('success') }}

@endif {{-- ========================================================= --}} {{-- TABEL DATA AKUMULASI + STATUS SANKSI MANUAL (TERBARU) --}} {{-- ========================================================= --}}
{{-- HEADER KARTU TABEL (Diperbaiki agar tidak tabrakan di HP) --}}

List Pelanggaran

Tentukan aksi berdasarkan poin siswa.

{{-- FILTER GROUP --}}
@if(!$selectedSiswa) @endif @if($selectedSiswa) @endif
{{-- WADAH TABEL (Diperbaiki agar PASTI bisa di-scroll horizontal) --}}
{{-- Tambahkan whitespace-nowrap agar teks tidak turun ke bawah --}} @forelse($dataLaporan as $row) @php $totalPoin = $row->catatanPelanggarans ->whereNull('deleted_at') ->sum(fn($i) => $i->masterPelanggaran->poin); $count = $row->catatanPelanggarans->count(); @endphp {{-- 1. SISWA --}} {{-- 2. PELANGGARAN COMPACT --}} {{-- 3. TOTAL POIN --}} {{-- 4. STATUS SANKSI --}} {{-- 5. OPSI --}} @empty @endforelse
Siswa Pelanggaran Poin Status Aksi Opsi
{{ substr($row->nama, 0, 1) }}
{{ $row->nama }}
{{ $row->kelas->nama_kelas ?? '-' }} • NIS: {{ $row->nis }}
@if($row->catatanPelanggarans->isEmpty()) Nihil @else @php $latest = $row->catatanPelanggarans->first(); $sisaCount = $count - 1; $severityColor = $latest->masterPelanggaran->poin >= 10 ? 'bg-rose-600' : 'bg-orange-400'; @endphp
{{ $latest->masterPelanggaran->jenis_pelanggaran }} +{{ $latest->masterPelanggaran->poin }}
{{ date('d/m/y', strtotime($latest->tanggal)) }}
@if($sisaCount > 0)
Riwayat Sebelumnya
@foreach($row->catatanPelanggarans->skip(1) as $history) @php $isReset = $history->deleted_at !== null; @endphp
{{ $history->masterPelanggaran->jenis_pelanggaran }} {{ $isReset ? '(Direset)' : '' }}
{{ date('d/m/y', strtotime($history->tanggal)) }}
+{{ $history->masterPelanggaran->poin }}
@endforeach
@endif
@endif
{{ $totalPoin }}
@if($row->status_sanksi) @php $s = $row->status_sanksi; $style = 'bg-slate-100 text-slate-600 border-slate-300'; if (Str::contains($s, 'Direset')) { $style = 'bg-emerald-100 text-emerald-700 border-emerald-200'; } elseif (Str::contains($s, ['SP', 'Peringatan', 'Skorsing', 'Tindakan', 'Orang Tua'])) { $style = 'bg-rose-100 text-rose-700 border-rose-200'; } elseif (Str::contains($s, ['Piket', 'Pembinaan', 'Bersih'])) { $style = 'bg-orange-100 text-orange-700 border-orange-200'; } elseif (Str::contains($s, ['Teguran', 'Lisan', 'Nasihat'])) { $style = 'bg-blue-100 text-blue-700 border-blue-200'; } $tampilanTeks = str_replace('Direset ', '', $s); @endphp {{ $tampilanTeks }} @if(Str::contains($s, 'Direset')) @endif @else @if($totalPoin > 0)
Belum Ditindak @if($totalPoin >= 10) ! WAJIB PROSES @endif
@else Aman @endif @endif
@if($totalPoin > 0) @else - @endif

Tidak ada data pelanggaran.

{{ $dataLaporan->links() }}
{{-- MODAL SETTING MASTER DATA (PELANGGARAN & SANKSI) --}} @if($showSettingModal)
{{-- Header Modal + TABS --}}

Pengaturan Master

{{-- Tabs Navigation --}}
{{-- TAB 1: MASTER PELANGGARAN --}} @if($activeSettingTab == 'pelanggaran')

{{ $isEditMode ? 'Edit Pelanggaran' : 'Tambah Pelanggaran Baru' }}

@if($isEditMode) @endif
@foreach($masterPelanggarans as $m) @endforeach
Jenis PelanggaranPoinAksi
{{ $m->jenis_pelanggaran }} +{{ $m->poin }}
@endif {{-- TAB 2: MASTER SANKSI --}} @if($activeSettingTab == 'sanksi')

{{ $isEditMode ? 'Edit Sanksi' : 'Tambah Sanksi Baru' }}

@if($isEditMode) @endif
@foreach($masterSanksis as $s) @endforeach
Nama SanksiTingkatAksi
{{ $s->nama_sanksi }} @if($s->bobot == 1) Ringan @elseif($s->bobot == 2) Sedang @else Berat @endif
@endif
@endif {{-- MODAL PILIH SANKSI (TINDAKAN) --}} @if($showSanksiModal)
{{-- Header Modal --}}

Tindak Lanjut Siswa

{{-- INFO SISWA & POIN --}}

Nama Siswa

{{ $targetSiswaNama }}

Total Poin

{{ $targetSiswaPoin }}
{{-- TOMBOL RESET POIN --}}

Gunakan ini jika sanksi sudah dijalankan & poin ingin di-nol-kan.

{{-- FORM DINAMIS --}}

Pilih Keputusan:

@if(count($masterSanksis) > 0)
@foreach($masterSanksis as $s) @php $borderColor = $s->bobot == 3 ? 'hover:border-rose-300 hover:bg-rose-50' : ($s->bobot == 2 ? 'hover:border-orange-300 hover:bg-orange-50' : 'hover:border-blue-300 hover:bg-blue-50'); $textColor = $s->bobot == 3 ? 'group-hover:text-rose-700' : ($s->bobot == 2 ? 'group-hover:text-orange-700' : 'group-hover:text-blue-700'); $ringColor = $s->bobot == 3 ? 'ring-rose-300 bg-rose-50 border-rose-300' : ($s->bobot == 2 ? 'ring-orange-300 bg-orange-50 border-orange-300' : 'ring-blue-300 bg-blue-50 border-blue-300'); $radioColor = $s->bobot == 3 ? 'text-rose-600 focus:ring-rose-500' : ($s->bobot == 2 ? 'text-orange-500 focus:ring-orange-500' : 'text-blue-600 focus:ring-blue-500'); @endphp @endforeach
@else
Belum ada data sanksi.
Silakan atur di menu "Atur Pelanggaran".
@endif {{-- Opsi Manual --}}

Lainnya (Manual):

@endif