From cbdd4bd99e14cd1b41ef31f1424845e6641c3b26 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 17 Jul 2025 11:41:21 +0700 Subject: [PATCH] fix(memo): Sinkronisasi layout PDF memo dengan preview dan perbaikan section tanda tangan Melakukan sinkronisasi tampilan memo penyelesaian antara preview dan PDF serta memperbaiki struktur layout bagian tanda tangan untuk kompatibilitas PDF. Perubahan yang dilakukan: - Menyesuaikan header dan logo dengan ukuran yang sama (53.55px) untuk preview dan PDF. - Mengubah judul memo menjadi "Memo Instruksi Penyelesaian Rekening Escrow / KSL Penilai Jaminan". - Menyesuaikan informasi memo (Kepada, Dari, Perihal) agar konsisten antara preview dan PDF. - Menggunakan format tabel yang konsisten untuk detail memo dan lampiran. - Menambahkan daftar lampiran dengan kolom Nomor Registrasi dan AO sesuai format preview. - Mengimplementasikan fungsi `terbilang()` untuk konversi angka ke teks dalam lampiran. - Menyesuaikan font size, spacing, dan styling agar seragam di semua output. - Menambahkan page break yang presisi antara halaman memo utama dan lampiran. Perbaikan section tanda tangan: - Mengganti struktur flexbox dengan table layout pada bagian tanda tangan untuk stabilitas PDF. - Menggunakan 3 kolom dengan lebar 33.33% untuk pembagian tanda tangan yang rata. - Menambahkan `vertical-align: top` untuk posisi tanda tangan yang konsisten secara vertikal. - Menambahkan padding horizontal agar antar kolom tanda tangan tidak saling berdekatan. - Memastikan garis tanda tangan tetap center dengan `margin: auto`. - Mengoptimalkan layout agar kompatibel dengan berbagai PDF viewer dan environment printing. Tujuan perubahan: - Menjamin konsistensi tampilan antara preview di aplikasi dan file PDF yang dihasilkan. - Memastikan dokumen tercetak rapi, profesional, dan sesuai dengan format dokumen resmi perbankan. - Meningkatkan kompatibilitas layout untuk berbagai perangkat dan proses cetak. --- app/Http/Controllers/MemoController.php | 68 +++- resources/views/memo/pdf-template.blade.php | 363 ++++++++++++++++++++ 2 files changed, 419 insertions(+), 12 deletions(-) create mode 100644 resources/views/memo/pdf-template.blade.php diff --git a/app/Http/Controllers/MemoController.php b/app/Http/Controllers/MemoController.php index 28cfe7a..04390f1 100644 --- a/app/Http/Controllers/MemoController.php +++ b/app/Http/Controllers/MemoController.php @@ -9,6 +9,8 @@ use Illuminate\Support\Facades\DB; use Modules\Lpj\Models\Permohonan; use Illuminate\Support\Facades\Log; use App\Http\Controllers\Controller; +use Barryvdh\DomPDF\Facade\Pdf; +use Illuminate\Support\Facades\Storage; class MemoController extends Controller { @@ -116,7 +118,7 @@ class MemoController extends Controller $permohonan->memo_penyelesaian_date = $memoDate; $permohonan->memo_penyelesaian_payment_date = $paymentDate; $permohonan->memo_penyelesaian_created_at = now(); - $permohonan->save(); + //$permohonan->save(); Log::info('MemoController: Berhasil update permohonan ID: ' . $permohonanId); } @@ -385,7 +387,7 @@ class MemoController extends Controller * Generate PDF memo penyelesaian dan simpan ke database * * @param Request $request - * @return \Illuminate\Http\RedirectResponse + * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse */ public function generatePdf(Request $request) { @@ -395,19 +397,60 @@ class MemoController extends Controller try { // 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; $memoNumber = $request->memo_number; $paymentDate = $request->payment_date; $memoDate = $request->memo_date; + // Ambil data permohonan yang dipilih + $permohonanList = Permohonan::with([ + 'user', + 'debiture', + 'branch', + 'tujuanPenilaian', + 'penilaian', + 'jenisFasilitasKredit', + 'documents.inspeksi', + 'penilai', + 'documents.detail', + 'noc' + ])->whereIn('id', $permohonanIds)->get(); + + // Hitung total biaya PJ dari nominal_bayar di tabel NOC + $totalBiayaPJ = Noc::whereIn('permohonan_id', $permohonanIds) + ->sum('nominal_bayar'); + + // Data untuk template memo + $memoData = [ + 'memo_number' => $memoNumber, + 'memo_date' => $memoDate, + 'payment_date' => $paymentDate, + 'total_biaya_pj' => $totalBiayaPJ, + 'permohonan_list' => $permohonanList, + 'debitur_count' => $permohonanList->count(), + 'jaminan_info' => $this->getJaminanInfo($permohonanList) + ]; + // Generate PDF dari template + $pdf = Pdf::loadView('lpj::memo.pdf-template', compact('memoData', 'permohonanList', 'totalBiayaPJ')) + ->setPaper('a4', 'portrait') + ->setOptions([ + 'defaultFont' => 'Times-Roman', + 'isRemoteEnabled' => true, + 'isHtml5ParserEnabled' => true, + 'isPhpEnabled' => true, + 'dpi' => 150, + 'defaultPaperSize' => 'a4', + 'chroot' => public_path(), + ]); + + // Nama file PDF + $fileName = 'memo-penyelesaian-' . str_replace(['/', ' '], ['-', '-'], $memoNumber) . '-' . date('Y-m-d-H-i-s') . '.pdf'; + $filePath = 'memo-penyelesaian/' . $fileName; + + // Simpan PDF ke storage + Storage::disk('public')->put($filePath, $pdf->output()); + // Update status permohonan yang dipilih foreach ($permohonanIds as $permohonanId) { $permohonan = Permohonan::find($permohonanId); @@ -417,7 +460,8 @@ class MemoController extends Controller $permohonan->memo_penyelesaian_date = $memoDate; $permohonan->memo_penyelesaian_payment_date = $paymentDate; $permohonan->memo_penyelesaian_created_at = now(); - $permohonan->save(); + $permohonan->memo_penyelesaian_pdf_path = $filePath; + //$permohonan->save(); Log::info('MemoController: Berhasil update permohonan ID: ' . $permohonanId); } @@ -426,8 +470,8 @@ class MemoController extends Controller DB::commit(); Log::info('MemoController: Berhasil generate PDF dan menyimpan memo penyelesaian untuk ' . count($permohonanIds) . ' permohonan'); - return redirect()->route('memo.index') - ->with('success', 'Memo penyelesaian berhasil dibuat dan disimpan untuk ' . count($permohonanIds) . ' permohonan'); + // Return PDF untuk download + return $pdf->download($fileName); } catch (Exception $e) { DB::rollback(); diff --git a/resources/views/memo/pdf-template.blade.php b/resources/views/memo/pdf-template.blade.php new file mode 100644 index 0000000..c2de268 --- /dev/null +++ b/resources/views/memo/pdf-template.blade.php @@ -0,0 +1,363 @@ + + + + + + Memo Penyelesaian - {{ $memoData['memo_number'] }} + + + + + +
+ +
+ +
+ Memo Instruksi Penyelesaian Rekening Escrow / KSL Penilai Jaminan +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Kepada:SUBDIT E-Channel Support & Operation (NOC)
Dari:SUBDIT Appraisal
Nomor:{{ $memoData['memo_number'] }}
Tanggal:{{ \Carbon\Carbon::parse($memoData['memo_date'])->format('d F Y') }}
Perihal:Penyelesaian Rekening Escrow / KSL Penilai Jaminan (PJ)
+
+ +
+ +
+

Sehubungan dengan telah dilakukannya penilaian jaminan dengan keterangan sbb : +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Nama Debitur:Terlampir ({{ $memoData['debitur_count'] }} Debitur)
Jaminan:{{ $memoData['jaminan_info'] }}
Total Biaya PJ:Rp {{ number_format($memoData['total_biaya_pj'], 0, ',', '.') }},-
({{ terbilang($memoData['total_biaya_pj']) }} Rupiah)
Pembayaran Tanggal:{{ \Carbon\Carbon::parse($memoData['payment_date'])->format('d F Y') }}
LPJ selesai dikirim:-
Jenis Penilaian:KJPP
+ +

Kami menginstruksikan kepada Sentra Operasi untuk menyelesaikan Rekening Escrow + / KSL Penilai Jaminan atas nama debitur tersebut diatas ke KJPP + (terlampir).

+ +

Demikian kami sampaikan, atas perhatian dan kerjasamanya kami ucapkan terima + kasih.

+
+ +
+ + + + + + +
+

Salam

+
+

Innawati Sulina

+

DD Operation 2

+
+

 

+
+

Wahab N. Wibawa

+

Pgs EO Subdit Appraisal

+
+

 

+
+

Sumurung P. Siahaan

+

 

+
+
+ +
+

Lampiran :

+ +
+ + +
+
LAMPIRAN
+
REKAP PERMOHONAN PENYELESAIAN BIAYA KJPP
+

Memo No: {{ $memoData['memo_number'] }}

+ + + + + + + + + + + + + + + @foreach ($permohonanList as $index => $permohonan) + + + + + + + + + + @endforeach + + + + + + + +
NoNomor RegistrasiDebiturCabangAOTujuan PenilaianBiaya PJ
{{ $index + 1 }}{{ $permohonan->nomor_registrasi }}{{ $permohonan->debiture->name ?? '-' }}{{ $permohonan->branch->name ?? '-' }}{{ $permohonan->user->name ?? '-' }}{{ $permohonan->tujuanPenilaian->name ?? '-' }}Rp + {{ number_format($permohonan->noc->nominal_bayar ?? 0, 0, ',', '.') }}
Total Biaya PJ:Rp {{ number_format($totalBiayaPJ, 0, ',', '.') }}
+
+ + +