🐛 fix(lpj-views): Amankan akses penilai dan sederhanakan informasi analisa

- Laporan index: gunakan optional chaining untuk akses aman properti penilai

  - Ubah if (data.penilai.resume) menjadi if (data.penilai?.resume) agar tidak error saat penilai null/undefined.
  - Perkuat kondisi pemanggilan generateLaporanButton(...) dengan ekspresi: data.penilai?.type_penilai == 'resume' && !data.penilai?.resume ? type : typePenilaian .
  - Efek: mencegah runtime error (TypeError) saat data belum lengkap, memastikan tombol "Resume" dan "Laporan" hanya muncul pada kondisi valid.
  - Berlaku pada role pemohon-ao dan role lainnya (dua blok kondisi kini seragam dan aman).
- Analisa penilai: sederhanakan tampilan dengan menghapus blok keterangan fakta

  - Hapus tabel "Catatan yang Perlu Diperhatikan" yang merender $forminspeksi['fakta']['keterangan'] (string/array).
  - Alasan: menghindari duplikasi, ketidakpastian tipe (string/array), dan potensi inkonsistensi formatting; konten penting tetap tersedia di bagian lain laporan.
Komentar level fungsi (referensi terkait):

- generateLaporanButton(data, dokumenID, inspeksiId, jenisJaminanID, typeOrResume, typePenilaian)
  - Peran: merender tombol "Laporan" berdasarkan status pembayaran dan kondisi penilai.
  - Perubahan: tidak mengubah implementasi fungsi; memperkuat logika pemanggilan via optional chaining agar parameter typeOrResume ditentukan aman.
This commit is contained in:
Daeng Deni Mardaeni
2025-11-12 16:20:32 +07:00
parent 70dda16699
commit 89329de198
2 changed files with 3 additions and 26 deletions

View File

@@ -239,7 +239,7 @@
let resumeButton = '';
let penyelesaian = '';
if (data.penilai.resume) {
if (data.penilai?.resume) {
resumeButton = `
<a href="{{ route('penilai.print-out') }}?permohonanId=${data.id}&documentId=${dokumenID}&inspeksiId=${inspeksiId}&jaminanId=${jenisJaminanID}&statusLpj=0" class="btn btn-sm btn-success">
Resume
@@ -257,14 +257,14 @@
} else if ((data.status_bayar == "sudah_bayar" || data.status_bayar == "tidak_bayar") &&
data.nilai_liquidasi > 0) {
laporanButton = generateLaporanButton(data, dokumenID, inspeksiId, jenisJaminanID,
data.penilai.type_penilai == 'resume' && !data.penilai.resume ? type :
data.penilai?.type_penilai == 'resume' && !data.penilai?.resume ? type :
typePenilaian);
}
@else
// Logika untuk role selain pemohon-ao
if (data.status_bayar == "sudah_bayar" || data.status_bayar == "tidak_bayar") {
laporanButton = generateLaporanButton(data, dokumenID, inspeksiId, jenisJaminanID,
data.penilai.type_penilai == 'resume' && !data.penilai.resume ? type :
data.penilai?.type_penilai == 'resume' && !data.penilai?.resume ? type :
typePenilaian);
}
@endif

View File

@@ -85,29 +85,6 @@
</td>
</tr>
@if (!empty($forminspeksi['fakta']['keterangan']))
<tr>
<td width="25%" style="vertical-align: top;">Catatan yang Perlu
Diperhatikan</td>
<td width="1%" style="vertical-align: top;">:</td>
<td style="vertical-align: top;">
@php
$keterangan = $forminspeksi['fakta']['keterangan'] ?? '';
if (is_array($keterangan)) {
$keterangan = implode(', ', array_filter($keterangan));
}
@endphp
@if (!empty($keterangan))
<table style="width: 100%; border-collapse: collapse;">
<tr>
<td>{!! nl2br(e($keterangan)) !!}</td>
</tr>
</table>
@endif
</td>
</tr>
@endif
</table>
</div>