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