feat(memo): implementasi jenis penilaian dinamis dan perbaikan checkbox pada memo penyelesaian

Perubahan yang dilakukan:
- Menghapus validasi input pada method `preview()` untuk mendukung fleksibilitas data preview
- Mengganti eager loading dari `tujuanPenilaian` menjadi `jenisPenilaian` agar sesuai dengan kebutuhan data dinamis
- Menambahkan method chaining `->get()` pada akhir query untuk memastikan eksekusi query yang benar
- Menambahkan field `jenisPenilaian` ke dalam memoData agar template dapat menampilkan instruksi pembayaran secara dinamis
- Mengimplementasikan checkbox visual yang disabled dengan hidden input untuk tetap mengirim data saat form submit
- Memisahkan antara checkbox untuk tampilan (disabled) dan input data (hidden) untuk meningkatkan UX
- Mengubah lebar label dari 80px menjadi 200px pada template PDF dan preview untuk layout yang lebih baik
- Mengganti informasi jaminan menjadi statis "Tanah & Bangunan" pada template PDF dan preview
- Menambahkan conditional rendering untuk menampilkan instruksi pembayaran sesuai dengan jenis penilaian (Internal/KJPP)
- Menyesuaikan layout dan formatting pada template PDF dan preview agar lebih konsisten secara visual
- Menambahkan logika text dinamis untuk jenis penilaian pada bagian instruksi pembayaran
- Mengoptimalkan struktur query agar lebih efisien dan menghindari duplikasi

Tujuan perubahan:
- Mendukung proses memo penyelesaian dengan jenis penilaian yang lebih fleksibel (Internal/KJPP)
- Meningkatkan pengalaman pengguna dengan tampilan checkbox yang jelas namun tetap menyimpan data dengan aman
- Menyederhanakan layout dan formatting agar lebih profesional dan konsisten di preview maupun PDF
- Memastikan proses generate memo berjalan sesuai kebutuhan bisnis dengan instruksi pembayaran yang tepat
This commit is contained in:
Daeng Deni Mardaeni
2025-07-17 16:05:56 +07:00
parent d7e5df569a
commit cf0059fe66
4 changed files with 58 additions and 33 deletions

View File

@@ -190,8 +190,8 @@ class MemoController extends Controller
$q->whereIn('nilai_plafond_id', [1, 4]) $q->whereIn('nilai_plafond_id', [1, 4])
->whereNotNull('approval_dd_at') ->whereNotNull('approval_dd_at')
->orWhereIn('nilai_plafond_id', [2, 3]); ->orWhereIn('nilai_plafond_id', [2, 3]);
}); })
//->whereHas('noc'); // Hanya tampilkan permohonan yang memiliki NOC ->whereHas('noc'); // Hanya tampilkan permohonan yang memiliki NOC
$query = $query->orderBy('nomor_registrasi', 'desc'); $query = $query->orderBy('nomor_registrasi', 'desc');
@@ -340,14 +340,6 @@ class MemoController extends Controller
{ {
Log::info('MemoController: Mengakses halaman preview memo penyelesaian'); Log::info('MemoController: Mengakses halaman preview memo penyelesaian');
// Validasi input
$request->validate([
'permohonan_ids' => 'required|array',
'permohonan_ids.*' => 'exists:permohonan,id',
'memo_number' => 'required|string|max:255',
'payment_date' => 'required|date',
'memo_date' => 'required|date'
]);
$permohonanIds = $request->permohonan_ids; $permohonanIds = $request->permohonan_ids;
$memoNumber = $request->memo_number; $memoNumber = $request->memo_number;
@@ -360,14 +352,14 @@ class MemoController extends Controller
'user', 'user',
'debiture', 'debiture',
'branch', 'branch',
'tujuanPenilaian',
'penilaian', 'penilaian',
'jenisPenilaian',
'jenisFasilitasKredit', 'jenisFasilitasKredit',
'documents.inspeksi', 'documents.inspeksi',
'penilai', 'penilai',
'documents.detail', 'documents.detail',
'noc' 'noc'
])->whereIn('id', $permohonanIds)->get(); ])->whereIn('id', $permohonanIds);
// Hitung total biaya PJ dari nominal_bayar di tabel NOC // Hitung total biaya PJ dari nominal_bayar di tabel NOC
$totalBiayaPJ = Noc::whereIn('permohonan_id', $permohonanIds) $totalBiayaPJ = Noc::whereIn('permohonan_id', $permohonanIds)
@@ -379,11 +371,14 @@ class MemoController extends Controller
'memo_date' => $memoDate, 'memo_date' => $memoDate,
'payment_date' => $paymentDate, 'payment_date' => $paymentDate,
'total_biaya_pj' => $totalBiayaPJ, 'total_biaya_pj' => $totalBiayaPJ,
'permohonan_list' => $permohonanList, 'permohonan_list' => $permohonanList->get(),
'debitur_count' => $permohonanList->count(), 'debitur_count' => $permohonanList->get()->count(),
'jaminan_info' => $this->getJaminanInfo($permohonanList) 'jaminan_info' => $this->getJaminanInfo($permohonanList->get()),
'jenisPenilaian' => $permohonanList->pluck('jenis_penilaian_id')->first()
]; ];
$permohonanList= $permohonanList->get();
Log::info('MemoController: Data preview memo berhasil disiapkan'); Log::info('MemoController: Data preview memo berhasil disiapkan');
return view('lpj::memo.preview', compact('memoData', 'permohonanList', 'totalBiayaPJ')); return view('lpj::memo.preview', compact('memoData', 'permohonanList', 'totalBiayaPJ'));
@@ -421,14 +416,14 @@ class MemoController extends Controller
'user', 'user',
'debiture', 'debiture',
'branch', 'branch',
'tujuanPenilaian',
'penilaian', 'penilaian',
'jenisPenilaian',
'jenisFasilitasKredit', 'jenisFasilitasKredit',
'documents.inspeksi', 'documents.inspeksi',
'penilai', 'penilai',
'documents.detail', 'documents.detail',
'noc' 'noc'
])->whereIn('id', $permohonanIds)->get(); ])->whereIn('id', $permohonanIds);
// Hitung total biaya PJ dari nominal_bayar di tabel NOC // Hitung total biaya PJ dari nominal_bayar di tabel NOC
$totalBiayaPJ = Noc::whereIn('permohonan_id', $permohonanIds) $totalBiayaPJ = Noc::whereIn('permohonan_id', $permohonanIds)
@@ -440,10 +435,14 @@ class MemoController extends Controller
'memo_date' => $memoDate, 'memo_date' => $memoDate,
'payment_date' => $paymentDate, 'payment_date' => $paymentDate,
'total_biaya_pj' => $totalBiayaPJ, 'total_biaya_pj' => $totalBiayaPJ,
'permohonan_list' => $permohonanList, 'permohonan_list' => $permohonanList->get(),
'debitur_count' => $permohonanList->count(), 'debitur_count' => $permohonanList->get()->count(),
'jaminan_info' => $this->getJaminanInfo($permohonanList) 'jaminan_info' => $this->getJaminanInfo($permohonanList->get()),
'jenisPenilaian' => $permohonanList->pluck('jenis_penilaian_id')->first()
]; ];
$permohonanList= $permohonanList->get();
// Generate PDF dari template // Generate PDF dari template
$pdf = Pdf::loadView('lpj::memo.pdf-template', compact('memoData', 'permohonanList', 'totalBiayaPJ')) $pdf = Pdf::loadView('lpj::memo.pdf-template', compact('memoData', 'permohonanList', 'totalBiayaPJ'))
->setPaper('a4', 'portrait') ->setPaper('a4', 'portrait')

View File

@@ -93,9 +93,10 @@
@foreach ($permohonanList as $permohonan) @foreach ($permohonanList as $permohonan)
<tr> <tr>
<td class="text-center"> <td class="text-center">
<input type="checkbox" name="permohonan_ids[]" <input type="checkbox" class="checkbox checkbox-sm permohonan-checkbox"
value="{{ $permohonan->id }}" checked disabled>
class="checkbox checkbox-sm permohonan-checkbox" checked disabled> <input type="hidden" name="permohonan_ids[]"
value="{{ $permohonan->id }}">
</td> </td>
<td class="font-medium">{{ $permohonan->nomor_registrasi }}</td> <td class="font-medium">{{ $permohonan->nomor_registrasi }}</td>
<td>{{ $permohonan->debiture->name ?? '-' }}</td> <td>{{ $permohonan->debiture->name ?? '-' }}</td>

View File

@@ -49,7 +49,7 @@
} }
.memo-info .label { .memo-info .label {
width: 80px; width: 200px;
} }
.memo-info .colon { .memo-info .colon {
@@ -247,7 +247,7 @@
<tr> <tr>
<td class="label">Jaminan</td> <td class="label">Jaminan</td>
<td class="colon">:</td> <td class="colon">:</td>
<td>{{ $memoData['jaminan_info'] }}</td> <td>Tanah & Bangunan</td>
</tr> </tr>
<tr> <tr>
<td class="label">Total Biaya PJ</td> <td class="label">Total Biaya PJ</td>
@@ -272,13 +272,25 @@
<tr> <tr>
<td class="label">Jenis Penilaian</td> <td class="label">Jenis Penilaian</td>
<td class="colon">:</td> <td class="colon">:</td>
<td><strong>KJPP</strong></td> <td><strong>
@if ($memoData['jenisPenilaian'] == 2)
KJPP
@else
Internal
@endif
</strong></td>
</tr> </tr>
</table> </table>
<p style="margin-bottom: 16px;">Kami menginstruksikan kepada Sentra Operasi untuk menyelesaikan Rekening Escrow <p style="margin-bottom: 16px;">Kami menginstruksikan kepada Sentra Operasi untuk menyelesaikan Rekening Escrow
/ <strong>KSL Penilai Jaminan</strong> atas nama debitur tersebut diatas ke <strong>KJPP / <strong>KSL Penilai Jaminan</strong> atas nama debitur tersebut diatas ke
(terlampir)</strong>.</p>
@if ($memoData['jenisPenilaian'] == 2)
<strong>KJPP (terlampir)</strong>.
@else
<strong>PDPT-Lainnya Penilaian Jaminan KPNO (IDR 57557)</strong>.
@endif
</p>
<p style="margin-bottom: 16px;">Demikian kami sampaikan, atas perhatian dan kerjasamanya kami ucapkan terima <p style="margin-bottom: 16px;">Demikian kami sampaikan, atas perhatian dan kerjasamanya kami ucapkan terima
kasih.</p> kasih.</p>

View File

@@ -90,7 +90,7 @@
<table style="width: 100%; border-collapse: collapse; margin-bottom: 16px;"> <table style="width: 100%; border-collapse: collapse; margin-bottom: 16px;">
<tr> <tr>
<td style="width: 120px; padding: 2px 0; vertical-align: top;">Nama Debitur</td> <td style="width: 200px; padding: 2px 0; vertical-align: top;">Nama Debitur</td>
<td style="width: 10px; padding: 2px 0; vertical-align: top;">:</td> <td style="width: 10px; padding: 2px 0; vertical-align: top;">:</td>
<td style="padding: 2px 0; vertical-align: top;">Terlampir ({{ $memoData['debitur_count'] }} <td style="padding: 2px 0; vertical-align: top;">Terlampir ({{ $memoData['debitur_count'] }}
Debitur)</td> Debitur)</td>
@@ -98,7 +98,7 @@
<tr> <tr>
<td style="padding: 2px 0; vertical-align: top;">Jaminan</td> <td style="padding: 2px 0; vertical-align: top;">Jaminan</td>
<td style="padding: 2px 0; vertical-align: top;">:</td> <td style="padding: 2px 0; vertical-align: top;">:</td>
<td style="padding: 2px 0; vertical-align: top;">{{ $memoData['jaminan_info'] }}</td> <td style="padding: 2px 0; vertical-align: top;">Tanah & Bangunan</td>
</tr> </tr>
<tr> <tr>
<td style="padding: 2px 0; vertical-align: top;">Total Biaya PJ</td> <td style="padding: 2px 0; vertical-align: top;">Total Biaya PJ</td>
@@ -126,14 +126,27 @@
<tr> <tr>
<td style="padding: 2px 0; vertical-align: top;">Jenis Penilaian</td> <td style="padding: 2px 0; vertical-align: top;">Jenis Penilaian</td>
<td style="padding: 2px 0; vertical-align: top;">:</td> <td style="padding: 2px 0; vertical-align: top;">:</td>
<td style="padding: 2px 0; vertical-align: top;"><strong>KJPP</strong></td> <td style="padding: 2px 0; vertical-align: top;">
<strong>
@if ($memoData['jenisPenilaian'] == 2)
KJPP
@else
Internal
@endif
</strong>
</td>
</tr> </tr>
</table> </table>
<p style="margin-bottom: 16px; text-align: justify;"> <p style="margin-bottom: 16px; text-align: justify;">
Kami menginstruksikan kepada Sentra Operasi untuk menyelesaikan Rekening Escrow / Kami menginstruksikan kepada Sentra Operasi untuk menyelesaikan Rekening Escrow /
<strong>KSL Penilai Jaminan</strong> atas nama debitur tersebut diatas ke <strong>KJPP <strong>KSL Penilai Jaminan</strong> atas nama debitur tersebut diatas ke
(terlampir)</strong>.
@if ($memoData['jenisPenilaian'] == 2)
<strong>KJPP (terlampir)</strong>.
@else
<strong>PDPT-Lainnya Penilaian Jaminan KPNO (IDR 57557)</strong>.
@endif
</p> </p>
<p style="margin-bottom: 16px; text-align: justify;">Demikian kami sampaikan, atas perhatian dan <p style="margin-bottom: 16px; text-align: justify;">Demikian kami sampaikan, atas perhatian dan