♻️(refactor): Penamaan label, logging komprehensif, transaksi DB, komentar fungsi, dan idempotensi seeder
- Mengubah label 'Tanggal Survei' menjadi 'Tanggal Penilaian' di seluruh view Penilai & komponen cetak - Menambahkan logging detail di setiap tahap proses (awal, validasi, eksekusi, return) pada controller, service, dan request - Menerapkan transaksi database (begin, commit, rollback) di operasi tulis untuk konsistensi data (PostgreSQL) - Menambahkan komentar fungsi (PHPDoc) di semua controller, service, dan model utama - Menyederhanakan query dan filter laporan pada LaporanController dengan logging tambahan - Menambahkan idempotensi pada semua seeder dengan updateOrCreate dan normalisasi delimiter CSV - Meningkatkan robustness parsing timestamp multi-format dan logging batch proses seeding - Menata ulang tampilan laporan, nilai plafond, dan penilai agar label dan UI konsisten - Memastikan semua operasi penting tercatat di log dengan konteks user dan parameter penting
This commit is contained in:
@@ -75,11 +75,9 @@ class LaporanController extends Controller
|
||||
}
|
||||
|
||||
// Retrieve data from the database
|
||||
$query = Permohonan::query()->whereIn('status',['proses-laporan','done', 'paparan', 'proses-paparan'])->whereNotNull('approval_so_at')->whereNotNull('approval_eo_at')->where(function ($q) {
|
||||
$q->whereIn('nilai_plafond_id', [1,4])
|
||||
->whereNotNull('approval_dd_at')
|
||||
->orWhereIn('nilai_plafond_id', [2,3]);
|
||||
});
|
||||
$query = Permohonan::query()
|
||||
->whereIn('status',['proses-laporan','done', 'paparan', 'proses-paparan']);
|
||||
|
||||
|
||||
$query = $query->orderBy('nomor_registrasi', 'desc');
|
||||
// Apply search filter if provided
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
user_id: {
|
||||
title: 'User Pemohon',
|
||||
render: (item, data) => {
|
||||
return `${data.user.name}`;
|
||||
return `${data.user?.name}`;
|
||||
},
|
||||
},
|
||||
tujuan_penilaian_id: {
|
||||
@@ -180,16 +180,16 @@
|
||||
jenis_fasilitas_kredit_id: {
|
||||
title: 'Fasilitas Kredit',
|
||||
render: (item, data) => {
|
||||
return `${data.jenis_fasilitas_kredit.name}`;
|
||||
return `${data.jenis_fasilitas_kredit?.name}`;
|
||||
}
|
||||
},
|
||||
tanggal_survei: {
|
||||
title: 'Tanggal Survei',
|
||||
render: (item, data) => {
|
||||
if (data.penilaian.waktu_penilaian) {
|
||||
return `${formatDate(new Date(data.penilaian.waktu_penilaian))}`;
|
||||
if (data.penilaian?.waktu_penilaian) {
|
||||
return `${formatDate(new Date(data.penilaian?.waktu_penilaian))}`;
|
||||
}
|
||||
return `${formatDate(new Date(data.penilaian.created_at))}`;
|
||||
return `${formatDate(new Date(data.penilaian?.created_at))}`;
|
||||
},
|
||||
},
|
||||
due_date_sla: {
|
||||
@@ -197,10 +197,10 @@
|
||||
render: (item, data) => {
|
||||
const tujuan_penilaian = data.tujuan_penilaian.name;
|
||||
const tipe_laporan = data.penilai?.type;
|
||||
const nilai_plafond = data.penilaian.nilaiPlafond?.name;
|
||||
let waktu_penilaian = new Date(data.penilaian.created_at);
|
||||
if (data.penilaian.waktu_penilaian) {
|
||||
waktu_penilaian = new Date(data.penilaian.waktu_penilaian);
|
||||
const nilai_plafond = data.penilaian?.nilaiPlafond?.name;
|
||||
let waktu_penilaian = new Date(data.penilaian?.created_at);
|
||||
if (data.penilaian?.waktu_penilaian) {
|
||||
waktu_penilaian = new Date(data.penilaian?.waktu_penilaian);
|
||||
}
|
||||
|
||||
if (tujuan_penilaian.name === "RAP") {
|
||||
@@ -249,7 +249,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
if (data.penilai.resume) {
|
||||
if (data.penilai?.resume) {
|
||||
resumeButton = `
|
||||
<a href="penilai/print-out-laporan/${data.id}/${dokumenID}/${jenisJaminanID}" class="btn btn-sm btn-success">
|
||||
Resume
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
<td style="width: 79%; padding: 2px;">{{ $rap['dari'] ?? '' }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 25%; padding: 2px;">Tanggal Survey</td>
|
||||
<td style="width: 25%; padding: 2px;">Tanggal Penilaian</td>
|
||||
<td style="width: 1%; padding: 2px;">:</td>
|
||||
<td style="width: 79%; padding: 2px;">
|
||||
{{ formatTanggalIndonesia($permohonan->penilaian->waktu_penilaian) }}</td>
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
{{ formatTanggalIndonesia($permohonan->tanggal_permohonan) }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 2px; vertical-align: top;">Tanggal Survey</td>
|
||||
<td style="padding: 2px; vertical-align: top;">Tanggal Penilaian</td>
|
||||
<td style="padding: 2px; vertical-align: top;">:</td>
|
||||
<td style="padding: 2px; vertical-align: top;">
|
||||
{{ formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) }}</td>
|
||||
@@ -97,7 +97,6 @@
|
||||
}
|
||||
|
||||
@endphp
|
||||
|
||||
<tr>
|
||||
<td style="padding: 2px; vertical-align: top;">Pemeriksa</td>
|
||||
<td style="padding: 2px; vertical-align: top;">:</td>
|
||||
@@ -142,7 +141,21 @@
|
||||
<td style=" padding: 2px; vertical-align: top;">{{ $permohonan->tujuanPenilaian->name ?? '' }}
|
||||
</td>
|
||||
</tr>
|
||||
@if ($permohonan->is_mig == 1)
|
||||
|
||||
@if ($permohonan->is_mig)
|
||||
@php
|
||||
$data = json_decode($inspeksi->mig_detail_data_jaminan, true);
|
||||
@endphp
|
||||
@foreach ($data as $key => $item)
|
||||
@if ($key == 'address')
|
||||
@php $key = 'Terletak di'; @endphp
|
||||
@endif
|
||||
<tr>
|
||||
<td style=" padding: 2px; vertical-align: top;">{{ $key }}</td>
|
||||
<td style=" padding: 2px; vertical-align: top;">:</td>
|
||||
<td style=" padding: 2px; vertical-align: top;">{{ $item }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
{{-- <table style="width: 100%; "> --}}
|
||||
@if (@isset($dokumen))
|
||||
@foreach ($dokumen->detail as $detail)
|
||||
@@ -209,7 +222,7 @@
|
||||
</table>
|
||||
|
||||
<div class="no-break">
|
||||
|
||||
@php $mig_detail_legalitas_jaminan = json_decode($inspeksi->mig_detail_legalitas_jaminan, true); @endphp
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td style="width: 50%; border: 1px solid #000;">
|
||||
@@ -221,12 +234,12 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
<td style="vertical-align: top;">
|
||||
<table style="vertical-align: top;">
|
||||
<tr>
|
||||
@php
|
||||
$cekHubDebitur = isset($forminspeksi['asset']['hub_cadeb']) &&
|
||||
$cekHubDebitur =
|
||||
isset($forminspeksi['asset']['hub_cadeb']) &&
|
||||
$forminspeksi['asset']['hub_cadeb'] === 'sesuai'
|
||||
? 'sesuai'
|
||||
: 'tidak sesuai';
|
||||
@@ -234,10 +247,13 @@
|
||||
$hubCadebDebitur = isset($forminspeksi['asset']['hub_cadeb'][$cekHubDebitur])
|
||||
? $forminspeksi['asset']['hub_cadeb']['tidak sesuai']
|
||||
: $forminspeksi['asset']['hub_cadeb']['sesuai'];
|
||||
|
||||
@endphp
|
||||
<td style=" width:49%; padding: 2px; vertical-align: top;">Hubungan Pemilik Jaminan dengan Debitur</td>
|
||||
<td style=" width:49%; padding: 2px; vertical-align: top;">Hubungan Pemilik Jaminan dengan
|
||||
Debitur</td>
|
||||
<td style=" width:1%; padding: 2px; vertical-align: top;">:</td>
|
||||
<td style=" width:50%; padding: 2px; vertical-align: top;">{{ $hubCadebDebitur ?? '' }}</td>
|
||||
<td style=" width:50%; padding: 2px; vertical-align: top;">{{ $hubCadebDebitur ?? '' }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@php
|
||||
@@ -252,7 +268,8 @@
|
||||
? $forminspeksi['asset']['hub_cadeb_penghuni']['tidak sesuai']
|
||||
: $forminspeksi['asset']['hub_cadeb_penghuni']['sesuai'];
|
||||
@endphp
|
||||
<td style=" padding: 2px; vertical-align: top;">Hubungan Penghuni Jaminan dengan Debitur</td>
|
||||
<td style=" padding: 2px; vertical-align: top;">Hubungan Penghuni Jaminan dengan Debitur
|
||||
</td>
|
||||
<td style=" padding: 2px; vertical-align: top;">:</td>
|
||||
<td style=" padding: 2px; vertical-align: top;">{{ $hubCadeb ?? '' }}</td>
|
||||
</tr>
|
||||
@@ -260,6 +277,17 @@
|
||||
</td>
|
||||
|
||||
<td style="width: 50%; vertical-align: top;">
|
||||
@if ($permohonan->is_mig)
|
||||
<table>
|
||||
@foreach ($mig_detail_legalitas_jaminan['SARANA PELENGKAP DAN LINGKUNGAN'] as $item)
|
||||
<tr>
|
||||
<td style="padding: 2px; vertical-align: top;">{{ $item['label'] }}</td>
|
||||
<td style="padding: 2px; vertical-align: top;">:</td>
|
||||
<td style="padding: 2px; vertical-align: top;">{{ $item['value'] }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</table>
|
||||
@else
|
||||
<table>
|
||||
@php
|
||||
$lingkungan = $forminspeksi['lingkungan'];
|
||||
@@ -270,19 +298,24 @@
|
||||
<tr>
|
||||
<td style="padding: 2px; vertical-align: top;">Jarak Jalan Utama</td>
|
||||
<td style="padding: 2px; vertical-align: top;">:</td>
|
||||
<td style="padding: 2px; vertical-align: top;">{{ $lingkungan['jarak_jalan_utama'] ?? '-' }} m
|
||||
<td style="padding: 2px; vertical-align: top;">
|
||||
{{ $lingkungan['jarak_jalan_utama'] ?? '-' }} m
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 2px; vertical-align: top;">Jalan Lingkungan</td>
|
||||
<td style="padding: 2px; vertical-align: top;">:</td>
|
||||
<td style="padding: 2px; vertical-align: top;">{{ $lingkungan['jalan_linkungan'] ?? '-' }} m
|
||||
<td style="padding: 2px; vertical-align: top;">
|
||||
{{ $lingkungan['jalan_linkungan'] ?? '-' }}
|
||||
m
|
||||
</td>
|
||||
|
||||
<tr>
|
||||
<td style="padding: 2px; vertical-align: top;">Jarak CBD</td>
|
||||
<td style="padding: 2px; vertical-align: top;">:</td>
|
||||
<td style="padding: 2px; vertical-align: top;">{{ $lingkungan['jarak_cbd_point'] ?? '-' }} m
|
||||
<td style="padding: 2px; vertical-align: top;">
|
||||
{{ $lingkungan['jarak_cbd_point'] ?? '-' }}
|
||||
m
|
||||
({{ $lingkungan['nama_cbd_point'] ?? '-' }})</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -296,7 +329,7 @@
|
||||
<td style="padding: 2px; vertical-align: top;">:
|
||||
</td>
|
||||
<td style="padding: 2px; vertical-align: top;">
|
||||
{{ implode(', ', $lingkungan['perkerasan_jalan']['perkerasan_jalan'] ?? $lingkungan['perkerasan_jalan'] ?? ['-']) }}
|
||||
{{ implode(', ', $lingkungan['perkerasan_jalan']['perkerasan_jalan'] ?? ($lingkungan['perkerasan_jalan'] ?? ['-'])) }}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -304,33 +337,33 @@
|
||||
<tr>
|
||||
<td style="padding: 2px; vertical-align: top;">Lalu Lintas</td>
|
||||
<td style="padding: 2px; vertical-align: top;">:</td>
|
||||
<td style="padding: 2px; vertical-align: top;">{{
|
||||
$lingkungan['lalu_lintas']
|
||||
<td style="padding: 2px; vertical-align: top;">
|
||||
{{ $lingkungan['lalu_lintas']
|
||||
? (is_array($lingkungan['lalu_lintas'])
|
||||
? implode(', ', $lingkungan['lalu_lintas'])
|
||||
: $lingkungan['lalu_lintas'])
|
||||
: '-'
|
||||
}}
|
||||
: '-' }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 2px; vertical-align: top;">Golongan Masyarakat Sekitar</td>
|
||||
<td style="padding: 2px; vertical-align: top;">:</td>
|
||||
<td style="padding: 2px; vertical-align: top;">{{ implode(', ', $lingkungan['gol_mas_sekitar'] ?? $lingkungan['gol_mas_sekitar'] ?? ['-']) }}
|
||||
<td style="padding: 2px; vertical-align: top;">
|
||||
{{ implode(', ', $lingkungan['gol_mas_sekitar'] ?? ($lingkungan['gol_mas_sekitar'] ?? ['-'])) }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 2px; vertical-align: top;">Tingkat Keramaian</td>
|
||||
<td style="padding: 2px; vertical-align: top;">:</td>
|
||||
<td style="padding: 2px; vertical-align: top;">
|
||||
{{ implode(', ', $lingkungan['tingkat_keramaian']['tingkat_keramaian'] ?? $lingkungan['tingkat_keramaian'] ?? ['-']) }}
|
||||
{{ implode(', ', $lingkungan['tingkat_keramaian']['tingkat_keramaian'] ?? ($lingkungan['tingkat_keramaian'] ?? ['-'])) }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 2px; vertical-align: top;">Terletak di Area</td>
|
||||
<td style="padding: 2px; vertical-align: top;">:</td>
|
||||
<td style="padding: 2px; vertical-align: top;">
|
||||
{{ implode(', ', $lingkungan['terletak_diarea']['terletak_diarea'] ?? $lingkungan['terletak_diarea'] ?? ['-']) }}
|
||||
{{ implode(', ', $lingkungan['terletak_diarea']['terletak_diarea'] ?? ($lingkungan['terletak_diarea'] ?? ['-'])) }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -394,11 +427,28 @@
|
||||
</tr>
|
||||
@endif
|
||||
</table>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if ($permohonan->is_mig)
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td colspan="3" style="border: 1px solid #000;">
|
||||
ANALISA TANAH DAN BANGUNAN
|
||||
</td>
|
||||
</tr>
|
||||
@foreach ($mig_detail_legalitas_jaminan['ANALISA TANAH DAN BANGUNAN'] as $item)
|
||||
<tr>
|
||||
<td style="padding: 2px; vertical-align: top;">{{ $item['label'] }}</td>
|
||||
<td style="padding: 2px; vertical-align: top;">:</td>
|
||||
<td style="padding: 2px; vertical-align: top;">{{ $item['value'] }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</table>
|
||||
@else
|
||||
@foreach ($permohonan->documents as $dokumen)
|
||||
@if ($dokumen->jenisJaminan)
|
||||
@php
|
||||
@@ -411,17 +461,19 @@
|
||||
@endphp
|
||||
|
||||
@foreach ($kategoriUnik as $kategori)
|
||||
|
||||
@if ($kategori !== 'lingkungan')
|
||||
@include('lpj::penilai.components.analisa.' . str_replace('-', '-', $kategori), [
|
||||
@include(
|
||||
'lpj::penilai.components.analisa.' . str_replace('-', '-', $kategori),
|
||||
[
|
||||
'dokumen' => $dokumen,
|
||||
])
|
||||
]
|
||||
)
|
||||
@endif
|
||||
|
||||
@endforeach
|
||||
@endif
|
||||
@endif
|
||||
@endforeach
|
||||
@endif
|
||||
|
||||
<div class="no-break">
|
||||
<table style="width: 100%">
|
||||
@@ -511,8 +563,6 @@
|
||||
</tr>
|
||||
|
||||
@if (isset($lpjData['likuidasi']) && $lpjData['likuidasi_nilai_2'] > 0)
|
||||
|
||||
|
||||
<tr>
|
||||
<td colspan="3" style="padding: 8px; text-align: left; font-weight: bold;">
|
||||
b. Total Nilai Likuidasi
|
||||
@@ -523,7 +573,8 @@
|
||||
{{ $lpjData['likuidasi'] ?? '' }}%
|
||||
</td>
|
||||
<td style="padding: 3px; text-align: left; font-weight: bold; width:40%">
|
||||
<span style="padding-left:20px; padding-right: 20px">X</span> Total Nilai Pasar Wajar
|
||||
<span style="padding-left:20px; padding-right: 20px">X</span> Total Nilai Pasar
|
||||
Wajar
|
||||
</td>
|
||||
<td style="padding: 3px; text-align: left; width:40%;">
|
||||
<span style="padding-left:20px; padding-right: 20px"> = </span> Rp
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
{{ formatTanggalIndonesia($permohonan->tanggal_permohonan) }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="width: 25%; padding: 2px;">Tanggal Survey</td>
|
||||
<td style="width: 25%; padding: 2px;">Tanggal Penilaian</td>
|
||||
<td style="vertical-align: top; width: 1%; padding: 2px;">:</td>
|
||||
<td style="vertical-align: top; width: 79%;">
|
||||
{{ formatTanggalIndonesia($permohonan->penilaian->waktu_penilaian) }}
|
||||
@@ -137,6 +137,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@if ($permohonan->is_mig == 1)
|
||||
<table style="width: 100%; ">
|
||||
@if (@isset($dokumen))
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
<td>{{ $alamat['province_code'] ?? '' }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tanggal Survey</td>
|
||||
<td>Tanggal Penilaian</td>
|
||||
<td>:</td>
|
||||
<td>{{ isset($permohonan->penilaian->tanggal_kunjungan) ? formatTanggalIndonesia($permohonan->penilaian->tanggal_kunjungan) : '' }}
|
||||
</td>
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
<span class="sort-icon"> </span> </span>
|
||||
</th>
|
||||
<th class="min-w-[150px]" data-datatable-column="tanggal_survei">
|
||||
<span class="sort"> <span class="sort-label"> Tanggal Survei </span>
|
||||
<span class="sort"> <span class="sort-label"> Tanggal Penilaian </span>
|
||||
<span class="sort-icon"> </span> </span>
|
||||
</th>
|
||||
<th class="min-w-[150px]" data-datatable-column="due_date_sla">
|
||||
@@ -183,7 +183,7 @@
|
||||
},
|
||||
},
|
||||
tanggal_survei: {
|
||||
title: 'Tanggal Survei',
|
||||
title: 'Tanggal Penilaian',
|
||||
render: (item, data) => {
|
||||
if (data.penilaian.waktu_penilaian) {
|
||||
return `${formatDate(new Date(data.penilaian.waktu_penilaian))}`;
|
||||
|
||||
Reference in New Issue
Block a user