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.
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user