From ba9089e2acd6a787324a70d156755a4da8dde713 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Mon, 22 Sep 2025 11:35:07 +0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20refactor(pembayaran):=20perbaika?= =?UTF-8?q?n=20struktur=20kode=20&=20integrasi=20Bucok=20dengan=20Permohon?= =?UTF-8?q?an?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Tambahkan validasi parameter `type` pada PembayaranController untuk mencegah error runtime - Refactor nested conditions & perbaikan indentasi agar kode lebih readable dan maintainable - Update model Bucok: tambah field `nomor_registrasi` & `permohonan_id` ke fillable serta relasi dengan Permohonan - Integrasi logika pembayaran: auto update/create Bucok dengan data Permohonan & default nominal_bayar - Implementasi conditional update berdasarkan ketersediaan nomor_tiket untuk sinkronisasi data - Tambahkan migration baru: kolom nomor_registrasi & permohonan_id di tabel bucoks, dengan foreign key dan index - Pastikan rollback migration tersedia via method down() untuk keamanan schema - Optimasi query dengan index baru & penggunaan updateOrCreate untuk hindari duplikasi data --- app/Http/Controllers/PembayaranController.php | 159 ++++++++++-------- app/Models/Bucok.php | 2 + ...rasi_and_permohonan_id_to_bucoks_table.php | 52 ++++++ 3 files changed, 145 insertions(+), 68 deletions(-) create mode 100644 database/migrations/2025_09_22_035457_add_nomor_registrasi_and_permohonan_id_to_bucoks_table.php diff --git a/app/Http/Controllers/PembayaranController.php b/app/Http/Controllers/PembayaranController.php index f84c518..29649bf 100644 --- a/app/Http/Controllers/PembayaranController.php +++ b/app/Http/Controllers/PembayaranController.php @@ -149,91 +149,87 @@ class PembayaranController extends Controller { $req = request()->all(); - if($req['type'] == 'create'){ - $data = [ - 'nomor_tiket' => $req['nomor_tiket'] ?? '', - 'nominal_bayar' => $req['nominal_bayar'] ?? '', - 'catatan' => $req['catatan'] ?? '' - ]; + if(isset($req['type'])){ + if($req['type'] == 'create'){ + $data = [ + 'nomor_tiket' => $req['nomor_tiket'] ?? '', + 'nominal_bayar' => $req['nominal_bayar'] ?? '', + 'catatan' => $req['catatan'] ?? '' + ]; - if(request()->hasFile('bukti_bayar')){ - $folderPath = 'persetujuan_penawaran/bukti_bayar/' . $req['nomor_tiket']; - $data['bukti_bayar'] = $request->file('bukti_bayar')->store($folderPath, 'public'); + if(request()->hasFile('bukti_bayar')){ + $folderPath = 'persetujuan_penawaran/bukti_bayar/' . $req['nomor_tiket']; + $data['bukti_bayar'] = $request->file('bukti_bayar')->store($folderPath, 'public'); + } + + $persetujuanPenawaran = PersetujuanPenawaran::create($data); + $noc = [ + 'persetujuan_penawaran_id' => $persetujuanPenawaran->id, + 'nomor_tiket' => $req['nomor_tiket'] ?? '', + 'debiture_id' => $req['debitur_id'] ?? '', + 'branch_id' => Auth::user()->branch_id, + ]; + $noc = Noc::create($noc); + + $bucok = [ + 'tanggal_penuh' => $persetujuanPenawaran->created_at, + 'tanggal' => $persetujuanPenawaran->created_at->format('d'), + 'bulan' => $persetujuanPenawaran->created_at->format('m'), + 'tahun' => $persetujuanPenawaran->created_at->format('Y'), + 'nomor_tiket' => $req['nomor_tiket'] ?? '', + 'nominal' => $req['nominal_bayar'] ?? '', + 'nominal_berjalan' => $req['nominal_bayar'] ?? '', + 'penyelesaian' => 'Belum Selesai', + 'nama_sub_direktorat' => $noc->branch?->name ?? '', + 'nama_direktorat_cabang' => $noc->branch?->name ?? '', + ]; + + Bucok::updateOrCreate([ + 'nomor_tiket' => $req['nomor_tiket'] ?? '', + ], $bucok); + + return redirect() + ->route('pembayaran.index')->with('success', 'Pembayaran berhasil disimpan.'); } - $persetujuanPenawaran = PersetujuanPenawaran::create($data); - $noc = [ - 'persetujuan_penawaran_id' => $persetujuanPenawaran->id, - 'nomor_tiket' => $req['nomor_tiket'] ?? '', - 'debiture_id' => $req['debitur_id'] ?? '', - 'branch_id' => Auth::user()->branch_id, - ]; - $noc = Noc::create($noc); + if($req['type'] == 'kurang_bayar'){ + $noc = Noc::find($req['noc_id']); + $noc->nominal_pelunasan = $req['nominal_pelunasan']; + if (request()->hasFile('bukti_ksl_kurang_bayar')) { + $folderPath = 'persetujuan_penawaran/bukti_ksl_kurang_bayar/' . $req['noc_id']; + $noc->bukti_ksl_kurang_bayar = $request->file('bukti_ksl_kurang_bayar')->store($folderPath, 'public'); + } + $noc->save(); - $bucok = [ - 'tanggal_penuh' => $persetujuanPenawaran->created_at, - 'tanggal' => $persetujuanPenawaran->created_at->format('d'), - 'bulan' => $persetujuanPenawaran->created_at->format('m'), - 'tahun' => $persetujuanPenawaran->created_at->format('Y'), - 'nomor_tiket' => $req['nomor_tiket'] ?? '', - 'nominal' => $req['nominal_bayar'] ?? '', - 'nominal_berjalan' => $req['nominal_bayar'] ?? '', - 'penyelesaian' => 'Belum Selesai', - 'nama_sub_direktorat' => $noc->branch?->name ?? '', - 'nama_direktorat_cabang' => $noc->branch?->name ?? '', - ]; - - Bucok::updateOrCreate([ - 'nomor_tiket' => $req['nomor_tiket'] ?? '', - ], $bucok); - - return redirect() - ->route('pembayaran.index')->with('success', 'Pembayaran berhasil disimpan.'); - } - - if($req['type'] == 'kurang_bayar'){ - $noc = Noc::find($req['noc_id']); - $noc->nominal_pelunasan = $req['nominal_pelunasan']; - if (request()->hasFile('bukti_ksl_kurang_bayar')) { - $folderPath = 'persetujuan_penawaran/bukti_ksl_kurang_bayar/' . $req['noc_id']; - $noc->bukti_ksl_kurang_bayar = $request->file('bukti_ksl_kurang_bayar')->store($folderPath, 'public'); + $persetujuanPenawaran = PersetujuanPenawaran::find($noc->persetujuan_penawaran_id); + $persetujuanPenawaran->bukti_ksl_kurang_bayar = $noc->bukti_ksl_kurang_bayar; + $persetujuanPenawaran->nominal_kurang_bayar = $req['nominal_pelunasan']; + $persetujuanPenawaran->save(); + return redirect() + ->route('pembayaran.kurang.index')->with('success', 'Pelunasan Kurang Bayar berhasil disimpan.'); } - $noc->save(); - $persetujuanPenawaran = PersetujuanPenawaran::find($noc->persetujuan_penawaran_id); - $persetujuanPenawaran->bukti_ksl_kurang_bayar = $noc->bukti_ksl_kurang_bayar; - $persetujuanPenawaran->nominal_kurang_bayar = $req['nominal_pelunasan']; - $persetujuanPenawaran->save(); - return redirect() - ->route('pembayaran.kurang.index')->with('success', 'Pelunasan Kurang Bayar berhasil disimpan.'); - } + if($req['type'] == 'lebih_bayar'){ + $noc = Noc::find($req['noc_id']); + if (request()->hasFile('bukti_ksl_lebih_bayar')) { + $folderPath = 'persetujuan_penawaran/bukti_ksl_lebih_bayar/' . $req['noc_id']; + $noc->bukti_ksl_lebih_bayar = $request->file('bukti_ksl_lebih_bayar')->store($folderPath, 'public'); + } + $noc->save(); - if($req['type'] == 'lebih_bayar'){ - $noc = Noc::find($req['noc_id']); - if (request()->hasFile('bukti_ksl_lebih_bayar')) { - $folderPath = 'persetujuan_penawaran/bukti_ksl_lebih_bayar/' . $req['noc_id']; - $noc->bukti_ksl_lebih_bayar = $request->file('bukti_ksl_lebih_bayar')->store($folderPath, 'public'); + return redirect() + ->route('pembayaran.lebih.index')->with('success', 'Pengembalian Lebih Bayar berhasil disimpan.'); } - $noc->save(); - - return redirect() - ->route('pembayaran.lebih.index')->with('success', 'Pengembalian Lebih Bayar berhasil disimpan.'); } $validated = $request->validated(); + $validated['nominal_bayar'] = $req['nominal_bayar'] ?? 0; $validated['created_by'] = Auth::id(); $validated['status'] = '0'; $persetujuanPenawaran = PersetujuanPenawaran::where('permohonan_id', $validated['permohonan_id'] ?? null)->first(); $permohonan = Permohonan::find(request()->get('permohonan_id')); if ($persetujuanPenawaran) { - // if (isset($validated['penawaran_id'])) { - - // $persetujuanPenawaran = PersetujuanPenawaran::create( - // ['penawaran_id' => $validated['penawaran_id']], - // $validated, - // ); - $persetujuanPenawaran->fill($validated); if ($request->hasFile('bukti_bayar')) { @@ -269,6 +265,33 @@ class PembayaranController extends Controller $persetujuanPenawaran->save(); } + $bucok = [ + 'tanggal_penuh' => $persetujuanPenawaran->created_at, + 'tanggal' => $persetujuanPenawaran->created_at->format('d'), + 'bulan' => $persetujuanPenawaran->created_at->format('m'), + 'tahun' => $persetujuanPenawaran->created_at->format('Y'), + 'nomor_tiket' => $req['nomor_tiket'] ?? '', + 'nominal' => $req['nominal_bayar'] ?? '', + 'nominal_berjalan' => $req['nominal_bayar'] ?? '', + 'penyelesaian' => 'Belum Selesai', + 'nama_sub_direktorat' => $noc->branch?->name ?? '', + 'nama_direktorat_cabang' => $noc->branch?->name ?? '', + 'permohonan_id' => $permohonan->id, + 'nomor_registrasi' => $permohonan->nomor_registrasi, + ]; + + + if(isset($req['nomor_tiket']) && $req['nomor_tiket'] !=''){ + Bucok::updateOrCreate([ + 'nomor_registrasi' => $permohonan->nomor_registrasi, + 'nomor_tiket' => $req['nomor_tiket'], + ], $bucok); + } else { + Bucok::updateOrCreate([ + 'nomor_registrasi' => $permohonan->nomor_registrasi + ], $bucok); + } + // Update the status of the related permohonan to 'spk' if ($permohonan) { diff --git a/app/Models/Bucok.php b/app/Models/Bucok.php index f65d9f0..34abd73 100644 --- a/app/Models/Bucok.php +++ b/app/Models/Bucok.php @@ -80,6 +80,8 @@ class Bucok extends Base 'keterangan_gantung', 'lainnya_satu', 'lainnya_dua', + 'nomor_registrasi', + 'permohonan_id', ]; /** diff --git a/database/migrations/2025_09_22_035457_add_nomor_registrasi_and_permohonan_id_to_bucoks_table.php b/database/migrations/2025_09_22_035457_add_nomor_registrasi_and_permohonan_id_to_bucoks_table.php new file mode 100644 index 0000000..12d0add --- /dev/null +++ b/database/migrations/2025_09_22_035457_add_nomor_registrasi_and_permohonan_id_to_bucoks_table.php @@ -0,0 +1,52 @@ +string('nomor_registrasi')->nullable()->after('nomor_tiket')->comment('Nomor registrasi terkait'); + + // Menambahkan kolom permohonan_id sebagai foreign key ke table permohonan + $table->unsignedBigInteger('permohonan_id')->nullable()->after('nomor_registrasi')->comment('ID permohonan terkait'); + + // Menambahkan foreign key constraint ke table permohonan + $table->foreign('permohonan_id')->references('id')->on('permohonan')->onDelete('set null'); + + // Menambahkan index untuk performa query + $table->index(['nomor_registrasi']); + $table->index(['permohonan_id']); + }); + } + + /** + * Reverse the migrations. + * + * Menghapus kolom nomor_registrasi dan permohonan_id dari table bucoks + */ + public function down(): void + { + Schema::table('bucoks', function (Blueprint $table) { + // Menghapus foreign key constraint terlebih dahulu + $table->dropForeign(['permohonan_id']); + + // Menghapus index + $table->dropIndex(['nomor_registrasi']); + $table->dropIndex(['permohonan_id']); + + // Menghapus kolom + $table->dropColumn(['nomor_registrasi', 'permohonan_id']); + }); + } +};