{{-- resources/views/admin/keuangan/siswa/transaksi.blade.php --}} @extends('admin.layouts.app') @section('title', 'Transaksi Keuangan Siswa') @push('styles') @endpush @section('content')
@php if (!function_exists('hijriToMasehi')) { function hijriToMasehi($d, $m, $y) { $jd = (int)((11 * $y + 3) / 30) + 354 * $y + 30 * $m - (int)(($m - 1) / 2) + $d + 1948440 - 385; $l = $jd + 68569; $n = (int)((4 * $l) / 146097); $l = $l - (int)((146097 * $n + 3) / 4); $i = (int)((4000 * ($l + 1)) / 1461001); $l = $l - (int)((1461 * $i) / 4) + 31; $j = (int)((80 * $l) / 2447); $d_g = $l - (int)((2447 * $j) / 80); $l = (int)($j / 11); $m_g = $j + 2 - 12 * $l; $y_g = 100 * ($n - 49) + $i + $l; return sprintf("%04d-%02d-%02d", $y_g, $m_g, $d_g); } } if (!function_exists('terbilang')) { function terbilang($angka) { $angka = abs($angka); $baca = array("", "Satu", "Dua", "Tiga", "Empat", "Lima", "Enam", "Tujuh", "Delapan", "Sembilan", "Sepuluh", "Sebelas"); $terbilang = ""; if ($angka < 12) { $terbilang = " " . $baca[$angka]; } else if ($angka < 20) { $terbilang = terbilang($angka - 10) . " Belas"; } else if ($angka < 100) { $terbilang = terbilang($angka / 10) . " Puluh" . terbilang($angka % 10); } else if ($angka < 200) { $terbilang = " Seratus" . terbilang($angka - 100); } else if ($angka < 1000) { $terbilang = terbilang($angka / 100) . " Ratus" . terbilang($angka % 100); } else if ($angka < 2000) { $terbilang = " Seribu" . terbilang($angka - 1000); } else if ($angka < 1000000) { $terbilang = terbilang($angka / 1000) . " Ribu" . terbilang($angka % 1000); } else if ($angka < 1000000000) { $terbilang = terbilang($angka / 1000000) . " Juta" . terbilang($angka % 1000000); } return $terbilang; } } $bulanMasehiIndo = [ 1 => 'Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember' ]; $bulanAkademikHijri = [ ['nama' => 'Syawal', 'idx' => 10, 'tambah_tahun' => 0], ['nama' => 'Dzulqa\'dah', 'idx' => 11, 'tambah_tahun' => 0], ['nama' => 'Dzulhijjah', 'idx' => 12, 'tambah_tahun' => 0], ['nama' => 'Muharram', 'idx' => 1, 'tambah_tahun' => 1], ['nama' => 'Safar', 'idx' => 2, 'tambah_tahun' => 1], ['nama' => 'Rabiul Awal', 'idx' => 3, 'tambah_tahun' => 1], ['nama' => 'Rabiul Akhir', 'idx' => 4, 'tambah_tahun' => 1], ['nama' => 'Jumadil Awal', 'idx' => 5, 'tambah_tahun' => 1], ['nama' => 'Jumadil Akhir','idx' => 6, 'tambah_tahun' => 1], ['nama' => 'Rajab', 'idx' => 7, 'tambah_tahun' => 1], ['nama' => 'Sya\'ban', 'idx' => 8, 'tambah_tahun' => 1], ['nama' => 'Ramadhan', 'idx' => 9, 'tambah_tahun' => 1], ]; $profilSekolah = \App\Models\ProfilSekolah::first(); $logoUrl = $profilSekolah && $profilSekolah->logo_path ? asset('storage/'.$profilSekolah->logo_path) : ''; $namaMadrasah = $profilSekolah->nama_madrasah ?? 'Madrasah Al Idrus'; $alamatMadrasah = $profilSekolah->alamat ?? ''; $telpMadrasah = $profilSekolah->telepon ?? '-'; $emailMadrasah = $profilSekolah->email ?? '-'; $webMadrasah = $profilSekolah->website ?? '-'; $jenjangSiswa = $siswa->kelas->tingkat->jenjang->nama_jenjang ?? '-'; $tingkatSiswa = $siswa->kelas->tingkat->nama_tingkat ?? '-'; $kelasSiswa = $siswa->kelas->nama_kelas ?? '-'; $detailKelas = $jenjangSiswa . ' - ' . $tingkatSiswa . ' - ' . $kelasSiswa; @endphp

Detail Tagihan & Pembayaran

Kelola rincian transaksi cerdas atas nama {{ $siswa->nama_lengkap }}.

Kembali
Foto Profil
{{ $siswa->nama_lengkap }}

NIS: {{ $siswa->nis ?? '-' }} | Kls: {{ $detailKelas }}

TAGIHAN GLOBAL (1 TAHUN PENUH)
Estimasi Setahun:Rp {{ number_format($totalTagihanGlobal ?? $totalTagihan, 0, ',', '.') }}
Total Dibayar:Rp {{ number_format($totalDibayarGlobal ?? $totalDibayar, 0, ',', '.') }}
Kekurangan Global:Rp {{ number_format($sisaTagihanGlobal ?? $sisaTagihan, 0, ',', '.') }}
FILTER PERIODE TAGIHAN
@if(($sisaTagihanPeriode ?? $sisaTagihan) <= 0 && ($totalTagihanPeriode ?? $totalTagihan) > 0)
🟢 LUNAS (PERIODE INI)

Rp 0

@else
🔴 KEKURANGAN (PERIODE INI)

Rp {{ number_format($sisaTagihanPeriode ?? $sisaTagihan, 0, ',', '.') }}

@endif
PILIH ITEM TAGIHAN
Rincian Tagihan Terpilih ({{ $activeTa->tahun_ajaran_hijriyah ?? '-' }} H)
@forelse($tarifs as $tarif) @php $terbayar = $tarif->terbayar ?? 0; $sisa = $tarif->sisa ?? 0; $deposit = $tarif->deposit ?? 0; $tipe = $tarif->kategori->tipe ?? 'Umum'; $berlakuUntuk = $tarif->tingkat_kelas_id ? 'Khusus Tingkat ' . ($tarif->tingkat->nama_tingkat ?? '') : 'Berlaku Semua Tingkat'; $persen = $tarif->total_tarif > 0 ? floor(($terbayar / $tarif->total_tarif) * 100) : 0; if($persen > 100) $persen = 100; @endphp
{{ $tarif->kategori->nama ?? '-' }}
{{ $tipe }} | {{ $berlakuUntuk }} | Tarif: Rp {{ number_format($tarif->nominal, 0, ',', '.') }} x {{ $tarif->pengali }} Siklus
Rp {{ number_format($tarif->total_tarif, 0, ',', '.') }}
@if(in_array($tipe, ['Bulanan', 'Harian', 'Mingguan']))
@php $taHijriRaw = $tarif->tahunAjaran->tahun_ajaran_hijriyah ?? '1447/1448'; $taHijriArr = explode('/', $taHijriRaw); $baseHijriYear = isset($taHijriArr[0]) ? (int)preg_replace('/[^0-9]/', '', $taHijriArr[0]) : 1447; $tglMulaiHijriRaw = $tarif->tahunAjaran->tgl_mulai_hijriyah ?? '10 Syawal 1447 H'; preg_match('/^(\d+)/', $tglMulaiHijriRaw, $matches); $hariHijri = isset($matches[1]) ? (int)$matches[1] : 10; $startDate = $tarif->tahunAjaran->tgl_mulai ?? date('Y') . '-07-01'; $akumulasiUangMasuk = $terbayar + $deposit; @endphp @for($i = 1; $i <= $tarif->pengali; $i++) @php $uangUntukSiklusIni = $akumulasiUangMasuk - (($i - 1) * $tarif->nominal); $sisaUntukSiklusIni = 0; $isClickable = false; if($uangUntukSiklusIni >= $tarif->nominal) { $class = 'lunas'; $icon = ''; $teks = 'Lunas'; } elseif($uangUntukSiklusIni > 0) { $sisaUntukSiklusIni = $tarif->nominal - $uangUntukSiklusIni; $class = 'cicilan'; $icon = ''; $teks = 'Sisa (Rp '.number_format($sisaUntukSiklusIni, 0, ',', '.').')'; $isClickable = true; } else { $sisaUntukSiklusIni = $tarif->nominal; $class = 'belum'; $icon = ''; $teks = 'Belum Bayar'; $isClickable = true; } if ($tipe == 'Bulanan') { $idxBulan = ($i - 1) % 12; $namaHijriTampil = $bulanAkademikHijri[$idxBulan]['nama']; $bulanHijriNum = $bulanAkademikHijri[$idxBulan]['idx']; $tahunHijriCalc = $baseHijriYear + $bulanAkademikHijri[$idxBulan]['tambah_tahun']; $tanggalMasehiDB = hijriToMasehi($hariHijri, $bulanHijriNum, $tahunHijriCalc); $approxMasehiTime = strtotime($tanggalMasehiDB); $labelHijriUtama = $hariHijri . ' ' . $namaHijriTampil . ' ' . $tahunHijriCalc . ' H'; $cleanHijriUtama = $labelHijriUtama; $teksKeteranganOtomatis = "SPP Bulan {$namaHijriTampil} {$tahunHijriCalc} H"; $fullMasehi = date('d', $approxMasehiTime) . ' ' . $bulanMasehiIndo[(int)date('n', $approxMasehiTime)] . ' ' . date('Y', $approxMasehiTime); } else { $stepDays = ($tipe == 'Mingguan') ? 7 : 1; $approxMasehiTime = strtotime("+" . round(($i - 1) * $stepDays) . " days", strtotime($startDate)); $tanggalMasehiDB = date('Y-m-d', $approxMasehiTime); $fullMasehi = date('d', $approxMasehiTime) . ' ' . $bulanMasehiIndo[(int)date('n', $approxMasehiTime)] . ' ' . date('Y', $approxMasehiTime); $labelHijriUtama = 'Memuat...'; $cleanHijriUtama = ''; $teksKeteranganOtomatis = "Siklus ke-{$i}"; } @endphp
{!! $labelHijriUtama !!} {{ $fullMasehi }} M Rp {{ number_format($tarif->nominal, 0, ',', '.') }} {!! $icon !!} {{ $teks }}
@endfor
@elseif(in_array($tipe, ['Sekali Bayar', 'Tahunan', 'Per Periode']))
Progress Pembayaran {{ $persen }}%
Telah dibayar: Rp {{ number_format($terbayar, 0, ',', '.') }} Kekurangan: Rp {{ number_format($sisa, 0, ',', '.') }}
@else
Target / Estimasi Total

Rp {{ number_format($tarif->total_tarif, 0, ',', '.') }}

Terkumpul Saat Ini

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

@endif @if($deposit > 0)
Kelebihan bayar dicatat sebagai deposit item ini. Deposit: Rp {{ number_format($deposit, 0, ',', '.') }}
@endif
@include('admin.keuangan.siswa.table_histori_item', ['tarif' => $tarif, 'siswa' => $siswa])
@empty
Bersih, Belum Ada Tagihan!

Tidak ada tanggungan untuk periode yang Anda pilih ini.

@endforelse
@include('admin.keuangan.siswa.table_histori_global', ['historiPembayaran' => $historiPembayaran ?? collect()])
@endsection