feat(shoraka): defer gadai persistence until commodity confirmation and add simulation support

This commit is contained in:
2026-10-19 13:02:13 +08:00
parent d0f08545d1
commit a8888e66d1
12 changed files with 429 additions and 30 deletions
+47 -12
View File
@@ -55,6 +55,10 @@ class GadaiController extends Controller
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$cawangan_code)->first();
$gadaiTransaction = Gadai::on($cawangan['mysql'])->where('t_gadai','=',$date)->orderBy('sirig', 'desc')->first();
$serial = app(\App\Services\ShorakaNewGadaiService::class)->latestSerial($cawangan_code, $date);
if ($serial > (int) ($gadaiTransaction->sirig ?? 0)) {
$gadaiTransaction = ['sirig' => $serial];
}
}catch(\Exception $e){
Log::debug($e);
Log::debug($cawangan_code);
@@ -111,7 +115,7 @@ class GadaiController extends Controller
$gadai_all = [];
foreach($cawangan_all as $index=>$cawangan){
$gadai = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->get();
$gadai = collect(array_filter([app(\App\Services\ShorakaNewGadaiService::class)->find($cawangan->kodcaw, $norujukan)]));
if(sizeof($gadai) != 0){
array_push($gadai_all,$gadai);
}
@@ -130,7 +134,7 @@ class GadaiController extends Controller
$gadai_all = [];
foreach($cawangan_all as $index=>$cawangan){
$gadai = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->get();
$gadai = collect(array_filter([app(\App\Services\ShorakaNewGadaiService::class)->find($cawangan->kodcaw, $norujukan)]));
if(sizeof($gadai) != 0){
array_push($gadai_all,$gadai);
}
@@ -152,13 +156,22 @@ class GadaiController extends Controller
public function showOneGadaibyRujukanAndCawangan($kodcaw,$norujukan){
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
$gadai = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->get();
$gadai = collect(array_filter([app(\App\Services\ShorakaNewGadaiService::class)->find($cawangan->kodcaw, $norujukan)]));
return response()->json($gadai);
}
public function create($kodcaw,Request $request){
if ($request->boolean('shoraka_new')) {
$this->validate($request, ['nokp' => 'required|string', 'nopelanggan' => 'required']);
return response()->json(app(\App\Services\ShorakaNewGadaiService::class)->reserve(
$kodcaw, $request->only(['nokp', 'nopelanggan'])
), 201);
}
if (app(\App\Services\ShorakaNewGadaiService::class)->pending($kodcaw, (string) $request->norujukan)) {
abort(409, 'Nombor rujukan sedang digunakan. Sila dapatkan nombor baharu.');
}
$master = new MasterServices($kodcaw);
$response = $master->createGadai($request);
@@ -228,14 +241,18 @@ class GadaiController extends Controller
}
public function daftarGadaiMarhun($norujukan,Request $request){
if (\App\ShorakaTransaction::where('norujukan', $request->norujukan)->exists()) {
public function daftarGadaiMarhun($kodcaw, $norujukan, Request $request)
{
if (\App\ShorakaTransaction::where('norujukan', $norujukan)->exists()) {
abort(409, 'Kontrak telah dihantar ke Shoraka dan tidak boleh diubah.');
}
// dd("ggwp");
$master = new MasterServices($request->kodcaw);
$response = $master->createMarhunGadai($request->norujukan,$request);
$temporary = app(\App\Services\ShorakaNewGadaiService::class)->pending($kodcaw, $norujukan);
if ($temporary && (string) $temporary['gadai']['nokp'] !== (string) $request->nokp) {
abort(409, 'Pelanggan tidak sepadan dengan borang gadaian sementara.');
}
$request->merge(['kodcaw' => $kodcaw, 'norujukan' => $norujukan]);
$master = new MasterServices($kodcaw);
$response = $master->createMarhunGadai($norujukan, $request);
return response()->json($response, 200);
}
@@ -249,7 +266,13 @@ class GadaiController extends Controller
public function checkNorujukan(Request $request){
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first();
$gadai = Gadai::on($cawangan['mysql'])->where([['norujukan','=',$request->norujukan],['nokp','=',$request->nokp]])->first();
$gadai = app(\App\Services\ShorakaNewGadaiService::class)->find($request->kodcaw, $request->norujukan);
if (!$gadai && \App\ShorakaTransaction::where('norujukan', $request->norujukan)->exists()) {
abort(409, 'Transaksi Shoraka wujud tetapi maklumat sementara tiada. Hubungi operasi; jangan daftar semula.');
}
if ($gadai && $gadai->nokp !== $request->nokp) {
$gadai = null;
}
return response()->json($gadai);
}
@@ -372,6 +395,16 @@ class GadaiController extends Controller
}
public function batalGadai($kodcaw, $norujukan,Request $request){
$temporary = app(\App\Services\ShorakaNewGadaiService::class);
$order = \App\ShorakaTransaction::where('norujukan', $norujukan)->first();
if ($order && !empty($order->request_payload['_new_gadai'])) {
abort(409, 'Transaksi Shoraka telah dihantar. Semakan operasi diperlukan sebelum pembatalan.');
}
if ($temporary->pending($kodcaw, $norujukan)) {
$temporary->abandon($kodcaw, $norujukan);
return response('Batal Berjaya', 200);
}
$current = Carbon::now();
$current = new Carbon();
@@ -426,7 +459,8 @@ class GadaiController extends Controller
}
public function cetakSAG($kodcaw,$norujukan,Request $request){
if (\App\ShorakaTransaction::where('norujukan', $norujukan)->exists()) {
if (\App\ShorakaTransaction::where('norujukan', $norujukan)->exists()
|| app(\App\Services\ShorakaNewGadaiService::class)->pending($kodcaw, $norujukan)) {
app(\App\Services\ShorakaGadaiService::class)->assertCompleted($kodcaw, $norujukan);
}
@@ -454,7 +488,8 @@ class GadaiController extends Controller
}
public function serahMarhun($kodcaw,$norujukan){
if (\App\ShorakaTransaction::where('norujukan', $norujukan)->exists()) {
if (\App\ShorakaTransaction::where('norujukan', $norujukan)->exists()
|| app(\App\Services\ShorakaNewGadaiService::class)->pending($kodcaw, $norujukan)) {
app(\App\Services\ShorakaGadaiService::class)->assertCompleted($kodcaw, $norujukan);
}