🔧 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:
Daeng Deni Mardaeni
2025-09-22 11:35:07 +07:00
parent 20d0061d42
commit ba9089e2ac
3 changed files with 145 additions and 68 deletions

View File

@@ -149,6 +149,7 @@ class PembayaranController extends Controller
{
$req = request()->all();
if(isset($req['type'])){
if($req['type'] == 'create'){
$data = [
'nomor_tiket' => $req['nomor_tiket'] ?? '',
@@ -219,21 +220,16 @@ class PembayaranController extends Controller
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) {

View File

@@ -80,6 +80,8 @@ class Bucok extends Base
'keterangan_gantung',
'lainnya_satu',
'lainnya_dua',
'nomor_registrasi',
'permohonan_id',
];
/**

View File

@@ -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']);
});
}
};