From 535be2cff365d62c00f7e7d9967f114aeb094e9b Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Sat, 8 Nov 2025 11:45:10 +0700 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(permohonan):=20otomasi=20Perse?= =?UTF-8?q?tujuanPenawaran=20&=20NOC=20saat=20sudah=20dibayar,=20tambah=20?= =?UTF-8?q?validasi=20Bukti=20Bayar,?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - PersetujuanPenawaran: ubah logika pembuatan menjadi firstOrCreate untuk mencegah duplikasi dan menjaga idempotensi. - Validasi Bukti Bayar: wajib unggah dokumen “Bukti Bayar” saat status sudah_dibayar ; blokir proses jika dokumen tidak ditemukan. - Simpan Bukti Bayar ke PersetujuanPenawaran: ambil dari koleksi dokumen jaminan, set ke field bukti_bayar . - NOC otomatis: updateOrCreate NOC berdasarkan permohonan_id dan persetujuan_penawaran_id ; logging error bila gagal. - Pengalihan aman: redirect terarah dengan pesan error pada kondisi validasi gagal atau kegagalan pembuatan NOC. --- app/Http/Controllers/PermohonanController.php | 42 +++++++++++++++++-- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/PermohonanController.php b/app/Http/Controllers/PermohonanController.php index 9cd9ab2..6fc8e56 100644 --- a/app/Http/Controllers/PermohonanController.php +++ b/app/Http/Controllers/PermohonanController.php @@ -27,6 +27,9 @@ use Modules\Lpj\Models\StatusPermohonan; use Modules\Lpj\Models\TujuanPenilaian; use Modules\Lpj\Services\PermohonanHistoryService; + use Modules\Lpj\Models\Noc; + + class PermohonanController extends Controller { @@ -361,15 +364,46 @@ $permohonan->save(); if ($permohonan->status_bayar == 'belum_bayar') { - $persetujuanPenawaran = PersetujuanPenawaran::where('permohonan_id', $id)->first(); - if(!$persetujuanPenawaran){ - $persetujuanPenawaran = PersetujuanPenawaran::create([ - 'permohonan_id' => $id, + PersetujuanPenawaran::firstOrCreate( + ['permohonan_id' => $id], + ['created_by' => Auth::id()] + ); + } + + if ($permohonan->status == 'sudah_dibayar') { + $buktiBayar = $permohonan->documents->filter(function ($doc) { + return $doc->detail && $doc->detail->nama === 'Bukti Bayar'; + }); + + if ($buktiBayar->isEmpty()) { + return redirect()->route('authorization.show', $id)->with('error', 'Bukti Bayar harus diunggah'); + } + + $persetujuanPenawaran = PersetujuanPenawaran::firstOrCreate( + ['permohonan_id' => $id], + [ 'created_by' => Auth::id(), + 'bukti_bayar' => $buktiBayar->first()->dokumen_jaminan[0], + ] + ); + + try { + Noc::updateOrCreate([ + 'permohonan_id' => $persetujuanPenawaran->permohonan_id, + 'persetujuan_penawaran_id' => $persetujuanPenawaran->id + ],[ + 'bukti_bayar' => $persetujuanPenawaran->bukti_bayar, ]); + } catch (\Exception $e) { + \Log::error('Failed to create or update NOC: ' . $e->getMessage()); + return redirect() + ->route('persetujuan-penawaran.index') + ->with('error', 'Persetujuan Penawaran berhasil disimpan tetapi gagal membuat NOC: ' . $e->getMessage()); } } + + } catch (Exception $e) { return redirect()->route('authorization.show', $id)->with('error', 'Failed to update permohonan'); }