@php // Helper Functions function formatRupiah($amount) { return number_format($amount, 0, ',', '.'); } function getPaymentStatus($komponenData) { if (empty($komponenData)) { return array( 'status' => 'no-data', 'text' => '-', 'class' => 'status-belum-bayar' ); } $lunas = isset($komponenData['lunas']) ? $komponenData['lunas'] : false; $tunggakanBulanIni = isset($komponenData['tunggakan_bulan_ini']) ? $komponenData['tunggakan_bulan_ini'] : 0; $tglBayar = isset($komponenData['tgl_bayar']) ? $komponenData['tgl_bayar'] : null; $tglAngsuran = isset($komponenData['tgl_angsuran']) ? $komponenData['tgl_angsuran'] : null; $totalDibayar = isset($komponenData['total_dibayar']) ? $komponenData['total_dibayar'] : 0; $hasPayment = $totalDibayar > 0; if ($lunas) { try { $dateBayar = $tglBayar ? new DateTime($tglBayar) : null; $dateAngsur = $tglAngsuran ? new DateTime($tglAngsuran) : null; } catch (Exception $e) { $dateBayar = null; $dateAngsur = null; } if ($dateBayar && $dateAngsur) { $bayarMonth = $dateBayar->format('m'); $bayarYear = $dateBayar->format('Y'); $angsurMonth = $dateAngsur->format('m'); $angsurYear = $dateAngsur->format('Y'); if ($bayarMonth === $angsurMonth && $bayarYear === $angsurYear) { return array( 'status' => 'lunas', 'text' => 'LUNAS (Rp' . formatRupiah($totalDibayar) . ')', 'class' => 'status-lunas' ); } else { $monthNames = array('Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Agu', 'Sep', 'Okt', 'Nov', 'Des'); $formattedDate = $dateBayar->format('d') . ' ' . $monthNames[$dateBayar->format('n') - 1] . ' ' . $dateBayar->format('Y'); return array( 'status' => 'lunas-bulan', 'text' => 'Lunas (' . $formattedDate . ')', 'class' => 'status-lunas-bulan' ); } } } if ($tunggakanBulanIni > 0) { return array( 'status' => 'tunggakan-bulan-ini', 'text' => 'Tunggakan: Rp' . formatRupiah($tunggakanBulanIni), 'class' => 'status-tunggakan' ); } if ($hasPayment) { return array( 'status' => 'partial', 'text' => 'Rp' . formatRupiah($totalDibayar), 'class' => 'status-partial' ); } return array( 'status' => 'belum-bayar', 'text' => 'Belum Dibayar', 'class' => 'status-belum-bayar' ); } // Ekstrak komponen dinamis function extractKomponenList($items) { $komponenSet = array(); foreach ($items as $item) { if (isset($item['data']) && is_array($item['data'])) { foreach (array_keys($item['data']) as $k) { $komponenSet[$k] = true; } } } $result = array_keys($komponenSet); sort($result); return $result; } // Kelompokkan data berdasarkan tahun ajaran $groupedData = array(); foreach ($data as $item) { $tahunAjaran = isset($item['th_ajar']) ? $item['th_ajar'] : 'Tanpa Tahun Ajaran'; if (!isset($groupedData[$tahunAjaran])) { $groupedData[$tahunAjaran] = array(); } $groupedData[$tahunAjaran][] = $item; } // Urutkan tahun ajaran krsort($groupedData); if (isset($groupedData['Tanpa Tahun Ajaran'])) { $tanpaTahun = $groupedData['Tanpa Tahun Ajaran']; unset($groupedData['Tanpa Tahun Ajaran']); $groupedData['Tanpa Tahun Ajaran'] = $tanpaTahun; } // Hitung statistik global $totalStudentsAll = 0; $totalTunggakan = 0; $totalTunggakanBulanIni = 0; $totalDibayarBulanIni = 0; foreach ($groupedData as $tahunAjaran => $items) { $komponenList = extractKomponenList($items); foreach ($items as $item) { $totalStudentsAll++; foreach ($komponenList as $komponen) { if (isset($item['data'][$komponen])) { $komponenData = $item['data'][$komponen]; $tunggakanTotal = isset($komponenData['tunggakan_total_akumulatif']) ? $komponenData['tunggakan_total_akumulatif'] : 0; $totalTunggakan += $tunggakanTotal; $tunggakanBulanIni = isset($komponenData['tunggakan_bulan_ini']) ? $komponenData['tunggakan_bulan_ini'] : 0; $totalTunggakanBulanIni += $tunggakanBulanIni; $dibayarBulanIni = isset($komponenData['total_dibayar_bulan_ini']) ? $komponenData['total_dibayar_bulan_ini'] : 0; $totalDibayarBulanIni += $dibayarBulanIni; } } } } @endphp
@foreach($groupedData as $tahunAjaran => $items) @php $komponenList = extractKomponenList($items); // Hitung statistik per section $sectionTotalStudents = count($items); $sectionTotalAmount = 0; foreach ($items as $item) { foreach ($komponenList as $komponen) { if (isset($item['data'][$komponen])) { $komponenData = $item['data'][$komponen]; $dibayarBulanIni = isset($komponenData['total_dibayar_bulan_ini']) ? $komponenData['total_dibayar_bulan_ini'] : 0; $sectionTotalAmount += $dibayarBulanIni; } } } @endphp
Tahun Ajaran: {{ $tahunAjaran }}
@foreach($komponenList as $komponen) @endforeach @foreach($items as $item) @foreach($komponenList as $komponen) @php $komponenData = isset($item['data'][$komponen]) ? $item['data'][$komponen] : null; if (!$komponenData) { echo ''; echo ''; echo ''; echo ''; continue; } $paymentStatus = getPaymentStatus($komponenData); $angsuranKe = isset($komponenData['angsuran_ke']) ? $komponenData['angsuran_ke'] : (isset($komponenData['angsuran_ke_asli']) ? $komponenData['angsuran_ke_asli'] : '-'); $tunggakanTotal = isset($komponenData['tunggakan_total_akumulatif']) ? $komponenData['tunggakan_total_akumulatif'] : 0; $dibayarBulanIni = isset($komponenData['total_dibayar_bulan_ini']) ? $komponenData['total_dibayar_bulan_ini'] : 0; @endphp @endforeach @endforeach
Mahasiswa Semester Status Prodi Th. Ajaran
{{ $komponen }}
Angsuran
Status
Total Dibayar Bulan Ini
Tunggakan Total
{{ $item['nama_mahasiswa'] ?? '-' }} {{ $item['semester'] ?? '-' }} @if(isset($item['status_mahasiswa'])) @if($item['status_mahasiswa'] === 'Aktif') Aktif @else {{ $item['status_mahasiswa'] }} @endif @else - @endif {{ $item['prodi'] ?? '-' }} {{ $item['th_ajar'] ?? '-' }} ---- {{ $angsuranKe }} {{ $paymentStatus['text'] }} @if($dibayarBulanIni > 0) Rp{{ formatRupiah($dibayarBulanIni) }} @else Rp0 @endif @if($tunggakanTotal > 0) Rp{{ formatRupiah($tunggakanTotal) }} @else - @endif
@endforeach