feat(permohonan): otomasi PersetujuanPenawaran & NOC saat sudah dibayar, tambah validasi Bukti Bayar,

- 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.
This commit is contained in:
Daeng Deni Mardaeni
2025-11-08 11:45:10 +07:00
parent 1a67eb2000
commit 535be2cff3

View File

@@ -27,6 +27,9 @@
use Modules\Lpj\Models\StatusPermohonan; use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\TujuanPenilaian; use Modules\Lpj\Models\TujuanPenilaian;
use Modules\Lpj\Services\PermohonanHistoryService; use Modules\Lpj\Services\PermohonanHistoryService;
use Modules\Lpj\Models\Noc;
class PermohonanController extends Controller class PermohonanController extends Controller
{ {
@@ -361,15 +364,46 @@
$permohonan->save(); $permohonan->save();
if ($permohonan->status_bayar == 'belum_bayar') { if ($permohonan->status_bayar == 'belum_bayar') {
$persetujuanPenawaran = PersetujuanPenawaran::where('permohonan_id', $id)->first(); PersetujuanPenawaran::firstOrCreate(
if(!$persetujuanPenawaran){ ['permohonan_id' => $id],
$persetujuanPenawaran = PersetujuanPenawaran::create([ ['created_by' => Auth::id()]
'permohonan_id' => $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(), '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) { } catch (Exception $e) {
return redirect()->route('authorization.show', $id)->with('error', 'Failed to update permohonan'); return redirect()->route('authorization.show', $id)->with('error', 'Failed to update permohonan');
} }