🔧 refactor(pembayaran): perbaikan struktur kode & integrasi Bucok dengan Permohonan
- 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
This commit is contained in:
@@ -149,91 +149,87 @@ class PembayaranController extends Controller
|
|||||||
{
|
{
|
||||||
$req = request()->all();
|
$req = request()->all();
|
||||||
|
|
||||||
if($req['type'] == 'create'){
|
if(isset($req['type'])){
|
||||||
$data = [
|
if($req['type'] == 'create'){
|
||||||
'nomor_tiket' => $req['nomor_tiket'] ?? '',
|
$data = [
|
||||||
'nominal_bayar' => $req['nominal_bayar'] ?? '',
|
'nomor_tiket' => $req['nomor_tiket'] ?? '',
|
||||||
'catatan' => $req['catatan'] ?? ''
|
'nominal_bayar' => $req['nominal_bayar'] ?? '',
|
||||||
];
|
'catatan' => $req['catatan'] ?? ''
|
||||||
|
];
|
||||||
|
|
||||||
if(request()->hasFile('bukti_bayar')){
|
if(request()->hasFile('bukti_bayar')){
|
||||||
$folderPath = 'persetujuan_penawaran/bukti_bayar/' . $req['nomor_tiket'];
|
$folderPath = 'persetujuan_penawaran/bukti_bayar/' . $req['nomor_tiket'];
|
||||||
$data['bukti_bayar'] = $request->file('bukti_bayar')->store($folderPath, 'public');
|
$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);
|
if($req['type'] == 'kurang_bayar'){
|
||||||
$noc = [
|
$noc = Noc::find($req['noc_id']);
|
||||||
'persetujuan_penawaran_id' => $persetujuanPenawaran->id,
|
$noc->nominal_pelunasan = $req['nominal_pelunasan'];
|
||||||
'nomor_tiket' => $req['nomor_tiket'] ?? '',
|
if (request()->hasFile('bukti_ksl_kurang_bayar')) {
|
||||||
'debiture_id' => $req['debitur_id'] ?? '',
|
$folderPath = 'persetujuan_penawaran/bukti_ksl_kurang_bayar/' . $req['noc_id'];
|
||||||
'branch_id' => Auth::user()->branch_id,
|
$noc->bukti_ksl_kurang_bayar = $request->file('bukti_ksl_kurang_bayar')->store($folderPath, 'public');
|
||||||
];
|
}
|
||||||
$noc = Noc::create($noc);
|
$noc->save();
|
||||||
|
|
||||||
$bucok = [
|
$persetujuanPenawaran = PersetujuanPenawaran::find($noc->persetujuan_penawaran_id);
|
||||||
'tanggal_penuh' => $persetujuanPenawaran->created_at,
|
$persetujuanPenawaran->bukti_ksl_kurang_bayar = $noc->bukti_ksl_kurang_bayar;
|
||||||
'tanggal' => $persetujuanPenawaran->created_at->format('d'),
|
$persetujuanPenawaran->nominal_kurang_bayar = $req['nominal_pelunasan'];
|
||||||
'bulan' => $persetujuanPenawaran->created_at->format('m'),
|
$persetujuanPenawaran->save();
|
||||||
'tahun' => $persetujuanPenawaran->created_at->format('Y'),
|
return redirect()
|
||||||
'nomor_tiket' => $req['nomor_tiket'] ?? '',
|
->route('pembayaran.kurang.index')->with('success', 'Pelunasan Kurang Bayar berhasil disimpan.');
|
||||||
'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');
|
|
||||||
}
|
}
|
||||||
$noc->save();
|
|
||||||
|
|
||||||
$persetujuanPenawaran = PersetujuanPenawaran::find($noc->persetujuan_penawaran_id);
|
if($req['type'] == 'lebih_bayar'){
|
||||||
$persetujuanPenawaran->bukti_ksl_kurang_bayar = $noc->bukti_ksl_kurang_bayar;
|
$noc = Noc::find($req['noc_id']);
|
||||||
$persetujuanPenawaran->nominal_kurang_bayar = $req['nominal_pelunasan'];
|
if (request()->hasFile('bukti_ksl_lebih_bayar')) {
|
||||||
$persetujuanPenawaran->save();
|
$folderPath = 'persetujuan_penawaran/bukti_ksl_lebih_bayar/' . $req['noc_id'];
|
||||||
return redirect()
|
$noc->bukti_ksl_lebih_bayar = $request->file('bukti_ksl_lebih_bayar')->store($folderPath, 'public');
|
||||||
->route('pembayaran.kurang.index')->with('success', 'Pelunasan Kurang Bayar berhasil disimpan.');
|
}
|
||||||
}
|
$noc->save();
|
||||||
|
|
||||||
if($req['type'] == 'lebih_bayar'){
|
return redirect()
|
||||||
$noc = Noc::find($req['noc_id']);
|
->route('pembayaran.lebih.index')->with('success', 'Pengembalian Lebih Bayar berhasil disimpan.');
|
||||||
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();
|
|
||||||
|
|
||||||
return redirect()
|
|
||||||
->route('pembayaran.lebih.index')->with('success', 'Pengembalian Lebih Bayar berhasil disimpan.');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$validated = $request->validated();
|
$validated = $request->validated();
|
||||||
|
$validated['nominal_bayar'] = $req['nominal_bayar'] ?? 0;
|
||||||
$validated['created_by'] = Auth::id();
|
$validated['created_by'] = Auth::id();
|
||||||
$validated['status'] = '0';
|
$validated['status'] = '0';
|
||||||
|
|
||||||
$persetujuanPenawaran = PersetujuanPenawaran::where('permohonan_id', $validated['permohonan_id'] ?? null)->first();
|
$persetujuanPenawaran = PersetujuanPenawaran::where('permohonan_id', $validated['permohonan_id'] ?? null)->first();
|
||||||
$permohonan = Permohonan::find(request()->get('permohonan_id'));
|
$permohonan = Permohonan::find(request()->get('permohonan_id'));
|
||||||
if ($persetujuanPenawaran) {
|
if ($persetujuanPenawaran) {
|
||||||
// if (isset($validated['penawaran_id'])) {
|
|
||||||
|
|
||||||
// $persetujuanPenawaran = PersetujuanPenawaran::create(
|
|
||||||
// ['penawaran_id' => $validated['penawaran_id']],
|
|
||||||
// $validated,
|
|
||||||
// );
|
|
||||||
|
|
||||||
$persetujuanPenawaran->fill($validated);
|
$persetujuanPenawaran->fill($validated);
|
||||||
|
|
||||||
if ($request->hasFile('bukti_bayar')) {
|
if ($request->hasFile('bukti_bayar')) {
|
||||||
@@ -269,6 +265,33 @@ class PembayaranController extends Controller
|
|||||||
$persetujuanPenawaran->save();
|
$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'
|
// Update the status of the related permohonan to 'spk'
|
||||||
|
|
||||||
if ($permohonan) {
|
if ($permohonan) {
|
||||||
|
|||||||
@@ -80,6 +80,8 @@ class Bucok extends Base
|
|||||||
'keterangan_gantung',
|
'keterangan_gantung',
|
||||||
'lainnya_satu',
|
'lainnya_satu',
|
||||||
'lainnya_dua',
|
'lainnya_dua',
|
||||||
|
'nomor_registrasi',
|
||||||
|
'permohonan_id',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* Menambahkan kolom nomor_registrasi dan permohonan_id pada table bucoks
|
||||||
|
* untuk menghubungkan data bucok dengan permohonan penilaian
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::table('bucoks', function (Blueprint $table) {
|
||||||
|
// Menambahkan kolom nomor_registrasi untuk tracking nomor registrasi
|
||||||
|
$table->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']);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user