@php // Tentukan jenis dan warna berdasarkan kode_biaya $jenis = $jenis ?? ''; $jenisColor = $jenisColor ?? ''; // Cek history cuti dari mahasiswa $isCuti = false; $cutiSemesterText = ''; $cutiSemester = $angsuran->mahasiswa->cuti_semester; if (!is_null($cutiSemester)) { if (is_string($cutiSemester) && str_starts_with($cutiSemester, '[')) { $cutiSemester = json_decode($cutiSemester, true); } if (is_array($cutiSemester)) { if (in_array($d->semester, $cutiSemester)) { $isCuti = true; $cutiSemesterText = implode(', ', $cutiSemester); } } else { if ($cutiSemester == $d->semester) { $isCuti = true; $cutiSemesterText = $cutiSemester; } } } // ========== FORCE: Biaya RUTIN, BL, SP, BT TIDAK BOLEH CUTI ========== if ( str_starts_with($d->kode_biaya, 'RUTIN-') || str_starts_with($d->kode_biaya, 'BL-') || str_starts_with($d->kode_biaya, 'SP-') || str_starts_with($d->kode_biaya, 'BT-') ) { $isCuti = false; $cutiSemesterText = ''; } // Ambil nomor urutan angsuran dan cek apakah angsuran pertama di semester 1 $urutan = 0; $isFirstAngsuranSemesterSatu = false; if (str_starts_with($d->kode_biaya, 'SPB')) { preg_match('/SPB_(\d+)/', $d->kode_biaya, $matches); $urutan = (int) ($matches[1] ?? 0); $isFirstAngsuranSemesterSatu = $d->semester == 1 && $urutan == 1; } elseif (str_starts_with($d->kode_biaya, 'SPP') || str_starts_with($d->kode_biaya, 'UKT')) { preg_match('/^[A-Z]+(\d+)_/', $d->kode_biaya, $matches); $urutan = (int) ($matches[1] ?? 0); $isFirstAngsuranSemesterSatu = $d->semester == 1 && $urutan == 1; } // Status logic dengan pengecekan cuti if ($isCuti) { $statusText = 'Cuti'; $statusColor = 'gray'; $statusIcon = 'calendar-off'; $statusDesc = 'Dicoret karena cuti semester ' . $cutiSemesterText; } elseif ($d->dibayar > 0 && $d->sisa > 0) { $statusText = 'Cicilan'; $statusColor = 'amber'; $statusIcon = 'layers'; $statusDesc = 'Pembayaran cicilan, sisa tagihan masih ada'; } elseif ($d->sisa <= 0 && $d->pembayaran_valid === 'pending') { $statusText = 'Menunggu Validasi'; $statusColor = 'blue'; $statusIcon = 'hourglass'; $statusDesc = 'Pembayaran lunas menunggu validasi admin'; } elseif ($d->sisa <= 0 && $d->pembayaran_valid === 'valid') { $statusText = 'Lunas'; $statusColor = 'emerald'; $statusIcon = 'check-circle'; $statusDesc = 'Pembayaran telah lunas dan tervalidasi'; } else { $statusText = 'Tagihan'; $statusColor = 'slate'; $statusIcon = 'clock'; $statusDesc = 'Belum ada pembayaran'; } // Cek apakah item ini bisa dibayar berdasarkan urutan (dari controller) $canPayBySequence = isset($bisaBayar[$d->id]) ? $bisaBayar[$d->id] : true; // Tentukan apakah checkbox bisa dicentang berdasarkan ROLE $checkboxDisabled = true; $checkboxTitle = ''; if ($isCuti) { $checkboxTitle = 'Item ini dicoret karena cuti semester ' . $cutiSemesterText; $checkboxDisabled = true; } elseif ($d->sisa <= 0) { $checkboxTitle = 'Item sudah lunas'; $checkboxDisabled = true; } elseif (isset($isSuperadmin) && $isSuperadmin) { // SUPERADMIN: BISA SEMUA $checkboxDisabled = false; $checkboxTitle = ''; } // ========== MARKETING: bisa bayar angsuran pertama di Semester 1 DAN BT ========== elseif (isset($isMarketing) && $isMarketing) { // Marketing bisa bayar BT (Biaya Tetap) if ($jenis === 'BT') { $checkboxDisabled = false; $checkboxTitle = 'Marketing: Bisa membayar Biaya Tetap (BT)'; } // Marketing bisa bayar angsuran pertama di Semester 1 elseif ($isFirstAngsuranSemesterSatu) { $checkboxDisabled = false; $checkboxTitle = 'Marketing: Bisa membayar angsuran pertama di Semester 1'; } // Marketing TIDAK bisa bayar yang lain else { $checkboxTitle = 'Marketing hanya bisa membayar angsuran pertama di Semester 1 dan Biaya Tetap (BT)'; $checkboxDisabled = true; } } // ========== PENAGIHAN: bisa bayar semua kecuali angsuran pertama Semester 1, plus BL, SP, RUTIN, BT ========== elseif (isset($isPenagihan) && $isPenagihan) { // Penagihan bisa bayar BT, BL, SP, RUTIN (tanpa batasan urutan) if (in_array($jenis, ['BT', 'BL', 'SP', 'RUTIN'])) { $checkboxDisabled = false; $checkboxTitle = 'Penagihan: Bisa membayar ' . $jenis; } // Penagihan bisa bayar angsuran selain yang pertama di Semester 1 elseif (!$isFirstAngsuranSemesterSatu && in_array($jenis, ['SPB', 'SPP', 'UKT'])) { $checkboxDisabled = false; $checkboxTitle = 'Penagihan: Bisa membayar angsuran ini'; } // Penagihan TIDAK bisa bayar angsuran pertama di Semester 1 elseif ($isFirstAngsuranSemesterSatu && in_array($jenis, ['SPB', 'SPP', 'UKT'])) { $checkboxTitle = 'Penagihan tidak bisa membayar angsuran pertama di Semester 1'; $checkboxDisabled = true; } // Untuk jenis lain yang tidak dikenali else { $checkboxDisabled = true; $checkboxTitle = 'Penagihan tidak memiliki izin untuk membayar item ini'; } } elseif (!$canPayBySequence) { $checkboxDisabled = true; $checkboxTitle = 'Selesaikan tagihan periode sebelumnya terlebih dahulu'; } else { $checkboxDisabled = true; $checkboxTitle = 'Anda tidak memiliki izin untuk melakukan pembayaran'; } @endphp
@if ($isCuti || $checkboxDisabled)
{{ $checkboxTitle }}
@elseif ($d->sisa > 0 && !$checkboxDisabled) @endif
{{ $jenis }} @if ($isCuti) Cuti SMT {{ $cutiSemesterText }} @endif
{{ $statusDesc }}
{{ $statusText }}
{{ $d->komponen }}
Jatuh Tempo: {{ \Carbon\Carbon::parse($d->tanggal_angsuran)->format('d/m/Y') }}
Tanggal jatuh tempo pembayaran
Total: Rp {{ number_format($d->total, 0, ',', '.') }}
Total tagihan
Dibayar: Rp {{ number_format($d->dibayar, 0, ',', '.') }}
Jumlah yang sudah dibayar
Sisa: Rp {{ number_format($isCuti ? $d->total : $d->sisa, 0, ',', '.') }}
{{ $isCuti ? 'Dicoret karena cuti' : 'Sisa tagihan yang harus dibayar' }}