✨ 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:
@@ -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');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user