@php $statusBadge = [ 'baru' => 'bg-amber-100 text-amber-700', 'aktif' => 'bg-emerald-100 text-emerald-700', 'nonaktif' => 'bg-slate-200 text-slate-600', 'lulus' => 'bg-blue-100 text-blue-700', 'keluar' => 'bg-slate-200 text-slate-600', ]; $statusLabel = [ 'baru' => 'Baru', 'aktif' => 'Aktif', 'nonaktif' => 'Nonaktif', 'lulus' => 'Lulus', 'keluar' => 'Keluar', ]; $tagihanStatusBadge = [ 'belum_lunas' => 'bg-amber-100 text-amber-700', 'sebagian' => 'bg-blue-100 text-blue-700', 'lunas' => 'bg-emerald-100 text-emerald-700', 'dibatalkan' => 'bg-slate-200 text-slate-500', ]; $tagihanStatusLabel = [ 'belum_lunas' => 'Belum Lunas', 'sebagian' => 'Sebagian', 'lunas' => 'Lunas', 'dibatalkan' => 'Dibatalkan', ]; $kartuStatusBadge = [ 'aktif' => 'bg-emerald-100 text-emerald-700', 'nonaktif' => 'bg-slate-200 text-slate-500', 'hilang' => 'bg-amber-100 text-amber-700', 'diblokir' => 'bg-red-100 text-red-700', ]; $jenisKelaminLabel = ['L' => 'Laki-laki', 'P' => 'Perempuan']; $kartuAktifCount = $santri->kartuSantris->where('status', 'aktif')->count(); @endphp
@if ($errorHapus) @endif {{-- Hero: identity only - numbers live in the stat row below, kept separate so this card reads as "who" at a glance rather than competing with the figures for attention. --}}
{{ strtoupper(substr($santri->nama, 0, 1)) }}

{{ $santri->nama }}

{{ $statusLabel[$santri->status] ?? $santri->status }}

NIS {{ $santri->nis }} • {{ $santri->lembaga?->nama ?? 'Belum ada lembaga' }} • {{ $santri->rayon?->nama ?? 'Belum ada rayon' }} • {{ $santri->kamar?->nama ?? 'Belum ada kamar' }}

@if ($santri->status === 'baru') Verifikasi @endif Ubah Hapus
{{-- Stat row --}}

Saldo

Rp {{ number_format($saldo, 0, ',', '.') }}

Tabungan

Rp {{ number_format($rekeningTabungan?->saldo ?? 0, 0, ',', '.') }}

{{ $rekeningTabungan ? ucfirst($rekeningTabungan->status) : 'Belum dibuka' }}

Tagihan Belum Lunas

{{ $tagihanBelumLunasCount }}

Kartu Aktif

{{ $kartuAktifCount }}

Kategori Diskon

{{ $santri->kategoriDiskon?->nama ?? '-' }} @if ($santri->kategoriDiskon) ({{ $santri->kategoriDiskon->persentase }}%) @endif

{{-- Biodata + sidebar (Kartu/Wali) share the grid; Tagihan and Riwayat Transaksi break out to full width below since a table benefits from the extra horizontal room far more than a two-column constraint helps it. --}}

Biodata

NIK
{{ $santri->nik ?? '-' }}
Jenis Kelamin
{{ $jenisKelaminLabel[$santri->jenis_kelamin] ?? '-' }}
Tempat, Tanggal Lahir
{{ $santri->tempat_lahir ?? '-' }}@if ($santri->tanggal_lahir), {{ $santri->tanggal_lahir->translatedFormat('d F Y') }}@endif
Tanggal Masuk
{{ $santri->tanggal_masuk?->translatedFormat('d F Y') ?? '-' }}
Alamat
{{ $santri->alamat ?? '-' }}
Keluarga
{{ $santri->keluarga?->nama_kepala_keluarga ?? '-' }}
No. KK: {{ $santri->keluarga?->no_kk ?? '-' }}
Lembaga
{{ $santri->lembaga?->nama ?? '-' }}
Rayon
{{ $santri->rayon?->nama ?? 'Belum ditempatkan' }}
Kamar Aktif
{{ $santri->kamar?->nama ?? 'Belum ditempatkan' }}
@if ($santri->kamar)
{{ $santri->kamar->kode }}{{ $santri->kamar->gedung ? ' · '.$santri->kamar->gedung : '' }}
@endif
{{-- Sidebar column --}}

Kartu Santri

@forelse ($santri->kartuSantris as $kartu)

{{ $kartu->nomor_kartu }}

{{ ucfirst($kartu->status) }}
@empty @endforelse

Wali

@forelse ($santri->walis as $wali)
{{ strtoupper(substr($wali->name, 0, 1)) }}

{{ $wali->name }}

{{ $wali->pivot->hubungan }}{{ $wali->pivot->is_auto_generated ? ' · otomatis' : '' }}

@empty @endforelse

Riwayat Kamar

Perpindahan kamar santri tercatat otomatis saat data santri diperbarui.

@if ($santri->riwayatKamar->isEmpty())

Belum ada riwayat penempatan kamar.

@else
@foreach ($santri->riwayatKamar as $riwayat) @endforeach
Kamar Rayon Mulai Selesai Keterangan
{{ $riwayat->kamar->nama }} ({{ $riwayat->kamar->kode }}) {{ $riwayat->kamar->rayon?->nama ?? '-' }} {{ $riwayat->tanggal_mulai->format('d/m/Y') }} @if ($riwayat->tanggal_selesai) {{ $riwayat->tanggal_selesai->format('d/m/Y') }} @else Aktif @endif {{ $riwayat->alasan_perpindahan ?? '-' }}
@endif
{{-- Full-width: Tagihan --}}

Tagihan

@if ($tagihans->isEmpty()) @else
@foreach ($tagihans as $tagihan) @endforeach
Jenis Periode Nominal Status
{{ $tagihan->jenisTagihan->nama }} {{ $tagihan->periode_label }} Rp {{ number_format($tagihan->nominal, 0, ',', '.') }} @if ($tagihan->diskon_persen) (diskon {{ $tagihan->diskon_persen }}%) @endif {{ $tagihanStatusLabel[$tagihan->status] ?? $tagihan->status }}
{{ $tagihans->links('vendor.pagination.table-footer') }}
@endif
{{-- Full-width: Riwayat Transaksi --}}

Riwayat Transaksi

@if ($transaksis->isEmpty()) @else
@foreach ($transaksis as $tx) @endforeach
Waktu Jenis Nominal Status
{{ $tx->created_at->format('d/m/Y H:i') }} {{ $jenisTransaksiLabel[$tx->jenis] ?? $tx->jenis }} {{ $tx->arah === 'kredit' ? '+' : '-' }}Rp {{ number_format($tx->nominal, 0, ',', '.') }} {{ $tx->status }}
{{ $transaksis->links('vendor.pagination.table-footer') }}
@endif

Riwayat Tabungan

Setoran tunai, pemindahan dari saldo, Midtrans, dan koreksi tabungan santri.

@if ($transaksiTabungan->isEmpty()) @else
@foreach ($transaksiTabungan as $tx) @endforeach
Waktu Jenis / Kanal Nominal Saldo Tabungan Status
{{ $tx->created_at->format('d/m/Y H:i') }}

{{ $jenisTransaksiLabel[$tx->jenis] ?? ucwords(str_replace('_', ' ', $tx->jenis)) }}

{{ ucwords(str_replace('_', ' ', $tx->kanal)) }}

{{ $tx->arah === 'kredit' ? '+' : '−' }} Rp {{ number_format($tx->nominal, 0, ',', '.') }} Rp {{ number_format($tx->saldo_sesudah, 0, ',', '.') }} {{ ucwords(str_replace('_', ' ', $tx->status)) }}
{{ $transaksiTabungan->links('vendor.pagination.table-footer') }}
@endif