diff --git a/app/Http/Controllers/MemoController.php b/app/Http/Controllers/MemoController.php index b38c09e..28cfe7a 100644 --- a/app/Http/Controllers/MemoController.php +++ b/app/Http/Controllers/MemoController.php @@ -314,4 +314,147 @@ class MemoController extends Controller ], 500); } } + + /** + * Menampilkan preview memo penyelesaian sebelum menyimpan + * + * @param Request $request + * @return \Illuminate\View\View + */ + public function preview(Request $request) + { + 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; + $memoNumber = $request->memo_number; + $paymentDate = $request->payment_date; + $memoDate = $request->memo_date; + + try { + // 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) + ]; + + Log::info('MemoController: Data preview memo berhasil disiapkan'); + + return view('lpj::memo.preview', compact('memoData', 'permohonanList', 'totalBiayaPJ')); + + } catch (Exception $e) { + Log::error('MemoController: Error saat menyiapkan preview memo - ' . $e->getMessage()); + return redirect()->back() + ->withInput() + ->with('error', 'Terjadi kesalahan saat menyiapkan preview memo: ' . $e->getMessage()); + } + } + + /** + * Generate PDF memo penyelesaian dan simpan ke database + * + * @param Request $request + * @return \Illuminate\Http\RedirectResponse + */ + public function generatePdf(Request $request) + { + Log::info('MemoController: Memulai generate PDF memo penyelesaian'); + + DB::beginTransaction(); + + 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; + + // Update status permohonan yang dipilih + foreach ($permohonanIds as $permohonanId) { + $permohonan = Permohonan::find($permohonanId); + if ($permohonan) { + $permohonan->status = 'memo-penyelesaian'; + $permohonan->memo_penyelesaian_number = $memoNumber; + $permohonan->memo_penyelesaian_date = $memoDate; + $permohonan->memo_penyelesaian_payment_date = $paymentDate; + $permohonan->memo_penyelesaian_created_at = now(); + $permohonan->save(); + + Log::info('MemoController: Berhasil update permohonan ID: ' . $permohonanId); + } + } + + 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'); + + } catch (Exception $e) { + DB::rollback(); + Log::error('MemoController: Error saat generate PDF memo penyelesaian - ' . $e->getMessage()); + + return redirect()->back() + ->withInput() + ->with('error', 'Terjadi kesalahan saat generate PDF memo penyelesaian: ' . $e->getMessage()); + } + } + + /** + * Helper function untuk mendapatkan informasi jaminan + * + * @param $permohonanList + * @return string + */ + private function getJaminanInfo($permohonanList) + { + $jaminanTypes = []; + foreach ($permohonanList as $permohonan) { + if ($permohonan->tujuanPenilaian) { + $jaminanTypes[] = $permohonan->tujuanPenilaian->name; + } + } + + $uniqueJaminan = array_unique($jaminanTypes); + return implode(' & ', $uniqueJaminan); + } } diff --git a/resources/views/memo/create.blade.php b/resources/views/memo/create.blade.php index 9e94178..a53929c 100644 --- a/resources/views/memo/create.blade.php +++ b/resources/views/memo/create.blade.php @@ -28,7 +28,7 @@ @endif -