From 9e73f6ad32cf044d70178b304c0639c997f9f762 Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Mon, 5 Oct 2026 10:39:19 +0800 Subject: [PATCH] fix: recalculate gadai totals after marhun edits --- app/Http/Controllers/MarhunController.php | 71 ++++++++++++++--------- 1 file changed, 43 insertions(+), 28 deletions(-) diff --git a/app/Http/Controllers/MarhunController.php b/app/Http/Controllers/MarhunController.php index d35e7f1..cf5d893 100644 --- a/app/Http/Controllers/MarhunController.php +++ b/app/Http/Controllers/MarhunController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Marhun; +use App\Gadai; use App\Jemas; use App\Cawangan; use Illuminate\Http\Request; @@ -160,39 +161,53 @@ class MarhunController extends Controller $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); - $old_data = Marhun::on($cawangan['mysql'])->where([['recno','=',$request->recno],['norujukan','=',$norujukan]])->first(); + // Lock the parent first so concurrent edits to this SAG are serialized. + (new Marhun)->setConnection($cawangan['mysql'])->getConnection()->transaction(function () use ($cawangan, $norujukan, $request, $harga, $nilai_marhun, $kodcaw, $current) { + Gadai::on($cawangan['mysql'])->where('norujukan', $norujukan)->lockForUpdate()->firstOrFail(); + $old_data = Marhun::on($cawangan['mysql'])->where([['recno','=',$request->recno],['norujukan','=',$norujukan]])->firstOrFail(); - $marhunToUpdate = [ - 'karat' => $request->karat, - 'marhun' => $request->marhun, - 'nota' => $request->nota, - 'tag_permata' => $request->tag_permata, - 'berat_batu_permata' => $request->berat_batu_permata, - 'berat' => $request->berat, - 'harga' => $harga['harga'], - 'n_marhun' => $nilai_marhun, - 'bil' => $request->kuantiti, - ]; + $marhunToUpdate = [ + 'karat' => $request->karat, + 'marhun' => $request->marhun, + 'nota' => $request->nota, + 'tag_permata' => $request->tag_permata, + 'berat_batu_permata' => $request->berat_batu_permata, + 'berat' => $request->berat, + 'harga' => $harga['harga'], + 'n_marhun' => $nilai_marhun, + 'bil' => $request->kuantiti, + ]; - // Set value berat_batu_permata to null if value passed is null - if($marhunToUpdate['berat_batu_permata'] == '') { - $marhunToUpdate['berat_batu_permata'] = null; - }; + // Set value berat_batu_permata to null if value passed is null + if($marhunToUpdate['berat_batu_permata'] == '') { + $marhunToUpdate['berat_batu_permata'] = null; + }; - $jemas = Marhun::on($cawangan['mysql'])->where([['recno','=',$request->recno],['norujukan','=',$norujukan]])->update($marhunToUpdate); + $jemas = Marhun::on($cawangan['mysql'])->where([['recno','=',$request->recno],['norujukan','=',$norujukan]])->update($marhunToUpdate); - $new_data = Marhun::on($cawangan['mysql'])->where([['recno','=',$request->recno],['norujukan','=',$norujukan]])->first(); + // Recalculate from every item belonging to this SAG, after the edit. + $totals = Marhun::on($cawangan['mysql'])->where('norujukan', $norujukan) + ->selectRaw('COALESCE(SUM(berat), 0) AS total_berat, COALESCE(SUM(n_marhun), 0) AS total_nilai, COALESCE(SUM(bil), 0) AS total_kuantiti') + ->first(); + Gadai::on($cawangan['mysql'])->where('norujukan', $norujukan)->update([ + 'berat' => $totals->total_berat, + 'nilaimarhun' => $totals->total_nilai, + 'kuantiti' => $totals->total_kuantiti, + ]); - $audit = new Audit(); - $audit->users = $request->teller; - $audit->actions = 'Ubah Marhun'; - $audit->norujukan = $norujukan; - $audit->old_data = $old_data; - $audit->new_data = $new_data; - $audit->kodcaw = $kodcaw; - $audit->created_at = $current; - $audit->updated_at = $current; - $audit->save(); + $new_data = Marhun::on($cawangan['mysql'])->where([['recno','=',$request->recno],['norujukan','=',$norujukan]])->first(); + + $audit = new Audit(); + $audit->users = $request->teller; + $audit->actions = 'Ubah Marhun'; + $audit->norujukan = $norujukan; + $audit->old_data = $old_data; + $audit->new_data = $new_data; + $audit->kodcaw = $kodcaw; + $audit->created_at = $current; + $audit->updated_at = $current; + $audit->save(); + }); return response('Edit Successfully', 200); } -- 2.52.0