From 33c46b3733f15e09fcd40befc0c46a64c7b13112 Mon Sep 17 00:00:00 2001 From: Ain Izazi Date: Sun, 19 Jan 2025 11:47:25 +0800 Subject: [PATCH 001/117] feature audit kaunter --- app/Http/Controllers/CustomerController.php | 31 +++++++++++++++++- app/Http/Controllers/PanjarController.php | 20 ++++++------ app/Http/Controllers/TebusController.php | 24 +++++++++++++- app/Http/Controllers/VaultController.php | 32 ++++++++++++++++--- app/Services/Miscellaneous/PanjarServices.php | 4 +-- routes/web.php | 2 +- 6 files changed, 93 insertions(+), 20 deletions(-) diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php index 0f6f6a5..bf68d43 100644 --- a/app/Http/Controllers/CustomerController.php +++ b/app/Http/Controllers/CustomerController.php @@ -349,6 +349,15 @@ class CustomerController extends Controller 'tujuangadai'=>$request->tujuangadai ]); + $audit = new Audit(); + $audit->users = $request->teller; + $audit->actions = "Daftar Pelanggan Baru"; + $audit->new_data = json_encode($customer); + $audit->kodcaw = $kodcaw; + $audit->created_at = $current; + $audit->updated_at = $current; + $audit->save(); + return response()->json($customer, 201); } @@ -372,7 +381,8 @@ class CustomerController extends Controller return response()->json($customer_update, 200); } - public function customerUpdateKaunter($nokp,Request $request){ + public function customerUpdateKaunter($nokp,$kodcaw, Request $request){ + $current = Carbon::now(); DB::connection('mysql7')->beginTransaction(); @@ -430,6 +440,15 @@ class CustomerController extends Controller ]); } + $audit = new Audit(); + $audit->users = $request->namateller; + $audit->actions = "Kemaskini Pelanggan"; + $audit->new_data = json_encode($customer_info_new); + $audit->kodcaw = $kodcaw; + $audit->created_at = $current; + $audit->updated_at = $current; + $audit->save(); + DB::connection('mysql7')->commit(); return response()->json($customer_update, 200); @@ -773,6 +792,16 @@ class CustomerController extends Controller $blacklist = Blacklist::where('nokp',$request->nokp)->first(); + + // $audit = new Audit(); + // $audit->users = $request->namateller; + // $audit->actions = "Senarai Hitam Pelanggan"; + // $audit->new_data = json_encode($blacklist); + // $audit->kodcaw = $kodcaw; + // $audit->created_at = $current; + // $audit->updated_at = $current; + // $audit->save(); + return response()->json($blacklist); } diff --git a/app/Http/Controllers/PanjarController.php b/app/Http/Controllers/PanjarController.php index 843505a..c51325a 100644 --- a/app/Http/Controllers/PanjarController.php +++ b/app/Http/Controllers/PanjarController.php @@ -112,14 +112,14 @@ class PanjarController extends Controller ]); - $audit = new Audit(); - $audit->users = $request->tuntutoleh; - $audit->actions = "Daftar Perbelanjaan"; - $audit->new_data = $panjar; - $audit->kodcaw = $kodcaw; - $audit->created_at = $harini; - $audit->updated_at = $harini; - $audit->save(); + // $audit = new Audit(); + // $audit->users = $request->tuntutoleh; + // $audit->actions = "Daftar Perbelanjaan"; + // $audit->new_data = $panjar; + // $audit->kodcaw = $kodcaw; + // $audit->created_at = $harini; + // $audit->updated_at = $harini; + // $audit->save(); return response()->json($panjar); } @@ -279,8 +279,8 @@ class PanjarController extends Controller public function updateDenoPanjar($kodcaw,Request $request) { - $current = Carbon::now(); - $current = new Carbon(); + $harini = Carbon::now(); + $harini = new Carbon(); $denopanjar=DenoPanjar::on('mysql7') diff --git a/app/Http/Controllers/TebusController.php b/app/Http/Controllers/TebusController.php index 6606a4e..8e99e2b 100644 --- a/app/Http/Controllers/TebusController.php +++ b/app/Http/Controllers/TebusController.php @@ -611,6 +611,8 @@ class TebusController extends Controller } public function createWakil($kodcaw,$icno,Request $request){ + $current = Carbon::now(); + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); $wakil_create = Wakil::on($cawangan['mysql'])->create([ @@ -623,15 +625,26 @@ class TebusController extends Controller 'hubungan' => $request->hubungan, 'alamat1' => $request->alamat, 'telefon' => $request->telefon, + 'teller' => $request->teller, 'nota' => $request->nota - ]); + $audit = new Audit(); + $audit->users = $request->teller; + $audit->actions = "Daftar Wakil"; + $audit->new_data = json_encode($wakil_create); + $audit->kodcaw = $kodcaw; + $audit->created_at = $current; + $audit->updated_at = $current; + $audit->save(); + return response()->json($wakil_create ,201); } public function UbahWakil($kodcaw,Request $request) { + $current = Carbon::now(); + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); $wakil = $request->nowakil; @@ -640,6 +653,15 @@ class TebusController extends Controller "nowakil" => $wakil )); + // $audit = new Audit(); + // $audit->users = $request->teller; + // $audit->actions = "Ubah Wakil"; + // $audit->new_data = json_encode($update_wakil); + // $audit->kodcaw = $kodcaw; + // $audit->created_at = $current; + // $audit->updated_at = $current; + // $audit->save(); + return response()->json($update_wakil ,201); } diff --git a/app/Http/Controllers/VaultController.php b/app/Http/Controllers/VaultController.php index b43a47a..f772c46 100644 --- a/app/Http/Controllers/VaultController.php +++ b/app/Http/Controllers/VaultController.php @@ -285,6 +285,15 @@ class VaultController extends Controller 'teller' => 'ONLINE' ]); + // $audit = new Audit(); + // $audit->users = $request->teller; + // $audit->actions = "Daftar Peti Besi"; + // $audit->new_data = json_encode($gldetail); + // $audit->kodcaw = $kodcaw; + // $audit->created_at = $current; + // $audit->updated_at = $current; + // $audit->save(); + return response()->json($gldetail,201); } @@ -319,6 +328,19 @@ class VaultController extends Controller ]); } + $audit = new Audit(); + $audit->users = $request->teller; + if (isset($request->jenisgldetail) && $request->jenisgldetail == 'pendahuluan') { + $audit->actions = 'Daftar Pendahuluan'; + } else if (isset($request->jenisgldetail) && $request->jenisgldetail == 'serahan') { + $audit->actions = 'Daftar Serahan'; + } + $audit->new_data = json_encode($gldetail); + $audit->kodcaw = $kodcaw; + $audit->created_at = $current; + $audit->updated_at = $current; + $audit->save(); + return response()->json($gldetail,201); @@ -328,16 +350,16 @@ class VaultController extends Controller { $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); $current = Carbon::now(); - $current = new Carbon(); $gldetail=GlDetail::on($cawangan['mysql']) ->where('kodcaw','=',$kodcaw) ->orderby('tarikh','desc')->get(); - $audit = new Audit(); - $audit->users = $request->teller; - $audit->actions = "test3"; - $audit->new_data = $gldetail; + $audit = new Audit(); + // $audit->users = $request->input('teller'); + $audit->users = $request->name; + $audit->actions = "Senarai Peti Besi"; + $audit->new_data = json_encode($gldetail); $audit->kodcaw = $kodcaw; $audit->created_at = $current; $audit->updated_at = $current; diff --git a/app/Services/Miscellaneous/PanjarServices.php b/app/Services/Miscellaneous/PanjarServices.php index df34db2..80a4acb 100644 --- a/app/Services/Miscellaneous/PanjarServices.php +++ b/app/Services/Miscellaneous/PanjarServices.php @@ -189,7 +189,7 @@ class PanjarServices $audit = new Audit(); $audit->users = $panjar['tuntutoleh']; - $audit->actions = "Keluarkan Perbelanjaan"; + $audit->actions = "Hapus Perbelanjaan"; $audit->new_data = $panjar; $audit->kodcaw = $this->cawangan; $audit->created_at = $current; @@ -337,7 +337,7 @@ class PanjarServices )); $audit = new Audit(); - $audit->users = $request->tuntutoleh; + $audit->users = $panjar['tuntutoleh']; $audit->actions = "Daftar Perbelanjaan"; $audit->new_data = $panjar; $audit->kodcaw = $this->cawangan; diff --git a/routes/web.php b/routes/web.php index a6ebdb1..f44e12c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -52,7 +52,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->post('customers/create/{kodcaw}',['uses'=>'CustomerController@createCustomer']); $router->delete('customers/{kodcaw}/{nokp}', ['uses' => 'CustomerController@delete']); $router->put('customers/update/{nokp}', ['uses' => 'CustomerController@customerUpdate']); - $router->put('customers/update/kaunter/{nokp}', ['uses' => 'CustomerController@customerUpdateKaunter']); + $router->put('customers/update/kaunter/{nokp}/{kodcaw}', ['uses' => 'CustomerController@customerUpdateKaunter']); $router->put('customers/update/khazanah/{nokp}', ['uses' => 'CustomerController@customerUpdateKhazanah']); $router->get('customers/laporan/{kodcaw}/{tarikh}',['uses'=>'CustomerController@getLaporanCustomers']); $router->get('customers/latest/{kodcaw}',['uses'=>'CustomerController@getLatestCustomer']); From f1342b474044c653a475c0c12fb0dd2b26dbe992 Mon Sep 17 00:00:00 2001 From: Ain Izazi Date: Mon, 27 Jan 2025 10:07:31 +0800 Subject: [PATCH 002/117] feat audit sag hilang and tuntut baki --- app/Http/Controllers/LelongController.php | 41 ++++++++++++++--------- app/Http/Controllers/PolisController.php | 28 ++++++++++++++++ routes/web.php | 1 + 3 files changed, 54 insertions(+), 16 deletions(-) diff --git a/app/Http/Controllers/LelongController.php b/app/Http/Controllers/LelongController.php index 6f54ae0..a1b515f 100644 --- a/app/Http/Controllers/LelongController.php +++ b/app/Http/Controllers/LelongController.php @@ -94,19 +94,6 @@ class LelongController extends Controller } } - $audit = new Audit(); - $audit->users = $request->teller; - $audit->actions = "test2"; - // $audit->new_data = $bakilelongtotal; - $audit->new_data = json_encode([ - 'bakilelongtotal' => $bakilelongtotal, - 'rugilelongtotal' => $rugilelongtotal, - ]); - $audit->kodcaw = $kodcaw; - $audit->created_at = $current; - $audit->updated_at = $current; - $audit->save(); - return response()->json($bakilelongtotal, 200); @@ -411,6 +398,16 @@ class LelongController extends Controller 'hargajual' => $request->hargajual ]); + $audit = new Audit(); + $audit->norujukan = $request->norujukan; + $audit->users = $request->teller; + $audit->actions = "Tuntut Baki Lelong"; + $audit->new_data = null; + $audit->kodcaw = $request->kodcaw; + $audit->created_at = $current; + $audit->updated_at = $current; + $audit->save(); + return response()->json($tuntutbaki,200); } @@ -485,8 +482,9 @@ class LelongController extends Controller return response()->json($tuntutbaki,200); } - public function resitLelong($kodcaw,$norujukan){ + public function resitLelong(Request $request, $kodcaw,$norujukan){ + $current = Carbon::now(); $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); $lelong = Lelong::on($cawangan['mysql']) @@ -499,12 +497,23 @@ class LelongController extends Controller ->first(); $customerinfo = Customer::on('mysql7') - ->select('nama','kpbaru') + ->select('nama','kpbaru','teller') ->where('kpbaru', $lelong['nokp']) ->orWhere('kplama', $lelong['nokp']) ->first(); - $arraycustomer = ['nama' => $customerinfo['nama'],'kpbaru' => $customerinfo['kpbaru'],'nokp' => $lelong['nokp'],'batchno' => $lelong['batchno'],'nowakil' => $lelong['nowakil'],'tarikh' => $lelong['tarikh'],'bakipjm' => $lelong['bakipjm'],'bakiupah' => $lelong['bakiupah'],'recno' => $lelong['recno'],'t_lelong' => $lelong['t_lelong'],'norujukan' => $lelong['norujukan'],'hargajual' => $lelong['hargajual'],'jumlah' => $lelong['jumlah'],'cajlelong' => $lelong['cajlelong'],'pinjaman' => $lelong['pinjaman']]; + $arraycustomer = ['nama' => $customerinfo['nama'],'teller' => $customerinfo['teller'],'kpbaru' => $customerinfo['kpbaru'],'nokp' => $lelong['nokp'],'batchno' => $lelong['batchno'],'nowakil' => $lelong['nowakil'],'tarikh' => $lelong['tarikh'],'bakipjm' => $lelong['bakipjm'],'bakiupah' => $lelong['bakiupah'],'recno' => $lelong['recno'],'t_lelong' => $lelong['t_lelong'],'norujukan' => $lelong['norujukan'],'hargajual' => $lelong['hargajual'],'jumlah' => $lelong['jumlah'],'cajlelong' => $lelong['cajlelong'],'pinjaman' => $lelong['pinjaman']]; + + $audit = new Audit(); + $audit->norujukan = $norujukan; + $audit->users = $request->name; + // $audit->users = $arraycustomer['teller']; + $audit->actions = "Cetak Resit Lelong"; + $audit->new_data = null; + $audit->kodcaw = $kodcaw; + $audit->created_at = $current; + $audit->updated_at = $current; + $audit->save(); return response()->json($arraycustomer,200); } diff --git a/app/Http/Controllers/PolisController.php b/app/Http/Controllers/PolisController.php index 7221351..a8e85de 100644 --- a/app/Http/Controllers/PolisController.php +++ b/app/Http/Controllers/PolisController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Audit; use App\Polis; use App\Cawangan; use App\LookupAlasan; @@ -53,11 +54,38 @@ class PolisController extends Controller 'kodnegeri' => $request->kodnegeri, 'koddaerah' => $request->koddaerah ]); + + $audit = new Audit(); + $audit->norujukan = $request->norujukan; + $audit->users = $request->teller; + $audit->actions = "Cetak SAG Hilang"; + $audit->new_data = json_encode($polis); + $audit->kodcaw = $request->kodcaw; + $audit->created_at = $harini; + $audit->updated_at = $harini; + $audit->save(); return response()->json($polis); } + public function ulangcetakPolis(Request $request){ + + $harini = new Carbon(); + + $audit = new Audit(); + $audit->norujukan = $request->norujukan; + $audit->users = $request->teller; + $audit->actions = "Ulang Cetak SAG Hilang"; + $audit->new_data = null; + $audit->kodcaw = $request->kodcaw; + $audit->created_at = $harini; + $audit->updated_at = $harini; + $audit->save(); + + return response()->json($audit); + } + public function editPolis(Request $request) { $harini = Carbon::now(); diff --git a/routes/web.php b/routes/web.php index f44e12c..00513ad 100644 --- a/routes/web.php +++ b/routes/web.php @@ -304,6 +304,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->put('polis/put/',['uses'=>'PolisController@PolischangeTebus']); $router->post('polis/create/',['uses'=>'PolisController@createPolis']); $router->put('polis/edit/',['uses'=>'PolisController@editPolis']); + $router->put('polis/agh/',['uses'=>'PolisController@ulangcetakPolis']); //LAPORAN API From 54d9feb823bcf321c862fae3120f6450df8e737b Mon Sep 17 00:00:00 2001 From: Afiq Hamzah Date: Tue, 4 Feb 2025 12:18:00 +0800 Subject: [PATCH 003/117] Fix report keseluruhan penebusan --- app/Http/Controllers/Reports/PenebusanController.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Reports/PenebusanController.php b/app/Http/Controllers/Reports/PenebusanController.php index 18dd89a..4a4447b 100644 --- a/app/Http/Controllers/Reports/PenebusanController.php +++ b/app/Http/Controllers/Reports/PenebusanController.php @@ -21,8 +21,10 @@ class PenebusanController extends Controller public function getSummaryLaporanTebus(Request $request) { - $active_cawangan_db_connection = Helper::getActiveCawanganDbConnection(); + $arrahn_master_db_connection = Cawangan::all()->pluck('mysql')->toArray(); + + $active_cawangan_db_connection = array_intersect($active_cawangan_db_connection, $arrahn_master_db_connection); $active_cawangan_db_name = array_map(function ($db_connection) { return config('database.connections' . '.' . $db_connection . '.' . 'database'); From 2c187b32b3c30aed69e0e5829724ded1b95ca84a Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Mon, 17 Feb 2025 15:36:02 +0800 Subject: [PATCH 004/117] update tukar-tempoh-notis-peringatan --- app/Http/Controllers/CallCenterController.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/CallCenterController.php b/app/Http/Controllers/CallCenterController.php index d2a2708..125434d 100644 --- a/app/Http/Controllers/CallCenterController.php +++ b/app/Http/Controllers/CallCenterController.php @@ -462,7 +462,7 @@ class CallCenterController extends Controller if($fasa == 1){ $datagadai = Gadai::on($cawangan['mysql']) - ->where([['t_matang','<=',$monthscoming],['lelong_tawarruq','=',1],['tempoh','>=',5],['tempoh','<=',5.5],['tagpalsu','=',0],['sttebus','=',''],['taglel','=',0],['tagnotis','=',0]]) + ->where([['t_matang','<=',$monthscoming],['lelong_tawarruq','=',1],['tempoh','>=',5],['tempoh','<=',7],['tagpalsu','=',0],['sttebus','=',''],['taglel','=',0],['tagnotis','=',0]]) ->orderBy('t_gadai', 'ASC') ->orderBy('sirig', 'ASC'); // ->get(); @@ -470,7 +470,7 @@ class CallCenterController extends Controller }elseif($fasa == 2){ $datagadai = Gadai::on($cawangan['mysql']) - ->where([['t_matang1','<=',$monthscoming],['lelong_tawarruq','=',0],['tempoh','>=',11],['tempoh','<=',11.5],['tagpalsu','=',0],['sttebus','=',''],['taglel','=',0],['tagnotis','=',0]]) + ->where([['t_matang1','<=',$monthscoming],['lelong_tawarruq','=',0],['tempoh','>=',11],['tagpalsu','=',0],['sttebus','=',''],['taglel','=',0],['tagnotis','=',0]]) ->orderBy('t_gadai', 'ASC') ->orderBy('sirig', 'ASC'); // ->get(); @@ -510,12 +510,12 @@ class CallCenterController extends Controller $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); if($fasa == 1){ $datagadai = Gadai::on($cawangan['mysql']) - ->where([['t_matang','<=',$monthscoming],['lelong_tawarruq','=',1],['tempoh','>=',5],['tempoh','<=',5.5],['tagpalsu','=',0],['sttebus','=',''],['taglel','=',0],['tagnotis','=',0]]) + ->where([['t_matang','<=',$monthscoming],['lelong_tawarruq','=',1],['tempoh','>=',5],['tempoh','<=',7],['tagpalsu','=',0],['sttebus','=',''],['taglel','=',0],['tagnotis','=',0]]) ->orderBy('t_gadai', 'ASC') ->orderBy('sirig', 'ASC'); }elseif($fasa == 2){ $datagadai = Gadai::on($cawangan['mysql']) - ->where([['t_matang1','<=',$monthscoming],['lelong_tawarruq','=',0],['tempoh','>=',11],['tempoh','<=',11.5],['tagpalsu','=',0],['sttebus','=',''],['taglel','=',0]]) + ->where([['t_matang1','<=',$monthscoming],['lelong_tawarruq','=',0],['tempoh','>=',11],['tagpalsu','=',0],['sttebus','=',''],['taglel','=',0]]) ->orderBy('t_gadai', 'ASC') ->orderBy('sirig', 'ASC'); } @@ -530,7 +530,7 @@ class CallCenterController extends Controller $caw_notis->kodcaw = $kodcaw; $caw_notis->peringatan = 1; $caw_notis->daritempoh = 5; - $caw_notis->hinggatempoh = 5; + $caw_notis->hinggatempoh = 7; $caw_notis->status = 1; $caw_notis->save(); @@ -540,7 +540,7 @@ class CallCenterController extends Controller $caw_notis->kodcaw = $kodcaw; $caw_notis->peringatan = 1; $caw_notis->daritempoh = 11; - $caw_notis->hinggatempoh = 11; + $caw_notis->hinggatempoh = 12; $caw_notis->status = 1; $caw_notis->save(); @@ -599,7 +599,7 @@ class CallCenterController extends Controller $notis = Notis::create([ 'tarikh_notis' => $tarikh_notis, 'daritempoh' => 5, - 'hinggatempoh' => 5, + 'hinggatempoh' => 7, 'sts_notis' => 1, 'peringatan' => 1 ]); @@ -607,7 +607,7 @@ class CallCenterController extends Controller $notis = Notis::create([ 'tarikh_notis' => $tarikh_notis, 'daritempoh' => 11, - 'hinggatempoh' => 11, + 'hinggatempoh' => 12, 'sts_notis' => 1, 'peringatan' => 1 ]); From 973cb4a8afcc837f7400a00a05648b2690365580 Mon Sep 17 00:00:00 2001 From: hafifierahman Date: Mon, 24 Feb 2025 21:23:16 +0800 Subject: [PATCH 005/117] commit for imbangduga kota bharu 2 which is 64 not balance --- app/Http/Controllers/AdminPageController.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/AdminPageController.php b/app/Http/Controllers/AdminPageController.php index 1cb8547..f9ad9cb 100644 --- a/app/Http/Controllers/AdminPageController.php +++ b/app/Http/Controllers/AdminPageController.php @@ -3733,7 +3733,10 @@ class AdminPageController extends Controller $total = ($utgrugilama + $lelong + $upahsimpantebus + $upahsimpanlelong + $upahsimpanansur + $gstcajlelong + $keuntungansebenar + $upahsimpankeuntungansebelumtawarruq + $available_akru + $total_keuntungan_sebenar + $akru_ujrah + $akru_1percent) + $parameter; if($kodcaw == '011229') - $total -= 45390.37; + $total -= 45390.37; + + if($kodcaw == 'KB2') + $total -= 64.8; return response()->json($total,200); } From 956d66182af09f37c9a53e6caa9c3b2becaff7ae Mon Sep 17 00:00:00 2001 From: hafifierahman Date: Mon, 24 Feb 2025 21:25:47 +0800 Subject: [PATCH 006/117] added reject time from 7pm and 11pm,Furthermore, fix 5cent in create transaction --- .../TransactionOnlineController.php | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/TransactionOnlineController.php b/app/Http/Controllers/TransactionOnlineController.php index 213aabc..b6683a7 100644 --- a/app/Http/Controllers/TransactionOnlineController.php +++ b/app/Http/Controllers/TransactionOnlineController.php @@ -25,8 +25,7 @@ class TransactionOnlineController extends Controller { public function getTransactionOnline(Request $request) { - $transactionOnline = TransactionOnline::on('mysql7')->where('billplz_id', $request->billplz_id)->first(); - + $transactionOnline = TransactionOnline::on('mysql7')->where('norujukan',$request->norujukan)->where('billplz_id', $request->billplz_id)->first(); return response()->json($transactionOnline); } @@ -117,6 +116,13 @@ class TransactionOnlineController extends Controller $transactions = TransactionOnline::on('mysql7')->where([['status', '=', 'PAID'], ['update_status', 0]])->get(); $current = Carbon::now(); $current = new Carbon(); + + $checkTime = $this->checkTime(); + + if($checkTime == 'rejected'){ + return response()->json('rejected-time'); + } + foreach ($transactions as $index => $transaction) { $cawangan = Cawangan::on('mysql7') ->where('kodcaw', '=', $transaction['kodcaw']) @@ -451,8 +457,10 @@ class TransactionOnlineController extends Controller $ujrah_calculation = $this->getUjrah($kodcaw, $norujukan); $onepercent = new Calculation(); + $ujrahasal = $onepercent->getRoundedMethod($ujrahasal); + $onepercentasal = $onepercent->getRoundedMethod($onepercentasal); $ujrah = $onepercent->getRoundedMethod($ujrahasal * $bilang_bln); - $ujrah_rebate = $onepercent->getRoundedMethod($ujrah_calculation['ujrah_sebenar'] - $ujrah_calculation['ujrah_rebet']); + $ujrah_rebate = $onepercent->getRoundedMethod($keuntungan['ujrah'] * $bilang_bln); $keun = $onepercent->getRoundedMethod($onepercentasal * $bilang_bln); $keuntungan_rebate = $onepercent->getRoundedMethod($keuntungan['onepercent'] * $bilang_bln); @@ -745,5 +753,21 @@ class TransactionOnlineController extends Controller } } + private function checkTime(){ + $current = Carbon::now(); + + $startRange1 = Carbon::today()->setTime(19, 0); + $endRange1 = Carbon::today()->setTime(19, 30); + + $startRange2 = Carbon::today()->setTime(23, 0); + $endRange2 = Carbon::today()->setTime(23, 30); + + if ($current->between($startRange1, $endRange1) || $current->between($startRange2, $endRange2)) { + return 'rejected'; + } + } + + + } From 004130db85824a0b05d0bc0bb0196dc0e83197f6 Mon Sep 17 00:00:00 2001 From: hafifierahman Date: Mon, 24 Feb 2025 21:28:25 +0800 Subject: [PATCH 007/117] fix report about GC not responding without chunk and for currentProfit check for year too not only for month --- .../Reports/Account/GeneralLedger.php | 4 +- app/Services/Reports/ImbangDugaService.php | 71 +++++++++++++++++-- app/Services/Reports/OnePercentService.php | 2 +- 3 files changed, 70 insertions(+), 7 deletions(-) diff --git a/app/Services/Reports/Account/GeneralLedger.php b/app/Services/Reports/Account/GeneralLedger.php index f7ebc94..e98e34c 100644 --- a/app/Services/Reports/Account/GeneralLedger.php +++ b/app/Services/Reports/Account/GeneralLedger.php @@ -518,7 +518,7 @@ class GeneralLedger $mulaCarbon = new Carbon($this->mula); $hinggaCarbon = new Carbon($this->hingga); - if($this->isFullMonth($this->mula,$this->hingga) && $mulaCarbon->month < 10){ + if($this->isFullMonth($this->mula,$this->hingga) && $mulaCarbon->month < 10 && $mulaCarbon->year == 2024){ $lastDayOfPreviousMonth = $mulaCarbon->subMonth()->endOfMonth(); $balancesheet_previousmonth = imbangdugabackup::on($cawangan['mysql'])->where('tarikh',$lastDayOfPreviousMonth->toDateString())->first()->toArray(); @@ -714,7 +714,7 @@ class GeneralLedger $t_gadai = Carbon::parse($gadai->t_gadai); $t_bayaran = Carbon::parse($trans->tarikh_bayaran); - if ($t_gadai->month === $t_bayaran->month) { + if ($t_gadai->month === $t_bayaran->month && $t_gadai->year === $t_bayaran->year) { return false; }else{ return true; diff --git a/app/Services/Reports/ImbangDugaService.php b/app/Services/Reports/ImbangDugaService.php index 32eb089..a349f8b 100644 --- a/app/Services/Reports/ImbangDugaService.php +++ b/app/Services/Reports/ImbangDugaService.php @@ -223,7 +223,7 @@ class ImbangDugaService $t_gadai = Carbon::parse($gadai->t_gadai); $t_bayaran = Carbon::parse($trans->tarikh_bayaran); - if ($t_gadai->month === $t_bayaran->month) { + if ($t_gadai->month === $t_bayaran->month && $t_gadai->year === $t_bayaran->year) { return false; }else{ return true; @@ -239,8 +239,17 @@ class ImbangDugaService $ujrah_rebet = $this->filterCollection($keuntungan_semasa_collection, 'T', 'ujrah_rebet'); $onepercent_rebet = $this->filterCollection($keuntungan_semasa_collection, 'T', 'onepercent_rebet'); - $total_onepercent = $onepercent + $onepercent_rebet; - $total_ujrah = $ujrah + $ujrah_rebet; + $upahlelong = Lelong::on($cawangan['mysql']) + ->selectRaw('SUM(ujrah) as ujrah,SUM(onepercent) as onepercent') + ->where([['tagujrah','=',1],['t_jual','>=',$start],['t_jual','<=',$end]]) + ->whereYear('t_jual','=',$year) + ->get()->toArray(); + + $ujrah_lelong = (empty($upahlelong)) ? 0 : $upahlelong[0]['ujrah']; + $onepercent_lelong = (empty($upahlelong)) ? 0 : $upahlelong[0]['onepercent']; + + $total_onepercent = $onepercent + $onepercent_rebet + $onepercent_lelong; + $total_ujrah = $ujrah + $ujrah_rebet + $ujrah_lelong; return ['ujrah' => $total_ujrah, 'onepercent' => $total_onepercent]; } @@ -318,8 +327,17 @@ class ImbangDugaService $month = (clone $tarikh)->month; $lastDayPreviousMonth = $tarikh->subMonthsNoOverflow()->endOfMonth()->toDateString(); + $lastEndYear = $tarikh->subMonthsNoOverflow()->endOfMonth(); + $lastYear = Carbon::now()->subYear()->year; - $get_imbangduga = imbangdugabackup::on($cawangan['mysql'])->where('tarikh',$lastDayPreviousMonth)->first()->toArray(); + //$get_imbangduga = imbangdugabackup::on($cawangan['mysql'])->where('tarikh',$lastDayPreviousMonth)->first()->toArray(); + + /* Added because if the last month is not the same year */ + if($lastEndYear->year != $lastYear){ + $get_imbangduga = imbangdugabackup::on($cawangan['mysql'])->where('tarikh',$lastDayPreviousMonth)->first()->toArray(); + }else{ + $get_imbangduga['keun_sebenar'] = 0; + } $collection_trans = Transaction::on('mysql7') ->leftJoin('transaksi_keuntungan as trans', function ($join) { @@ -608,6 +626,51 @@ class ImbangDugaService $current = Carbon::now(); $current = new Carbon(); + if($this->kodcaw == 'GC'){ + $transaksi_data = []; + TransaksiKeuntungan::on('mysql7') + ->where('tarikh_bayaran', '<=', $daterequest) + ->where('kodcaw', $this->kodcaw) + ->chunk(1000, function ($transactions) use (&$transaksi_data) { + $transaksi_data = array_merge($transaksi_data, $transactions->pluck('norujukan')->toArray()); + }); + + $gadaiData = []; + $chunkedTransaksiData = array_chunk($transaksi_data, 1000); + + foreach ($chunkedTransaksiData as $chunk) { + Gadai::on($cawangan['mysql']) + ->whereIn('norujukan', $chunk) + ->where(function ($query) { + $query->where([ + ['sttebus', '=', ''], + ['hargajualan', '<>', null] + ]) + ->orWhere([ + ['sttebus', '!=', ''], + ['t_update', '>', $this->tarikh], + ['hargajualan', '<>', null] + ]); + }) + ->orderBy('norujukan') + ->chunk(1000, function ($gadaiChunk) use (&$gadaiData) { + $gadaiData = array_merge($gadaiData, $gadaiChunk->pluck('norujukan')->toArray()); + }); + } + + $totalPembiayaan = 0; + $chunkedGadaiData = array_chunk($gadaiData, 1000); + + foreach ($chunkedGadaiData as $chunk) { + $totalPembiayaan += TransaksiKeuntungan::on('mysql7') + ->whereIn('norujukan', $chunk) + ->where('tarikh_bayaran', '<=', $daterequest) + ->sum('bayaran_pembiayaan'); + } + + return $totalPembiayaan; + } + $transaksi_data = TransaksiKeuntungan::on('mysql7') ->where('tarikh_bayaran' ,'<=', $daterequest) ->where('kodcaw',$this->kodcaw) diff --git a/app/Services/Reports/OnePercentService.php b/app/Services/Reports/OnePercentService.php index caf62ce..c747c07 100644 --- a/app/Services/Reports/OnePercentService.php +++ b/app/Services/Reports/OnePercentService.php @@ -398,7 +398,7 @@ class OnePercentService $t_gadai = Carbon::parse($gadai->t_gadai); $t_bayaran = Carbon::parse($trans->tarikh_bayaran); - if ($t_gadai->month === $t_bayaran->month) { + if ($t_gadai->month === $t_bayaran->month && $t_gadai->year === $t_bayaran->year) { return false; }else{ return true; From d9320c9b60c9a358e42f51b8b9a4b0074318c1f5 Mon Sep 17 00:00:00 2001 From: hafifierahman Date: Tue, 25 Feb 2025 20:50:53 +0800 Subject: [PATCH 008/117] added rounded method in onepercentservices --- app/Services/OnePercentServices.php | 31 ++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/app/Services/OnePercentServices.php b/app/Services/OnePercentServices.php index 71d39fd..6e8e834 100644 --- a/app/Services/OnePercentServices.php +++ b/app/Services/OnePercentServices.php @@ -21,7 +21,8 @@ class OnePercentServices $formula_margin = ($this->maks_margin - $margin) / $this->maks_margin; $ujrah_margin = $formula_margin * $kadarujrah; $rebate_ujrah = $nilaimarhun*($ujrah_margin/100); - $ujrah_sebenar = $ujrah; + // $ujrah_sebenar = $ujrah; + $ujrah_sebenar = $ujrah - $rebate_ujrah; return $ujrah_sebenar; } @@ -57,6 +58,9 @@ class OnePercentServices $onepercent = $this->kiraanOnePercent($pembiayaan); $ujrah_sebenar = $this->kiraanUjrahSebenar($nilaimarhun,$kadarujrah,$margin); + $onepercent = (!empty($onepercent)) ? $this->getRoundedMethod($onepercent) : 0; + $ujrah_sebenar = (!empty($ujrah_sebenar)) ? $this->getRoundedMethod($ujrah_sebenar) : 0; + $keuntungan = $onepercent + $ujrah_sebenar; return ['keuntungan' => $keuntungan,'onepercent' => $onepercent, 'ujrah' => $ujrah_sebenar]; @@ -67,6 +71,9 @@ class OnePercentServices $onepercent = $this->kiraanOnePercent($pembiayaan); $ujrah_sebenar = $this->kiraanUjrah($nilaimarhun,$kadarujrah,$margin); + $onepercent = (!empty($onepercent)) ? $this->getRoundedMethod($onepercent) : 0; + $ujrah_sebenar = (!empty($ujrah_sebenar)) ? $this->getRoundedMethod($ujrah_sebenar) : 0; + $keuntungan = $onepercent + $ujrah_sebenar; return ['keuntungan' => $keuntungan,'onepercent' => $onepercent, 'ujrah' => $ujrah_sebenar]; @@ -78,4 +85,26 @@ class OnePercentServices return isset($kadarujrah[0]) ? $kadarujrah[0]['kadarujrah'] : 0; } + + public function getRoundedMethod(float $number = 0.0) : Float{ + $number_string = number_format(floor($number * 100)/100,2); + + $rounded = substr($number_string, 0, -1); + $lastDigit = substr($number_string, -1); + + if ($lastDigit >= 0 && $lastDigit <= 2) { + if(strpos($rounded,',')){ + $rounded = str_replace(',','',$rounded); + } + return $rounded; + } elseif ($lastDigit >= 3 && $lastDigit <= 7) { + $rounded = $rounded . '5'; + if(strpos($rounded,',')){ + $rounded = str_replace(',','',$rounded); + } + return $rounded; + } else { + return round($number,PHP_ROUND_HALF_UP); + } + } } From bfbf874f92b70122a49e1d2890f713bfff1140fe Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Wed, 26 Feb 2025 15:48:14 +0800 Subject: [PATCH 009/117] tambah function laporan lelong admin --- app/Http/Controllers/LelongController.php | 110 ++++++++++++++++++++++ routes/web.php | 4 + 2 files changed, 114 insertions(+) diff --git a/app/Http/Controllers/LelongController.php b/app/Http/Controllers/LelongController.php index a1b515f..99318ab 100644 --- a/app/Http/Controllers/LelongController.php +++ b/app/Http/Controllers/LelongController.php @@ -32,6 +32,8 @@ use App\Services\RingkasanHarianServices; use App\Services\OnePercentServices; use App\Services\MasterServices; use App\Support\v2\Calculation; +use Illuminate\Support\Facades\Validator; + use Log; use DB; @@ -1772,5 +1774,113 @@ class LelongController extends Controller return response()->json($tuntutbaki,200); } + public function LaporanLelong(Request $request) + { + // Validate required input + $validator = Validator::make($request->all(), [ + 'kodcaw' => 'required|string', + 'tarikhmula' => 'required|date', + 'tarikhhingga' => 'required|date|after_or_equal:tarikhmula', + 'batchno' => 'nullable|string' + ]); + + if ($validator->fails()) { + return response()->json(['error' => $validator->errors()], 400); + } + + + // Get cawangan details + $cawangan = Cawangan::on('mysql7')->where('kodcaw', $request->kodcaw)->first(); + + if (!$cawangan) { + return response()->json(['error' => 'Invalid kodcaw'], 403); + } + + // Query lelong data + $lelong_query = Lelong::on($cawangan['mysql']) + ->leftJoin('gadai', 'gadai.norujukan', '=', 'lelong.norujukan') + ->join('lelmarhun', 'lelmarhun.norujukan', '=', 'lelong.norujukan') + ->join('pembeli', 'pembeli.nopembeli', '=', 'lelong.nopembeli') + ->whereBetween('lelong.t_lelong', [$request->tarikhmula, $request->tarikhhingga]); + + // Optional: Filter by batch number + if ($request->has('batchno') && !empty($request->batchno)) { + $lelong_query->where('lelong.batchno', $request->batchno); + } + // dd($lelong_query); + // Select required fields + $lelong_data = $lelong_query->select( + 'lelong.batchno', 'lelong.t_lelong', 'gadai.t_gadai', 'gadai.nokp', 'lelong.pinjaman', + 'lelong.baki', 'lelong.norujukan', 'gadai.marhun', 'lelong.nilaimarhun', + 'lelong.bakiupah', 'lelong.cajlelong', 'lelong.hargajual', 'lelong.hargaasas', + 'pembeli.nama', 'pembeli.nokp AS nokppembeli', 'lelong.tagujrah', 'lelong.ujrah', + 'lelong.onepercent', 'lelong.teller' + ) + ->orderBy('lelong.t_lelong') + ->get(); + // dd($lelong_data); + + // If no data found, return a message + if ($lelong_data->isEmpty()) { + return response()->json([ + 'message' => 'Tiada lelongan dalam tarikh dipilih.', + 'data' => [], + 'totals' => [ + 'total_pinjaman' => 0, + 'total_nilaimarhun' => 0, + 'total_keuntungan' => 0, + 'total_onepercent' => 0, + 'total_ujrah' => 0, + 'total_cajlelong' => 0, + 'total_hargajual' => 0, + 'total_baki' => 0, + 'total_hargaasas' => 0 + ] + ]); + } + + // Calculate totals safely (prevent null values) + $totals = [ + 'total_pinjaman' => $lelong_data->sum(fn($item) => $item->pinjaman ?? 0), + 'total_nilaimarhun' => $lelong_data->sum(fn($item) => $item->nilaimarhun ?? 0), + 'total_keuntungan' => $lelong_data->sum(fn($item) => $item->bakiupah ?? 0), + 'total_onepercent' => $lelong_data->sum(fn($item) => $item->onepercent ?? 0), + 'total_ujrah' => $lelong_data->sum(fn($item) => $item->ujrah ?? 0), + 'total_cajlelong' => $lelong_data->sum(fn($item) => $item->cajlelong ?? 0), + 'total_hargajual' => $lelong_data->sum(fn($item) => $item->hargajual ?? 0), + 'total_baki' => $lelong_data->sum(fn($item) => $item->baki ?? 0), + 'total_hargaasas' => $lelong_data->sum(fn($item) => $item->hargaasas ?? 0) + ]; + + $tarikh_lelongs = $lelong_data->pluck('t_lelong')->first(); // Get first date + + // Return JSON response + return response()->json([ + 'data' => $lelong_data, + 'totals' => $totals, + 'tarikh_lelong' => $tarikh_lelongs + ]); + } + + + public function LookupBatchLel($kodcaw,Request $request) + { + $harini = Carbon::now(); + $harini = new Carbon; + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); + + $batchlel = BatchLel::on($cawangan['mysql']) + ->select('batchno','tarikh') + ->when($kodcaw, function ($query, $kodcaw) { + return $query->where('kodcaw', $kodcaw); + }) + ->orderBy('tarikh', 'DESC') + ->get(); + + return response()->json($batchlel); + + } + + } diff --git a/routes/web.php b/routes/web.php index 00513ad..73c7ac9 100644 --- a/routes/web.php +++ b/routes/web.php @@ -448,6 +448,10 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->get('lookupalasan',['uses' => 'PolisController@LookupAlasan']); $router->get('polis/laporan',['uses' => 'PolisController@LaporanPolis']); + //laporanlelong adminportal + $router->get('laporan/lelong',['uses' => 'LelongController@LaporanLelong']); + $router->get('lookupbatchlel/{kodcaw}',['uses' => 'LelongController@LookupBatchLel']); + From 5bf46074aaa1393d01f4ff5a1fc6ed3613e9c079 Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Thu, 27 Feb 2025 11:23:12 +0800 Subject: [PATCH 010/117] update distict dalam LaporanLelong --- app/Http/Controllers/LelongController.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Http/Controllers/LelongController.php b/app/Http/Controllers/LelongController.php index 99318ab..97ca448 100644 --- a/app/Http/Controllers/LelongController.php +++ b/app/Http/Controllers/LelongController.php @@ -1817,6 +1817,7 @@ class LelongController extends Controller 'lelong.onepercent', 'lelong.teller' ) ->orderBy('lelong.t_lelong') + ->distinct() ->get(); // dd($lelong_data); From 6422524c2ed5679a2f3f07f6d78aece1dc44725f Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Thu, 27 Feb 2025 14:05:01 +0800 Subject: [PATCH 011/117] update sort laporan lelong --- app/Http/Controllers/LelongController.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/LelongController.php b/app/Http/Controllers/LelongController.php index 97ca448..133482c 100644 --- a/app/Http/Controllers/LelongController.php +++ b/app/Http/Controllers/LelongController.php @@ -1807,7 +1807,6 @@ class LelongController extends Controller if ($request->has('batchno') && !empty($request->batchno)) { $lelong_query->where('lelong.batchno', $request->batchno); } - // dd($lelong_query); // Select required fields $lelong_data = $lelong_query->select( 'lelong.batchno', 'lelong.t_lelong', 'gadai.t_gadai', 'gadai.nokp', 'lelong.pinjaman', @@ -1816,8 +1815,11 @@ class LelongController extends Controller 'pembeli.nama', 'pembeli.nokp AS nokppembeli', 'lelong.tagujrah', 'lelong.ujrah', 'lelong.onepercent', 'lelong.teller' ) - ->orderBy('lelong.t_lelong') ->distinct() + ->orderByRaw(" + SUBSTRING_INDEX(SUBSTRING_INDEX(lelong.norujukan, '-', 1), 'WCY', -1), + CAST(SUBSTRING_INDEX(lelong.norujukan, '-', -1) AS UNSIGNED) + ") ->get(); // dd($lelong_data); From dcdae01ad244f273fe3b51e5ebb3364ec29d5533 Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Sun, 2 Mar 2025 16:35:44 +0800 Subject: [PATCH 012/117] add laporan lelong keseluruhan --- .../Reports/LelonganController.php | 88 ++++++ app/Services/Reports/LelonganService.php | 255 ++++++++++++++++++ routes/report.php | 3 + 3 files changed, 346 insertions(+) create mode 100644 app/Http/Controllers/Reports/LelonganController.php create mode 100644 app/Services/Reports/LelonganService.php diff --git a/app/Http/Controllers/Reports/LelonganController.php b/app/Http/Controllers/Reports/LelonganController.php new file mode 100644 index 0000000..0faa26f --- /dev/null +++ b/app/Http/Controllers/Reports/LelonganController.php @@ -0,0 +1,88 @@ +getCawanganReport(); + } + + public function getSummaryLaporanLelong(Request $request) +{ + $onDate = $request->onDate; + $startDate = $request->startDate; + $endDate = $request->endDate; + + // Get active branches in the order we want + $active_cawangan_db_connection = Helper::getActiveCawanganDbConnection(); + + // Preserve keys while mapping database names + $active_cawangan_db_name = array_combine( + $active_cawangan_db_connection, + array_map(function ($db_connection) { + return config('database.connections.' . $db_connection . '.database'); + }, $active_cawangan_db_connection) + ); + // dd($active_cawangan_db_name); + + // Retrieve branch details and re-index by db_name + $active_cawangan_detail = Cawangan::select('kodcaw', 'details_caw', 'db_name') + ->whereIn('db_name', array_values($active_cawangan_db_name)) + ->get() + ->keyBy('db_name') + ->toArray(); + // dd($active_cawangan_detail); + + // Retrieve lelong summary data and re-index by db_connection + $summary_lelongan_data = []; + foreach ($active_cawangan_db_connection as $db_connection) { + $query = Lelong::on($db_connection) + ->join('gadai', 'gadai.norujukan', '=', 'lelong.norujukan') + ->select(DB::raw('count(lelong.norujukan) as total_lelongan, + sum(lelong.berat) as sum_berat, + sum(lelong.nilaimarhun) as sum_nilai_marhun, + sum(gadai.pinjaman) as sum_pinjaman, + sum(lelong.pinjaman) as sum_bakipjm, + sum(lelong.bakiupah) as sum_bakiupah, + sum(lelong.cajlain) as sum_cajlain, + sum(lelong.cajlelong) as sum_cajlelong, + sum(lelong.hargajual) as sum_hargajual, + sum(lelong.baki) as sum_baki')); + + + if ($request->filled('startDate') && $request->filled('endDate')) { + $query->whereBetween('lelong.t_lelong', [$request->startDate, $request->endDate]); + } + + $summary_lelongan_data[$db_connection] = $query->first()->toArray(); + } + + // Ensure data is sorted according to getActiveCawanganDbConnection() + $response = []; + foreach ($active_cawangan_db_connection as $db_connection) { + $db_name = $active_cawangan_db_name[$db_connection] ?? null; + if ($db_name && isset($active_cawangan_detail[$db_name])) { + $response[] = array_merge( + $active_cawangan_detail[$db_name], + $summary_lelongan_data[$db_connection] ?? [] + ); + } + } + + return json_encode($response); +} + +} diff --git a/app/Services/Reports/LelonganService.php b/app/Services/Reports/LelonganService.php new file mode 100644 index 0000000..8df6d04 --- /dev/null +++ b/app/Services/Reports/LelonganService.php @@ -0,0 +1,255 @@ +kod_cawangan = $kod_cawangan; + $this->startDate = $request->startDate; + $this->endDate = $request->endDate; + } + + public function getCawanganReport() + { + $cawangan_connection = Cawangan::where('kodcaw', $this->kod_cawangan)->first()->mysql; + + $query_total_lelongan = Lelong::on($cawangan_connection) + ->join('gadai', 'gadai.norujukan', '=', 'lelong.norujukan') // Joining gadai table + ->select( + 'lelong.norujukan', + 'gadai.nokp', + 'gadai.masa', + 'lelong.berat', + 'lelong.nilaimarhun', + 'gadai.pinjaman', + 'gadai.percentpinj', + 'lelong.teller', + 'gadai.bakipjm', // Fetch pinjaman from gadai + 'gadai.marhun' // Fetch marhun from gadai + ); + + $query_total_lelongan->when(!empty($this->startDate) and !empty($this->endDate), function ($q) { + return $q->where('lelong.t_lelong', '>=', $this->startDate) + ->where('lelong.t_lelong', '<=', $this->endDate); + }); + + $total_lelongan = $this->getTotalLelongan($query_total_lelongan); + // dd($total_lelongan); + $total_summary_lelongan_teller = $this->getTotalSummaryLelonganGroupByTeller($query_total_lelongan); + $total_summary_lelongan = $this->getTotalSummaryLelongan($query_total_lelongan); + $customer_info = $this->getCustomerInfo($total_lelongan); + $marhun_lelongan = $this->getMarhunLelongan($total_lelongan, $cawangan_connection); + $cawangan_detail = $this->getCawanganDetail($cawangan_connection); + + $total_lelongan = $total_lelongan->zip($customer_info, $marhun_lelongan)->map(function ($data) { + + [$lelong, $customer_info, $marhun_lelongan] = $data; + + return [ + 'no_rujukan' => $lelong['norujukan'], + 'nama' => $customer_info['nama'], + 'alamat' => $customer_info['alamat1'], + 'no_kp' => $lelong['nokp'], + 'masa' => $lelong['masa'], + 'marhun' => $marhun_lelongan, + 'berat' => $lelong['berat'], + 'nilai_marhun' => $lelong['nilaimarhun'], + 'pinjaman' => $lelong['pinjaman'], + 'peratusan_margin_pinjaman' => $lelong['percentpinj'], + 'bakipjm' => $lelong['bakipjm'], + 'keuntungan' => $lelong['bakiupah'], + 'cajlelong' => $lelong['cajlelong'], + 'hargajual' => $lelong['hargajual'], + 'baki' => $lelong['baki'], + 'teller' => $lelong['teller'], + ]; + dd($data); + }); + + + $total_lelongan = $total_lelongan->groupBy('teller'); + + $lelongan_tellers = $total_lelongan->keys(); + + $total_lelongan = $total_lelongan + ->zip($total_summary_lelongan_teller) + ->map(function ($data) { + + [$lelongan, $summary] = $data; + + return [ + 'lelongan' => $lelongan, + 'summary_lelongan_teller' => $summary, + ]; + }); + + $total_lelongan = $lelongan_tellers->combine($total_lelongan); + + $data = [ + 'query' => [ + 'startDate' => Helper::formatDate($this->startDate), + 'endDate' => Helper::formatDate($this->endDate), + ], + 'cawangan_detail' => $cawangan_detail, + 'lelongan' => $total_lelongan, + 'summary_lelongan' => $total_summary_lelongan, + ]; + + return json_encode($data); + + } + + private function getCawanganDetail($cawangan_connection) + { + $cawangan_detail = CawanganDetail::on($cawangan_connection)->get() + ->map(function ($detail) { + return [ + 'nama' => $detail['namacaw'], + 'code' => $detail['kodcaw'] . ' Ar-Rahn ' . $detail['cawangan'], + 'alamat' => $detail['alamat1'], + 'waktu_operasi' => $detail['alamat4'], + ]; + }); + + return $cawangan_detail[0]; + + } + + private function getTotalSummaryLelongan(Builder $query_total_lelongan) + { + + $total_summary_lelongan = (clone $query_total_lelongan) + ->selectRaw('count(lelong.norujukan) as total_lelongan, + sum(lelong.berat) as total_berat, + sum(lelong.nilaimarhun) as total_nilai_marhun, + sum(lelong.pinjaman) as total_pembiayaan, + sum(gadai.bakipjm) as total_bakipjm, + sum(lelong.bakiupah) as total_keuntungan, + sum(lelong.cajlelong) as total_cajlelong, + sum(lelong.hargajual) as total_hargajual, + sum(lelong.baki) as total_baki') + ->get() + ->map(function ($x) { + return [ + 'total_lelongan' => $x['total_lelongan'], + 'total_berat' => $x['total_berat'], + 'total_nilai_marhun' => $x['total_nilai_marhun'], + 'total_pembiayaan' => $x['total_pembiayaan'], + 'total_bakipjm' => $x['total_bakipjm'], + 'total_keuntungan' => $x['total_keuntungan'], + 'total_cajlelong' => $x['total_cajlelong'], + 'total_hargajual' => $x['total_hargajual'], + 'total_baki' => $x['total_baki'] + ]; + }); + // dd($total_summary_lelongan); + + return $total_summary_lelongan[0]; + } + private function getTotalSummaryLelonganGroupByTeller(Builder $query_total_lelongan) + { + + $total_summary_lelongan_groupByTeller = (clone $query_total_lelongan) + ->selectRaw('count(lelong.norujukan) as total_lelongan, + sum(lelong.berat) as total_berat, + sum(lelong.nilaimarhun) as total_nilai_marhun, + sum(lelong.pinjaman) as total_pembiayaan, + sum(gadai.bakipjm) as total_bakipjm, + sum(lelong.bakiupah) as total_keuntungan, + sum(lelong.cajlelong) as total_cajlelong, + sum(lelong.hargajual) as total_hargajual, + sum(lelong.baki) as total_baki') + ->groupBy('lelong.teller') + ->get(); + return $total_summary_lelongan_groupByTeller; + } + + private function getTotalLelongan(Builder $query_total_lelongan) + { + $total_lelongan = (clone $query_total_lelongan) + ->select('lelong.t_lelong', + 'lelong.norujukan', + 'gadai.nokp', + 'gadai.semakbarcode', + 'gadai.masa', + 'lelong.berat', + 'lelong.nilaimarhun', + 'lelong.pinjaman', + 'gadai.upah12', + 'gadai.percentpinj', + 'lelong.teller', + 'gadai.nokp', + 'gadai.bakipjm', + 'lelong.bakiupah', + 'lelong.cajlelong', + 'lelong.hargajual', + 'lelong.baki') + ->orderBy('lelong.teller') + ->orderBy('gadai.sirig') + ->get(); + return $total_lelongan; + } + + private function getCustomerInfo($total_lelongan) + { + + $extract_nokp = $total_lelongan->pluck('nokp'); + // dd($extract_nokp); + + $customer_info = Customer::on('mysql7') + ->select(['nama', 'alamat1', 'kpbaru', 'kplama']) + ->where(function ($query) use ($extract_nokp) { + $query->whereIn('kpbaru', $extract_nokp) + ->orWhereIn('kplama', $extract_nokp); + }) + ->get(); + // dd($customer_info); + + $customer_info = collect($extract_nokp)->map(function ($nokp) use ($customer_info) { + return $customer_info->where('kpbaru', $nokp)->first() ?? $customer_info->where('kplama', $nokp)->first(); + })->toArray(); + + return $customer_info; + } + + private function getMarhunLelongan($total_lelongan, $cawangan_connection) + { + + $extract_norujukan = $total_lelongan->pluck('norujukan'); + + $marhun_lelongan = LelMarhun::on($cawangan_connection) + ->select('norujukan', 'bil', 'marhun') + ->whereIn('norujukan', $extract_norujukan) + ->get() + ->groupBy('norujukan') + ->toArray(); + + $marhun_lelongan = array_map(function ($lelongan) { + return array_map(function ($norujukan) { + return $norujukan['bil'] . ' ' . $norujukan['marhun']; + }, $lelongan); + }, $marhun_lelongan); + + $marhun_lelongan = array_map(function ($lelongan) { + return implode(',', $lelongan); + }, $marhun_lelongan); + return $marhun_lelongan; + } +} diff --git a/routes/report.php b/routes/report.php index 9c67016..0f2b4d1 100644 --- a/routes/report.php +++ b/routes/report.php @@ -30,5 +30,8 @@ $router->group(['prefix' => 'api/reports'], function () use ($router) { $router->get('updateig',['uses' => 'BalanceSheetsController@insertBalanceSheets']); $router->get('updateigall',['uses' => 'BalanceSheetsController@updateIGBalanceSheets']); + + $router->get('lelongan', ['uses' => 'LelonganController@getSummaryLaporanLelong']); + $router->get('lelongan/{kod_cawangan}', ['uses' => 'LelonganController@getLaporanCawangan']); }); }); From 2e0a4e49619a4cd65038855383f93990fd6cd10b Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Wed, 5 Mar 2025 16:03:28 +0800 Subject: [PATCH 013/117] update WCY --- app/Http/Controllers/LelongController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/LelongController.php b/app/Http/Controllers/LelongController.php index 133482c..a480959 100644 --- a/app/Http/Controllers/LelongController.php +++ b/app/Http/Controllers/LelongController.php @@ -1817,7 +1817,7 @@ class LelongController extends Controller ) ->distinct() ->orderByRaw(" - SUBSTRING_INDEX(SUBSTRING_INDEX(lelong.norujukan, '-', 1), 'WCY', -1), + SUBSTRING_INDEX(SUBSTRING_INDEX(lelong.norujukan, '-', 1), '^[A-Za-z]+', -1), CAST(SUBSTRING_INDEX(lelong.norujukan, '-', -1) AS UNSIGNED) ") ->get(); From 50ff6a16f8c4b73d87634d1a4b53e1be44c7c20b Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Sun, 9 Mar 2025 13:27:51 +0800 Subject: [PATCH 014/117] update laporan pendahuluan dan serahan --- .../PendahuluanSerahanController.php | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/PendahuluanSerahanController.php b/app/Http/Controllers/PendahuluanSerahanController.php index 4f66d96..1c7be85 100644 --- a/app/Http/Controllers/PendahuluanSerahanController.php +++ b/app/Http/Controllers/PendahuluanSerahanController.php @@ -103,7 +103,7 @@ class PendahuluanSerahanController extends Controller ->where('serahan','>',0) ->orderby('tarikh','desc') ->get(); - }else{ + }else if($request->jenis == 'online'){ $gldetail=GlDetail::on($cawangan['mysql']) ->where('kodcaw','=',$kodcaw) ->where([['tarikh','>=',$request->mula],['tarikh','<=',$request->hingga]]) @@ -111,7 +111,25 @@ class PendahuluanSerahanController extends Controller ->where('serahan','>',0) ->orderby('tarikh','desc') ->get(); - } + }else if($request->jenis == 'serahanonline'){ + $gldetail = GlDetail::on($cawangan['mysql']) + ->where('kodcaw', '=', $kodcaw) + ->whereBetween('tarikh', [$request->mula, $request->hingga]) + ->where(function ($query) { + $query->where('descpt', 'LIKE', 'SERAHAN%') + ->orWhere('descpt', 'LIKE', 'Serahan%') + ->orWhere('descpt', 'LIKE', 'serahan%'); // Add more variations if needed + }) + ->where('serahan', '>', 0) + ->orderBy('tarikh', 'desc') + ->get(); + }else{ + $gldetail = GlDetail::on($cawangan['mysql']) + ->where('kodcaw', '=', $kodcaw) + ->whereBetween('tarikh', [$request->mula, $request->hingga]) + ->orderBy('tarikh', 'desc') + ->get(); + } return response()->json($gldetail,200); From 245115ea8c73ddec1c4675af3c0124336b425cd0 Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Tue, 11 Mar 2025 09:24:31 +0800 Subject: [PATCH 015/117] tambah serahan lelong --- .../PendahuluanSerahanController.php | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/app/Http/Controllers/PendahuluanSerahanController.php b/app/Http/Controllers/PendahuluanSerahanController.php index 1c7be85..2510cc3 100644 --- a/app/Http/Controllers/PendahuluanSerahanController.php +++ b/app/Http/Controllers/PendahuluanSerahanController.php @@ -94,15 +94,18 @@ class PendahuluanSerahanController extends Controller ->where('pendahuluan','>',0) ->orderby('tarikh','desc') ->get(); - }else if($request->jenis == 'serahan'){ - - $gldetail=GlDetail::on($cawangan['mysql']) - ->where('kodcaw','=',$kodcaw) - ->where([['tarikh','>=',$request->mula],['tarikh','<=',$request->hingga]]) - ->where('descpt','NOT LIKE','SERAHAN BAYAR ONLINE%') - ->where('serahan','>',0) - ->orderby('tarikh','desc') - ->get(); + }else if($request->jenis == 'serahan'){ + $gldetail = GlDetail::on($cawangan['mysql']) + ->where('kodcaw', '=', $kodcaw) + ->whereBetween('tarikh', [$request->mula, $request->hingga]) + ->where(function ($query) { + $query->where('descpt', 'NOT LIKE', 'SERAHAN BAYAR ONLINE%') + ->where('descpt', 'NOT LIKE', 'SERAHAN LELONG%'); // Using AND instead of OR + }) + ->where('serahan', '>', 0) + ->orderBy('tarikh', 'desc') + ->get(); + }else if($request->jenis == 'online'){ $gldetail=GlDetail::on($cawangan['mysql']) ->where('kodcaw','=',$kodcaw) @@ -111,6 +114,14 @@ class PendahuluanSerahanController extends Controller ->where('serahan','>',0) ->orderby('tarikh','desc') ->get(); + }else if($request->jenis == 'serahanlelong'){ + $gldetail=GlDetail::on($cawangan['mysql']) + ->where('kodcaw','=',$kodcaw) + ->where([['tarikh','>=',$request->mula],['tarikh','<=',$request->hingga]]) + ->where('descpt','LIKE','SERAHAN LELONG%') + ->where('serahan','>',0) + ->orderby('tarikh','desc') + ->get(); }else if($request->jenis == 'serahanonline'){ $gldetail = GlDetail::on($cawangan['mysql']) ->where('kodcaw', '=', $kodcaw) From 0d8a75d907d879e5e194cbcceac82727b44bb18b Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Sun, 16 Mar 2025 14:34:04 +0800 Subject: [PATCH 016/117] update laporan ansuran keseluruhan untuk excel --- .../Controllers/Reports/AnsuranController.php | 64 ++++++++++++++----- 1 file changed, 49 insertions(+), 15 deletions(-) diff --git a/app/Http/Controllers/Reports/AnsuranController.php b/app/Http/Controllers/Reports/AnsuranController.php index e6009c9..cc366fc 100644 --- a/app/Http/Controllers/Reports/AnsuranController.php +++ b/app/Http/Controllers/Reports/AnsuranController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Reports; use App\Cawangan; +use App\Gadai; use App\Helper; use App\Http\Controllers\Controller; use App\Services\Reports\AnsuranService as ReportAnsuranService; @@ -21,7 +22,12 @@ class AnsuranController extends Controller public function getSummaryLaporanAnsuran(Request $request) { $online_array_db_connection = Helper::getOnlineArrahnConnection(); + $cawangan_available = Cawangan::on($online_array_db_connection)->select('kodcaw', 'details_caw', 'mysql')->get(); + $kodcaw_array = array_column($cawangan_available->toArray(), 'kodcaw'); + $kod_caw_with_cawangan_detail_array = $cawangan_available->pluck('details_caw', 'kodcaw')->toArray(); + + // Step 1: Fetch the ansuran data grouped by cawangan $ansuran_query = Transaction::on($online_array_db_connection) ->leftJoin('transaksi_keuntungan', function ($join) { $join->on('transaction.norujukan', '=', 'transaksi_keuntungan.norujukan'); @@ -31,28 +37,55 @@ class AnsuranController extends Controller ->whereDate('transaction.created_at', '>=', date($request->startDate)) ->whereDate('transaction.created_at', '<=', date($request->endDate)) ->selectRaw(' + transaction.kodcaw as kod_cawangan, count(transaction.norujukan) as bilangan_ansuran, sum(transaksi_keuntungan.bayaran_pembiayaan) as bayaran_pembiayaan, sum(transaksi_keuntungan.bayaran_keuntungan) as bayaran_kos_keuntungan, - sum(transaction.duit_masuk) as jumlah_bayaran - '); - - $summary_ansuran = (clone $ansuran_query)->get()->toArray()[0]; - - $summary_ansuran_by_cawangan = (clone $ansuran_query) - ->addSelect('transaction.kodcaw as kod_cawangan') + sum(transaction.duit_masuk) as jumlah_bayaran, + GROUP_CONCAT(transaction.norujukan) as norujukan_list + ') ->groupBy('transaction.kodcaw') ->get(); - $cawangan_available = Cawangan::on($online_array_db_connection)->select('kodcaw', 'details_caw')->get()->toArray(); - $kodcaw_array = array_column($cawangan_available, 'kodcaw'); - $cawangan_detail_array = array_column($cawangan_available, 'details_caw'); - $kod_caw_with_cawangan_detail_array = array_combine($kodcaw_array, $cawangan_detail_array); + $total_nilai_marhun_by_cawangan = []; - $summary_ansuran_by_cawangan = $summary_ansuran_by_cawangan->map(function ($ansuran_cawangan) use ($kod_caw_with_cawangan_detail_array) { - $ansuran_cawangan->cawangan_detail = $kod_caw_with_cawangan_detail_array[$ansuran_cawangan['kod_cawangan']]; - return $ansuran_cawangan; - }); + // Step 2: Loop through ansuran_query and fetch nilai_marhun per kodcaw + foreach ($ansuran_query as $ansuran_cawangan) { + $kodcaw = $ansuran_cawangan->kod_cawangan; + $norujukan_list = explode(',', $ansuran_cawangan->norujukan_list); // Convert to array + + // Get database connection for this branch + $mysql_connection = $cawangan_available->where('kodcaw', $kodcaw)->first()->mysql ?? null; + if (!$mysql_connection) { + continue; + } + + // Sum nilai_marhun for matching norujukan in gadai table + $total_nilai_marhun_by_cawangan[$kodcaw] = Gadai::on($mysql_connection) + ->whereIn('norujukan', $norujukan_list) + ->sum('nilaimarhun'); + } + + // Step 3: Merge ansuran summary with total_nilai_marhun + $summary_ansuran_by_cawangan = $ansuran_query + ->filter(function ($ansuran_cawangan) use ($kodcaw_array) { + return in_array($ansuran_cawangan['kod_cawangan'], $kodcaw_array); + }) + ->map(function ($ansuran_cawangan) use ($kod_caw_with_cawangan_detail_array, $total_nilai_marhun_by_cawangan) { + $kodcaw = $ansuran_cawangan->kod_cawangan; + $ansuran_cawangan->cawangan_detail = $kod_caw_with_cawangan_detail_array[$kodcaw] ?? 'Unknown'; + $ansuran_cawangan->total_nilai_marhun = $total_nilai_marhun_by_cawangan[$kodcaw] ?? 0; + unset($ansuran_cawangan->norujukan_list); // Remove unnecessary field + return $ansuran_cawangan; + }) + ->values(); + + // Step 4: Calculate overall total_nilai_marhun + $total_nilai_marhun_all = array_sum($total_nilai_marhun_by_cawangan); + + // Step 5: Prepare the overall ansuran summary + $summary_ansuran = (clone $ansuran_query)->toArray()[0] ?? []; + $summary_ansuran['total_nilai_marhun'] = $total_nilai_marhun_all; $response = [ 'summary_ansuran_by_cawangan' => $summary_ansuran_by_cawangan, @@ -61,4 +94,5 @@ class AnsuranController extends Controller return json_encode($response); } + } From 7ace7aa84fb7f41165c26815f247c011ea63b3c3 Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Sun, 16 Mar 2025 16:35:59 +0800 Subject: [PATCH 017/117] update bug keseluruhan total dalam admin --- .../Controllers/Reports/AnsuranController.php | 152 ++++++++++-------- 1 file changed, 86 insertions(+), 66 deletions(-) diff --git a/app/Http/Controllers/Reports/AnsuranController.php b/app/Http/Controllers/Reports/AnsuranController.php index cc366fc..abc8014 100644 --- a/app/Http/Controllers/Reports/AnsuranController.php +++ b/app/Http/Controllers/Reports/AnsuranController.php @@ -20,79 +20,99 @@ class AnsuranController extends Controller } public function getSummaryLaporanAnsuran(Request $request) - { - $online_array_db_connection = Helper::getOnlineArrahnConnection(); - $cawangan_available = Cawangan::on($online_array_db_connection)->select('kodcaw', 'details_caw', 'mysql')->get(); +{ + $online_array_db_connection = Helper::getOnlineArrahnConnection(); + $cawangan_available = Cawangan::on($online_array_db_connection)->select('kodcaw', 'details_caw', 'mysql')->get(); - $kodcaw_array = array_column($cawangan_available->toArray(), 'kodcaw'); - $kod_caw_with_cawangan_detail_array = $cawangan_available->pluck('details_caw', 'kodcaw')->toArray(); + $kodcaw_array = array_column($cawangan_available->toArray(), 'kodcaw'); + $kod_caw_with_cawangan_detail_array = $cawangan_available->pluck('details_caw', 'kodcaw')->toArray(); - // Step 1: Fetch the ansuran data grouped by cawangan - $ansuran_query = Transaction::on($online_array_db_connection) - ->leftJoin('transaksi_keuntungan', function ($join) { - $join->on('transaction.norujukan', '=', 'transaksi_keuntungan.norujukan'); - $join->on('transaction.created_at', '=', 'transaksi_keuntungan.tarikh_bayaran'); - }) - ->where('transaction.trans_type', '=', 'A') - ->whereDate('transaction.created_at', '>=', date($request->startDate)) - ->whereDate('transaction.created_at', '<=', date($request->endDate)) - ->selectRaw(' - transaction.kodcaw as kod_cawangan, - count(transaction.norujukan) as bilangan_ansuran, - sum(transaksi_keuntungan.bayaran_pembiayaan) as bayaran_pembiayaan, - sum(transaksi_keuntungan.bayaran_keuntungan) as bayaran_kos_keuntungan, - sum(transaction.duit_masuk) as jumlah_bayaran, - GROUP_CONCAT(transaction.norujukan) as norujukan_list - ') - ->groupBy('transaction.kodcaw') - ->get(); + // Step 1: Fetch the ansuran data grouped by cawangan + $ansuran_query = Transaction::on($online_array_db_connection) + ->leftJoin('transaksi_keuntungan', function ($join) { + $join->on('transaction.norujukan', '=', 'transaksi_keuntungan.norujukan'); + $join->on('transaction.created_at', '=', 'transaksi_keuntungan.tarikh_bayaran'); + }) + ->where('transaction.trans_type', '=', 'A') + ->whereDate('transaction.created_at', '>=', date($request->startDate)) + ->whereDate('transaction.created_at', '<=', date($request->endDate)) + ->selectRaw(' + transaction.kodcaw as kod_cawangan, + count(transaction.norujukan) as bilangan_ansuran, + sum(transaksi_keuntungan.bayaran_pembiayaan) as bayaran_pembiayaan, + sum(transaksi_keuntungan.bayaran_keuntungan) as bayaran_kos_keuntungan, + sum(transaction.duit_masuk) as jumlah_bayaran, + GROUP_CONCAT(transaction.norujukan) as norujukan_list + ') + ->groupBy('transaction.kodcaw') + ->get(); - $total_nilai_marhun_by_cawangan = []; + $total_nilai_marhun_by_cawangan = []; - // Step 2: Loop through ansuran_query and fetch nilai_marhun per kodcaw - foreach ($ansuran_query as $ansuran_cawangan) { - $kodcaw = $ansuran_cawangan->kod_cawangan; - $norujukan_list = explode(',', $ansuran_cawangan->norujukan_list); // Convert to array + // Step 2: Loop through ansuran_query and fetch nilai_marhun per kodcaw + foreach ($ansuran_query as $ansuran_cawangan) { + $kodcaw = $ansuran_cawangan->kod_cawangan; + $norujukan_list = explode(',', $ansuran_cawangan->norujukan_list); // Convert to array - // Get database connection for this branch - $mysql_connection = $cawangan_available->where('kodcaw', $kodcaw)->first()->mysql ?? null; - if (!$mysql_connection) { - continue; - } - - // Sum nilai_marhun for matching norujukan in gadai table - $total_nilai_marhun_by_cawangan[$kodcaw] = Gadai::on($mysql_connection) - ->whereIn('norujukan', $norujukan_list) - ->sum('nilaimarhun'); + // Get database connection for this branch + $mysql_connection = $cawangan_available->where('kodcaw', $kodcaw)->first()->mysql ?? null; + if (!$mysql_connection) { + continue; } - // Step 3: Merge ansuran summary with total_nilai_marhun - $summary_ansuran_by_cawangan = $ansuran_query - ->filter(function ($ansuran_cawangan) use ($kodcaw_array) { - return in_array($ansuran_cawangan['kod_cawangan'], $kodcaw_array); - }) - ->map(function ($ansuran_cawangan) use ($kod_caw_with_cawangan_detail_array, $total_nilai_marhun_by_cawangan) { - $kodcaw = $ansuran_cawangan->kod_cawangan; - $ansuran_cawangan->cawangan_detail = $kod_caw_with_cawangan_detail_array[$kodcaw] ?? 'Unknown'; - $ansuran_cawangan->total_nilai_marhun = $total_nilai_marhun_by_cawangan[$kodcaw] ?? 0; - unset($ansuran_cawangan->norujukan_list); // Remove unnecessary field - return $ansuran_cawangan; - }) - ->values(); - - // Step 4: Calculate overall total_nilai_marhun - $total_nilai_marhun_all = array_sum($total_nilai_marhun_by_cawangan); - - // Step 5: Prepare the overall ansuran summary - $summary_ansuran = (clone $ansuran_query)->toArray()[0] ?? []; - $summary_ansuran['total_nilai_marhun'] = $total_nilai_marhun_all; - - $response = [ - 'summary_ansuran_by_cawangan' => $summary_ansuran_by_cawangan, - 'summary_ansuran' => $summary_ansuran, - ]; - - return json_encode($response); + // Sum nilai_marhun for matching norujukan in gadai table + $total_nilai_marhun_by_cawangan[$kodcaw] = Gadai::on($mysql_connection) + ->whereIn('norujukan', $norujukan_list) + ->sum('nilaimarhun'); } + // Step 3: Merge ansuran summary with total_nilai_marhun + $summary_ansuran_by_cawangan = $ansuran_query + ->filter(function ($ansuran_cawangan) use ($kodcaw_array) { + return in_array($ansuran_cawangan['kod_cawangan'], $kodcaw_array); + }) + ->map(function ($ansuran_cawangan) use ($kod_caw_with_cawangan_detail_array, $total_nilai_marhun_by_cawangan) { + $kodcaw = $ansuran_cawangan->kod_cawangan; + $ansuran_cawangan->cawangan_detail = $kod_caw_with_cawangan_detail_array[$kodcaw] ?? 'Unknown'; + $ansuran_cawangan->total_nilai_marhun = $total_nilai_marhun_by_cawangan[$kodcaw] ?? 0; + unset($ansuran_cawangan->norujukan_list); // Remove unnecessary field + return $ansuran_cawangan; + }) + ->values(); + + // Step 4: Calculate overall totals + $total_summary = [ + 'bilangan_ansuran' => 0, + 'bayaran_pembiayaan' => 0, + 'bayaran_kos_keuntungan' => 0, + 'jumlah_bayaran' => 0, + 'total_nilai_marhun' => 0, + ]; + + foreach ($summary_ansuran_by_cawangan as $ansuran_cawangan) { + $total_summary['bilangan_ansuran'] += $ansuran_cawangan->bilangan_ansuran ?? 0; + $total_summary['bayaran_pembiayaan'] += $ansuran_cawangan->bayaran_pembiayaan ?? 0; + $total_summary['bayaran_kos_keuntungan'] += $ansuran_cawangan->bayaran_kos_keuntungan ?? 0; + $total_summary['jumlah_bayaran'] += $ansuran_cawangan->jumlah_bayaran ?? 0; + $total_summary['total_nilai_marhun'] += $ansuran_cawangan->total_nilai_marhun ?? 0; + } + + // Step 5: Prepare the overall ansuran summary + $summary_ansuran = [ + 'bilangan_ansuran' => $total_summary['bilangan_ansuran'], + 'bayaran_pembiayaan' => $total_summary['bayaran_pembiayaan'], + 'bayaran_kos_keuntungan' => $total_summary['bayaran_kos_keuntungan'], + 'jumlah_bayaran' => $total_summary['jumlah_bayaran'], + 'total_nilai_marhun' => $total_summary['total_nilai_marhun'], + ]; + + $response = [ + 'summary_ansuran_by_cawangan' => $summary_ansuran_by_cawangan, + 'summary_ansuran' => $summary_ansuran, // Now contains the grand totals + ]; + + return json_encode($response); +} + + } From 73c8220e1a9299b6d1be9a5a4d596db8c7e0a5bf Mon Sep 17 00:00:00 2001 From: hafifierahman Date: Mon, 24 Feb 2025 01:32:05 +0800 Subject: [PATCH 018/117] added autoserahan endpoints --- app/ApprovalWithdrawal.php | 29 +++++ app/Http/Controllers/VaultController.php | 112 ++++++++++++++++++ ...7_28_163407_create_approval_withdrawal.php | 40 +++++++ routes/web.php | 3 + 4 files changed, 184 insertions(+) create mode 100644 app/ApprovalWithdrawal.php create mode 100644 database/migrations/2024_07_28_163407_create_approval_withdrawal.php diff --git a/app/ApprovalWithdrawal.php b/app/ApprovalWithdrawal.php new file mode 100644 index 0000000..6820984 --- /dev/null +++ b/app/ApprovalWithdrawal.php @@ -0,0 +1,29 @@ +json($vault); } + public function autoSerahan($kodcaw,Request $request){ + $current = Carbon::now(); + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); + $vault = Vault::on($cawangan['mysql'])->where('kodcaw','=',$kodcaw)->where('tarikh','=',$current->toDateString())->orderby('tarikh','desc')->first(); + + $bakiawal = $vault['bakiawal']; + $keluar = $vault['keluar']; + $masuk = $vault['masuk']; + $bakiakhir = $vault['bakiakhir']; + $pendahuluan = $vault['pendahuluan']; + $serahan = $vault['serahan']; + $totpanjaran = $vault['totpanjar']; + + DB::connection($cawangan['mysql'])->beginTransaction(); + DB::connection('mysql7')->beginTransaction(); + + try{ + if($request->jenispendahuluanserahan == 'pendahuluan'){ + + $totalpendahuluan = $request->amaun + $pendahuluan; + + $bakiakhir = $bakiawal - $keluar + $masuk + $totalpendahuluan - $serahan - $totpanjaran; + + Vault::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()],['kodcaw','=', $kodcaw]])->update(array( + 'pendahuluan' => $totalpendahuluan, + 'bakiakhir' => $bakiakhir, + 'bakieod' => $bakiakhir + )); + + GlDetail::on($cawangan['mysql'])->create([ + 'kodcaw' => $request->kodcaw, + 'tarikh' => $current->toDateString(), + 'dtacct' => $request->dtacct, + 'ktacct' => $request->ktacct, + 'descpt' => $request->keterangan, + 'pendahuluan' => $request->amaun, + 'teller' => $request->teller . ' (AUTO V3)' + ]); + + }else if($request->jenispendahuluanserahan == 'serahan'){ + + $totalserahan = $request->amaun + $serahan; + + $bakiakhir = $bakiawal - $keluar + $masuk + $pendahuluan - $totalserahan - $totpanjaran; + + Vault::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()],['kodcaw','=', $kodcaw]])->update(array( + 'serahan' => $totalserahan, + 'bakiakhir' => $bakiakhir, + 'bakieod' => $bakiakhir + )); + + GlDetail::on($cawangan['mysql'])->create([ + 'kodcaw' => $request->kodcaw, + 'tarikh' => $current->toDateString(), + 'dtacct' => $request->dtacct, + 'ktacct' => $request->ktacct, + 'descpt' => $request->keterangan, + 'serahan' => $request->amaun, + 'teller' => $request->teller . ' (AUTO V3)' + ]); + + DenoPendSer::on('mysql7')->create([ + 'tarikh' => $current->toDateString(), + 'masa' => $current->toTimeString(), + 'kodcaw' => $kodcaw, + 'kodlaluan' => $request->teller, + 'amaun' => $request->amaun, + 'bd1' => $request->bd1, + 'bd5' => $request->bd5, + 'bd10' => $request->bd10, + 'bd20' => $request->bd20, + 'bd50' => $request->bd50, + 'bd100' => $request->bd100, + 'txtring1' => $request->txtring1, + 'txtring5' => $request->txtring5, + 'txtring10' => $request->txtring10, + 'txtring20' => $request->txtring20, + 'txtring50' => $request->txtring50, + 'txtring100' => $request->txtring100, + 'txtring1000' => $request->txtring1000, + 'txtsen1' => $request->txtsen1, + 'txtsen5' => $request->txtsen5, + 'txtsen10' => $request->txtsen10, + 'txtsen20' => $request->txtsen20, + 'txtsen50' => $request->txtsen50, + 'jenis' =>$request->jenis, + 'recno' =>$request->recno, + 'update' => '0' + ]); + + ApprovalWithdrawal::on('mysql7')->create([ + 'kodcaw' => $request->kodcaw, + 'amaun' => $request->amaun, + 'status' => '1', + 'teller' => $request->teller . ' (AUTO V3)' + ]); + } + + // Commit transactions + DB::connection($cawangan['mysql'])->commit(); + DB::connection('mysql7')->commit(); + + }catch(\Exception $e){ + DB::connection($cawangan['mysql'])->rollBack(); + DB::connection('mysql7')->rollBack(); + return response()->json($e->getMessage()); + } + } + } diff --git a/database/migrations/2024_07_28_163407_create_approval_withdrawal.php b/database/migrations/2024_07_28_163407_create_approval_withdrawal.php new file mode 100644 index 0000000..6a36222 --- /dev/null +++ b/database/migrations/2024_07_28_163407_create_approval_withdrawal.php @@ -0,0 +1,40 @@ +id(); + $table->char('kodcaw', 20); + $table->string('pc_name', 100); + $table->string('operasi_name', 100)->nullable(); + $table->decimal('amount', 10, 2)->default(0); + $table->string('approval_status',20); + $table->boolean('updated_serahan_v2')->default(false); + $table->boolean('updated_pendahuluan_v3')->default(false); + $table->timestamp('approval_timestamp'); + $table->integer('gldetail_id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('approval_withdrawal'); + } +} diff --git a/routes/web.php b/routes/web.php index 73c7ac9..1162cb1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -678,6 +678,9 @@ $router->group(['prefix'=>'api'], function () use ($router){ /* Endpoint for Account Statements */ $router->get('record/accountstatement/{kodcaw}',['uses'=>'TunaiController@getAccStatement']); + /* Endpoint for Auto Serahan */ + $router->get('auto/serahan/{kodcaw}',['uses'=>'VaultController@autoSerahan']); + }); $router->group(['prefix'=>'e-arrahn'], function () use ($router){ From e966d2141737d3610f296efc8fdbc67cb9160158 Mon Sep 17 00:00:00 2001 From: hafifierahman Date: Wed, 26 Feb 2025 01:27:49 +0800 Subject: [PATCH 019/117] added timestmap for gldetail --- app/Console/Commands/CloneDatabase.php | 82 +++++++++++++++++++ app/Http/Controllers/VaultController.php | 62 +++++++++++--- ...103124_add_timestamp_to_gldetail_table.php | 48 +++++++++++ routes/web.php | 1 + 4 files changed, 183 insertions(+), 10 deletions(-) create mode 100644 app/Console/Commands/CloneDatabase.php create mode 100644 database/migrations/2025_02_25_103124_add_timestamp_to_gldetail_table.php diff --git a/app/Console/Commands/CloneDatabase.php b/app/Console/Commands/CloneDatabase.php new file mode 100644 index 0000000..bbff6a2 --- /dev/null +++ b/app/Console/Commands/CloneDatabase.php @@ -0,0 +1,82 @@ +select("SHOW TABLES"); + + $namedatabase = DB::connection('mysql7')->getDatabaseName(); + + if (empty($tables)) { + $this->error("No tables found in database"); + return; + } + + $boolreject = false; + $list_of_rejected = ($boolreject) ? $this->rejected_table() : []; + // Get table names + $tableNames = array_map(fn($table) => is_array($table) ? array_values($table) : $table, $tables); + $tableString = collect($tables)->pluck('Tables_in_' .$namedatabase)->reject(fn($table) => in_array($table, $list_of_rejected))->implode(','); + // Run migration generator + Artisan::call("migrate:generate --path=database/migrations --tables=" .$tableString); + // Artisan::call("migrate:status"); + + $this->info("Migrations generated successfully for database"); + } + + protected function rejected_table() : Array{ + return [ + 'alert','auditbarcode','auditdaftar', + 'auditrekodsemakan','audtrail','bakipelanggan', + 'bandar','batchlel_xtra','bayaranpenebusan','belian', + 'brand','checker','configkaunter','gadaisimulasi','gadaitemp', + 'gadaixtra','hapusgadaionline','hargaemasbeli', + 'hargaemasjual','imbangan','inoutmarxtra', + 'jemas00', 'jemasbeli','jemasxtra', + 'jenisakaun','jualan','jualemas','jumlahtebus', + 'karat','karatbeli','karatjual','karatxtra', + 'ku_nm', 'ku_nmbaru', 'ku_nmxtra', 'kumpulan', + 'kurangxtra', 'lapringkasan', 'laptebus', 'lapterkumpul', + 'lapterkumpulharian','lelkarat','lelmarhun_xtra', 'marhunbeli', + 'marhunjual', 'marhunsimulasi', 'marhunxtra', 'model', + 'outmarhun', 'outmarhunxtra', 'palsu', 'pemeriksaan', + 'pengesahangadai', ' peratusan', 'percentonline', + 'polisxtra','product','ramalan', 'rekodtangguh', 'sahabat', + 'simpanan', 'simulasi_batchlel', 'simulasi_batchlelxtra', + 'simulasi_lelmarhun', 'simulasi_lelong', 'simulasi_lelongxtra', + 'tagpelanggan', 'tangguhlelong', 'taraf', + 'tebus_xtra', 'tebuslelong', 'temp_ic', 'tempimbang', + 'tempnosiri', 'tempnosirixtra', 'temppwd', 'temptarikhaging', + 'tunaigadteb', 'tuntutbakixtra', 'ubs_code', 'ugama', + 'updateserver', 'zparameter', 'zparameterxtra','ZPARAMETER1']; + } +} diff --git a/app/Http/Controllers/VaultController.php b/app/Http/Controllers/VaultController.php index cd33229..98aaae3 100644 --- a/app/Http/Controllers/VaultController.php +++ b/app/Http/Controllers/VaultController.php @@ -719,6 +719,25 @@ class VaultController extends Controller return response()->json($vault); } + public function createAutoSerahan($kodcaw,Request $request){ + $current = Carbon::now(); + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); + + ApprovalWithdrawal::on('mysql7')->create([ + 'kodcaw' => $request->kodcaw, + 'pc_name' => $request->teller, + 'operasi_name' => null, + 'amount' => $request->amaun, + 'approval_status' => 'PENDING', + 'approval_timestamp' => null, + 'gldetail_id' => 0, + 'updated_serahan_v2' => 0, + 'updated_pendahuluan_v3' => 0, + 'created_at' => $current, + 'updated_at' => $current, + ]); + } + public function autoSerahan($kodcaw,Request $request){ $current = Carbon::now(); $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); @@ -755,9 +774,14 @@ class VaultController extends Controller 'ktacct' => $request->ktacct, 'descpt' => $request->keterangan, 'pendahuluan' => $request->amaun, - 'teller' => $request->teller . ' (AUTO V3)' + 'teller' => $request->teller . ' (AUTO V3)', + 'date_created' => $current ]); + ApprovalWithdrawal::on('mysql7')->update(array( + 'updated_pendahuluan_v3' => 1, + )); + }else if($request->jenispendahuluanserahan == 'serahan'){ $totalserahan = $request->amaun + $serahan; @@ -770,14 +794,15 @@ class VaultController extends Controller 'bakieod' => $bakiakhir )); - GlDetail::on($cawangan['mysql'])->create([ + $gldetail = GlDetail::on($cawangan['mysql'])->create([ 'kodcaw' => $request->kodcaw, 'tarikh' => $current->toDateString(), 'dtacct' => $request->dtacct, 'ktacct' => $request->ktacct, 'descpt' => $request->keterangan, 'serahan' => $request->amaun, - 'teller' => $request->teller . ' (AUTO V3)' + 'teller' => $request->teller . ' (AUTO V3)', + 'date_created' => $current ]); DenoPendSer::on('mysql7')->create([ @@ -807,14 +832,13 @@ class VaultController extends Controller 'jenis' =>$request->jenis, 'recno' =>$request->recno, 'update' => '0' - ]); - - ApprovalWithdrawal::on('mysql7')->create([ - 'kodcaw' => $request->kodcaw, - 'amaun' => $request->amaun, - 'status' => '1', - 'teller' => $request->teller . ' (AUTO V3)' ]); + + ApprovalWithdrawal::on('mysql7')->update(array( + 'updated_serahan_v2' => 1, + 'gldetail_id' => $gldetail->id + )); + } // Commit transactions @@ -828,6 +852,24 @@ class VaultController extends Controller } } + public function autoSerahanApproval($kodcaw,Request $request){ + $current = Carbon::now(); + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); + $vault = Vault::on($cawangan['mysql'])->where('kodcaw','=',$kodcaw)->where('tarikh','=',$current->toDateString())->orderby('tarikh','desc')->first(); + + DB::connection($cawangan['mysql'])->beginTransaction(); + DB::connection('mysql7')->beginTransaction(); + + try{ + DB::connection('mysql7')->commit(); + DB::connection($cawangan['mysql'])->commit(); + }catch(\Exception $e){ + DB::connection($cawangan['mysql'])->rollBack(); + DB::connection('mysql7')->rollBack(); + return response()->json($e->getMessage()); + } + } + } diff --git a/database/migrations/2025_02_25_103124_add_timestamp_to_gldetail_table.php b/database/migrations/2025_02_25_103124_add_timestamp_to_gldetail_table.php new file mode 100644 index 0000000..af62292 --- /dev/null +++ b/database/migrations/2025_02_25_103124_add_timestamp_to_gldetail_table.php @@ -0,0 +1,48 @@ +getPdo(); + return true; + } catch(\Exception $e){ + return false; + } + }); + return $db_connection; + } + + public function up() + { + $db_connection = $this->getActiveDB(); + + foreach($db_connection as $dbase){ + Schema::connection($dbase)->table('gldetail', function (Blueprint $table) use($dbase) { + + $dateCreated = Schema::connection($dbase)->hasColumn('gldetail', 'date_created'); + + + if (!$dateCreated) { + $table->timestamp('date_created'); + } + }); + } + } +} diff --git a/routes/web.php b/routes/web.php index 1162cb1..dda5f28 100644 --- a/routes/web.php +++ b/routes/web.php @@ -680,6 +680,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ /* Endpoint for Auto Serahan */ $router->get('auto/serahan/{kodcaw}',['uses'=>'VaultController@autoSerahan']); + $router->put('auto/approve/serahan/{kodcaw}',['uses'=>'VaultController@autoSerahanApproval']); }); From acfbf11fe94332ef4abc488c14360d4eba2259a8 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Thu, 27 Feb 2025 21:08:31 +0800 Subject: [PATCH 020/117] fix added migration --- app/Http/Controllers/VaultController.php | 153 ------------------ ..._23_154307_create_approval_withdrawal.php} | 3 +- routes/web.php | 5 +- 3 files changed, 5 insertions(+), 156 deletions(-) rename database/migrations/{2024_07_28_163407_create_approval_withdrawal.php => 2025_02_23_154307_create_approval_withdrawal.php} (90%) diff --git a/app/Http/Controllers/VaultController.php b/app/Http/Controllers/VaultController.php index 98aaae3..d838ef6 100644 --- a/app/Http/Controllers/VaultController.php +++ b/app/Http/Controllers/VaultController.php @@ -719,157 +719,4 @@ class VaultController extends Controller return response()->json($vault); } - public function createAutoSerahan($kodcaw,Request $request){ - $current = Carbon::now(); - $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); - - ApprovalWithdrawal::on('mysql7')->create([ - 'kodcaw' => $request->kodcaw, - 'pc_name' => $request->teller, - 'operasi_name' => null, - 'amount' => $request->amaun, - 'approval_status' => 'PENDING', - 'approval_timestamp' => null, - 'gldetail_id' => 0, - 'updated_serahan_v2' => 0, - 'updated_pendahuluan_v3' => 0, - 'created_at' => $current, - 'updated_at' => $current, - ]); - } - - public function autoSerahan($kodcaw,Request $request){ - $current = Carbon::now(); - $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); - $vault = Vault::on($cawangan['mysql'])->where('kodcaw','=',$kodcaw)->where('tarikh','=',$current->toDateString())->orderby('tarikh','desc')->first(); - - $bakiawal = $vault['bakiawal']; - $keluar = $vault['keluar']; - $masuk = $vault['masuk']; - $bakiakhir = $vault['bakiakhir']; - $pendahuluan = $vault['pendahuluan']; - $serahan = $vault['serahan']; - $totpanjaran = $vault['totpanjar']; - - DB::connection($cawangan['mysql'])->beginTransaction(); - DB::connection('mysql7')->beginTransaction(); - - try{ - if($request->jenispendahuluanserahan == 'pendahuluan'){ - - $totalpendahuluan = $request->amaun + $pendahuluan; - - $bakiakhir = $bakiawal - $keluar + $masuk + $totalpendahuluan - $serahan - $totpanjaran; - - Vault::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()],['kodcaw','=', $kodcaw]])->update(array( - 'pendahuluan' => $totalpendahuluan, - 'bakiakhir' => $bakiakhir, - 'bakieod' => $bakiakhir - )); - - GlDetail::on($cawangan['mysql'])->create([ - 'kodcaw' => $request->kodcaw, - 'tarikh' => $current->toDateString(), - 'dtacct' => $request->dtacct, - 'ktacct' => $request->ktacct, - 'descpt' => $request->keterangan, - 'pendahuluan' => $request->amaun, - 'teller' => $request->teller . ' (AUTO V3)', - 'date_created' => $current - ]); - - ApprovalWithdrawal::on('mysql7')->update(array( - 'updated_pendahuluan_v3' => 1, - )); - - }else if($request->jenispendahuluanserahan == 'serahan'){ - - $totalserahan = $request->amaun + $serahan; - - $bakiakhir = $bakiawal - $keluar + $masuk + $pendahuluan - $totalserahan - $totpanjaran; - - Vault::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()],['kodcaw','=', $kodcaw]])->update(array( - 'serahan' => $totalserahan, - 'bakiakhir' => $bakiakhir, - 'bakieod' => $bakiakhir - )); - - $gldetail = GlDetail::on($cawangan['mysql'])->create([ - 'kodcaw' => $request->kodcaw, - 'tarikh' => $current->toDateString(), - 'dtacct' => $request->dtacct, - 'ktacct' => $request->ktacct, - 'descpt' => $request->keterangan, - 'serahan' => $request->amaun, - 'teller' => $request->teller . ' (AUTO V3)', - 'date_created' => $current - ]); - - DenoPendSer::on('mysql7')->create([ - 'tarikh' => $current->toDateString(), - 'masa' => $current->toTimeString(), - 'kodcaw' => $kodcaw, - 'kodlaluan' => $request->teller, - 'amaun' => $request->amaun, - 'bd1' => $request->bd1, - 'bd5' => $request->bd5, - 'bd10' => $request->bd10, - 'bd20' => $request->bd20, - 'bd50' => $request->bd50, - 'bd100' => $request->bd100, - 'txtring1' => $request->txtring1, - 'txtring5' => $request->txtring5, - 'txtring10' => $request->txtring10, - 'txtring20' => $request->txtring20, - 'txtring50' => $request->txtring50, - 'txtring100' => $request->txtring100, - 'txtring1000' => $request->txtring1000, - 'txtsen1' => $request->txtsen1, - 'txtsen5' => $request->txtsen5, - 'txtsen10' => $request->txtsen10, - 'txtsen20' => $request->txtsen20, - 'txtsen50' => $request->txtsen50, - 'jenis' =>$request->jenis, - 'recno' =>$request->recno, - 'update' => '0' - ]); - - ApprovalWithdrawal::on('mysql7')->update(array( - 'updated_serahan_v2' => 1, - 'gldetail_id' => $gldetail->id - )); - - } - - // Commit transactions - DB::connection($cawangan['mysql'])->commit(); - DB::connection('mysql7')->commit(); - - }catch(\Exception $e){ - DB::connection($cawangan['mysql'])->rollBack(); - DB::connection('mysql7')->rollBack(); - return response()->json($e->getMessage()); - } - } - - public function autoSerahanApproval($kodcaw,Request $request){ - $current = Carbon::now(); - $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); - $vault = Vault::on($cawangan['mysql'])->where('kodcaw','=',$kodcaw)->where('tarikh','=',$current->toDateString())->orderby('tarikh','desc')->first(); - - DB::connection($cawangan['mysql'])->beginTransaction(); - DB::connection('mysql7')->beginTransaction(); - - try{ - DB::connection('mysql7')->commit(); - DB::connection($cawangan['mysql'])->commit(); - }catch(\Exception $e){ - DB::connection($cawangan['mysql'])->rollBack(); - DB::connection('mysql7')->rollBack(); - return response()->json($e->getMessage()); - } - } - - - } diff --git a/database/migrations/2024_07_28_163407_create_approval_withdrawal.php b/database/migrations/2025_02_23_154307_create_approval_withdrawal.php similarity index 90% rename from database/migrations/2024_07_28_163407_create_approval_withdrawal.php rename to database/migrations/2025_02_23_154307_create_approval_withdrawal.php index 6a36222..aa63b02 100644 --- a/database/migrations/2024_07_28_163407_create_approval_withdrawal.php +++ b/database/migrations/2025_02_23_154307_create_approval_withdrawal.php @@ -22,8 +22,9 @@ class CreateApprovalWithdrawal extends Migration $table->string('approval_status',20); $table->boolean('updated_serahan_v2')->default(false); $table->boolean('updated_pendahuluan_v3')->default(false); - $table->timestamp('approval_timestamp'); + $table->timestamp('approval_timestamp')->nullable(); $table->integer('gldetail_id'); + $table->integer('denopendser_id'); $table->timestamps(); }); } diff --git a/routes/web.php b/routes/web.php index dda5f28..3a59931 100644 --- a/routes/web.php +++ b/routes/web.php @@ -679,8 +679,9 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->get('record/accountstatement/{kodcaw}',['uses'=>'TunaiController@getAccStatement']); /* Endpoint for Auto Serahan */ - $router->get('auto/serahan/{kodcaw}',['uses'=>'VaultController@autoSerahan']); - $router->put('auto/approve/serahan/{kodcaw}',['uses'=>'VaultController@autoSerahanApproval']); + $router->get('autoserahan/list',['uses'=>'AutoSerahanController@getAutoSerahan']); + $router->put('autoserahan/approve',['uses'=>'AutoSerahanController@autoSerahanApproval']); + $router->post('autoserahan/create',['uses'=>'AutoSerahanController@createAutoSerahan']); }); From aecb147d9cad45c3df6e15c21538552ac5245425 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Thu, 27 Feb 2025 21:20:51 +0800 Subject: [PATCH 021/117] added uncommited --- .../Controllers/AutoSerahanController.php | 288 ++++++++++++++++++ 1 file changed, 288 insertions(+) create mode 100644 app/Http/Controllers/AutoSerahanController.php diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php new file mode 100644 index 0000000..a5208a1 --- /dev/null +++ b/app/Http/Controllers/AutoSerahanController.php @@ -0,0 +1,288 @@ +where('approval_status', 'PENDING'); + if (isset($request->kodcaw)) $query->where('kodcaw', '=', $request->kodcaw); + $listapproval = $query->get(); + + return response()->json($listapproval,200); + } + + public function createAutoSerahan(Request $request) + { + $current = Carbon::now(); + + DB::connection('mysql7')->beginTransaction(); + + try{ + + $deno_pendser = DenoPendSer::on('mysql7')->create([ + 'tarikh' => $current->toDateString(), + 'masa' => $current->toTimeString(), + 'kodcaw' => $request->kodcaw, + 'kodlaluan' => $request->teller, + 'amaun' => $request->amaun, + 'bd1' => $request->bd1, + 'bd5' => $request->bd5, + 'bd10' => $request->bd10, + 'bd20' => $request->bd20, + 'bd50' => $request->bd50, + 'bd100' => $request->bd100, + 'txtring1' => $request->txtring1, + 'txtring5' => $request->txtring5, + 'txtring10' => $request->txtring10, + 'txtring20' => $request->txtring20, + 'txtring50' => $request->txtring50, + 'txtring100' => $request->txtring100, + 'txtring1000' => $request->txtring1000, + 'txtsen1' => $request->txtsen1, + 'txtsen5' => $request->txtsen5, + 'txtsen10' => $request->txtsen10, + 'txtsen20' => $request->txtsen20, + 'txtsen50' => $request->txtsen50, + 'jenis' =>$request->jenis, + 'recno' =>$request->recno, + 'update' => '0' + ]); + + ApprovalWithdrawal::on('mysql7')->create([ + 'kodcaw' => $request->kodcaw, + 'pc_name' => $request->username, + 'operasi_name' => null, + 'amount' => $request->amount, + 'approval_status' => 'PENDING', + 'approval_timestamp' => null, + 'gldetail_id' => 0, + 'denopendser_id' => $deno_pendser->id, + 'updated_serahan_v2' => 0, + 'updated_pendahuluan_v3' => 0, + 'created_at' => $current, + 'updated_at' => $current, + ]); + + DB::connection('mysql7')->commit(); + return response()->json('success'); + }catch(\Exception $e){ + DB::connection('mysql7')->rollBack(); + return response()->json($e->getMessage()); + } + } + + private function autoSerahanEngine($jenis, $request){ + $current = Carbon::now(); + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first(); + $vault = Vault::on($cawangan['mysql'])->where('kodcaw','=',$request->kodcaw)->where('tarikh','=',$current->toDateString())->orderby('tarikh','desc')->first(); + + $bakiawal = $vault['bakiawal']; + $keluar = $vault['keluar']; + $masuk = $vault['masuk']; + $bakiakhir = $vault['bakiakhir']; + $pendahuluan = $vault['pendahuluan']; + $serahan = $vault['serahan']; + $totpanjaran = $vault['totpanjar']; + + DB::connection($cawangan['mysql'])->beginTransaction(); + DB::connection('mysql7')->beginTransaction(); + + try{ + $approval = ApprovalWithdrawal::on('mysql7')->where('id',$request->id)->first(); + + if($jenis == 'pendahuluan'){ + + $totalpendahuluan = $request->amaun + $pendahuluan; + + $bakiakhir = $bakiawal - $keluar + $masuk + $totalpendahuluan - $serahan - $totpanjaran; + + $denopendser = DenoPendSer::on('mysql7')->where('id',$approval['denopendser_id'])->first(); + + $this->updateDenominasi($request->kodcaw,$denopendser); + + $gldetail = GlDetail::on($cawangan['mysql'])->create([ + 'kodcaw' => $request->kodcaw, + 'tarikh' => $current->toDateString(), + 'dtacct' => $request->dtacct, + 'ktacct' => $request->ktacct, + 'descpt' => $request->keterangan, + 'pendahuluan' => $request->amaun, + 'teller' => $request->teller . ' (AUTO V3)', + 'date_created' => $current + ]); + + Vault::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()],['kodcaw','=', $kodcaw]])->update(array( + 'pendahuluan' => $totalpendahuluan, + 'bakiakhir' => $bakiakhir, + 'bakieod' => $bakiakhir + )); + + ApprovalWithdrawal::on('mysql7')->where('id',$request->id)->update(array( + 'updated_pendahuluan_v3' => 1, + 'gldetail_id' => $gldetail->id + )); + + }else if($jenis == 'serahan'){ + + $totalserahan = $request->amaun + $serahan; + + $bakiakhir = $bakiawal - $keluar + $masuk + $pendahuluan - $totalserahan - $totpanjaran; + + $denopendser = DenoPendSer::on('mysql7')->where('id',$approval['denopendser_id'])->first(); + + $this->updateDenominasi($request->kodcaw,$denopendser); + + $gldetail = GlDetail::on($cawangan['mysql'])->create([ + 'kodcaw' => $request->kodcaw, + 'tarikh' => $current->toDateString(), + 'dtacct' => $request->dtacct, + 'ktacct' => $request->ktacct, + 'descpt' => $request->keterangan, + 'serahan' => $request->amaun, + 'teller' => $request->teller . ' (AUTO V3)', + 'date_created' => $current + ]); + + Vault::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()],['kodcaw','=', $kodcaw]])->update(array( + 'serahan' => $totalserahan, + 'bakiakhir' => $bakiakhir, + 'bakieod' => $bakiakhir + )); + + ApprovalWithdrawal::on('mysql7')->where('id',$request->id)->update(array( + 'updated_serahan_v2' => 1, + 'gldetail_id' => $gldetail->id + )); + + } + + // Commit transactions + DB::connection($cawangan['mysql'])->commit(); + DB::connection('mysql7')->commit(); + + }catch(\Exception $e){ + DB::connection($cawangan['mysql'])->rollBack(); + DB::connection('mysql7')->rollBack(); + throw $e; + } + } + + public function autoSerahanApproval(Request $request){ + $current = Carbon::now(); + + DB::connection('mysql7')->beginTransaction(); + + try{ + $approval = ApprovalWithdrawal::on('mysql7')->where('id',$request->id)->first(); + + if($approval->approval_status == 'PENDING' && $request->sendApproval == 'ACCEPTED'){ + $approval->operasi_name = $request->operasi_name; + $approval->approval_status = 'APPROVED'; + $approval->approval_timestamp = $current; + $approval->save(); + + $updated_serahan = $this->autoSerahanEngine('serahan',$request); + $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$request); + + DB::connection('mysql7')->commit(); + return response()->json('success',200); + }else{ + $approval->operasi_name = $request->operasi_name; + $approval->approval_status = 'REJECTED'; + $approval->approval_timestamp = $current; + $approval->save(); + + DB::connection('mysql7')->commit(); + return response()->json('rejected',200); + } + + }catch(\Exception $e){ + DB::connection('mysql7')->rollBack(); + return response()->json($e->getMessage()); + } + } + + private function updateDenominasi($kodcaw,$denopendser){ + $current = Carbon::now(); + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); + + $k1 = $denopendser['k1']; + $txtring1 = $denopendser['k1'] * 1; + $k5 = $denopendser['k5']; + $txtring5 = $denopendser['k5'] * 5; + $k01 = $denopendser['k01']; + $txtsen1 = $denopendser['k01'] * 0.01; + $k05 = $denopendser['k05']; + $txtsen5 = $denopendser['k05'] * 0.05; + $k010 = $denopendser['k010']; + $txtsen10 = $denopendser['k010'] * 0.10; + $k020 = $denopendser['k020']; + $txtsen20 = $denopendser['k020'] * 0.20; + $k050 = $denopendser['k050']; + $txtsen50 = $denopendser['k050'] * 0.50; + $k10 = $denopendser['k10']; + $txtring10 = $denopendser['k10'] * 10; + $k20 = $denopendser['k20']; + $txtring20 = $denopendser['k20'] * 20; + $k50 = $denopendser['k50']; + $txtring50 = $denopendser['k50'] * 50; + $k100 = $denopendser['k100']; + $txtring100 = $denopendser['k100'] * 100; + + $totalkeping = $k01 + $k05 + $k010 + $k020 + $k050 + $k1 + $k5 + $k10 + $k20 + $k50 + $k100; + + Denominasi::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()]])->update(array( + 'bd1' => 0, + 'b1'=> 0, + 'bd5'=> 0, + 'b5'=> 0, + 'bd10'=> 0, + 'b10'=> 0, + 'bd20'=> 0, + 'b20'=> 0, + 'bd50'=> 0, + 'b50'=> 0, + 'bd100'=> 0, + 'b100'=> 0, + 'txtring1'=> $request->txtring1, + 'k1'=> $k1, + 'txtring5'=> $request->txtring5, + 'k5'=> $k5, + 'txtsen1'=> $request->txtsen1, + 'k01'=> $k01, + 'txtsen5'=> $request->txtsen5, + 'k05'=> $k05, + 'txtsen10'=> $request->txtsen10, + 'k010'=> $k010, + 'txtsen20'=> $request->txtsen20, + 'k020'=> $k020, + 'txtsen50'=> $request->txtsen50, + 'k050'=> $k050, + 'txtring10'=> $request->txtring10, + 'k10'=> $k10, + 'txtring20'=> $request->txtring20, + 'k20'=> $k20, + 'txtring50'=> $request->txtring50, + 'k50'=> $k50, + 'txtring100'=> $request->txtring100, + 'k100'=> $k100, + 'txtring1000'=> $request->txtring1000, + 'k1000'=> $request->k1000, + 'jumlahbundle'=> 0, + 'txtjumlah'=> $totalkeping, + 'jumlahkeping' => $totalkeping + )); + } +} \ No newline at end of file From 07954b9b5e25eef1645052eafccb4eb8b56e2cf3 Mon Sep 17 00:00:00 2001 From: hafifierahman Date: Sun, 2 Mar 2025 09:02:16 +0800 Subject: [PATCH 022/117] fix migrations and added function --- app/ApprovalWithdrawal.php | 5 +- app/GlDetail.php | 3 +- .../Controllers/AutoSerahanController.php | 185 ++++++++++-------- ...2_23_154307_create_approval_withdrawal.php | 8 +- 4 files changed, 113 insertions(+), 88 deletions(-) diff --git a/app/ApprovalWithdrawal.php b/app/ApprovalWithdrawal.php index 6820984..b52e845 100644 --- a/app/ApprovalWithdrawal.php +++ b/app/ApprovalWithdrawal.php @@ -22,8 +22,11 @@ class ApprovalWithdrawal extends Model 'approval_status', 'updated_serahan_v2', 'updated_pendahuluan_v3', + 'denopendser_id_v2', + 'gldetail_id_v2', + 'denopendser_id_v3', + 'gldetail_id_v3', 'approval_timestamp', - 'gldetail_id' ]; } diff --git a/app/GlDetail.php b/app/GlDetail.php index f0d03f7..1e26c21 100644 --- a/app/GlDetail.php +++ b/app/GlDetail.php @@ -23,7 +23,8 @@ class GlDetail extends Model 'amaun', 'pendahuluan', 'serahan', - 'teller' + 'teller', + 'date_created' ]; /** diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index a5208a1..f32b5e8 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -12,13 +12,14 @@ use App\Vault; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Log; class AutoSerahanController extends Controller { public function getAutoSerahan(Request $request){ $query = ApprovalWithdrawal::on('mysql7')->where('approval_status', 'PENDING'); if (isset($request->kodcaw)) $query->where('kodcaw', '=', $request->kodcaw); - $listapproval = $query->get(); + $listapproval = $query->paginate(5); return response()->json($listapproval,200); } @@ -37,56 +38,66 @@ class AutoSerahanController extends Controller 'kodcaw' => $request->kodcaw, 'kodlaluan' => $request->teller, 'amaun' => $request->amaun, - 'bd1' => $request->bd1, - 'bd5' => $request->bd5, - 'bd10' => $request->bd10, - 'bd20' => $request->bd20, - 'bd50' => $request->bd50, - 'bd100' => $request->bd100, - 'txtring1' => $request->txtring1, - 'txtring5' => $request->txtring5, - 'txtring10' => $request->txtring10, - 'txtring20' => $request->txtring20, - 'txtring50' => $request->txtring50, - 'txtring100' => $request->txtring100, - 'txtring1000' => $request->txtring1000, - 'txtsen1' => $request->txtsen1, - 'txtsen5' => $request->txtsen5, - 'txtsen10' => $request->txtsen10, - 'txtsen20' => $request->txtsen20, - 'txtsen50' => $request->txtsen50, + 'bd1' => 0, + 'bd5' => 0, + 'bd10' => 0, + 'bd20' => 0, + 'bd50' => 0, + 'bd100' => 0, + 'txtring1' => isset($request->txtring1) ? $request->txtring1 : 0, + 'txtring5' => isset($request->txtring5) ? $request->txtring5 : 0, + 'txtring10' => isset($request->txtring10) ? $request->txtring10 : 0, + 'txtring20' => isset($request->txtring20) ? $request->txtring20 : 0, + 'txtring50' => isset($request->txtring50) ? $request->txtring50 : 0, + 'txtring100' => isset($request->txtring100) ? $request->txtring100 : 0, + 'txtring1000' => isset($request->txtring1000) ? $request->txtring1000 : 0, + 'txtsen1' => isset($request->txtsen1) ? $request->txtsen1 : 0, + 'txtsen5' => isset($request->txtsen5) ? $request->txtsen5 : 0, + 'txtsen10' => isset($request->txtsen10) ? $request->txtsen10 : 0, + 'txtsen20' => isset($request->txtsen20) ? $request->txtsen20 : 0, + 'txtsen50' => isset($request->txtsen50) ? $request->txtsen50 : 0, 'jenis' =>$request->jenis, - 'recno' =>$request->recno, - 'update' => '0' + 'recno' => 0, + 'update' => 0 ]); - ApprovalWithdrawal::on('mysql7')->create([ - 'kodcaw' => $request->kodcaw, - 'pc_name' => $request->username, - 'operasi_name' => null, - 'amount' => $request->amount, - 'approval_status' => 'PENDING', - 'approval_timestamp' => null, - 'gldetail_id' => 0, - 'denopendser_id' => $deno_pendser->id, - 'updated_serahan_v2' => 0, - 'updated_pendahuluan_v3' => 0, - 'created_at' => $current, - 'updated_at' => $current, - ]); + if($request->version == 'v3'){ + $approval = ApprovalWithdrawal::on('mysql7')->create([ + 'kodcaw' => $request->kodcaw, + 'pc_name' => $request->teller, + 'operasi_name' => null, + 'amount' => $request->amaun, + 'approval_status' => 'PENDING', + 'approval_timestamp' => null, + 'gldetail_id_v3' => 0, + 'gldetail_id_v2' => 0, + 'denopendser_id_v3' => $deno_pendser->id, + 'denopendser_id_v2' => 0, + 'updated_serahan_v2' => 0, + 'updated_pendahuluan_v3' => 0, + 'created_at' => $current, + 'updated_at' => $current, + ]); + DB::connection('mysql7')->commit(); + return response()->json(['status' => 'success','id' => $approval->id]); + }else{ + ApprovalWithdrawal::on('mysql7')->where('id', $request->id)->update([ + 'denopendser_id_v2' => $deno_pendser->id, + ]); + DB::connection('mysql7')->commit(); + return response()->json(['status' => 'success']); + } - DB::connection('mysql7')->commit(); - return response()->json('success'); }catch(\Exception $e){ DB::connection('mysql7')->rollBack(); - return response()->json($e->getMessage()); + return response()->json(['status' => 'failed','message' => $e->getMessage()]); } } - private function autoSerahanEngine($jenis, $request){ + private function autoSerahanEngine($jenis, $kodcaw,$teller,$amaun,$id){ $current = Carbon::now(); - $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first(); - $vault = Vault::on($cawangan['mysql'])->where('kodcaw','=',$request->kodcaw)->where('tarikh','=',$current->toDateString())->orderby('tarikh','desc')->first(); + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); + $vault = Vault::on($cawangan['mysql'])->where('kodcaw','=',$kodcaw)->where('tarikh','=',$current->toDateString())->orderby('tarikh','desc')->first(); $bakiawal = $vault['bakiawal']; $keluar = $vault['keluar']; @@ -100,70 +111,80 @@ class AutoSerahanController extends Controller DB::connection('mysql7')->beginTransaction(); try{ - $approval = ApprovalWithdrawal::on('mysql7')->where('id',$request->id)->first(); + $approval = ApprovalWithdrawal::on('mysql7')->where('id',$id)->first(); if($jenis == 'pendahuluan'){ - $totalpendahuluan = $request->amaun + $pendahuluan; + $totalpendahuluan = $amaun + $pendahuluan; $bakiakhir = $bakiawal - $keluar + $masuk + $totalpendahuluan - $serahan - $totpanjaran; - $denopendser = DenoPendSer::on('mysql7')->where('id',$approval['denopendser_id'])->first(); + $denopendser = DenoPendSer::on('mysql7')->where('no',$approval['denopendser_id_v3'])->first(); - $this->updateDenominasi($request->kodcaw,$denopendser); + $this->updateDenominasi($kodcaw,$denopendser); $gldetail = GlDetail::on($cawangan['mysql'])->create([ - 'kodcaw' => $request->kodcaw, + 'kodcaw' => $kodcaw, 'tarikh' => $current->toDateString(), - 'dtacct' => $request->dtacct, - 'ktacct' => $request->ktacct, - 'descpt' => $request->keterangan, - 'pendahuluan' => $request->amaun, - 'teller' => $request->teller . ' (AUTO V3)', + 'dtacct' => '1000/010', + 'ktacct' => '7000/102', + 'descpt' => 'Auto Pendahuluan Daripada V2', + 'pendahuluan' => $amaun, + 'teller' => $teller . ' (AUTO V2)', 'date_created' => $current ]); + DenoPendSer::on('mysql7')->where('no',$approval['denopendser_id_v3'])->update(array( + 'recno' => $gldetail->id, + 'update' => 1 + )); + Vault::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()],['kodcaw','=', $kodcaw]])->update(array( 'pendahuluan' => $totalpendahuluan, 'bakiakhir' => $bakiakhir, 'bakieod' => $bakiakhir )); - ApprovalWithdrawal::on('mysql7')->where('id',$request->id)->update(array( + ApprovalWithdrawal::on('mysql7')->where('id',$id)->update(array( 'updated_pendahuluan_v3' => 1, - 'gldetail_id' => $gldetail->id + 'gldetail_id_v3' => $gldetail->id )); }else if($jenis == 'serahan'){ - $totalserahan = $request->amaun + $serahan; + $totalserahan = $amaun + $serahan; $bakiakhir = $bakiawal - $keluar + $masuk + $pendahuluan - $totalserahan - $totpanjaran; - $denopendser = DenoPendSer::on('mysql7')->where('id',$approval['denopendser_id'])->first(); + $denopendser = DenoPendSer::on('mysql7')->where('no',$approval['denopendser_id_v2'])->first(); - $this->updateDenominasi($request->kodcaw,$denopendser); + $this->updateDenominasi($kodcaw,$denopendser); $gldetail = GlDetail::on($cawangan['mysql'])->create([ - 'kodcaw' => $request->kodcaw, + 'kodcaw' => $kodcaw, 'tarikh' => $current->toDateString(), - 'dtacct' => $request->dtacct, - 'ktacct' => $request->ktacct, - 'descpt' => $request->keterangan, - 'serahan' => $request->amaun, - 'teller' => $request->teller . ' (AUTO V3)', + 'dtacct' => '1000/010', + 'ktacct' => '1000/020', + 'descpt' => 'Auto Serahan Kepada V3', + 'serahan' => $amaun, + 'teller' => $teller . ' (AUTO V3)', 'date_created' => $current ]); + DenoPendSer::on('mysql7')->where('no',$approval['denopendser_id_v2'])->update(array( + 'recno' => $gldetail->id, + 'update' => 1 + )); + Vault::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()],['kodcaw','=', $kodcaw]])->update(array( 'serahan' => $totalserahan, 'bakiakhir' => $bakiakhir, 'bakieod' => $bakiakhir )); - ApprovalWithdrawal::on('mysql7')->where('id',$request->id)->update(array( + ApprovalWithdrawal::on('mysql7')->where('id',$id)->update(array( 'updated_serahan_v2' => 1, - 'gldetail_id' => $gldetail->id + 'gldetail_id_v2' => $gldetail->id )); } @@ -193,11 +214,11 @@ class AutoSerahanController extends Controller $approval->approval_timestamp = $current; $approval->save(); - $updated_serahan = $this->autoSerahanEngine('serahan',$request); - $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$request); + $updated_serahan = $this->autoSerahanEngine('serahan',$request->kodcaw,$request->teller,$request->amaun,$request->id); + $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$request->kodcaw,$request->teller,$request->amaun,$request->id); DB::connection('mysql7')->commit(); - return response()->json('success',200); + return response()->json(['status' => 'success'],200); }else{ $approval->operasi_name = $request->operasi_name; $approval->approval_status = 'REJECTED'; @@ -205,19 +226,19 @@ class AutoSerahanController extends Controller $approval->save(); DB::connection('mysql7')->commit(); - return response()->json('rejected',200); + return response()->json(['status' => 'success'],200); } }catch(\Exception $e){ DB::connection('mysql7')->rollBack(); - return response()->json($e->getMessage()); + return response()->json(['status' => 'error','message' =>$e->getMessage(), 'line' => $e->getLine()]); } } private function updateDenominasi($kodcaw,$denopendser){ $current = Carbon::now(); $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); - + Log::debug($denopendser); $k1 = $denopendser['k1']; $txtring1 = $denopendser['k1'] * 1; $k5 = $denopendser['k5']; @@ -256,30 +277,28 @@ class AutoSerahanController extends Controller 'b50'=> 0, 'bd100'=> 0, 'b100'=> 0, - 'txtring1'=> $request->txtring1, + 'txtring1'=> $txtring1, 'k1'=> $k1, - 'txtring5'=> $request->txtring5, + 'txtring5'=> $txtring5, 'k5'=> $k5, - 'txtsen1'=> $request->txtsen1, + 'txtsen1'=> $txtsen1, 'k01'=> $k01, - 'txtsen5'=> $request->txtsen5, + 'txtsen5'=> $txtsen5, 'k05'=> $k05, - 'txtsen10'=> $request->txtsen10, + 'txtsen10'=> $txtsen10, 'k010'=> $k010, - 'txtsen20'=> $request->txtsen20, + 'txtsen20'=> $txtsen20, 'k020'=> $k020, - 'txtsen50'=> $request->txtsen50, + 'txtsen50'=> $txtsen50, 'k050'=> $k050, - 'txtring10'=> $request->txtring10, + 'txtring10'=> $txtring10, 'k10'=> $k10, - 'txtring20'=> $request->txtring20, + 'txtring20'=> $txtring20, 'k20'=> $k20, - 'txtring50'=> $request->txtring50, + 'txtring50'=> $txtring50, 'k50'=> $k50, - 'txtring100'=> $request->txtring100, + 'txtring100'=> $txtring100, 'k100'=> $k100, - 'txtring1000'=> $request->txtring1000, - 'k1000'=> $request->k1000, 'jumlahbundle'=> 0, 'txtjumlah'=> $totalkeping, 'jumlahkeping' => $totalkeping diff --git a/database/migrations/2025_02_23_154307_create_approval_withdrawal.php b/database/migrations/2025_02_23_154307_create_approval_withdrawal.php index aa63b02..879f4ab 100644 --- a/database/migrations/2025_02_23_154307_create_approval_withdrawal.php +++ b/database/migrations/2025_02_23_154307_create_approval_withdrawal.php @@ -20,11 +20,13 @@ class CreateApprovalWithdrawal extends Migration $table->string('operasi_name', 100)->nullable(); $table->decimal('amount', 10, 2)->default(0); $table->string('approval_status',20); + $table->timestamp('approval_timestamp')->nullable(); + $table->integer('gldetail_id_v3')->nullable()->default(0); + $table->integer('denopendser_id_v3')->nullable()->default(0); + $table->integer('gldetail_id_v2')->nullable()->default(0); + $table->integer('denopendser_id_v2')->nullable()->default(0); $table->boolean('updated_serahan_v2')->default(false); $table->boolean('updated_pendahuluan_v3')->default(false); - $table->timestamp('approval_timestamp')->nullable(); - $table->integer('gldetail_id'); - $table->integer('denopendser_id'); $table->timestamps(); }); } From eef577f78543b0bd272febb0ab75298e95b02cde Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Wed, 5 Mar 2025 12:21:20 +0800 Subject: [PATCH 023/117] added autoserahan split for pendahuluan and serahan --- .../Controllers/AutoSerahanController.php | 19 ++++++++++++++----- routes/web.php | 2 ++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index f32b5e8..fc58b75 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -214,11 +214,8 @@ class AutoSerahanController extends Controller $approval->approval_timestamp = $current; $approval->save(); - $updated_serahan = $this->autoSerahanEngine('serahan',$request->kodcaw,$request->teller,$request->amaun,$request->id); - $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$request->kodcaw,$request->teller,$request->amaun,$request->id); - DB::connection('mysql7')->commit(); - return response()->json(['status' => 'success'],200); + return response()->json(['status' => 'success','approve_status' => 'approved'],200); }else{ $approval->operasi_name = $request->operasi_name; $approval->approval_status = 'REJECTED'; @@ -226,7 +223,7 @@ class AutoSerahanController extends Controller $approval->save(); DB::connection('mysql7')->commit(); - return response()->json(['status' => 'success'],200); + return response()->json(['status' => 'success','approve_status' => 'rejected'],200); } }catch(\Exception $e){ @@ -304,4 +301,16 @@ class AutoSerahanController extends Controller 'jumlahkeping' => $totalkeping )); } + + public function pendahuluanAutoSerahan(Request $request){ + + $updated_serahan = $this->autoSerahanEngine('serahan',$request->kodcaw,$request->teller,$request->amaun,$request->id); + + return response()->json(['status' => 'success'],200); + } + + public function serahanAutoSerahan(Request $request){ + + $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$request->kodcaw,$request->teller,$request->amaun,$request->id); + } } \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 3a59931..6aa19cb 100644 --- a/routes/web.php +++ b/routes/web.php @@ -682,6 +682,8 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->get('autoserahan/list',['uses'=>'AutoSerahanController@getAutoSerahan']); $router->put('autoserahan/approve',['uses'=>'AutoSerahanController@autoSerahanApproval']); $router->post('autoserahan/create',['uses'=>'AutoSerahanController@createAutoSerahan']); + $router->put('autoserahan/pendahuluan'.['uses'=>'AutoSerahanController@pendahuluanAutoSerahan']); + $router->put('autoserahan/serahan',['uses'=>'AutoSerahanController@serahanAutoSerahan']); }); From 7ae2db7e9882b3685efea1fc500515cdade186c8 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Wed, 5 Mar 2025 12:27:15 +0800 Subject: [PATCH 024/117] change . to , --- routes/web.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/web.php b/routes/web.php index 6aa19cb..90a083f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -682,7 +682,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->get('autoserahan/list',['uses'=>'AutoSerahanController@getAutoSerahan']); $router->put('autoserahan/approve',['uses'=>'AutoSerahanController@autoSerahanApproval']); $router->post('autoserahan/create',['uses'=>'AutoSerahanController@createAutoSerahan']); - $router->put('autoserahan/pendahuluan'.['uses'=>'AutoSerahanController@pendahuluanAutoSerahan']); + $router->put('autoserahan/pendahuluan',['uses'=>'AutoSerahanController@pendahuluanAutoSerahan']); $router->put('autoserahan/serahan',['uses'=>'AutoSerahanController@serahanAutoSerahan']); }); From 36ad6c68af134431dde219eaf184d114138e7076 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Thu, 6 Mar 2025 00:52:04 +0800 Subject: [PATCH 025/117] added isset request->id --- app/Http/Controllers/AutoSerahanController.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index fc58b75..27c4d33 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -81,6 +81,10 @@ class AutoSerahanController extends Controller DB::connection('mysql7')->commit(); return response()->json(['status' => 'success','id' => $approval->id]); }else{ + if(!isset($request->id)){ + return response()->json(['status' => 'failed','message' => 'ID is required']); + } + Log::debug($request->id); ApprovalWithdrawal::on('mysql7')->where('id', $request->id)->update([ 'denopendser_id_v2' => $deno_pendser->id, ]); From 7b7d675c9d517b752af211d2b4c783428b0e47f2 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Thu, 6 Mar 2025 01:23:10 +0800 Subject: [PATCH 026/117] added set approval withdrawal v3 api --- .../Controllers/AutoSerahanController.php | 31 ++++++++++++++----- routes/web.php | 2 +- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index 27c4d33..14739c3 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -85,11 +85,8 @@ class AutoSerahanController extends Controller return response()->json(['status' => 'failed','message' => 'ID is required']); } Log::debug($request->id); - ApprovalWithdrawal::on('mysql7')->where('id', $request->id)->update([ - 'denopendser_id_v2' => $deno_pendser->id, - ]); DB::connection('mysql7')->commit(); - return response()->json(['status' => 'success']); + return response()->json(['status' => 'success','denoid' => $deno_pendser->id]); } }catch(\Exception $e){ @@ -186,10 +183,10 @@ class AutoSerahanController extends Controller 'bakieod' => $bakiakhir )); - ApprovalWithdrawal::on('mysql7')->where('id',$id)->update(array( - 'updated_serahan_v2' => 1, - 'gldetail_id_v2' => $gldetail->id - )); + // ApprovalWithdrawal::on('mysql7')->where('id',$id)->update(array( + // 'updated_serahan_v2' => 1, + // 'gldetail_id_v2' => $gldetail->id + // )); } @@ -317,4 +314,22 @@ class AutoSerahanController extends Controller $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$request->kodcaw,$request->teller,$request->amaun,$request->id); } + + public function SetApprovalWithdrawal(Request $request){ + + if($request->jenis == 'create'){ + ApprovalWithdrawal::on('mysql7')->where('id', $request->id)->update([ + 'denopendser_id_v2' => $request->deno_id, + ]); + + return response()->json(['status' => 'success'],200); + }else{ + ApprovalWithdrawal::on('mysql7')->where('id', $request->id)->update([ + 'updated_serahan_v2' => 1, + 'gldetail_id_v2' => $request->gldetail_id + ]); + return response()->json(['status' => 'success'],200); + } + + } } \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 90a083f..1d4417e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -684,7 +684,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->post('autoserahan/create',['uses'=>'AutoSerahanController@createAutoSerahan']); $router->put('autoserahan/pendahuluan',['uses'=>'AutoSerahanController@pendahuluanAutoSerahan']); $router->put('autoserahan/serahan',['uses'=>'AutoSerahanController@serahanAutoSerahan']); - + $router->put('autoserahan/autoserahan/setapproval',['uses'=>'AutoSerahanController@serahanLejerAutoSerahan']); }); $router->group(['prefix'=>'e-arrahn'], function () use ($router){ From 8012a9fefc3ede2b5c16d3f0de28e445c5f96d01 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Thu, 6 Mar 2025 01:27:51 +0800 Subject: [PATCH 027/117] mistype routes --- routes/web.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/web.php b/routes/web.php index 1d4417e..6ec6de7 100644 --- a/routes/web.php +++ b/routes/web.php @@ -684,7 +684,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->post('autoserahan/create',['uses'=>'AutoSerahanController@createAutoSerahan']); $router->put('autoserahan/pendahuluan',['uses'=>'AutoSerahanController@pendahuluanAutoSerahan']); $router->put('autoserahan/serahan',['uses'=>'AutoSerahanController@serahanAutoSerahan']); - $router->put('autoserahan/autoserahan/setapproval',['uses'=>'AutoSerahanController@serahanLejerAutoSerahan']); + $router->put('autoserahan/setapproval',['uses'=>'AutoSerahanController@serahanLejerAutoSerahan']); }); $router->group(['prefix'=>'e-arrahn'], function () use ($router){ From b6a10390e4b8a0e1406698f3684baa380ea489dc Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Thu, 6 Mar 2025 01:29:29 +0800 Subject: [PATCH 028/117] mistype controller --- routes/web.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/web.php b/routes/web.php index 6ec6de7..331f254 100644 --- a/routes/web.php +++ b/routes/web.php @@ -684,7 +684,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->post('autoserahan/create',['uses'=>'AutoSerahanController@createAutoSerahan']); $router->put('autoserahan/pendahuluan',['uses'=>'AutoSerahanController@pendahuluanAutoSerahan']); $router->put('autoserahan/serahan',['uses'=>'AutoSerahanController@serahanAutoSerahan']); - $router->put('autoserahan/setapproval',['uses'=>'AutoSerahanController@serahanLejerAutoSerahan']); + $router->put('autoserahan/setapproval',['uses'=>'AutoSerahanController@SetApprovalWithdrawal']); }); $router->group(['prefix'=>'e-arrahn'], function () use ($router){ From dec31d5f6533d2fd72cf2e3402b84baf20ff69ba Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Thu, 6 Mar 2025 01:33:05 +0800 Subject: [PATCH 029/117] added return response gldetail_id --- app/Http/Controllers/AutoSerahanController.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index 14739c3..2be7602 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -150,6 +150,8 @@ class AutoSerahanController extends Controller 'updated_pendahuluan_v3' => 1, 'gldetail_id_v3' => $gldetail->id )); + + return response()->json(['status' => 'success','gldetail_id' => $gldetail->id],200); }else if($jenis == 'serahan'){ @@ -187,6 +189,8 @@ class AutoSerahanController extends Controller // 'updated_serahan_v2' => 1, // 'gldetail_id_v2' => $gldetail->id // )); + + return response()->json(['status' => 'success','gldetail_id' => $gldetail->id],200); } From e9d5805a2601495dead4ba9bd50fbcb8d41ac3ca Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Thu, 6 Mar 2025 01:36:51 +0800 Subject: [PATCH 030/117] added gldetail return response --- app/Http/Controllers/AutoSerahanController.php | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index 2be7602..af56d63 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -150,8 +150,6 @@ class AutoSerahanController extends Controller 'updated_pendahuluan_v3' => 1, 'gldetail_id_v3' => $gldetail->id )); - - return response()->json(['status' => 'success','gldetail_id' => $gldetail->id],200); }else if($jenis == 'serahan'){ @@ -190,13 +188,12 @@ class AutoSerahanController extends Controller // 'gldetail_id_v2' => $gldetail->id // )); - return response()->json(['status' => 'success','gldetail_id' => $gldetail->id],200); - } // Commit transactions DB::connection($cawangan['mysql'])->commit(); DB::connection('mysql7')->commit(); + return ['status' => 'success','gldetail_id' => $gldetail->id]; }catch(\Exception $e){ DB::connection($cawangan['mysql'])->rollBack(); @@ -311,13 +308,15 @@ class AutoSerahanController extends Controller $updated_serahan = $this->autoSerahanEngine('serahan',$request->kodcaw,$request->teller,$request->amaun,$request->id); - return response()->json(['status' => 'success'],200); + return response()->json(['status' => 'success','gldetail_id' => $updated_serahan['gldetail_id']],200); } public function serahanAutoSerahan(Request $request){ $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$request->kodcaw,$request->teller,$request->amaun,$request->id); - } + + return response()->json(['status' => 'success','gldetail_id' => $updated_pendahuluan['gldetail_id']],200); + } public function SetApprovalWithdrawal(Request $request){ From d5eda71fb2bf09966695c8fa6ce8103579edf45f Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Thu, 6 Mar 2025 01:57:44 +0800 Subject: [PATCH 031/117] added denopendser in arosv2 --- app/Http/Controllers/AutoSerahanController.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index af56d63..5567cf5 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -95,7 +95,7 @@ class AutoSerahanController extends Controller } } - private function autoSerahanEngine($jenis, $kodcaw,$teller,$amaun,$id){ + private function autoSerahanEngine($jenis, $kodcaw,$teller,$amaun,$id,$denopendser_id = 0){ $current = Carbon::now(); $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); $vault = Vault::on($cawangan['mysql'])->where('kodcaw','=',$kodcaw)->where('tarikh','=',$current->toDateString())->orderby('tarikh','desc')->first(); @@ -157,7 +157,7 @@ class AutoSerahanController extends Controller $bakiakhir = $bakiawal - $keluar + $masuk + $pendahuluan - $totalserahan - $totpanjaran; - $denopendser = DenoPendSer::on('mysql7')->where('no',$approval['denopendser_id_v2'])->first(); + $denopendser = DenoPendSer::on('mysql7')->where('no',$denopendser_id)->first(); $this->updateDenominasi($kodcaw,$denopendser); @@ -306,14 +306,14 @@ class AutoSerahanController extends Controller public function pendahuluanAutoSerahan(Request $request){ - $updated_serahan = $this->autoSerahanEngine('serahan',$request->kodcaw,$request->teller,$request->amaun,$request->id); + $updated_serahan = $this->autoSerahanEngine('pendahuluan',$request->kodcaw,$request->teller,$request->amaun,$request->id); return response()->json(['status' => 'success','gldetail_id' => $updated_serahan['gldetail_id']],200); } public function serahanAutoSerahan(Request $request){ - $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$request->kodcaw,$request->teller,$request->amaun,$request->id); + $updated_pendahuluan = $this->autoSerahanEngine('serahan',$request->kodcaw,$request->teller,$request->amaun,$request->id,$request->denopendser_id); return response()->json(['status' => 'success','gldetail_id' => $updated_pendahuluan['gldetail_id']],200); } From c832adee650e8f0a5eba3974f8ed68652e8a7d1e Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Thu, 6 Mar 2025 02:03:23 +0800 Subject: [PATCH 032/117] added get autoserahanapproval --- app/Http/Controllers/AutoSerahanController.php | 17 ++++++++++++----- routes/web.php | 1 + 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index 5567cf5..2f5d5b1 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -95,7 +95,7 @@ class AutoSerahanController extends Controller } } - private function autoSerahanEngine($jenis, $kodcaw,$teller,$amaun,$id,$denopendser_id = 0){ + private function autoSerahanEngine($jenis, $kodcaw,$teller,$amaun,$id){ $current = Carbon::now(); $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); $vault = Vault::on($cawangan['mysql'])->where('kodcaw','=',$kodcaw)->where('tarikh','=',$current->toDateString())->orderby('tarikh','desc')->first(); @@ -113,7 +113,9 @@ class AutoSerahanController extends Controller try{ $approval = ApprovalWithdrawal::on('mysql7')->where('id',$id)->first(); - + Log::info('approval'); + Log::debug($id); + Log::debug($approval); if($jenis == 'pendahuluan'){ $totalpendahuluan = $amaun + $pendahuluan; @@ -157,7 +159,7 @@ class AutoSerahanController extends Controller $bakiakhir = $bakiawal - $keluar + $masuk + $pendahuluan - $totalserahan - $totpanjaran; - $denopendser = DenoPendSer::on('mysql7')->where('no',$denopendser_id)->first(); + $denopendser = DenoPendSer::on('mysql7')->where('no',$approval['denopendser_id_v2'])->first(); $this->updateDenominasi($kodcaw,$denopendser); @@ -306,14 +308,14 @@ class AutoSerahanController extends Controller public function pendahuluanAutoSerahan(Request $request){ - $updated_serahan = $this->autoSerahanEngine('pendahuluan',$request->kodcaw,$request->teller,$request->amaun,$request->id); + $updated_serahan = $this->autoSerahanEngine('serahan',$request->kodcaw,$request->teller,$request->amaun,$request->id); return response()->json(['status' => 'success','gldetail_id' => $updated_serahan['gldetail_id']],200); } public function serahanAutoSerahan(Request $request){ - $updated_pendahuluan = $this->autoSerahanEngine('serahan',$request->kodcaw,$request->teller,$request->amaun,$request->id,$request->denopendser_id); + $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$request->kodcaw,$request->teller,$request->amaun,$request->id); return response()->json(['status' => 'success','gldetail_id' => $updated_pendahuluan['gldetail_id']],200); } @@ -335,4 +337,9 @@ class AutoSerahanController extends Controller } } + + public function getAutoSerahanApproval(Request $request){ + $query = ApprovalWithdrawal::on('mysql7')->where('kodcaw',$request->kodcaw)->where('id',$request->id)->first(); + return response()->json($query,200); + } } \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 331f254..9792c26 100644 --- a/routes/web.php +++ b/routes/web.php @@ -685,6 +685,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->put('autoserahan/pendahuluan',['uses'=>'AutoSerahanController@pendahuluanAutoSerahan']); $router->put('autoserahan/serahan',['uses'=>'AutoSerahanController@serahanAutoSerahan']); $router->put('autoserahan/setapproval',['uses'=>'AutoSerahanController@SetApprovalWithdrawal']); + $router->get('autoserahan/get',['uses'=>'AutoSerahanController@getAutoSerahanApproval']); }); $router->group(['prefix'=>'e-arrahn'], function () use ($router){ From e7d81b7f36853a47b4fa8fa1739d8bf2629d126d Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Thu, 6 Mar 2025 02:08:28 +0800 Subject: [PATCH 033/117] interchange --- app/Http/Controllers/AutoSerahanController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index 2f5d5b1..3ba9b9a 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -306,14 +306,14 @@ class AutoSerahanController extends Controller )); } - public function pendahuluanAutoSerahan(Request $request){ + public function serahanAutoSerahan(Request $request){ $updated_serahan = $this->autoSerahanEngine('serahan',$request->kodcaw,$request->teller,$request->amaun,$request->id); return response()->json(['status' => 'success','gldetail_id' => $updated_serahan['gldetail_id']],200); } - public function serahanAutoSerahan(Request $request){ + public function pendahuluanAutoSerahan(Request $request){ $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$request->kodcaw,$request->teller,$request->amaun,$request->id); From 907abdc53726f10e3b88db80e4ce2b5483b237b8 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Sat, 8 Mar 2025 18:49:57 +0800 Subject: [PATCH 034/117] added denopendser in function --- .../Controllers/AutoSerahanController.php | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index 3ba9b9a..697e258 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -95,7 +95,7 @@ class AutoSerahanController extends Controller } } - private function autoSerahanEngine($jenis, $kodcaw,$teller,$amaun,$id){ + private function autoSerahanEngine($jenis, $kodcaw,$teller,$amaun,$id,$denopendser_id){ $current = Carbon::now(); $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); $vault = Vault::on($cawangan['mysql'])->where('kodcaw','=',$kodcaw)->where('tarikh','=',$current->toDateString())->orderby('tarikh','desc')->first(); @@ -113,11 +113,12 @@ class AutoSerahanController extends Controller try{ $approval = ApprovalWithdrawal::on('mysql7')->where('id',$id)->first(); - Log::info('approval'); - Log::debug($id); - Log::debug($approval); + + if($jenis == 'pendahuluan'){ + $pendserid = empty($approval) ? $denopendser_id : $approval['denopendser_id_v3']; + $totalpendahuluan = $amaun + $pendahuluan; $bakiakhir = $bakiawal - $keluar + $masuk + $totalpendahuluan - $serahan - $totpanjaran; @@ -137,7 +138,7 @@ class AutoSerahanController extends Controller 'date_created' => $current ]); - DenoPendSer::on('mysql7')->where('no',$approval['denopendser_id_v3'])->update(array( + DenoPendSer::on('mysql7')->where('no',$pendserid)->update(array( 'recno' => $gldetail->id, 'update' => 1 )); @@ -155,11 +156,13 @@ class AutoSerahanController extends Controller }else if($jenis == 'serahan'){ + $pendserid = empty($approval) ? $denopendser_id : $approval['denopendser_id_v2']; + $totalserahan = $amaun + $serahan; $bakiakhir = $bakiawal - $keluar + $masuk + $pendahuluan - $totalserahan - $totpanjaran; - $denopendser = DenoPendSer::on('mysql7')->where('no',$approval['denopendser_id_v2'])->first(); + $denopendser = DenoPendSer::on('mysql7')->where('no',$pendserid)->first(); $this->updateDenominasi($kodcaw,$denopendser); @@ -308,14 +311,14 @@ class AutoSerahanController extends Controller public function serahanAutoSerahan(Request $request){ - $updated_serahan = $this->autoSerahanEngine('serahan',$request->kodcaw,$request->teller,$request->amaun,$request->id); + $updated_serahan = $this->autoSerahanEngine('serahan',$request->kodcaw,$request->teller,$request->amaun,$request->id,$request->denopendser_id); return response()->json(['status' => 'success','gldetail_id' => $updated_serahan['gldetail_id']],200); } public function pendahuluanAutoSerahan(Request $request){ - $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$request->kodcaw,$request->teller,$request->amaun,$request->id); + $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$request->kodcaw,$request->teller,$request->amaun,$request->id,$request->denopendser_id); return response()->json(['status' => 'success','gldetail_id' => $updated_pendahuluan['gldetail_id']],200); } From 79b20c327dc102ba3a684d9ed61c775f472f932e Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Sat, 8 Mar 2025 18:52:26 +0800 Subject: [PATCH 035/117] tertinggal denopendser no --- app/Http/Controllers/AutoSerahanController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index 697e258..e3d562a 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -177,7 +177,7 @@ class AutoSerahanController extends Controller 'date_created' => $current ]); - DenoPendSer::on('mysql7')->where('no',$approval['denopendser_id_v2'])->update(array( + DenoPendSer::on('mysql7')->where('no',$pendserid)->update(array( 'recno' => $gldetail->id, 'update' => 1 )); From e57d9f8f48da5b31c5a4713809defd3136b0564b Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Sat, 8 Mar 2025 23:34:14 +0800 Subject: [PATCH 036/117] added check if vault and denominasi empty --- .../Controllers/AutoSerahanController.php | 180 ++++++++++++++++++ 1 file changed, 180 insertions(+) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index e3d562a..3c0853c 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -311,6 +311,9 @@ class AutoSerahanController extends Controller public function serahanAutoSerahan(Request $request){ + $this->checkVault($request->kodcaw); + $this->checkDenominasi($request->kodcaw); + $updated_serahan = $this->autoSerahanEngine('serahan',$request->kodcaw,$request->teller,$request->amaun,$request->id,$request->denopendser_id); return response()->json(['status' => 'success','gldetail_id' => $updated_serahan['gldetail_id']],200); @@ -318,6 +321,9 @@ class AutoSerahanController extends Controller public function pendahuluanAutoSerahan(Request $request){ + $this->checkVault($request->kodcaw); + $this->checkDenominasi($request->kodcaw); + $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$request->kodcaw,$request->teller,$request->amaun,$request->id,$request->denopendser_id); return response()->json(['status' => 'success','gldetail_id' => $updated_pendahuluan['gldetail_id']],200); @@ -345,4 +351,178 @@ class AutoSerahanController extends Controller $query = ApprovalWithdrawal::on('mysql7')->where('kodcaw',$request->kodcaw)->where('id',$request->id)->first(); return response()->json($query,200); } + + private function checkVault($kodcaw){ + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); + + /* Check Tarikh Harini */ + $available_vault = Vault::on($cawangan['mysql'])->where('tarikh',Carbon::now()->toDateString())->first(); + + if($available_vault){ + return $available_vault; + }else{ + $last_vault = Vault::on($cawangan['mysql'])->where('kodcaw',$kodcaw)->orderby('tarikh','desc')->first(); + if(!$last_vault){ + $vaultcreate = Vault::on($cawangan['mysql'])->create([ + 'kodcaw'=>$kodcaw, + 'tarikh'=> Carbon::now()->toDateString(), + 'bakiawal' => 0, + 'keluar' => 0, + 'masuk' => 0, + 'bakiakhir' => 0, + 'bakieod' => 0, + 'pendahuluan' => 0, + 'serahan' => 0, + '1sen' => 0, + '5sen' => 0, + '10sen' => 0, + '20sen' => 0, + '50sen' => 0, + 'rm1' => 0, + 'rm2' => 0, + 'rm5' => 0, + 'rm10' => 0, + 'rm50' => 0, + 'rm100' => 0, + 'rm1000' => 0, + 'totpanjar' => 0 + ]); + + return $vaultcreate; + } + + $new_vault = Vault::on($cawangan['mysql'])->create([ + 'kodcaw'=>$kodcaw, + 'tarikh'=> Carbon::now()->toDateString(), + 'bakiawal' => $last_vault['bakiakhir'], + 'keluar' => 0, + 'masuk' => 0, + 'bakiakhir' => $last_vault['bakiakhir'], + 'bakieod' => $last_vault['bakiakhir'], + 'pendahuluan' => 0, + 'serahan' => 0, + '1sen' => $last_vault['1sen'], + '5sen' => $last_vault['5sen'], + '10sen' => $last_vault['10sen'], + '20sen' => $last_vault['20sen'], + '50sen' => $last_vault['50sen'], + 'rm1' => $last_vault['rm1'], + 'rm2' => $last_vault['rm2'], + 'rm5' => $last_vault['rm5'], + 'rm10' => $last_vault['rm10'], + 'rm50' => $last_vault['rm50'], + 'rm100' => $last_vault['rm100'], + 'rm1000' => $last_vault['rm1000'], + 'totpanjar' => 0 + ]); + return $new_vault; + } + } + + private function checkDenominasi($kodcaw){ + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); + $current = Carbon::now(); + $denominasi = Denominasi::on($cawangan['mysql'])->where('tarikh',$current->toDateString())->first(); + if($denominasi){ + return $denominasi; + }else{ + $last_denominasi = Denominasi::on($cawangan['mysql'])->orderby('tarikh','desc')->first(); + if(!$last_denominasi){ + $savedeno = Denominasi::on($cawangan['mysql'])->create([ + + 'tarikh' => $current->toDateString(), + 'bd1' => 0, + 'b1' => 0, + 'bd5' => 0, + 'b5' => 0, + 'bd10' => 0, + 'b10' => 0, + 'bd20' => 0, + 'b20' => 0, + 'bd50' => 0, + 'b50' => 0, + 'bd100' => 0, + 'b100' => 0, + 'txtring1' => 0, + 'k1' => 0, + 'txtring5' => 0, + 'k5' => 0, + 'txtsen1' => 0, + 'k01' => 0, + 'txtsen5' => 0, + 'k05' => 0, + 'txtsen10' => 0, + 'k010' => 0, + 'txtsen20' => 0, + 'k020' => 0, + 'txtsen50' => 0, + 'k050' => 0, + 'txtring10' => 0, + 'k10' => 0, + 'txtring20' => 0, + 'k20' => 0, + 'txtring50' => 0, + 'k50' => 0, + 'txtring100' => 0, + 'k100' => 0, + 'txtring1000' => 0, + 'k1000' => 0, + 'jumlahbundle' => 0, + 'txtjumlah' => 0, + 'lebihan' => 0, + 'nota' => 0, + 'jumlahkeping' => 0 + ]); + } + + $savedeno = Denominasi::on($cawangan['mysql'])->create([ + + 'tarikh' => $current->toDateString(), + 'bd1' => $last_denominasi['bd1'], + 'b1' => $last_denominasi['b1'], + 'bd5' => $last_denominasi['bd5'], + 'b5' => $last_denominasi['b5'], + 'bd10' => $last_denominasi['bd10'], + 'b10' => $last_denominasi['b10'], + 'bd20' => $last_denominasi['bd20'], + 'b20' => $last_denominasi['b20'], + 'bd50' => $last_denominasi['bd50'], + 'b50' => $last_denominasi['b50'], + 'bd100' => $last_denominasi['bd100'], + 'b100' => $last_denominasi['b100'], + 'txtring1' => $last_denominasi['txtring1'], + 'k1' => $last_denominasi['k1'], + 'txtring5' => $last_denominasi['txtring5'], + 'k5' => $last_denominasi['k5'], + 'txtsen1' => $last_denominasi['txtsen1'], + 'k01' => $last_denominasi['k01'], + 'txtsen5' => $last_denominasi['txtsen5'], + 'k05' => $last_denominasi['k05'], + 'txtsen10' => $last_denominasi['txtsen10'], + 'k010' => $last_denominasi['k010'], + 'txtsen20' => $last_denominasi['txtsen20'], + 'k020' => $last_denominasi['k020'], + 'txtsen50' => $last_denominasi['txtsen50'], + 'k050' => $last_denominasi['k050'], + 'txtring10' => $last_denominasi['txtring10'], + 'k10' => $last_denominasi['k10'], + 'txtring20' => $last_denominasi['txtring20'], + 'k20' => $last_denominasi['k20'], + 'txtring50' => $last_denominasi['txtring50'], + 'k50' => $last_denominasi['k50'], + 'txtring100' => $last_denominasi['txtring100'], + 'k100' => $last_denominasi['k100'], + 'txtring1000' => $last_denominasi['txtring1000'], + 'k1000' => $last_denominasi['k1000'], + 'jumlahbundle' => $last_denominasi['jumlahbundle'], + 'txtjumlah' => $last_denominasi['txtjumlah'], + 'lebihan' => $last_denominasi['lebihan'], + 'nota' => $last_denominasi['nota'], + 'jumlahkeping' => $last_denominasi['jumlahkeping'] + ]); + + return $savedeno; + + } + } } \ No newline at end of file From a8466854ac8829e4fd3f55700cc6d3fb6311cc56 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Sun, 9 Mar 2025 00:22:03 +0800 Subject: [PATCH 037/117] updated serahan and pendahuluan denominasi --- .../Controllers/AutoSerahanController.php | 79 +++++++++++++------ 1 file changed, 53 insertions(+), 26 deletions(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index 3c0853c..f913927 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -125,7 +125,7 @@ class AutoSerahanController extends Controller $denopendser = DenoPendSer::on('mysql7')->where('no',$approval['denopendser_id_v3'])->first(); - $this->updateDenominasi($kodcaw,$denopendser); + $this->updateDenominasi($kodcaw,$denopendser,$jenis); $gldetail = GlDetail::on($cawangan['mysql'])->create([ 'kodcaw' => $kodcaw, @@ -164,7 +164,7 @@ class AutoSerahanController extends Controller $denopendser = DenoPendSer::on('mysql7')->where('no',$pendserid)->first(); - $this->updateDenominasi($kodcaw,$denopendser); + $this->updateDenominasi($kodcaw,$denopendser,$jenis); $gldetail = GlDetail::on($cawangan['mysql'])->create([ 'kodcaw' => $kodcaw, @@ -239,32 +239,59 @@ class AutoSerahanController extends Controller } } - private function updateDenominasi($kodcaw,$denopendser){ + private function updateDenominasi($kodcaw,$denopendser,$jenis){ $current = Carbon::now(); $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); - Log::debug($denopendser); - $k1 = $denopendser['k1']; - $txtring1 = $denopendser['k1'] * 1; - $k5 = $denopendser['k5']; - $txtring5 = $denopendser['k5'] * 5; - $k01 = $denopendser['k01']; - $txtsen1 = $denopendser['k01'] * 0.01; - $k05 = $denopendser['k05']; - $txtsen5 = $denopendser['k05'] * 0.05; - $k010 = $denopendser['k010']; - $txtsen10 = $denopendser['k010'] * 0.10; - $k020 = $denopendser['k020']; - $txtsen20 = $denopendser['k020'] * 0.20; - $k050 = $denopendser['k050']; - $txtsen50 = $denopendser['k050'] * 0.50; - $k10 = $denopendser['k10']; - $txtring10 = $denopendser['k10'] * 10; - $k20 = $denopendser['k20']; - $txtring20 = $denopendser['k20'] * 20; - $k50 = $denopendser['k50']; - $txtring50 = $denopendser['k50'] * 50; - $k100 = $denopendser['k100']; - $txtring100 = $denopendser['k100'] * 100; + + $current_denominasi = $this->checkDenominasi($kodcaw); + + if($jenis == 'pendahuluan'){ + $k1 = ($denopendser['txtring1'] * 1) + $current_denominasi['k1']; + $txtring1 = $denopendser['txtring1'] + $current_denominasi['txtring1']; + $k5 = ($denopendser['txtring5'] * 5) + $current_denominasi['k5']; + $txtring5 = $denopendser['txtring5'] + $current_denominasi['txtring5']; + $k01 = ($denopendser['txtsen1'] * 0.01) + $current_denominasi['k01']; + $txtsen1 = $denopendser['txtsen1'] + $current_denominasi['txtsen1']; + $k05 = ($denopendser['txtsen5'] * 0.05) + $current_denominasi['k05']; + $txtsen5 = $denopendser['txtsen5'] + $current_denominasi['txtsen5']; + $k010 = ($denopendser['txtsen10'] * 0.10) + $current_denominasi['k010']; + $txtsen10 = $denopendser['txtsen10'] + $current_denominasi['txtsen10']; + $k020 = ($denopendser['txtsen20'] * 0.20) + $current_denominasi['k020']; + $txtsen20 = $denopendser['txtsen20'] + $current_denominasi['txtsen20']; + $k050 = ($denopendser['txtsen50'] * 0.50) + $current_denominasi['k050']; + $txtsen50 = $denopendser['txtsen50'] + $current_denominasi['txtsen50']; + $k10 = ($denopendser['txtring10'] * 10) + $current_denominasi['k10']; + $txtring10 = $denopendser['txtring10'] + $current_denominasi['txtring10']; + $k20 = ($denopendser['txtring20'] * 20) + $current_denominasi['k20']; + $txtring20 = $denopendser['txtring20'] + $current_denominasi['txtring20']; + $k50 = ($denopendser['txtring50'] * 50) + $current_denominasi['k50']; + $txtring50 = $denopendser['txtring50'] + $current_denominasi['txtring50']; + $k100 = ($denopendser['txtring100'] * 100) + $current_denominasi['k100']; + $txtring100 = $denopendser['txtring100'] + $current_denominasi['txtring100']; + }else{ + $k1 = $current_denominasi['k1'] - ($denopendser['txtring1'] * 1); + $txtring1 = $current_denominasi['txtring1'] - $denopendser['txtring1']; + $k5 = $current_denominasi['k5'] - ($denopendser['txtring5'] * 5); + $txtring5 = $current_denominasi['txtring5'] - $denopendser['txtring5']; + $k01 = $current_denominasi['k01'] - ($denopendser['txtsen1'] * 0.01); + $txtsen1 = $current_denominasi['txtsen1'] - $denopendser['txtsen1']; + $k05 = $current_denominasi['k05'] - ($denopendser['txtsen5'] * 0.05); + $txtsen5 = $current_denominasi['txtsen5'] - $denopendser['txtsen5']; + $k010 = $current_denominasi['k010'] - ($denopendser['txtsen10'] * 0.10); + $txtsen10 = $current_denominasi['txtsen10'] - $denopendser['txtsen10']; + $k020 = $current_denominasi['k020'] - ($denopendser['txtsen20'] * 0.20); + $txtsen20 = $current_denominasi['txtsen20'] - $denopendser['txtsen20']; + $k050 = $current_denominasi['k050'] - ($denopendser['txtsen50'] * 0.50); + $txtsen50 = $current_denominasi['txtsen50'] - $denopendser['txtsen50']; + $k10 = $current_denominasi['k10'] - ($denopendser['txtring10'] * 10); + $txtring10 = $current_denominasi['txtring10'] - $denopendser['txtring10']; + $k20 = $current_denominasi['k20'] - ($denopendser['txtring20'] * 20); + $txtring20 = $current_denominasi['txtring20'] - $denopendser['txtring20']; + $k50 = $current_denominasi['k50'] - ($denopendser['txtring50'] * 50); + $txtring50 = $current_denominasi['txtring50'] - $denopendser['txtring50']; + $k100 = $current_denominasi['k100'] - ($denopendser['txtring100'] * 100); + $txtring100 = $current_denominasi['txtring100'] - $denopendser['txtring100']; + } $totalkeping = $k01 + $k05 + $k010 + $k020 + $k050 + $k1 + $k5 + $k10 + $k20 + $k50 + $k100; From c2f7de5f961cb44a030305d390a1730ba472afdb Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Mon, 10 Mar 2025 01:31:21 +0800 Subject: [PATCH 038/117] added v3 pendahuluan acceptance --- .../Controllers/AutoSerahanController.php | 244 +++++++++++++++++- routes/web.php | 1 + 2 files changed, 242 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index f913927..4196af1 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -35,7 +35,7 @@ class AutoSerahanController extends Controller $deno_pendser = DenoPendSer::on('mysql7')->create([ 'tarikh' => $current->toDateString(), 'masa' => $current->toTimeString(), - 'kodcaw' => $request->kodcaw, + 'kodcaw' => ($request->version == 'v3') ? $this->interchangeCawangan($request->kodcaw,$request->version) : $request->kodcaw, 'kodlaluan' => $request->teller, 'amaun' => $request->amaun, 'bd1' => 0, @@ -63,7 +63,7 @@ class AutoSerahanController extends Controller if($request->version == 'v3'){ $approval = ApprovalWithdrawal::on('mysql7')->create([ - 'kodcaw' => $request->kodcaw, + 'kodcaw' => ($request->version == 'v3') ? $this->interchangeCawangan($request->kodcaw,$request->version) : $request->kodcaw, 'pc_name' => $request->teller, 'operasi_name' => null, 'amount' => $request->amaun, @@ -350,7 +350,7 @@ class AutoSerahanController extends Controller $this->checkVault($request->kodcaw); $this->checkDenominasi($request->kodcaw); - + $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$request->kodcaw,$request->teller,$request->amaun,$request->id,$request->denopendser_id); return response()->json(['status' => 'success','gldetail_id' => $updated_pendahuluan['gldetail_id']],200); @@ -552,4 +552,242 @@ class AutoSerahanController extends Controller } } + + public function checkProsesApproval(Request $request){ + $current = new Carbon(); + $current = Carbon::now(); + + $proses = ApprovalWithdrawal::on('mysql7') + ->where([ + ['pc_name','=',$request->pc_name], + ['approval_status','=','PENDING'], + ]) + ->whereDate('created_at', $current->toDateString()) + ->get(); + + return response()->json($proses); + } + + private function interchangeCawangan($kodcaw,$version){ + + if($version == 'v2'){ + switch($kodcaw) { + case '1STOP': + $newkodcaw = 'KT1ST'; + break; + case '010621': + $newkodcaw = 'PHKTN'; + break; + case '010620': + $newkodcaw = 'PHBNT'; + break; + case '010617': + $newkodcaw = 'PHRAU'; + break; + case '010915': + $newkodcaw = 'PLKGR'; + break; + case '010219': + $newkodcaw = 'KDSGP'; + break; + case '011013': + $newkodcaw = 'SLKJG'; + break; + case '011412': + $newkodcaw = 'KLRJL'; + break; + case '010618': + $newkodcaw = 'PHTMR'; + break; + case '020301': + $newkodcaw = 'KTJWT'; + break; + case 'APM': + $newkodcaw = 'KTPSM'; + break; + case '020303': + $newkodcaw = 'KTTMR'; + break; + case 'WCY': + $newkodcaw = 'KTWCY'; + break; + case 'GC': + $newkodcaw = 'KTGCH'; + break; + case 'KB2': + $newkodcaw = 'KTKB2'; + break; + case '010311': + $newkodcaw = 'KTGMS'; + break; + case '020306': + $newkodcaw = 'KTPSP'; + break; + case '011238': + $newkodcaw = 'SBPTT'; + break; + case '011228': + $newkodcaw = 'SBSDK'; + break; + case '011229': + $newkodcaw = 'SBTWU'; + break; + case '011230': + $newkodcaw = 'SBAPI'; + break; + case '011231': + $newkodcaw = 'SBBFT'; + break; + case '011232': + $newkodcaw = 'SBKBD'; + break; + case 'ARP': + $newkodcaw = 'KTRTP'; + break; + case 'ARM': + $newkodcaw = 'KTMCH'; + break; + case 'WB': + $newkodcaw = 'KTWFB'; + break; + case 'JLI': + $newkodcaw = 'KTJEL'; + break; + case 'ALS': + $newkodcaw = 'KTKLN'; + break; + case '010136': + $newkodcaw = 'JHPGD'; + break; + case '011235': + $newkodcaw = 'JHSKD'; + break; + case '011234': + $newkodcaw = 'SBTRN'; + break; + case '011233': + $newkodcaw = 'SBKNG'; + break; + case '011237': + $newkodcaw = 'SBSPN'; + break; + case '011227': + $newkodcaw = 'SBPTL'; + break; + default: + $newkodcaw = $kodcaw; + break; + } + } else { + switch($kodcaw) { + case 'KT1ST': + $newkodcaw = '1STOP'; + break; + case 'PHKTN': + $newkodcaw = '010621'; + break; + case 'PHBNT': + $newkodcaw = '010620'; + break; + case 'PHRAU': + $newkodcaw = '010617'; + break; + case 'PLKGR': + $newkodcaw = '010915'; + break; + case 'KDSGP': + $newkodcaw = '010219'; + break; + case 'SLKJG': + $newkodcaw = '011013'; + break; + case 'KLRJL': + $newkodcaw = '011412'; + break; + case 'PHTMR': + $newkodcaw = '010618'; + break; + case 'KTJWT': + $newkodcaw = '020301'; + break; + case 'KTPSM': + $newkodcaw = 'APM'; + break; + case 'KTTMR': + $newkodcaw = '020303'; + break; + case 'KTWCY': + $newkodcaw = 'WCY'; + break; + case 'KTGCH': + $newkodcaw = 'GC'; + break; + case 'KTKB2': + $newkodcaw = 'KB2'; + break; + case 'KTGMS': + $newkodcaw = '010311'; + break; + case 'KTPSP': + $newkodcaw = '020306'; + break; + case 'SBPTT': + $newkodcaw = '011238'; + break; + case 'SBSDK': + $newkodcaw = '011228'; + break; + case 'SBTWU': + $newkodcaw = '011229'; + break; + case 'SBAPI': + $newkodcaw = '011230'; + break; + case 'SBBFT': + $newkodcaw = '011231'; + break; + case 'SBKBD': + $newkodcaw = '011232'; + break; + case 'KTRTP': + $newkodcaw = 'ARP'; + break; + case 'KTMCH': + $newkodcaw = 'ARM'; + break; + case 'KTWFB': + $newkodcaw = 'WB'; + break; + case 'KTJEL': + $newkodcaw = 'JLI'; + break; + case 'KTKLN': + $newkodcaw = 'ALS'; + break; + case 'JHPGD': + $newkodcaw = '010136'; + break; + case 'JHSKD': + $newkodcaw = '011235'; + break; + case 'SBTRN': + $newkodcaw = '011234'; + break; + case 'SBKNG': + $newkodcaw = '011233'; + break; + case 'SBSPN': + $newkodcaw = '011237'; + break; + case 'SBPTL': + $newkodcaw = '011227'; + break; + default: + $newkodcaw = $kodcaw; + break; + } + } + + return $newkodcaw; + } } \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 9792c26..575c39a 100644 --- a/routes/web.php +++ b/routes/web.php @@ -686,6 +686,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->put('autoserahan/serahan',['uses'=>'AutoSerahanController@serahanAutoSerahan']); $router->put('autoserahan/setapproval',['uses'=>'AutoSerahanController@SetApprovalWithdrawal']); $router->get('autoserahan/get',['uses'=>'AutoSerahanController@getAutoSerahanApproval']); + $router->get('autoserahan/checkapproval',['uses'=>'AutoSerahanController@checkProsesApproval']); }); $router->group(['prefix'=>'e-arrahn'], function () use ($router){ From 9b87170ca129a81985e692c8fbd5cad0cec06911 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Mon, 10 Mar 2025 01:47:20 +0800 Subject: [PATCH 039/117] interchangecawangan for checkVault and checkDenominasi --- app/Http/Controllers/AutoSerahanController.php | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index 4196af1..c043831 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -338,8 +338,8 @@ class AutoSerahanController extends Controller public function serahanAutoSerahan(Request $request){ - $this->checkVault($request->kodcaw); - $this->checkDenominasi($request->kodcaw); + $this->checkVault($request->kodcaw,'v2'); + $this->checkDenominasi($request->kodcaw,'v2'); $updated_serahan = $this->autoSerahanEngine('serahan',$request->kodcaw,$request->teller,$request->amaun,$request->id,$request->denopendser_id); @@ -348,8 +348,8 @@ class AutoSerahanController extends Controller public function pendahuluanAutoSerahan(Request $request){ - $this->checkVault($request->kodcaw); - $this->checkDenominasi($request->kodcaw); + $this->checkVault($request->kodcaw,'v3'); + $this->checkDenominasi($request->kodcaw,'v3'); $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$request->kodcaw,$request->teller,$request->amaun,$request->id,$request->denopendser_id); @@ -379,7 +379,9 @@ class AutoSerahanController extends Controller return response()->json($query,200); } - private function checkVault($kodcaw){ + private function checkVault($kodcaw,$version){ + + $kodcaw = $this->interchangeCawangan($kodcaw,$version); $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); /* Check Tarikh Harini */ @@ -446,7 +448,9 @@ class AutoSerahanController extends Controller } } - private function checkDenominasi($kodcaw){ + private function checkDenominasi($kodcaw,$version){ + $kodcaw = $this->interchangeCawangan($kodcaw,$version); + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); $current = Carbon::now(); $denominasi = Denominasi::on($cawangan['mysql'])->where('tarikh',$current->toDateString())->first(); From c394e558e2c77a765cd8c466545fb711e7db1316 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Mon, 10 Mar 2025 01:52:02 +0800 Subject: [PATCH 040/117] change version at interchange --- app/Http/Controllers/AutoSerahanController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index c043831..5fabcc5 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -574,7 +574,7 @@ class AutoSerahanController extends Controller private function interchangeCawangan($kodcaw,$version){ - if($version == 'v2'){ + if($version == 'v3'){ switch($kodcaw) { case '1STOP': $newkodcaw = 'KT1ST'; From b0c3c89ef96e36ea111d8edaf4dc049f55b04f3d Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Sat, 15 Mar 2025 16:31:04 +0800 Subject: [PATCH 041/117] added interchange --- app/Http/Controllers/AutoSerahanController.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index 5fabcc5..8db8872 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -123,7 +123,7 @@ class AutoSerahanController extends Controller $bakiakhir = $bakiawal - $keluar + $masuk + $totalpendahuluan - $serahan - $totpanjaran; - $denopendser = DenoPendSer::on('mysql7')->where('no',$approval['denopendser_id_v3'])->first(); + $denopendser = DenoPendSer::on('mysql7')->where('no',$pendserid)->first(); $this->updateDenominasi($kodcaw,$denopendser,$jenis); @@ -243,7 +243,12 @@ class AutoSerahanController extends Controller $current = Carbon::now(); $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); - $current_denominasi = $this->checkDenominasi($kodcaw); + $version = ($jenis == 'pendahuluan') ? 'v3' : 'v2'; + $current_denominasi = $this->checkDenominasi($kodcaw,$version); + Log::info('denopendser:'); + Log::debug($denopendser); + Log::info('current_denominasi:'); + Log::debug($current_denominasi); if($jenis == 'pendahuluan'){ $k1 = ($denopendser['txtring1'] * 1) + $current_denominasi['k1']; @@ -341,7 +346,9 @@ class AutoSerahanController extends Controller $this->checkVault($request->kodcaw,'v2'); $this->checkDenominasi($request->kodcaw,'v2'); - $updated_serahan = $this->autoSerahanEngine('serahan',$request->kodcaw,$request->teller,$request->amaun,$request->id,$request->denopendser_id); + $kodcaw = $this->interchangeCawangan($request->kodcaw,'v3'); + + $updated_serahan = $this->autoSerahanEngine('serahan',$kodcaw,$request->teller,$request->amaun,$request->id,$request->denopendser_id); return response()->json(['status' => 'success','gldetail_id' => $updated_serahan['gldetail_id']],200); } @@ -351,7 +358,9 @@ class AutoSerahanController extends Controller $this->checkVault($request->kodcaw,'v3'); $this->checkDenominasi($request->kodcaw,'v3'); - $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$request->kodcaw,$request->teller,$request->amaun,$request->id,$request->denopendser_id); + $kodcaw = $this->interchangeCawangan($request->kodcaw,'v3'); + + $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$kodcaw,$request->teller,$request->amaun,$request->id,$request->denopendser_id); return response()->json(['status' => 'success','gldetail_id' => $updated_pendahuluan['gldetail_id']],200); } @@ -504,6 +513,7 @@ class AutoSerahanController extends Controller 'nota' => 0, 'jumlahkeping' => 0 ]); + return $savedeno; } $savedeno = Denominasi::on($cawangan['mysql'])->create([ From b7bc351d6d87bac4de91b54616f3e1b6365d15c5 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Sat, 15 Mar 2025 16:33:46 +0800 Subject: [PATCH 042/117] fix pendahuluan serahan --- app/Http/Controllers/AutoSerahanController.php | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index 8db8872..4a3a7f5 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -245,10 +245,6 @@ class AutoSerahanController extends Controller $version = ($jenis == 'pendahuluan') ? 'v3' : 'v2'; $current_denominasi = $this->checkDenominasi($kodcaw,$version); - Log::info('denopendser:'); - Log::debug($denopendser); - Log::info('current_denominasi:'); - Log::debug($current_denominasi); if($jenis == 'pendahuluan'){ $k1 = ($denopendser['txtring1'] * 1) + $current_denominasi['k1']; @@ -346,7 +342,7 @@ class AutoSerahanController extends Controller $this->checkVault($request->kodcaw,'v2'); $this->checkDenominasi($request->kodcaw,'v2'); - $kodcaw = $this->interchangeCawangan($request->kodcaw,'v3'); + $kodcaw = $this->interchangeCawangan($request->kodcaw,'v2'); $updated_serahan = $this->autoSerahanEngine('serahan',$kodcaw,$request->teller,$request->amaun,$request->id,$request->denopendser_id); @@ -357,7 +353,7 @@ class AutoSerahanController extends Controller $this->checkVault($request->kodcaw,'v3'); $this->checkDenominasi($request->kodcaw,'v3'); - + $kodcaw = $this->interchangeCawangan($request->kodcaw,'v3'); $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$kodcaw,$request->teller,$request->amaun,$request->id,$request->denopendser_id); From 2dd899372ec1852a3165d9ee6d2e10111a4f72dc Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Sat, 15 Mar 2025 16:40:12 +0800 Subject: [PATCH 043/117] add descpt Auto Serahan V3 --- app/Http/Controllers/AutoSerahanController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index 4a3a7f5..ff6caf4 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -171,7 +171,7 @@ class AutoSerahanController extends Controller 'tarikh' => $current->toDateString(), 'dtacct' => '1000/010', 'ktacct' => '1000/020', - 'descpt' => 'Auto Serahan Kepada V3', + 'descpt' => 'Serahan Kepada V3', 'serahan' => $amaun, 'teller' => $teller . ' (AUTO V3)', 'date_created' => $current From c328a0492feccf7e23e40c4d5d3edefee8c61062 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Sat, 15 Mar 2025 18:09:40 +0800 Subject: [PATCH 044/117] fix database migrations to be added with delete and create --- app/Http/Controllers/AutoSerahanController.php | 2 +- app/Http/Controllers/VaultController.php | 7 +++++-- .../2025_02_23_154307_create_approval_withdrawal.php | 1 + .../2025_02_25_103124_add_timestamp_to_gldetail_table.php | 1 + 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index ff6caf4..4c4cc54 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -132,7 +132,7 @@ class AutoSerahanController extends Controller 'tarikh' => $current->toDateString(), 'dtacct' => '1000/010', 'ktacct' => '7000/102', - 'descpt' => 'Auto Pendahuluan Daripada V2', + 'descpt' => 'Pendahuluan Daripada V2', 'pendahuluan' => $amaun, 'teller' => $teller . ' (AUTO V2)', 'date_created' => $current diff --git a/app/Http/Controllers/VaultController.php b/app/Http/Controllers/VaultController.php index d838ef6..416752c 100644 --- a/app/Http/Controllers/VaultController.php +++ b/app/Http/Controllers/VaultController.php @@ -316,7 +316,8 @@ class VaultController extends Controller 'ktacct' => $request->ktacct, 'descpt' => $request->keterangan, 'pendahuluan' => $request->amaun, - 'teller' => $request->teller + 'teller' => $request->teller, + 'date_created' => $current->toDateTimeString() ]); }else if($request->jenisgldetail == 'serahan') { @@ -327,7 +328,9 @@ class VaultController extends Controller 'ktacct' => $request->ktacct, 'descpt' => $request->keterangan, 'serahan' => $request->amaun, - 'teller' => $request->teller + 'teller' => $request->teller, + 'date_created' => $current->toDateTimeString() + ]); } diff --git a/database/migrations/2025_02_23_154307_create_approval_withdrawal.php b/database/migrations/2025_02_23_154307_create_approval_withdrawal.php index 879f4ab..9ffe7ae 100644 --- a/database/migrations/2025_02_23_154307_create_approval_withdrawal.php +++ b/database/migrations/2025_02_23_154307_create_approval_withdrawal.php @@ -16,6 +16,7 @@ class CreateApprovalWithdrawal extends Migration Schema::create('approval_withdrawal', function (Blueprint $table) { $table->id(); $table->char('kodcaw', 20); + $table->string('action', 50); $table->string('pc_name', 100); $table->string('operasi_name', 100)->nullable(); $table->decimal('amount', 10, 2)->default(0); diff --git a/database/migrations/2025_02_25_103124_add_timestamp_to_gldetail_table.php b/database/migrations/2025_02_25_103124_add_timestamp_to_gldetail_table.php index af62292..2d01199 100644 --- a/database/migrations/2025_02_25_103124_add_timestamp_to_gldetail_table.php +++ b/database/migrations/2025_02_25_103124_add_timestamp_to_gldetail_table.php @@ -3,6 +3,7 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; +use Illuminate\Support\Facades\DB; class AddTimestampToGldetailTable extends Migration { From d236ca226804368162cd13b0f16fca606675be6f Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Sun, 16 Mar 2025 15:42:42 +0800 Subject: [PATCH 045/117] added delete autoserahan and change apporvalwithdraw --- app/ApprovalWithdrawal.php | 1 + .../Controllers/AutoSerahanController.php | 213 ++++++++++++++---- routes/web.php | 3 + 3 files changed, 172 insertions(+), 45 deletions(-) diff --git a/app/ApprovalWithdrawal.php b/app/ApprovalWithdrawal.php index b52e845..b62d08f 100644 --- a/app/ApprovalWithdrawal.php +++ b/app/ApprovalWithdrawal.php @@ -26,6 +26,7 @@ class ApprovalWithdrawal extends Model 'gldetail_id_v2', 'denopendser_id_v3', 'gldetail_id_v3', + 'action', 'approval_timestamp', ]; diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index 4c4cc54..e2fdb32 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -24,6 +24,48 @@ class AutoSerahanController extends Controller return response()->json($listapproval,200); } + public function deleteAutoSerahan(Request $request){ + $current = Carbon::now(); + + DB::connection('mysql7')->beginTransaction(); + + try{ + if($request->version == 'v3'){ + $listapproval = ApprovalWithdrawal::on('mysql7') + ->where('gldetail_id_v2',$request->recno) + ->where('approval_status',"APPROVED") + ->where('action','create') + ->where('updated_serahan_v2',1) + ->where('updated_pendahuluan_v3',1) + ->get(); + + $approval = ApprovalWithdrawal::on('mysql7')->create([ + 'kodcaw' => ($request->version == 'v3') ? $this->interchangeCawangan($request->kodcaw,$request->version) : $request->kodcaw, + 'action' => 'delete', + 'pc_name' => $request->teller, + 'operasi_name' => null, + 'amount' => $request->amaun, + 'approval_status' => 'PENDING', + 'approval_timestamp' => null, + 'gldetail_id_v3' => $listapproval['gldetail_id_v3'], + 'gldetail_id_v2' => isset($request->recno) ? $request->recno : 0, + 'denopendser_id_v3' => 0, + 'denopendser_id_v2' => 0, + 'updated_serahan_v2' => 0, + 'updated_pendahuluan_v3' => 0, + 'created_at' => $current, + 'updated_at' => $current, + ]); + DB::connection('mysql7')->commit(); + return response()->json(['status' => 'success','id' => $approval->id]); + } + + }catch(\Exception $e){ + DB::connection('mysql7')->rollBack(); + return response()->json(['status' => 'failed','message' => $e->getMessage()]); + } + } + public function createAutoSerahan(Request $request) { $current = Carbon::now(); @@ -64,6 +106,7 @@ class AutoSerahanController extends Controller if($request->version == 'v3'){ $approval = ApprovalWithdrawal::on('mysql7')->create([ 'kodcaw' => ($request->version == 'v3') ? $this->interchangeCawangan($request->kodcaw,$request->version) : $request->kodcaw, + 'action' => 'create', 'pc_name' => $request->teller, 'operasi_name' => null, 'amount' => $request->amaun, @@ -95,11 +138,11 @@ class AutoSerahanController extends Controller } } - private function autoSerahanEngine($jenis, $kodcaw,$teller,$amaun,$id,$denopendser_id){ + private function autoSerahanEngine($jenis, $kodcaw,$teller,$amaun,$id,$denopendser_id){ $current = Carbon::now(); $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); $vault = Vault::on($cawangan['mysql'])->where('kodcaw','=',$kodcaw)->where('tarikh','=',$current->toDateString())->orderby('tarikh','desc')->first(); - + $bakiawal = $vault['bakiawal']; $keluar = $vault['keluar']; $masuk = $vault['masuk']; @@ -107,10 +150,10 @@ class AutoSerahanController extends Controller $pendahuluan = $vault['pendahuluan']; $serahan = $vault['serahan']; $totpanjaran = $vault['totpanjar']; - + DB::connection($cawangan['mysql'])->beginTransaction(); DB::connection('mysql7')->beginTransaction(); - + try{ $approval = ApprovalWithdrawal::on('mysql7')->where('id',$id)->first(); @@ -153,7 +196,7 @@ class AutoSerahanController extends Controller 'updated_pendahuluan_v3' => 1, 'gldetail_id_v3' => $gldetail->id )); - + }else if($jenis == 'serahan'){ $pendserid = empty($approval) ? $denopendser_id : $approval['denopendser_id_v2']; @@ -188,30 +231,25 @@ class AutoSerahanController extends Controller 'bakieod' => $bakiakhir )); - // ApprovalWithdrawal::on('mysql7')->where('id',$id)->update(array( - // 'updated_serahan_v2' => 1, - // 'gldetail_id_v2' => $gldetail->id - // )); + } + + // Commit transactions + DB::connection($cawangan['mysql'])->commit(); + DB::connection('mysql7')->commit(); + return ['status' => 'success','gldetail_id' => $gldetail->id]; - } - - // Commit transactions - DB::connection($cawangan['mysql'])->commit(); - DB::connection('mysql7')->commit(); - return ['status' => 'success','gldetail_id' => $gldetail->id]; - }catch(\Exception $e){ - DB::connection($cawangan['mysql'])->rollBack(); - DB::connection('mysql7')->rollBack(); - throw $e; + DB::connection($cawangan['mysql'])->rollBack(); + DB::connection('mysql7')->rollBack(); + throw $e; } - } - - public function autoSerahanApproval(Request $request){ + } + + public function autoSerahanApproval(Request $request){ $current = Carbon::now(); - + DB::connection('mysql7')->beginTransaction(); - + try{ $approval = ApprovalWithdrawal::on('mysql7')->where('id',$request->id)->first(); @@ -237,9 +275,9 @@ class AutoSerahanController extends Controller DB::connection('mysql7')->rollBack(); return response()->json(['status' => 'error','message' =>$e->getMessage(), 'line' => $e->getLine()]); } - } + } - private function updateDenominasi($kodcaw,$denopendser,$jenis){ + private function updateDenominasi($kodcaw,$denopendser,$jenis){ $current = Carbon::now(); $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); @@ -335,9 +373,9 @@ class AutoSerahanController extends Controller 'txtjumlah'=> $totalkeping, 'jumlahkeping' => $totalkeping )); - } + } - public function serahanAutoSerahan(Request $request){ + public function serahanAutoSerahan(Request $request){ $this->checkVault($request->kodcaw,'v2'); $this->checkDenominasi($request->kodcaw,'v2'); @@ -347,9 +385,9 @@ class AutoSerahanController extends Controller $updated_serahan = $this->autoSerahanEngine('serahan',$kodcaw,$request->teller,$request->amaun,$request->id,$request->denopendser_id); return response()->json(['status' => 'success','gldetail_id' => $updated_serahan['gldetail_id']],200); - } + } - public function pendahuluanAutoSerahan(Request $request){ + public function pendahuluanAutoSerahan(Request $request){ $this->checkVault($request->kodcaw,'v3'); $this->checkDenominasi($request->kodcaw,'v3'); @@ -358,28 +396,113 @@ class AutoSerahanController extends Controller $updated_pendahuluan = $this->autoSerahanEngine('pendahuluan',$kodcaw,$request->teller,$request->amaun,$request->id,$request->denopendser_id); - return response()->json(['status' => 'success','gldetail_id' => $updated_pendahuluan['gldetail_id']],200); + return response()->json(['status' => 'success','gldetail_id' => $updated_pendahuluan['gldetail_id']],200); } - public function SetApprovalWithdrawal(Request $request){ + public function removeAutoSerahan(Request $request){ + $this->checkVault($request->kodcaw,'v2'); + $this->checkDenominasi($request->kodcaw,'v2'); - if($request->jenis == 'create'){ - ApprovalWithdrawal::on('mysql7')->where('id', $request->id)->update([ - 'denopendser_id_v2' => $request->deno_id, - ]); + $kodcaw = $this->interchangeCawangan($request->kodcaw,'v2'); - return response()->json(['status' => 'success'],200); - }else{ - ApprovalWithdrawal::on('mysql7')->where('id', $request->id)->update([ - 'updated_serahan_v2' => 1, - 'gldetail_id_v2' => $request->gldetail_id - ]); - return response()->json(['status' => 'success'],200); + $updated_serahan = $this->autoSerahanRemove('pendahuluan',$kodcaw,$request->amaun,$request->id); + + return response()->json($updated_serahan); + + } + + public function removeAutoPendahuluan(Request $request){ + $this->checkVault($request->kodcaw,'v3'); + $this->checkDenominasi($request->kodcaw,'v3'); + + $kodcaw = $this->interchangeCawangan($request->kodcaw,'v3'); + + $updated_pendahuluan = $this->autoSerahanRemove('pendahuluan',$kodcaw,$request->amaun,$request->id); + + return response()->json($updated_pendahuluan); + } + + private function autoSerahanRemove($jenis,$kodcaw,$amaun,$id){ + $current = Carbon::now(); + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); + $vault = Vault::on($cawangan['mysql'])->where('kodcaw','=',$kodcaw)->where('tarikh','=',$current->toDateString())->orderby('tarikh','desc')->first(); + + $bakiawal = $vault['bakiawal']; + $keluar = $vault['keluar']; + $masuk = $vault['masuk']; + $bakiakhir = $vault['bakiakhir']; + $pendahuluan = $vault['pendahuluan']; + $serahan = $vault['serahan']; + $totpanjaran = $vault['totpanjar']; + + DB::connection($cawangan['mysql'])->beginTransaction(); + DB::connection('mysql7')->beginTransaction(); + + try{ + $approval = ApprovalWithdrawal::on('mysql7')->where('id',$id)->first(); + + if($jenis == 'pendahuluan'){ + $totalpendahuluan = $pendahuluan - $amaun; + + $bakiakhir = $bakiawal - $keluar + $masuk + $totalpendahuluan - $serahan - $totpanjaran; + + Vault::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()],['kodcaw','=', $kodcaw]])->update(array( + 'pendahuluan' => $totalpendahuluan, + 'bakiakhir' => $bakiakhir, + 'bakieod' => $bakiakhir + )); + + DenoPendSer::where('no', $approval['denopendser_id_v2'])->delete(); + GlDetail::where('recno', $approval['gldetail_id_v3'])->delete(); + + ApprovalWithdrawal::on('mysql7')->where('id',$id)->update(array( + 'updated_pendahuluan_v3' => 1, + )); + }else{ + $totalserahan = $serahan - $amaun; + + $bakiakhir = $bakiawal - $keluar + $masuk + $pendahuluan - $totalserahan - $totpanjaran; + + Vault::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()],['kodcaw','=', $kodcaw]])->update(array( + 'serahan' => $totalserahan, + 'bakiakhir' => $bakiakhir, + 'bakieod' => $bakiakhir + )); + + DenoPendSer::where('no', $approval['denopendser_id_v2'])->delete(); + GlDetail::where('recno', $approval['gldetail_id_v2'])->delete(); + + ApprovalWithdrawal::on('mysql7')->where('id',$id)->update(array( + 'updated_serahan_v2' => 1, + )); + } + + }catch(\Exception $e){ + DB::connection($cawangan['mysql'])->rollBack(); + DB::connection('mysql7')->rollBack(); + throw $e; } + } - } + public function SetApprovalWithdrawal(Request $request){ - public function getAutoSerahanApproval(Request $request){ + if($request->jenis == 'create'){ + ApprovalWithdrawal::on('mysql7')->where('id', $request->id)->update([ + 'denopendser_id_v2' => $request->deno_id, + ]); + + return response()->json(['status' => 'success'],200); + }else{ + ApprovalWithdrawal::on('mysql7')->where('id', $request->id)->update([ + 'updated_serahan_v2' => 1, + 'gldetail_id_v2' => $request->gldetail_id + ]); + return response()->json(['status' => 'success'],200); + } + + } + + public function getAutoSerahanApproval(Request $request){ $query = ApprovalWithdrawal::on('mysql7')->where('kodcaw',$request->kodcaw)->where('id',$request->id)->first(); return response()->json($query,200); } diff --git a/routes/web.php b/routes/web.php index 575c39a..cf4ee3b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -682,8 +682,11 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->get('autoserahan/list',['uses'=>'AutoSerahanController@getAutoSerahan']); $router->put('autoserahan/approve',['uses'=>'AutoSerahanController@autoSerahanApproval']); $router->post('autoserahan/create',['uses'=>'AutoSerahanController@createAutoSerahan']); + $router->post('autoserahan/delete',['uses'=>'AutoSerahanController@deleteAutoSerahan']); $router->put('autoserahan/pendahuluan',['uses'=>'AutoSerahanController@pendahuluanAutoSerahan']); $router->put('autoserahan/serahan',['uses'=>'AutoSerahanController@serahanAutoSerahan']); + $router->put('autoserahan/delete/pendahuluan',['uses'=>'AutoSerahanController@pendahuluanAutoSerahan']); + $router->put('autoserahan/delete/serahan',['uses'=>'AutoSerahanController@serahanAutoSerahan']); $router->put('autoserahan/setapproval',['uses'=>'AutoSerahanController@SetApprovalWithdrawal']); $router->get('autoserahan/get',['uses'=>'AutoSerahanController@getAutoSerahanApproval']); $router->get('autoserahan/checkapproval',['uses'=>'AutoSerahanController@checkProsesApproval']); From 521e52874f40f601540d52f5bff9bd94080390c2 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Sun, 16 Mar 2025 15:44:34 +0800 Subject: [PATCH 046/117] resolve conflict --- app/Http/Controllers/AutoSerahanController.php | 18 ++++++++++++------ routes/web.php | 1 + 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index e2fdb32..e7e279c 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -36,8 +36,9 @@ class AutoSerahanController extends Controller ->where('approval_status',"APPROVED") ->where('action','create') ->where('updated_serahan_v2',1) - ->where('updated_pendahuluan_v3',1) - ->get(); + ->where('updated_pendahuluan_v3',1); + + $listapproval = optional($listapproval)->first(); $approval = ApprovalWithdrawal::on('mysql7')->create([ 'kodcaw' => ($request->version == 'v3') ? $this->interchangeCawangan($request->kodcaw,$request->version) : $request->kodcaw, @@ -49,10 +50,10 @@ class AutoSerahanController extends Controller 'approval_timestamp' => null, 'gldetail_id_v3' => $listapproval['gldetail_id_v3'], 'gldetail_id_v2' => isset($request->recno) ? $request->recno : 0, - 'denopendser_id_v3' => 0, - 'denopendser_id_v2' => 0, - 'updated_serahan_v2' => 0, - 'updated_pendahuluan_v3' => 0, + 'denopendser_id_v3' => $listapproval['denopendser_id_v3'], + 'denopendser_id_v2' => $listapproval['denopendser_id_v2'], + 'updated_serahan_v2' => $listapproval['updated_serahan_v2'], + 'updated_pendahuluan_v3' => $listapproval['updated_pendahuluan_v3'], 'created_at' => $current, 'updated_at' => $current, ]); @@ -119,6 +120,7 @@ class AutoSerahanController extends Controller 'updated_serahan_v2' => 0, 'updated_pendahuluan_v3' => 0, 'created_at' => $current, + 'action' => 'create', 'updated_at' => $current, ]); DB::connection('mysql7')->commit(); @@ -253,6 +255,10 @@ class AutoSerahanController extends Controller try{ $approval = ApprovalWithdrawal::on('mysql7')->where('id',$request->id)->first(); + if($request->action == 'delete'){ + + } + if($approval->approval_status == 'PENDING' && $request->sendApproval == 'ACCEPTED'){ $approval->operasi_name = $request->operasi_name; $approval->approval_status = 'APPROVED'; diff --git a/routes/web.php b/routes/web.php index cf4ee3b..c9c9fd5 100644 --- a/routes/web.php +++ b/routes/web.php @@ -681,6 +681,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ /* Endpoint for Auto Serahan */ $router->get('autoserahan/list',['uses'=>'AutoSerahanController@getAutoSerahan']); $router->put('autoserahan/approve',['uses'=>'AutoSerahanController@autoSerahanApproval']); + $router->post('autoserahan/delete',['uses'=>'AutoSerahanController@deleteAutoSerahan']); $router->post('autoserahan/create',['uses'=>'AutoSerahanController@createAutoSerahan']); $router->post('autoserahan/delete',['uses'=>'AutoSerahanController@deleteAutoSerahan']); $router->put('autoserahan/pendahuluan',['uses'=>'AutoSerahanController@pendahuluanAutoSerahan']); From b9bdae59e5a0f4a424eb826f5cf0e94a99c897cf Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Mon, 17 Mar 2025 01:09:24 +0800 Subject: [PATCH 047/117] change routes and fix sort of function --- app/Http/Controllers/AutoSerahanController.php | 16 +++++++++------- routes/web.php | 4 ++-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index e7e279c..b63e43f 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -411,7 +411,7 @@ class AutoSerahanController extends Controller $kodcaw = $this->interchangeCawangan($request->kodcaw,'v2'); - $updated_serahan = $this->autoSerahanRemove('pendahuluan',$kodcaw,$request->amaun,$request->id); + $updated_serahan = $this->autoSerahanRemove('serahan',$kodcaw,$request->amaun,$request->array_approval); return response()->json($updated_serahan); @@ -445,9 +445,9 @@ class AutoSerahanController extends Controller DB::connection('mysql7')->beginTransaction(); try{ - $approval = ApprovalWithdrawal::on('mysql7')->where('id',$id)->first(); - if($jenis == 'pendahuluan'){ + $approval = ApprovalWithdrawal::on('mysql7')->where('id',$id)->first(); + $totalpendahuluan = $pendahuluan - $amaun; $bakiakhir = $bakiawal - $keluar + $masuk + $totalpendahuluan - $serahan - $totpanjaran; @@ -458,13 +458,15 @@ class AutoSerahanController extends Controller 'bakieod' => $bakiakhir )); - DenoPendSer::where('no', $approval['denopendser_id_v2'])->delete(); - GlDetail::where('recno', $approval['gldetail_id_v3'])->delete(); + GlDetail::on($cawangan['mysql'])->where('recno', $approval['gldetail_id_v3'])->delete(); + DenoPendSer::on('mysql7')->where('no', $approval['denopendser_id_v2'])->delete(); ApprovalWithdrawal::on('mysql7')->where('id',$id)->update(array( 'updated_pendahuluan_v3' => 1, )); }else{ + $approval = $id; + $totalserahan = $serahan - $amaun; $bakiakhir = $bakiawal - $keluar + $masuk + $pendahuluan - $totalserahan - $totpanjaran; @@ -475,8 +477,8 @@ class AutoSerahanController extends Controller 'bakieod' => $bakiakhir )); - DenoPendSer::where('no', $approval['denopendser_id_v2'])->delete(); - GlDetail::where('recno', $approval['gldetail_id_v2'])->delete(); + GlDetail::on($cawangan['mysql'])->where('recno', $approval['gldetail_id_v2'])->delete(); + DenoPendSer::on('mysql7')->where('no', $approval['denopendser_id_v2'])->delete(); ApprovalWithdrawal::on('mysql7')->where('id',$id)->update(array( 'updated_serahan_v2' => 1, diff --git a/routes/web.php b/routes/web.php index c9c9fd5..99932e1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -686,8 +686,8 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->post('autoserahan/delete',['uses'=>'AutoSerahanController@deleteAutoSerahan']); $router->put('autoserahan/pendahuluan',['uses'=>'AutoSerahanController@pendahuluanAutoSerahan']); $router->put('autoserahan/serahan',['uses'=>'AutoSerahanController@serahanAutoSerahan']); - $router->put('autoserahan/delete/pendahuluan',['uses'=>'AutoSerahanController@pendahuluanAutoSerahan']); - $router->put('autoserahan/delete/serahan',['uses'=>'AutoSerahanController@serahanAutoSerahan']); + $router->put('autoserahan/delete/pendahuluan',['uses'=>'AutoSerahanController@removeAutoPendahuluan']); + $router->put('autoserahan/delete/serahan',['uses'=>'AutoSerahanController@removeAutoSerahan']); $router->put('autoserahan/setapproval',['uses'=>'AutoSerahanController@SetApprovalWithdrawal']); $router->get('autoserahan/get',['uses'=>'AutoSerahanController@getAutoSerahanApproval']); $router->get('autoserahan/checkapproval',['uses'=>'AutoSerahanController@checkProsesApproval']); From 5c9773f0d58e0b99977cd030ca91fbe7fb2f9c8d Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Mon, 17 Mar 2025 10:22:09 +0800 Subject: [PATCH 048/117] add commit in the function --- app/Http/Controllers/AutoSerahanController.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index b63e43f..920cad3 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -459,7 +459,7 @@ class AutoSerahanController extends Controller )); GlDetail::on($cawangan['mysql'])->where('recno', $approval['gldetail_id_v3'])->delete(); - DenoPendSer::on('mysql7')->where('no', $approval['denopendser_id_v2'])->delete(); + DenoPendSer::on('mysql7')->where('no', $approval['denopendser_id_v3'])->delete(); ApprovalWithdrawal::on('mysql7')->where('id',$id)->update(array( 'updated_pendahuluan_v3' => 1, @@ -485,6 +485,9 @@ class AutoSerahanController extends Controller )); } + DB::connection($cawangan['mysql'])->commit(); + DB::connection('mysql7')->commit(); + }catch(\Exception $e){ DB::connection($cawangan['mysql'])->rollBack(); DB::connection('mysql7')->rollBack(); From b880b156bff011c56d1ba04407295e9148fbd944 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Mon, 17 Mar 2025 10:23:09 +0800 Subject: [PATCH 049/117] add updatedenoremove --- .../Controllers/AutoSerahanController.php | 108 +++++++++++++++++- 1 file changed, 106 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index 920cad3..07c99a3 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -381,6 +381,104 @@ class AutoSerahanController extends Controller )); } + private function updateDenominasiRemove($kodcaw,$denopendser,$jenis){ + $current = Carbon::now(); + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); + + $version = ($jenis == 'pendahuluan') ? 'v3' : 'v2'; + $current_denominasi = $this->checkDenominasi($kodcaw,$version); + + if($jenis == 'pendahuluan'){ + $k1 = ($denopendser['txtring1'] * 1) - $current_denominasi['k1']; + $txtring1 = $denopendser['txtring1'] - $current_denominasi['txtring1']; + $k5 = ($denopendser['txtring5'] * 5) - $current_denominasi['k5']; + $txtring5 = $denopendser['txtring5'] - $current_denominasi['txtring5']; + $k01 = ($denopendser['txtsen1'] * 0.01) - $current_denominasi['k01']; + $txtsen1 = $denopendser['txtsen1'] - $current_denominasi['txtsen1']; + $k05 = ($denopendser['txtsen5'] * 0.05) - $current_denominasi['k05']; + $txtsen5 = $denopendser['txtsen5'] - $current_denominasi['txtsen5']; + $k010 = ($denopendser['txtsen10'] * 0.10) - $current_denominasi['k010']; + $txtsen10 = $denopendser['txtsen10'] - $current_denominasi['txtsen10']; + $k020 = ($denopendser['txtsen20'] * 0.20) - $current_denominasi['k020']; + $txtsen20 = $denopendser['txtsen20'] - $current_denominasi['txtsen20']; + $k050 = ($denopendser['txtsen50'] * 0.50) - $current_denominasi['k050']; + $txtsen50 = $denopendser['txtsen50'] - $current_denominasi['txtsen50']; + $k10 = ($denopendser['txtring10'] * 10) - $current_denominasi['k10']; + $txtring10 = $denopendser['txtring10'] - $current_denominasi['txtring10']; + $k20 = ($denopendser['txtring20'] * 20) - $current_denominasi['k20']; + $txtring20 = $denopendser['txtring20'] - $current_denominasi['txtring20']; + $k50 = ($denopendser['txtring50'] * 50) - $current_denominasi['k50']; + $txtring50 = $denopendser['txtring50'] - $current_denominasi['txtring50']; + $k100 = ($denopendser['txtring100'] * 100) - $current_denominasi['k100']; + $txtring100 = $denopendser['txtring100'] - $current_denominasi['txtring100']; + }else{ + $k1 = $current_denominasi['k1'] + ($denopendser['txtring1'] * 1); + $txtring1 = $current_denominasi['txtring1'] + $denopendser['txtring1']; + $k5 = $current_denominasi['k5'] + ($denopendser['txtring5'] * 5); + $txtring5 = $current_denominasi['txtring5'] + $denopendser['txtring5']; + $k01 = $current_denominasi['k01'] + ($denopendser['txtsen1'] * 0.01); + $txtsen1 = $current_denominasi['txtsen1'] + $denopendser['txtsen1']; + $k05 = $current_denominasi['k05'] + ($denopendser['txtsen5'] * 0.05); + $txtsen5 = $current_denominasi['txtsen5'] + $denopendser['txtsen5']; + $k010 = $current_denominasi['k010'] + ($denopendser['txtsen10'] * 0.10); + $txtsen10 = $current_denominasi['txtsen10'] + $denopendser['txtsen10']; + $k020 = $current_denominasi['k020'] + ($denopendser['txtsen20'] * 0.20); + $txtsen20 = $current_denominasi['txtsen20'] + $denopendser['txtsen20']; + $k050 = $current_denominasi['k050'] + ($denopendser['txtsen50'] * 0.50); + $txtsen50 = $current_denominasi['txtsen50'] + $denopendser['txtsen50']; + $k10 = $current_denominasi['k10'] + ($denopendser['txtring10'] * 10); + $txtring10 = $current_denominasi['txtring10'] + $denopendser['txtring10']; + $k20 = $current_denominasi['k20'] + ($denopendser['txtring20'] * 20); + $txtring20 = $current_denominasi['txtring20'] + $denopendser['txtring20']; + $k50 = $current_denominasi['k50'] + ($denopendser['txtring50'] * 50); + $txtring50 = $current_denominasi['txtring50'] + $denopendser['txtring50']; + $k100 = $current_denominasi['k100'] + ($denopendser['txtring100'] * 100); + $txtring100 = $current_denominasi['txtring100'] + $denopendser['txtring100']; + } + + $totalkeping = $k01 + $k05 + $k010 + $k020 + $k050 + $k1 + $k5 + $k10 + $k20 + $k50 + $k100; + + Denominasi::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()]])->update(array( + 'bd1' => 0, + 'b1'=> 0, + 'bd5'=> 0, + 'b5'=> 0, + 'bd10'=> 0, + 'b10'=> 0, + 'bd20'=> 0, + 'b20'=> 0, + 'bd50'=> 0, + 'b50'=> 0, + 'bd100'=> 0, + 'b100'=> 0, + 'txtring1'=> $txtring1, + 'k1'=> $k1, + 'txtring5'=> $txtring5, + 'k5'=> $k5, + 'txtsen1'=> $txtsen1, + 'k01'=> $k01, + 'txtsen5'=> $txtsen5, + 'k05'=> $k05, + 'txtsen10'=> $txtsen10, + 'k010'=> $k010, + 'txtsen20'=> $txtsen20, + 'k020'=> $k020, + 'txtsen50'=> $txtsen50, + 'k050'=> $k050, + 'txtring10'=> $txtring10, + 'k10'=> $k10, + 'txtring20'=> $txtring20, + 'k20'=> $k20, + 'txtring50'=> $txtring50, + 'k50'=> $k50, + 'txtring100'=> $txtring100, + 'k100'=> $k100, + 'jumlahbundle'=> 0, + 'txtjumlah'=> $totalkeping, + 'jumlahkeping' => $totalkeping + )); + } + public function serahanAutoSerahan(Request $request){ $this->checkVault($request->kodcaw,'v2'); @@ -423,7 +521,7 @@ class AutoSerahanController extends Controller $kodcaw = $this->interchangeCawangan($request->kodcaw,'v3'); - $updated_pendahuluan = $this->autoSerahanRemove('pendahuluan',$kodcaw,$request->amaun,$request->id); + $updated_pendahuluan = $this->autoSerahanRemove('pendahuluan',$kodcaw,$request->amaun,$request->array_approval); return response()->json($updated_pendahuluan); } @@ -446,11 +544,14 @@ class AutoSerahanController extends Controller try{ if($jenis == 'pendahuluan'){ - $approval = ApprovalWithdrawal::on('mysql7')->where('id',$id)->first(); + $approval = $id; $totalpendahuluan = $pendahuluan - $amaun; $bakiakhir = $bakiawal - $keluar + $masuk + $totalpendahuluan - $serahan - $totpanjaran; + $denopendser = Denopendser::on('mysql7')->where('no', $approval['denopendser_id_v3'])->get(); + + $this->updateDenominasiRemove($kodcaw,$denopendser,'pendahuluan'); Vault::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()],['kodcaw','=', $kodcaw]])->update(array( 'pendahuluan' => $totalpendahuluan, @@ -470,6 +571,9 @@ class AutoSerahanController extends Controller $totalserahan = $serahan - $amaun; $bakiakhir = $bakiawal - $keluar + $masuk + $pendahuluan - $totalserahan - $totpanjaran; + $denopendser = Denopendser::on('mysql7')->where('no', $approval['denopendser_id_v2'])->get(); + + $this->updateDenominasiRemove($kodcaw,$denopendser,'serahan'); Vault::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()],['kodcaw','=', $kodcaw]])->update(array( 'serahan' => $totalserahan, From 1a201abed8a42bb6154993a003de13dfbd9ca088 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Mon, 17 Mar 2025 10:31:23 +0800 Subject: [PATCH 050/117] added first optional --- app/Http/Controllers/AutoSerahanController.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php index 07c99a3..9891d5e 100644 --- a/app/Http/Controllers/AutoSerahanController.php +++ b/app/Http/Controllers/AutoSerahanController.php @@ -549,7 +549,8 @@ class AutoSerahanController extends Controller $totalpendahuluan = $pendahuluan - $amaun; $bakiakhir = $bakiawal - $keluar + $masuk + $totalpendahuluan - $serahan - $totpanjaran; - $denopendser = Denopendser::on('mysql7')->where('no', $approval['denopendser_id_v3'])->get(); + $denopendser = Denopendser::on('mysql7')->where('no', $approval['denopendser_id_v3']); + $denopendser = optional($denopendser)->first(); $this->updateDenominasiRemove($kodcaw,$denopendser,'pendahuluan'); @@ -559,9 +560,11 @@ class AutoSerahanController extends Controller 'bakieod' => $bakiakhir )); - GlDetail::on($cawangan['mysql'])->where('recno', $approval['gldetail_id_v3'])->delete(); + $gldetail_remove = GlDetail::on($cawangan['mysql'])->where('recno', $approval['gldetail_id_v3'])->delete(); DenoPendSer::on('mysql7')->where('no', $approval['denopendser_id_v3'])->delete(); + Log::info('gldetail'); + Log::debug($gldetail_remove); ApprovalWithdrawal::on('mysql7')->where('id',$id)->update(array( 'updated_pendahuluan_v3' => 1, )); @@ -571,7 +574,8 @@ class AutoSerahanController extends Controller $totalserahan = $serahan - $amaun; $bakiakhir = $bakiawal - $keluar + $masuk + $pendahuluan - $totalserahan - $totpanjaran; - $denopendser = Denopendser::on('mysql7')->where('no', $approval['denopendser_id_v2'])->get(); + $denopendser = Denopendser::on('mysql7')->where('no', $approval['denopendser_id_v2']); + $denopendser = optional($denopendser)->first(); $this->updateDenominasiRemove($kodcaw,$denopendser,'serahan'); From 0211823d0e052799e5c1f1f886bfc8d3fdb97bae Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Mon, 7 Apr 2025 16:12:51 +0800 Subject: [PATCH 051/117] tambah api aging controller --- .../Controllers/Reports/AgingController.php | 239 ++++++++++++++++++ routes/report.php | 2 + 2 files changed, 241 insertions(+) create mode 100644 app/Http/Controllers/Reports/AgingController.php diff --git a/app/Http/Controllers/Reports/AgingController.php b/app/Http/Controllers/Reports/AgingController.php new file mode 100644 index 0000000..71f7b6f --- /dev/null +++ b/app/Http/Controllers/Reports/AgingController.php @@ -0,0 +1,239 @@ +getCawanganReport(); + } + + public function getSummaryLaporanAgingbackup(Request $request) +{ + $online_array_db_connection = Helper::getOnlineArrahnConnection(); + $cawangan_available = Cawangan::on($online_array_db_connection)->select('kodcaw', 'details_caw', 'mysql')->get(); + + $kodcaw_array = array_column($cawangan_available->toArray(), 'kodcaw'); + $kod_caw_with_cawangan_detail_array = $cawangan_available->pluck('details_caw', 'kodcaw')->toArray(); + + // Step 1: Fetch the ansuran data grouped by cawangan + $ansuran_query = Transaction::on($online_array_db_connection) + ->leftJoin('transaksi_keuntungan', function ($join) { + $join->on('transaction.norujukan', '=', 'transaksi_keuntungan.norujukan'); + $join->on('transaction.created_at', '=', 'transaksi_keuntungan.tarikh_bayaran'); + }) + ->where('transaction.trans_type', '=', 'A') + ->whereDate('transaction.created_at', '>=', date($request->startDate)) + ->whereDate('transaction.created_at', '<=', date($request->endDate)) + ->selectRaw(' + transaction.kodcaw as kod_cawangan, + count(transaction.norujukan) as bilangan_ansuran, + sum(transaksi_keuntungan.bayaran_pembiayaan) as bayaran_pembiayaan, + sum(transaksi_keuntungan.bayaran_keuntungan) as bayaran_kos_keuntungan, + sum(transaction.duit_masuk) as jumlah_bayaran, + GROUP_CONCAT(transaction.norujukan) as norujukan_list + ') + ->groupBy('transaction.kodcaw') + ->get(); + + $total_nilai_marhun_by_cawangan = []; + + // Step 2: Loop through ansuran_query and fetch nilai_marhun per kodcaw + foreach ($ansuran_query as $ansuran_cawangan) { + $kodcaw = $ansuran_cawangan->kod_cawangan; + $norujukan_list = explode(',', $ansuran_cawangan->norujukan_list); // Convert to array + + // Get database connection for this branch + $mysql_connection = $cawangan_available->where('kodcaw', $kodcaw)->first()->mysql ?? null; + if (!$mysql_connection) { + continue; + } + + // Sum nilai_marhun for matching norujukan in gadai table + $total_nilai_marhun_by_cawangan[$kodcaw] = Gadai::on($mysql_connection) + ->whereIn('norujukan', $norujukan_list) + ->sum('nilaimarhun'); + } + + // Step 3: Merge ansuran summary with total_nilai_marhun + $summary_ansuran_by_cawangan = $ansuran_query + ->filter(function ($ansuran_cawangan) use ($kodcaw_array) { + return in_array($ansuran_cawangan['kod_cawangan'], $kodcaw_array); + }) + ->map(function ($ansuran_cawangan) use ($kod_caw_with_cawangan_detail_array, $total_nilai_marhun_by_cawangan) { + $kodcaw = $ansuran_cawangan->kod_cawangan; + $ansuran_cawangan->cawangan_detail = $kod_caw_with_cawangan_detail_array[$kodcaw] ?? 'Unknown'; + $ansuran_cawangan->total_nilai_marhun = $total_nilai_marhun_by_cawangan[$kodcaw] ?? 0; + unset($ansuran_cawangan->norujukan_list); // Remove unnecessary field + return $ansuran_cawangan; + }) + ->values(); + + // Step 4: Calculate overall totals + $total_summary = [ + 'bilangan_ansuran' => 0, + 'bayaran_pembiayaan' => 0, + 'bayaran_kos_keuntungan' => 0, + 'jumlah_bayaran' => 0, + 'total_nilai_marhun' => 0, + ]; + + foreach ($summary_ansuran_by_cawangan as $ansuran_cawangan) { + $total_summary['bilangan_ansuran'] += $ansuran_cawangan->bilangan_ansuran ?? 0; + $total_summary['bayaran_pembiayaan'] += $ansuran_cawangan->bayaran_pembiayaan ?? 0; + $total_summary['bayaran_kos_keuntungan'] += $ansuran_cawangan->bayaran_kos_keuntungan ?? 0; + $total_summary['jumlah_bayaran'] += $ansuran_cawangan->jumlah_bayaran ?? 0; + $total_summary['total_nilai_marhun'] += $ansuran_cawangan->total_nilai_marhun ?? 0; + } + + // Step 5: Prepare the overall ansuran summary + $summary_ansuran = [ + 'bilangan_ansuran' => $total_summary['bilangan_ansuran'], + 'bayaran_pembiayaan' => $total_summary['bayaran_pembiayaan'], + 'bayaran_kos_keuntungan' => $total_summary['bayaran_kos_keuntungan'], + 'jumlah_bayaran' => $total_summary['jumlah_bayaran'], + 'total_nilai_marhun' => $total_summary['total_nilai_marhun'], + ]; + + $response = [ + 'summary_aging_by_cawangan' => $summary_ansuran_by_cawangan, + 'summary_aging' => $summary_ansuran, // Now contains the grand totals + ]; + + return json_encode($response); +} + +public function getSummaryLaporanAging(Request $request) +{ + $online_array_db_connection = Helper::getOnlineArrahnConnection(); + $cawangan_available = Cawangan::on($online_array_db_connection) + ->select('kodcaw', 'details_caw', 'mysql')->get(); + + $kod_caw_with_cawangan_detail_array = $cawangan_available->pluck('details_caw', 'kodcaw')->toArray(); + + $current = Carbon::now(); + $endDate = Carbon::parse($request->endDate); + $bulan = $endDate->month; + $tahun = $endDate->year; + + $result = []; + + foreach ($kod_caw_with_cawangan_detail_array as $kodcaw => $details_caw) { + $cawangan = $cawangan_available->firstWhere('kodcaw', $kodcaw); + if (!$cawangan) { + continue; + } + + // Determine which table to query + if ($current->month == $bulan && $current->year == $tahun) { + $audit = Gadai::on($cawangan->mysql) + ->where(function ($q) use ($endDate) { + $q->where([ + ['tagpalsu', '=', 0], + ['t_gadai', '<=', $endDate->toDateString()], + ['sttebus', '=', ''] + ]) + ->orWhere([ + ['tagpalsu', '=', 0], + ['t_update', '>', $endDate->toDateString()], + ['sttebus', '!=', ''], + ['t_gadai', '<=', $endDate->toDateString()] + ]); + }); + } else { + $tableMap = [ + 1 => StokAudit1::class, 2 => StokAudit2::class, 3 => StokAudit3::class, + 4 => StokAudit4::class, 5 => StokAudit5::class, 6 => StokAudit6::class, + 7 => StokAudit7::class, 8 => StokAudit8::class, 9 => StokAudit9::class, + 10 => StokAudit10::class, 11 => StokAudit11::class, 12 => StokAudit12::class, + ]; + + $model = $tableMap[$bulan] ?? null; + if (!$model) { + continue; + } + + $audit = $model::on($cawangan->mysql)->where('tahun', $tahun); + } + + // Categorize data by tempoh + $summary = []; + + for ($i = 1; $i <= 13; $i++) { + $query = clone $audit; + + if ($i == 13) { + $filtered = $query->where('tempoh', '>', 12); + } elseif ($i == 1) { + $filtered = $query->whereBetween('tempoh', [0.01, 1.5]); + } elseif ($i == 12) { + $filtered = $query->where('tempoh', 12); + } else { + $filtered = $query->where([['tempoh','>',$i-(0.5)],['tempoh','<=',$i+(0.5)]]); + } + + $labelMap = [ + 1 => '1 Bulan', + 2 => '2 Bulan', + 3 => '3 Bulan', + 4 => '4 Bulan', + 5 => '5 Bulan', + 6 => '6 Bulan', + 7 => '7 bulan', + 8 => '8 Bulan', + 9 => '9 Bulan', + 10 => '10 Bulan', + 11 => '11 Bulan', + 12 => '12 Bulan', + 13 => '> 12 Bulan' + ]; + + $summary[] = [ + 'label' => $labelMap[$i], + 'count' => $filtered->count(), + 'sum_bakipjm' => $filtered->sum('bakipjm'), + ]; + } + + $result[] = [ + 'kodcaw' => $kodcaw, + 'cawangan' => $details_caw, + 'tahun' => $tahun, + 'bulan' => $bulan, + 'summary_by_tempoh' => $summary + ]; + } + + return response()->json($result); +} + + + + + + +} diff --git a/routes/report.php b/routes/report.php index 0f2b4d1..1f9ab63 100644 --- a/routes/report.php +++ b/routes/report.php @@ -33,5 +33,7 @@ $router->group(['prefix' => 'api/reports'], function () use ($router) { $router->get('lelongan', ['uses' => 'LelonganController@getSummaryLaporanLelong']); $router->get('lelongan/{kod_cawangan}', ['uses' => 'LelonganController@getLaporanCawangan']); + + $router->get('aging', ['uses' => 'AgingController@getSummaryLaporanAging']); }); }); From 1960ddbf987018f59314cd8970a224ddd6f36234 Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Mon, 7 Apr 2025 23:37:09 +0800 Subject: [PATCH 052/117] added created_at for online transaction --- app/Http/Controllers/TransactionOnlineController.php | 1 + app/Http/Controllers/VaultController.php | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/TransactionOnlineController.php b/app/Http/Controllers/TransactionOnlineController.php index b6683a7..92b6e6a 100644 --- a/app/Http/Controllers/TransactionOnlineController.php +++ b/app/Http/Controllers/TransactionOnlineController.php @@ -144,6 +144,7 @@ class TransactionOnlineController extends Controller 'descpt' => 'SERAHAN BAYAR ONLINE - ' . $transaction['norujukan'], 'serahan' => $transaction['total_payment'], 'teller' => 'ONLINE', + 'date_created' => $current ]; try { diff --git a/app/Http/Controllers/VaultController.php b/app/Http/Controllers/VaultController.php index 416752c..333008d 100644 --- a/app/Http/Controllers/VaultController.php +++ b/app/Http/Controllers/VaultController.php @@ -285,7 +285,8 @@ class VaultController extends Controller 'ktacct' => '1000/010', 'descpt' => 'SERAHAN BAYAR ONLINE', 'serahan' => $request->amaun, - 'teller' => 'ONLINE' + 'teller' => 'ONLINE', + 'date_created' => $current ]); // $audit = new Audit(); @@ -317,7 +318,7 @@ class VaultController extends Controller 'descpt' => $request->keterangan, 'pendahuluan' => $request->amaun, 'teller' => $request->teller, - 'date_created' => $current->toDateTimeString() + 'date_created' => $current ]); }else if($request->jenisgldetail == 'serahan') { @@ -329,7 +330,7 @@ class VaultController extends Controller 'descpt' => $request->keterangan, 'serahan' => $request->amaun, 'teller' => $request->teller, - 'date_created' => $current->toDateTimeString() + 'date_created' => $current ]); } From cd07c0ad0e48d2517e5fed3cc7d6b8e22c66a261 Mon Sep 17 00:00:00 2001 From: Ain Izazi Date: Mon, 7 Apr 2025 23:38:19 +0800 Subject: [PATCH 053/117] add serahanv3 --- app/Http/Controllers/PendahuluanSerahanController.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/Http/Controllers/PendahuluanSerahanController.php b/app/Http/Controllers/PendahuluanSerahanController.php index 2510cc3..d596715 100644 --- a/app/Http/Controllers/PendahuluanSerahanController.php +++ b/app/Http/Controllers/PendahuluanSerahanController.php @@ -122,6 +122,16 @@ class PendahuluanSerahanController extends Controller ->where('serahan','>',0) ->orderby('tarikh','desc') ->get(); + }else if($request->jenis == 'serahankepadav3'){ + $gldetail=GlDetail::on($cawangan['mysql']) + ->where('kodcaw','=',$kodcaw) + ->where([['tarikh','>=',$request->mula],['tarikh','<=',$request->hingga]]) + ->where('descpt','LIKE','Serahan Kepada V3%') + ->where('teller','LIKE','%AUTO%') + ->where('serahan','>',0) + ->orderby('tarikh','desc') + ->get(); + }else if($request->jenis == 'serahanonline'){ $gldetail = GlDetail::on($cawangan['mysql']) ->where('kodcaw', '=', $kodcaw) From 10c0b2aeae82b42188d5638cd827b71859935688 Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Sun, 13 Apr 2025 12:35:20 +0800 Subject: [PATCH 054/117] tambah bangsa dan agama --- app/Http/Controllers/AdminPageController.php | 105 ++++++++++++++----- 1 file changed, 78 insertions(+), 27 deletions(-) diff --git a/app/Http/Controllers/AdminPageController.php b/app/Http/Controllers/AdminPageController.php index f9ad9cb..74a330d 100644 --- a/app/Http/Controllers/AdminPageController.php +++ b/app/Http/Controllers/AdminPageController.php @@ -3080,36 +3080,87 @@ class AdminPageController extends Controller - public function BilanganPengadai(Request $request){ - - $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first(); - - - $gadai = Gadai::on($cawangan['mysql']) - ->where([['t_gadai','>=',$request->mula],['t_gadai','<=',$request->hingga]]) - ->where('sttebus','=','') - ->select('nokp','sttebus') - ->groupBy('nokp')->get(); - - $gadai_pluck_nokp = $gadai->pluck('nokp'); - - if($request->jenis == 'pekerja'){ - - $customers = Customer::on('mysql7') - ->selectRaw('COUNT(*) AS bilangangadai') - ->addSelect(DB::connection($cawangan['mysql']) - ->raw('keterangan as keterangan')) - ->whereIn('kpbaru', $gadai_pluck_nokp) - ->orWhereIn('kplama', $gadai_pluck_nokp) - ->join('pekerjaan','customer.kodkerja','=','pekerjaan.kodkerja') - ->groupBy('pekerjaan.kodkerja') - ->get(); - + public function BilanganPengadai(Request $request) + { + $cawangan = Cawangan::on('mysql7')->where('kodcaw', $request->kodcaw)->first(); + + $gadai = Gadai::on($cawangan['mysql']) + ->where('t_gadai', '>=', $request->mula) + ->where('t_gadai', '<=', $request->hingga) + ->where('sttebus', '') + ->select('nokp') + ->groupBy('nokp') + ->get(); + + $gadai_pluck_nokp = $gadai->pluck('nokp'); + $jenis = $request->jenis; + $filter_value = $request->value ?? null; + + $customers = []; + + if ($jenis === 'pekerja') { + $customers = Customer::on('mysql7') + ->selectRaw('pekerjaan.keterangan, COUNT(*) AS bilangangadai') + ->whereIn('kpbaru', $gadai_pluck_nokp) + ->orWhereIn('kplama', $gadai_pluck_nokp) + ->join('pekerjaan', 'customer.kodkerja', '=', 'pekerjaan.kodkerja') + ->groupBy('pekerjaan.kodkerja') + ->get(); + + } elseif ($jenis === 'agama') { + $agamaMap = [ + '01' => 'Islam', + '02' => 'Hindu', + '03' => 'Buddha', + '04' => 'Kristian', + '05' => 'Lain-lain', + '' => 'Tiada Data', + ]; + + $query = Customer::on('mysql7') + ->selectRaw('kodugama as keterangan, COUNT(*) as bilangangadai') + ->whereIn('kpbaru', $gadai_pluck_nokp) + ->orWhereIn('kplama', $gadai_pluck_nokp); + + if ($filter_value) { + $query->where('kodugama', $filter_value); // contoh: '01' } - - + + $customers = $query->groupBy('kodugama')->get(); + + foreach ($customers as $customer) { + $customer->keterangan = $agamaMap[$customer->keterangan] ?? $customer->keterangan; + } + + } elseif ($jenis === 'bangsa') { + $bangsaMap = [ + 'M' => 'Melayu', + 'C' => 'Cina', + 'I' => 'India', + 'L' => 'Lain-lain', + '' => 'Tiada Data', + ]; + + $query = Customer::on('mysql7') + ->selectRaw('bangsa as keterangan, COUNT(*) as bilangangadai') + ->whereIn('kpbaru', $gadai_pluck_nokp) + ->orWhereIn('kplama', $gadai_pluck_nokp); + + if ($filter_value) { + $query->where('bangsa', $filter_value); // contoh: 'M' + } + + $customers = $query->groupBy('bangsa')->get(); + + foreach ($customers as $customer) { + $customer->keterangan = $bangsaMap[$customer->keterangan] ?? $customer->keterangan; + } + } + return response()->json($customers); } + + public function AkruKeuntunganSebenar(Request $request){ From 9d4a0604fb7c2403386a2e12579f3a2ecb96051b Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Mon, 21 Apr 2025 14:57:28 +0800 Subject: [PATCH 055/117] tambah laporan outstanding --- .../Reports/OutstandingController.php | 88 +++++++++++++++++++ routes/report.php | 2 + 2 files changed, 90 insertions(+) create mode 100644 app/Http/Controllers/Reports/OutstandingController.php diff --git a/app/Http/Controllers/Reports/OutstandingController.php b/app/Http/Controllers/Reports/OutstandingController.php new file mode 100644 index 0000000..88e8e33 --- /dev/null +++ b/app/Http/Controllers/Reports/OutstandingController.php @@ -0,0 +1,88 @@ +getCawanganReport(); + } + + public function getSummaryLaporanOutstanding(Request $request) + { + $endDate = $request->endDate; + + // Get active branch DBs from helper + $active_cawangan_db_connection = Helper::getActiveCawanganDbConnection(); + + // Fetch branch details with mysql info + $cawangan_available = Cawangan::select('kodcaw', 'details_caw', 'mysql') + ->whereIn('mysql', $active_cawangan_db_connection) + ->get(); + + // Get db connections + $active_cawangan_db_connection = array_column($cawangan_available->toArray(), 'mysql'); + + // Map branch info for response + $active_cawangan_detail = $cawangan_available->map(function ($c) { + return [ + 'kodcaw' => $c->kodcaw, + 'details_caw' => $c->details_caw, + ]; + })->values()->toArray(); + + // Query outstanding summary for each branch + $summary_Outstanding_data = array_map(function ($db_connection) use ($endDate) { + // SAG LAMA + $queryLama = Gadai::on($db_connection) + ->selectRaw('COUNT(norujukan) as total_gadaian, SUM(pinjaman) as sum_pinjaman') + ->where('tagbaru', 0) + ->where('sttebus', ''); + + // SAG BARU + $queryBaru = Gadai::on($db_connection) + ->selectRaw('COUNT(norujukan) as total_gadaian2, SUM(pinjaman) as sum_pinjaman2') + ->where('tagbaru', 1) + ->where('sttebus', ''); + + // SEMUA + $queryAll = Gadai::on($db_connection) + ->selectRaw('COUNT(norujukan) as total_gadaian_all, SUM(pinjaman) as sum_pinjaman_all') + ->where('sttebus', ''); + + if (!empty($endDate)) { + $queryLama->where('t_gadai', '<=', $endDate); + $queryBaru->where('t_gadai', '<=', $endDate); + $queryAll->where('t_gadai', '<=', $endDate); + } + + return array_merge( + $queryLama->first()->toArray(), + $queryBaru->first()->toArray(), + $queryAll->first()->toArray() + ); + }, $active_cawangan_db_connection); + + // Combine data with branch info + $response = array_map(function ($cawangan_detail, $outstanding_data) { + return array_merge($cawangan_detail, $outstanding_data); + }, $active_cawangan_detail, $summary_Outstanding_data); + + return response()->json($response); + } + + + +} diff --git a/routes/report.php b/routes/report.php index 1f9ab63..8f09b86 100644 --- a/routes/report.php +++ b/routes/report.php @@ -35,5 +35,7 @@ $router->group(['prefix' => 'api/reports'], function () use ($router) { $router->get('lelongan/{kod_cawangan}', ['uses' => 'LelonganController@getLaporanCawangan']); $router->get('aging', ['uses' => 'AgingController@getSummaryLaporanAging']); + + $router->get('outstanding', ['uses' => 'OutstandingController@getSummaryLaporanOutstanding']); }); }); From f1580db8f05fdf5d0d33a333893638d69b521615 Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Tue, 22 Apr 2025 17:09:22 +0800 Subject: [PATCH 056/117] edit sort cawangan --- .../Controllers/Reports/GadaianController.php | 23 +++++++++++----- .../Reports/PenebusanController.php | 26 ++++++++++++------- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/app/Http/Controllers/Reports/GadaianController.php b/app/Http/Controllers/Reports/GadaianController.php index ac5fd80..149de0d 100644 --- a/app/Http/Controllers/Reports/GadaianController.php +++ b/app/Http/Controllers/Reports/GadaianController.php @@ -26,13 +26,24 @@ class GadaianController extends Controller $startDate = $request->startDate; $endDate = $request->endDate; + // Get active branch DBs from helper $active_cawangan_db_connection = Helper::getActiveCawanganDbConnection(); - - $active_cawangan_db_name = array_map(function ($db_connection) { - return config('database.connections' . '.' . $db_connection . '.' . 'database'); - }, $active_cawangan_db_connection); - - $active_cawangan_detail = Cawangan::select('kodcaw', 'details_caw')->whereIn('db_name', $active_cawangan_db_name)->get()->toArray(); + + // Fetch branch details with mysql info + $cawangan_available = Cawangan::select('kodcaw', 'details_caw', 'mysql') + ->whereIn('mysql', $active_cawangan_db_connection) + ->get(); + + // Get db connections + $active_cawangan_db_connection = array_column($cawangan_available->toArray(), 'mysql'); + + // Map branch info for response + $active_cawangan_detail = $cawangan_available->map(function ($c) { + return [ + 'kodcaw' => $c->kodcaw, + 'details_caw' => $c->details_caw, + ]; + })->values()->toArray(); $summary_gadaian_data = array_map(function ($db_connection) use ($request) { $query = Gadai::on($db_connection); diff --git a/app/Http/Controllers/Reports/PenebusanController.php b/app/Http/Controllers/Reports/PenebusanController.php index 4a4447b..4a79cb0 100644 --- a/app/Http/Controllers/Reports/PenebusanController.php +++ b/app/Http/Controllers/Reports/PenebusanController.php @@ -21,16 +21,24 @@ class PenebusanController extends Controller public function getSummaryLaporanTebus(Request $request) { + // Get active branch DBs from helper $active_cawangan_db_connection = Helper::getActiveCawanganDbConnection(); - $arrahn_master_db_connection = Cawangan::all()->pluck('mysql')->toArray(); - - $active_cawangan_db_connection = array_intersect($active_cawangan_db_connection, $arrahn_master_db_connection); - - $active_cawangan_db_name = array_map(function ($db_connection) { - return config('database.connections' . '.' . $db_connection . '.' . 'database'); - }, $active_cawangan_db_connection); - - $active_cawangan_detail = Cawangan::select('kodcaw', 'details_caw')->whereIn('db_name', $active_cawangan_db_name)->get()->toArray(); + + // Fetch branch details with mysql info + $cawangan_available = Cawangan::select('kodcaw', 'details_caw', 'mysql') + ->whereIn('mysql', $active_cawangan_db_connection) + ->get(); + + // Get db connections + $active_cawangan_db_connection = array_column($cawangan_available->toArray(), 'mysql'); + + // Map branch info for response + $active_cawangan_detail = $cawangan_available->map(function ($c) { + return [ + 'kodcaw' => $c->kodcaw, + 'details_caw' => $c->details_caw, + ]; + })->values()->toArray(); $summary_penebusan_data = array_map(function ($db_connection) use ($request) { $penebusan = Tebus::on($db_connection) From dc609bbe73cfcf5ead3fed721680ab36b24db375 Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Sun, 4 May 2025 11:25:11 +0800 Subject: [PATCH 057/117] tambah laporan peti besi semua cawangan --- .../Reports/OutstandingController.php | 49 +++++++++++++++++++ routes/report.php | 2 + 2 files changed, 51 insertions(+) diff --git a/app/Http/Controllers/Reports/OutstandingController.php b/app/Http/Controllers/Reports/OutstandingController.php index 88e8e33..7b8c110 100644 --- a/app/Http/Controllers/Reports/OutstandingController.php +++ b/app/Http/Controllers/Reports/OutstandingController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Reports; use App\Http\Controllers\Controller; use App\Cawangan; use App\Gadai; +use App\Vault; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use App\Services\Reports\OutstandingService as ReportOutstandingService; @@ -82,6 +83,54 @@ class OutstandingController extends Controller return response()->json($response); } + + public function getSummaryLaporanPetibesi(Request $request) + { + $endDate = $request->endDate; + + // Get active branch DBs from helper + $active_cawangan_db_connection = Helper::getActiveCawanganDbConnection(); + + // Fetch branch details with mysql info + $cawangan_available = Cawangan::select('kodcaw', 'details_caw', 'mysql') + ->whereIn('mysql', $active_cawangan_db_connection) + ->get(); + + // Get db connections + $active_cawangan_db_connection = array_column($cawangan_available->toArray(), 'mysql'); + + // Map branch info for response + $active_cawangan_detail = $cawangan_available->map(function ($c) { + return [ + 'kodcaw' => $c->kodcaw, + 'details_caw' => $c->details_caw, + ]; + })->values()->toArray(); + + // Query petibesi summary for each branch + $summary_petibesi_data = array_map(function ($db_connection) use ($endDate) { + + + // SEMUA + $queryAll = Vault::on($db_connection) + ->selectRaw('bakieod'); + + if (!empty($endDate)) { + $queryAll->where('tarikh', '=', $endDate); + } + + return array_merge( + $queryAll->first()->toArray() + ); + }, $active_cawangan_db_connection); + + // Combine data with branch info + $response = array_map(function ($cawangan_detail, $petibesi_data) { + return array_merge($cawangan_detail, $petibesi_data); + }, $active_cawangan_detail, $summary_petibesi_data); + + return response()->json($response); + } diff --git a/routes/report.php b/routes/report.php index 8f09b86..06d4920 100644 --- a/routes/report.php +++ b/routes/report.php @@ -37,5 +37,7 @@ $router->group(['prefix' => 'api/reports'], function () use ($router) { $router->get('aging', ['uses' => 'AgingController@getSummaryLaporanAging']); $router->get('outstanding', ['uses' => 'OutstandingController@getSummaryLaporanOutstanding']); + + $router->get('petibesi', ['uses' => 'OutstandingController@getSummaryLaporanPetibesi']); }); }); From fcdda073501e4b7cc6379d5a07cd3fa06743b5ea Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Thu, 15 May 2025 13:13:50 +0800 Subject: [PATCH 058/117] tambah api analisa controller --- .../Controllers/Reports/AnalisaController.php | 70 +++++++++++++++++++ routes/report.php | 2 + 2 files changed, 72 insertions(+) create mode 100644 app/Http/Controllers/Reports/AnalisaController.php diff --git a/app/Http/Controllers/Reports/AnalisaController.php b/app/Http/Controllers/Reports/AnalisaController.php new file mode 100644 index 0000000..ebf5b75 --- /dev/null +++ b/app/Http/Controllers/Reports/AnalisaController.php @@ -0,0 +1,70 @@ +getCawanganReport(); + } + + public function getSummaryLaporanPelangganBaru(Request $request) + { + $startDate = $request->startDate; + $endDate = $request->endDate; + + // Get active branch DBs from helper + $active_cawangan_db_connection = Helper::getActiveCawanganDbConnection(); + + // Fetch branch details with mysql info + $cawangan_available = Cawangan::select('kodcaw', 'details_caw', 'mysql') + ->whereIn('mysql', $active_cawangan_db_connection) + ->get(); + + $active_cawangan_db_connection = array_column($cawangan_available->toArray(), 'mysql'); + + $active_cawangan_detail = $cawangan_available->map(function ($c) { + return [ + 'kodcaw' => $c->kodcaw, + 'details_caw' => $c->details_caw, + ]; + })->values()->toArray(); + + $summary_gadaian_data = array_map(function ($db_connection) use ($startDate, $endDate) { + $query = Gadai::on($db_connection) + ->select( + DB::raw('count(DISTINCT nokp) as total_pelanggan_baru'), + DB::raw('sum(berat) as sum_berat'), + DB::raw('sum(nilaimarhun) as sum_nilai_marhun'), + DB::raw('sum(pinjaman) as sum_pinjaman') + ) + ->whereIn('nokp', function ($sub) use ($startDate, $endDate) { + $sub->select('nokp') + ->from('gadai as g2') + ->groupBy('nokp') + ->havingRaw('MIN(t_gadai) BETWEEN ? AND ?', [$startDate, $endDate]); + }); + + return $query->get()->toArray(); + }, $active_cawangan_db_connection); + + $response = array_map(function ($cawangan_detail, $summary_gadaian_data) { + return array_merge($cawangan_detail, $summary_gadaian_data[0]); + }, $active_cawangan_detail, $summary_gadaian_data); + + return response()->json($response); + } + + +} diff --git a/routes/report.php b/routes/report.php index 06d4920..cf1206e 100644 --- a/routes/report.php +++ b/routes/report.php @@ -39,5 +39,7 @@ $router->group(['prefix' => 'api/reports'], function () use ($router) { $router->get('outstanding', ['uses' => 'OutstandingController@getSummaryLaporanOutstanding']); $router->get('petibesi', ['uses' => 'OutstandingController@getSummaryLaporanPetibesi']); + + $router->get('pelangganbaru', ['uses' => 'AnalisaController@getSummaryLaporanPelangganBaru']); }); }); From 78fbc4dba195cfa3534c99103a9ba9b354f37a8c Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Thu, 15 May 2025 14:52:55 +0800 Subject: [PATCH 059/117] pembetulan api untuk pelanggan baru --- .../Controllers/Reports/AnalisaController.php | 37 ++++++++----------- .../Reports/RingkasanHarianService.php | 6 +++ 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/app/Http/Controllers/Reports/AnalisaController.php b/app/Http/Controllers/Reports/AnalisaController.php index ebf5b75..b1ddf36 100644 --- a/app/Http/Controllers/Reports/AnalisaController.php +++ b/app/Http/Controllers/Reports/AnalisaController.php @@ -9,6 +9,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use App\Services\Reports\GadaianService as ReportGadaianService; use App\Helper; +use App\Services\Reports\RingkasanHarianService as ReportRingkasanHarianService; class AnalisaController extends Controller @@ -41,27 +42,21 @@ class AnalisaController extends Controller ]; })->values()->toArray(); - $summary_gadaian_data = array_map(function ($db_connection) use ($startDate, $endDate) { - $query = Gadai::on($db_connection) - ->select( - DB::raw('count(DISTINCT nokp) as total_pelanggan_baru'), - DB::raw('sum(berat) as sum_berat'), - DB::raw('sum(nilaimarhun) as sum_nilai_marhun'), - DB::raw('sum(pinjaman) as sum_pinjaman') - ) - ->whereIn('nokp', function ($sub) use ($startDate, $endDate) { - $sub->select('nokp') - ->from('gadai as g2') - ->groupBy('nokp') - ->havingRaw('MIN(t_gadai) BETWEEN ? AND ?', [$startDate, $endDate]); - }); - - return $query->get()->toArray(); - }, $active_cawangan_db_connection); - - $response = array_map(function ($cawangan_detail, $summary_gadaian_data) { - return array_merge($cawangan_detail, $summary_gadaian_data[0]); - }, $active_cawangan_detail, $summary_gadaian_data); + // Iterate through each branch and get data + $response = array_map(function ($db_connection, $cawangan_detail) use ($request) { + // Pass the required parameters to the service constructor + $reportRingkasanHarianService = new ReportRingkasanHarianService($cawangan_detail['kodcaw'], $request); + + // Get the customer count from the service + $bilangan_customer_baru = $reportRingkasanHarianService->getCustomerSummary(); // Call public method + + // Return the response + return [ + 'kodcaw' => $cawangan_detail['kodcaw'], + 'details_caw' => $cawangan_detail['details_caw'], + 'total_pelanggan_baru' => $bilangan_customer_baru, + ]; + }, $active_cawangan_db_connection, $active_cawangan_detail); return response()->json($response); } diff --git a/app/Services/Reports/RingkasanHarianService.php b/app/Services/Reports/RingkasanHarianService.php index b2331bf..4167b47 100644 --- a/app/Services/Reports/RingkasanHarianService.php +++ b/app/Services/Reports/RingkasanHarianService.php @@ -266,6 +266,12 @@ class RingkasanHarianService } + // Public method that calls the private method + public function getCustomerSummary() + { + return $this->getBilanganCustomerBaru(); // Access the private method here + } + private function getBayarRugiLelong() { $bayarRugiLelong = TuntutBaki::on($this->connectionCawangan) From 623db125e57e9acb8e4c6c67bb997c694dd2bc51 Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Tue, 20 May 2025 12:37:19 +0800 Subject: [PATCH 060/117] tambah pelanggan aktif untuk admin portal --- .../Controllers/Reports/AnalisaController.php | 107 ++++++++++++++++++ routes/report.php | 2 + 2 files changed, 109 insertions(+) diff --git a/app/Http/Controllers/Reports/AnalisaController.php b/app/Http/Controllers/Reports/AnalisaController.php index b1ddf36..df7401b 100644 --- a/app/Http/Controllers/Reports/AnalisaController.php +++ b/app/Http/Controllers/Reports/AnalisaController.php @@ -5,6 +5,8 @@ namespace App\Http\Controllers\Reports; use App\Http\Controllers\Controller; use App\Cawangan; use App\Gadai; +use App\Customer; +use App\Tebus; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use App\Services\Reports\GadaianService as ReportGadaianService; @@ -61,5 +63,110 @@ class AnalisaController extends Controller return response()->json($response); } + // public function getSummaryLaporanPelangganAktif(Request $request) + // { + // $startDate = $request->startDate; + // $endDate = $request->endDate; + + // // Dapatkan senarai cawangan aktif + // $active_cawangan_db_connection = Helper::getActiveCawanganDbConnection(); + + // // Dapatkan maklumat cawangan + // $cawangan_available = Cawangan::select('kodcaw', 'details_caw', 'mysql') + // ->whereIn('mysql', $active_cawangan_db_connection) + // ->get(); + + // $active_cawangan_detail = $cawangan_available->map(function ($c) { + // return [ + // 'kodcaw' => $c->kodcaw, + // 'details_caw' => $c->details_caw, + // 'mysql' => $c->mysql, + // ]; + // })->toArray(); + + // $response = array_map(function ($cawangan) use ($startDate, $endDate) { + // $db_connection = $cawangan['mysql']; + + // $total_aktif = Gadai::on($db_connection) + // ->where(function ($query) use ($startDate) { + // $query->where('sttebus', '') + // ->where('t_update', '>=', $startDate); + // }) + // ->where('t_gadai', '<=', $endDate) + // ->distinct('nokp') + // ->count('nokp'); + + // return [ + // 'kodcaw' => $cawangan['kodcaw'], + // 'details_caw' => $cawangan['details_caw'], + // 'total_pelanggan_aktif' => $total_aktif, + // ]; + // }, $active_cawangan_detail); + + + // return response()->json($response); + // } + + +public function getSummaryLaporanPelangganAktif(Request $request) +{ + $startDate = $request->startDate; + $endDate = $request->endDate; + + $active_cawangan = Cawangan::select('kodcaw', 'details_caw', 'mysql') + ->whereIn('mysql', Helper::getActiveCawanganDbConnection()) + ->get(); + + $response = $active_cawangan->map(function ($cawangan) use ($startDate, $endDate) { + $db = $cawangan->mysql; + + // Ambil nokp dari Gadai + $nokp_gadai = DB::connection($db)->table('gadai') + ->whereBetween('t_gadai', [$startDate, $endDate]) + ->pluck('nokp') + ->toArray(); + + // Ambil nokp dari Tebus + $nokp_tebus = DB::connection($db)->table('tebus as t') + ->join('gadai as g', 't.norujukan', '=', 'g.norujukan') + ->whereBetween('t.t_tebus', [$startDate, $endDate]) + ->pluck('g.nokp') + ->toArray(); + + // Gabung semua nokp + $semua_nokp = collect(array_merge($nokp_gadai, $nokp_tebus)) + ->filter(fn($item) => !empty($item)) + ->unique() + ->values(); + + if ($semua_nokp->isEmpty()) { + // Jika array kosong, kita kembalikan hasil kosong + $pelanggan_aktif = collect(); + } else { + $pelanggan_aktif = Customer::on($db) + ->where(function ($query) use ($semua_nokp) { + $query->whereIn('kpbaru', $semua_nokp) + ->orWhereIn('kplama', $semua_nokp); + }) + ->get(['nama', 'kpbaru', 'kplama']) + ->toArray();; + } + + return [ + 'kodcaw' => $cawangan->kodcaw, + 'details_caw' => $cawangan->details_caw, + 'total_pelanggan_aktif' => count($semua_nokp), + ]; + }); + + return response()->json($response); +} + + + + + + + } diff --git a/routes/report.php b/routes/report.php index cf1206e..8fad3f0 100644 --- a/routes/report.php +++ b/routes/report.php @@ -41,5 +41,7 @@ $router->group(['prefix' => 'api/reports'], function () use ($router) { $router->get('petibesi', ['uses' => 'OutstandingController@getSummaryLaporanPetibesi']); $router->get('pelangganbaru', ['uses' => 'AnalisaController@getSummaryLaporanPelangganBaru']); + + $router->get('pelangganaktif', ['uses' => 'AnalisaController@getSummaryLaporanPelangganAktif']); }); }); From 6f98917a38ddd16290a443a7e92c037afa66c60c Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Tue, 27 May 2025 14:29:15 +0800 Subject: [PATCH 061/117] tambah laporan ansuran keseluruhan --- app/Services/Reports/AnsuranService.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/Services/Reports/AnsuranService.php b/app/Services/Reports/AnsuranService.php index a2bd047..90f83c6 100644 --- a/app/Services/Reports/AnsuranService.php +++ b/app/Services/Reports/AnsuranService.php @@ -61,6 +61,18 @@ class AnsuranService ]; }); + // **Tidak Group By Teller** untuk keseluruhan laporan + $total_ansuran_keseluruhan = $total_ansuran->map(function ($ansuran) { + return [ + 'norujukan' => $ansuran['norujukan'], + 'nama' => $ansuran['nama'], + 'no_kp' => $ansuran['no_kp'], + 'bayaran_pembiayaan' => $ansuran['bayaran_pembiayaan'], + 'bayaran_keuntungan' => $ansuran['bayaran_keuntungan'], + 'jumlah_ansuran' => $ansuran['jumlah_ansuran'], + ]; + }); + $total_ansuran = $total_ansuran->groupBy('teller'); $ansuran_tellers = $total_ansuran->keys(); @@ -86,6 +98,7 @@ class AnsuranService ], 'cawangan_detail' => $cawangan_detail, 'total_ansuran' => $total_ansuran, + 'total_ansuran_keseluruhan' => $total_ansuran_keseluruhan, // Tambahkan keseluruhan laporan 'summary_ansuran' => $total_summary_ansuran, ]; From c3b916cc74c1cb12f346631171a1e784ab73e0ad Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Wed, 11 Jun 2025 12:35:39 +0800 Subject: [PATCH 062/117] tambah laporan baki lelong di adminportal --- .../Reports/LelonganController.php | 72 +++++++++++++++ app/Services/Reports/LelonganService.php | 92 +++++++++++++++++++ routes/report.php | 4 + 3 files changed, 168 insertions(+) diff --git a/app/Http/Controllers/Reports/LelonganController.php b/app/Http/Controllers/Reports/LelonganController.php index 0faa26f..bdc0f4d 100644 --- a/app/Http/Controllers/Reports/LelonganController.php +++ b/app/Http/Controllers/Reports/LelonganController.php @@ -85,4 +85,76 @@ class LelonganController extends Controller return json_encode($response); } +public function getSummaryLaporanBakiLelongBelumTuntut(Request $request) + { + $onDate = $request->onDate; + $startDate = $request->startDate; + $endDate = $request->endDate; + + // Get active branches in the order we want + $active_cawangan_db_connection = Helper::getActiveCawanganDbConnection(); + + // Preserve keys while mapping database names + $active_cawangan_db_name = array_combine( + $active_cawangan_db_connection, + array_map(function ($db_connection) { + return config('database.connections.' . $db_connection . '.database'); + }, $active_cawangan_db_connection) + ); + // dd($active_cawangan_db_name); + + // Retrieve branch details and re-index by db_name + $active_cawangan_detail = Cawangan::select('kodcaw', 'details_caw', 'db_name') + ->whereIn('db_name', array_values($active_cawangan_db_name)) + ->get() + ->keyBy('db_name') + ->toArray(); + // dd($active_cawangan_detail); + + // Retrieve lelong summary data and re-index by db_connection + $summary_lelongan_data = []; + foreach ($active_cawangan_db_connection as $db_connection) { + $query = Lelong::on($db_connection) + ->join('gadai', 'gadai.norujukan', '=', 'lelong.norujukan') + ->select(DB::raw('count(lelong.norujukan) as total_lelongan, + sum(lelong.berat) as sum_berat, + sum(lelong.nilaimarhun) as sum_nilai_marhun, + sum(gadai.pinjaman) as sum_pinjaman, + sum(lelong.pinjaman) as sum_bakipjm, + sum(lelong.bakiupah) as sum_bakiupah, + sum(lelong.cajlain) as sum_cajlain, + sum(lelong.cajlelong) as sum_cajlelong, + sum(lelong.hargajual) as sum_hargajual, + sum(lelong.baki) as sum_baki')) + ->whereNull('lelong.trkhtuntut'); + + + if ($request->filled('startDate') && $request->filled('endDate')) { + $query->whereBetween('lelong.t_lelong', [$request->startDate, $request->endDate]); + } + + $summary_lelongan_data[$db_connection] = $query->first()->toArray(); + } + + // Ensure data is sorted according to getActiveCawanganDbConnection() + $response = []; + foreach ($active_cawangan_db_connection as $db_connection) { + $db_name = $active_cawangan_db_name[$db_connection] ?? null; + if ($db_name && isset($active_cawangan_detail[$db_name])) { + $response[] = array_merge( + $active_cawangan_detail[$db_name], + $summary_lelongan_data[$db_connection] ?? [] + ); + } + } + + return json_encode($response); + } + + public function getLaporanBakiLelongBelumTuntutCawangan(string $kod_cawangan, Request $request) + { + $reportLelonganService = new ReportLelonganService($kod_cawangan, $request); + return $reportLelonganService->getCawanganReportBakiLelongBelumTuntut(); + } + } diff --git a/app/Services/Reports/LelonganService.php b/app/Services/Reports/LelonganService.php index 8df6d04..f64cad8 100644 --- a/app/Services/Reports/LelonganService.php +++ b/app/Services/Reports/LelonganService.php @@ -252,4 +252,96 @@ class LelonganService }, $marhun_lelongan); return $marhun_lelongan; } + + public function getCawanganReportBakiLelongBelumTuntut() + { + $cawangan_connection = Cawangan::where('kodcaw', $this->kod_cawangan)->first()->mysql; + + $query_total_lelongan = Lelong::on($cawangan_connection) + ->join('gadai', 'gadai.norujukan', '=', 'lelong.norujukan') // Joining gadai table + ->select( + 'lelong.t_lelong', + 'lelong.norujukan', + 'gadai.nokp', + 'gadai.masa', + 'lelong.berat', + 'lelong.nilaimarhun', + 'gadai.pinjaman', + 'gadai.percentpinj', + 'lelong.teller', + 'gadai.bakipjm', // Fetch pinjaman from gadai + 'gadai.marhun' // Fetch marhun from gadai + ) + ->whereNull('lelong.trkhtuntut'); + + $query_total_lelongan->when(!empty($this->startDate) and !empty($this->endDate), function ($q) { + return $q->where('lelong.t_lelong', '>=', $this->startDate) + ->where('lelong.t_lelong', '<=', $this->endDate); + }); + + $total_lelongan = $this->getTotalLelongan($query_total_lelongan); + // dd($total_lelongan); + $total_summary_lelongan_teller = $this->getTotalSummaryLelonganGroupByTeller($query_total_lelongan); + $total_summary_lelongan = $this->getTotalSummaryLelongan($query_total_lelongan); + $customer_info = $this->getCustomerInfo($total_lelongan); + $marhun_lelongan = $this->getMarhunLelongan($total_lelongan, $cawangan_connection); + $cawangan_detail = $this->getCawanganDetail($cawangan_connection); + + $total_lelongan = $total_lelongan->zip($customer_info, $marhun_lelongan)->map(function ($data) { + + [$lelong, $customer_info, $marhun_lelongan] = $data; + + return [ + 'no_rujukan' => $lelong['norujukan'], + 'nama' => $customer_info['nama'], + 'alamat' => $customer_info['alamat1'], + 'no_kp' => $lelong['nokp'], + 'masa' => $lelong['masa'], + 'marhun' => $marhun_lelongan, + 'berat' => $lelong['berat'], + 'nilai_marhun' => $lelong['nilaimarhun'], + 'pinjaman' => $lelong['pinjaman'], + 'peratusan_margin_pinjaman' => $lelong['percentpinj'], + 'bakipjm' => $lelong['bakipjm'], + 'keuntungan' => $lelong['bakiupah'], + 'cajlelong' => $lelong['cajlelong'], + 'hargajual' => $lelong['hargajual'], + 'baki' => $lelong['baki'], + 'teller' => $lelong['teller'], + 't_lelong' => $lelong['t_lelong'], + ]; + }); + + + $total_lelongan = $total_lelongan->groupBy('teller'); + + $lelongan_tellers = $total_lelongan->keys(); + + $total_lelongan = $total_lelongan + ->zip($total_summary_lelongan_teller) + ->map(function ($data) { + + [$lelongan, $summary] = $data; + + return [ + 'lelongan' => $lelongan, + 'summary_lelongan_teller' => $summary, + ]; + }); + + $total_lelongan = $lelongan_tellers->combine($total_lelongan); + + $data = [ + 'query' => [ + 'startDate' => Helper::formatDate($this->startDate), + 'endDate' => Helper::formatDate($this->endDate), + ], + 'cawangan_detail' => $cawangan_detail, + 'lelongan' => $total_lelongan, + 'summary_lelongan' => $total_summary_lelongan, + ]; + + return json_encode($data); + + } } diff --git a/routes/report.php b/routes/report.php index 8fad3f0..783e100 100644 --- a/routes/report.php +++ b/routes/report.php @@ -43,5 +43,9 @@ $router->group(['prefix' => 'api/reports'], function () use ($router) { $router->get('pelangganbaru', ['uses' => 'AnalisaController@getSummaryLaporanPelangganBaru']); $router->get('pelangganaktif', ['uses' => 'AnalisaController@getSummaryLaporanPelangganAktif']); + + $router->get('bakilelongbelumtuntut', ['uses' => 'LelonganController@getSummaryLaporanBakiLelongBelumTuntut']); + $router->get('bakilelongbelumtuntut/{kod_cawangan}', ['uses' => 'LelonganController@getLaporanBakiLelongBelumTuntutCawangan']); + }); }); From ab59fadb3f17551e69c52c626e69c0f5381bdadb Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Wed, 11 Jun 2025 13:13:18 +0800 Subject: [PATCH 063/117] update baki lelong shj +ve --- app/Services/Reports/LelonganService.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Services/Reports/LelonganService.php b/app/Services/Reports/LelonganService.php index f64cad8..d6f1645 100644 --- a/app/Services/Reports/LelonganService.php +++ b/app/Services/Reports/LelonganService.php @@ -272,7 +272,8 @@ class LelonganService 'gadai.bakipjm', // Fetch pinjaman from gadai 'gadai.marhun' // Fetch marhun from gadai ) - ->whereNull('lelong.trkhtuntut'); + ->whereNull('lelong.trkhtuntut') + ->where('lelong.baki', '>', 0.00); $query_total_lelongan->when(!empty($this->startDate) and !empty($this->endDate), function ($q) { return $q->where('lelong.t_lelong', '>=', $this->startDate) From 639845c2f43dc949e57b479565ef43b7e625b037 Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Wed, 11 Jun 2025 13:18:18 +0800 Subject: [PATCH 064/117] update baki lelong +ve --- app/Http/Controllers/Reports/LelonganController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Reports/LelonganController.php b/app/Http/Controllers/Reports/LelonganController.php index bdc0f4d..2ad4cac 100644 --- a/app/Http/Controllers/Reports/LelonganController.php +++ b/app/Http/Controllers/Reports/LelonganController.php @@ -126,7 +126,8 @@ public function getSummaryLaporanBakiLelongBelumTuntut(Request $request) sum(lelong.cajlelong) as sum_cajlelong, sum(lelong.hargajual) as sum_hargajual, sum(lelong.baki) as sum_baki')) - ->whereNull('lelong.trkhtuntut'); + ->whereNull('lelong.trkhtuntut') + ->where('lelong.baki', '>', 0.00); if ($request->filled('startDate') && $request->filled('endDate')) { From 9c5249b62cc8635e72ae69ce952f9b00c15ca3c5 Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Wed, 11 Jun 2025 15:22:10 +0800 Subject: [PATCH 065/117] update query baki lelong --- app/Http/Controllers/Reports/LelonganController.php | 5 ++++- app/Services/Reports/LelonganService.php | 7 +++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Reports/LelonganController.php b/app/Http/Controllers/Reports/LelonganController.php index 2ad4cac..2d1259d 100644 --- a/app/Http/Controllers/Reports/LelonganController.php +++ b/app/Http/Controllers/Reports/LelonganController.php @@ -126,7 +126,10 @@ public function getSummaryLaporanBakiLelongBelumTuntut(Request $request) sum(lelong.cajlelong) as sum_cajlelong, sum(lelong.hargajual) as sum_hargajual, sum(lelong.baki) as sum_baki')) - ->whereNull('lelong.trkhtuntut') + ->where(function ($query) use ($request) { + $query->whereNull('lelong.trkhtuntut') + ->orWhere('lelong.trkhtuntut', '>', $request->endDate); // or use a specific date: '2025-06-01' + }) ->where('lelong.baki', '>', 0.00); diff --git a/app/Services/Reports/LelonganService.php b/app/Services/Reports/LelonganService.php index d6f1645..c5dbabe 100644 --- a/app/Services/Reports/LelonganService.php +++ b/app/Services/Reports/LelonganService.php @@ -256,7 +256,7 @@ class LelonganService public function getCawanganReportBakiLelongBelumTuntut() { $cawangan_connection = Cawangan::where('kodcaw', $this->kod_cawangan)->first()->mysql; - + $endDate = $this->endDate; $query_total_lelongan = Lelong::on($cawangan_connection) ->join('gadai', 'gadai.norujukan', '=', 'lelong.norujukan') // Joining gadai table ->select( @@ -272,7 +272,10 @@ class LelonganService 'gadai.bakipjm', // Fetch pinjaman from gadai 'gadai.marhun' // Fetch marhun from gadai ) - ->whereNull('lelong.trkhtuntut') + ->where(function ($query) use ($endDate) { + $query->whereNull('lelong.trkhtuntut') + ->orWhere('lelong.trkhtuntut', '>', $endDate); // or use a specific date: '2025-06-01' + }) ->where('lelong.baki', '>', 0.00); $query_total_lelongan->when(!empty($this->startDate) and !empty($this->endDate), function ($q) { From e21b52c6a8bccef9d8d4bc578a5d9c0cd3f7f5d0 Mon Sep 17 00:00:00 2001 From: BTMS2 Date: Wed, 11 Jun 2025 15:34:21 +0800 Subject: [PATCH 066/117] sort by norujukan --- app/Http/Controllers/Reports/LelonganController.php | 3 ++- app/Services/Reports/LelonganService.php | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Reports/LelonganController.php b/app/Http/Controllers/Reports/LelonganController.php index 2d1259d..27a4b7f 100644 --- a/app/Http/Controllers/Reports/LelonganController.php +++ b/app/Http/Controllers/Reports/LelonganController.php @@ -130,7 +130,8 @@ public function getSummaryLaporanBakiLelongBelumTuntut(Request $request) $query->whereNull('lelong.trkhtuntut') ->orWhere('lelong.trkhtuntut', '>', $request->endDate); // or use a specific date: '2025-06-01' }) - ->where('lelong.baki', '>', 0.00); + ->where('lelong.baki', '>', 0.00) + ->orderBy('lelong.norujukan', 'asc'); if ($request->filled('startDate') && $request->filled('endDate')) { diff --git a/app/Services/Reports/LelonganService.php b/app/Services/Reports/LelonganService.php index c5dbabe..caf3f6c 100644 --- a/app/Services/Reports/LelonganService.php +++ b/app/Services/Reports/LelonganService.php @@ -276,7 +276,9 @@ class LelonganService $query->whereNull('lelong.trkhtuntut') ->orWhere('lelong.trkhtuntut', '>', $endDate); // or use a specific date: '2025-06-01' }) - ->where('lelong.baki', '>', 0.00); + ->where('lelong.baki', '>', 0.00) + ->orderBy('lelong.norujukan', 'asc'); + $query_total_lelongan->when(!empty($this->startDate) and !empty($this->endDate), function ($q) { return $q->where('lelong.t_lelong', '>=', $this->startDate) From f138cf34ae254fe142b3860cc19f50a49b74ad58 Mon Sep 17 00:00:00 2001 From: BTMS3 Date: Thu, 12 Jun 2025 10:18:38 +0800 Subject: [PATCH 067/117] tambah laporan belum tuntutbaki kgmk --- app/Http/Controllers/LelongController.php | 31 +++++++++++++++++++++++ routes/web.php | 1 + 2 files changed, 32 insertions(+) diff --git a/app/Http/Controllers/LelongController.php b/app/Http/Controllers/LelongController.php index a480959..aed7157 100644 --- a/app/Http/Controllers/LelongController.php +++ b/app/Http/Controllers/LelongController.php @@ -1885,5 +1885,36 @@ class LelongController extends Controller } + public function showBelumTuntutBakiRangeDate($kodcaw,Request $request){ + + $current = Carbon::now(); + $current = new Carbon(); + + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); + + $belumtuntutbaki = Lelong::on($cawangan['mysql']) + ->select('lelong.t_jual','lelong.norujukan','lelong.baki','gadai.nokp','gadai.pinjaman','lelong.bakiupah','lelong.cajlelong','lelong.hargajual','lelong.hargaasas','lelong.nilaimarhun') + ->leftJoin('gadai', 'gadai.norujukan', '=', 'lelong.norujukan') + ->where('t_jual','>=',$request->mula) + ->where('t_jual','<=',$request->akhir) + ->where('baki','>',0) + ->whereNull('trkhtuntut'); + + $belumtuntut = $belumtuntutbaki->get(); + + $arrayblm = []; + foreach($belumtuntut as $index=>$blm) + { + $customer = Customer::on('mysql7') + ->select('nama','telefon','telefon2','alamat1','alamat2','poskod','koddaerah') + ->where('kpbaru','=',$blm['nokp']) + ->orWhere('kplama','=',$blm['nokp']) + ->first(); + array_push($arrayblm,['nama'=>$customer['nama'],'nokp'=>$blm['nokp'],'norujukan'=>$blm['norujukan'],'t_jual'=>$blm['t_jual'],'hargajual'=>$blm['hargajual'],'pinjaman'=>$blm['pinjaman'],'bakiupah'=>$blm['bakiupah'],'cajlelong'=>$blm['cajlelong'],'baki'=>$blm['baki'],'hargaasas'=>$blm['hargaasas'],'nilaimarhun'=>$blm['nilaimarhun']]); + + } + + return response()->json($arrayblm); + } } diff --git a/routes/web.php b/routes/web.php index 99932e1..3698995 100644 --- a/routes/web.php +++ b/routes/web.php @@ -478,6 +478,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->post('Tuntutbakisimpan/{kodcaw}',['uses'=>'LelongController@simpantuntutbaki']); $router->put('tuntutbakiupdate/{kodcaw}/{norujukan}',['uses'=>'LelongController@updatetagtbaki']); $router->get('TuntutBakiTarikh/{kodcaw}',['uses'=>'LelongController@showTuntutBakiTarikh']); + $router->get('BelumTuntutBakiRangeDate/{kodcaw}',['uses'=>'LelongController@showBelumTuntutBakiRangeDate']); //API KOD PRODUK $router->get('getProduct/{kodcaw}',['uses'=>'ProductController@getProduct']); //add 2021-02-11 From ff6b9b8b84bba782ed3b6754ff3dca6fda0c3bf9 Mon Sep 17 00:00:00 2001 From: Afiq Hamzah Date: Thu, 12 Jun 2025 10:47:08 +0800 Subject: [PATCH 068/117] Update .env.docker.example --- .env.docker.example | 61 +++++++++++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 24 deletions(-) diff --git a/.env.docker.example b/.env.docker.example index 84f0f6f..c4eb388 100644 --- a/.env.docker.example +++ b/.env.docker.example @@ -1,24 +1,31 @@ APP_NAME=Lumen -APP_ENV=local +APP_ENV=localhost APP_KEY=WbPGkYNmXZ6ZQplGlvl0iZ7zyW1b09xa APP_DEBUG=true -APP_URL=https://api.arrahn.com.my +APP_URL=http://apiujrah.arrahn APP_TIMEZONE=Asia/Kuala_Lumpur LOG_CHANNEL=stack LOG_SLACK_WEBHOOK_URL= -DB_CONNECTION=mysql -DB_HOST=database_zone1 -DB_PORT=3306 -DB_DATABASE=arrahn_kb2 -DB_USERNAME=root -DB_PASSWORD=secret +#tukar 12-09-23 +#DB_CONNECTION=mysql +#DB_HOST=127.0.0.1 +#DB_PORT=3306 +#DB_DATABASE=arrahn_kb2 +#DB_USERNAME=root +#DB_PASSWORD=secret + +DB_CONNECTION_36=mysql +DB_HOST_36=database_zone1 +DB_PORT_36=3306 +DB_DATABASE_36=arrahn_kb2 +DB_USERNAME_36=root +DB_PASSWORD_36=secret DB_CONNECTION_2=mysql -DB_HOST_2=database_zone1 -DB_PORT_2=3306 +DB_HOST_2=database_zone1 DB_PORT_2=3306 DB_DATABASE_2=arrahn_wcy DB_USERNAME_2=root DB_PASSWORD_2=secret @@ -240,6 +247,14 @@ DB_DATABASE_33=arrahn_tmlh DB_USERNAME_33=root DB_PASSWORD_33=secret + +DB_CONNECTION_34=mysql +DB_HOST_34=database_zone2 +DB_PORT_34=3306 +DB_DATABASE_34=arrahn_semporna +DB_USERNAME_34=root +DB_PASSWORD_34=secret + DB_CONNECTION_35=mysql DB_HOST_35=database_zone1 DB_PORT_35=3306 @@ -247,19 +262,12 @@ DB_DATABASE_35=arrahn_kb1 DB_USERNAME_35=root DB_PASSWORD_35=secret -DB_CONNECTION_34=mysql -DB_HOST_34=database_zone1 -DB_PORT_34=3306 -DB_DATABASE_34=arrahn_tm -DB_USERNAME_34=root -DB_PASSWORD_34=secret - -DB_CONNECTION_36=mysql -DB_HOST_36=database_zone1 -DB_PORT_36=3306 -DB_DATABASE_36=arrahn_kb2 -DB_USERNAME_36=root -DB_PASSWORD_36=secret +#DB_CONNECTION_37=mysql +#DB_HOST_37=database_zone2 +#DB_PORT_37=3306 +#DB_DATABASE_37=arrahn_ld +#DB_USERNAME_37=root +#DB_PASSWORD_37=secret DB_CONNECTION_38=mysql DB_HOST_38=database_zone2 @@ -269,4 +277,9 @@ DB_USERNAME_38=root DB_PASSWORD_38=secret CACHE_DRIVER=file -QUEUE_CONNECTION=sync +QUEUE_CONNECTION=database + +WABOT_API=https://app.wabot.my/api/send.php +WABOT_INSTANCES_ID=67B69A20D329B +WABOT_TOKEN_KEYS=66a08339284bc +ACTIVE_JOB_SERVER=true From c9f0cf741982105ab1717af88bdc7bd1d38f7266 Mon Sep 17 00:00:00 2001 From: Afiq Hamzah Date: Sat, 14 Jun 2025 15:11:56 +0800 Subject: [PATCH 069/117] Add feature for online transaction report --- .../Reports/BayaranOnlineController.php | 37 +++++++++++ .../Reports/BayaranOnlineDetailController.php | 61 +++++++++++++++++++ .../TransactionOnlineBuilder.php | 48 +++++++++++++++ app/TransactionOnline.php | 11 ++++ routes/report.php | 18 +++--- 5 files changed, 168 insertions(+), 7 deletions(-) create mode 100644 app/Http/Controllers/Reports/BayaranOnlineController.php create mode 100644 app/Http/Controllers/Reports/BayaranOnlineDetailController.php create mode 100644 app/QueryBuilders/TransactionOnlineBuilder.php diff --git a/app/Http/Controllers/Reports/BayaranOnlineController.php b/app/Http/Controllers/Reports/BayaranOnlineController.php new file mode 100644 index 0000000..a2f0815 --- /dev/null +++ b/app/Http/Controllers/Reports/BayaranOnlineController.php @@ -0,0 +1,37 @@ + number_format($x, 2, '.', ','); + + $sumTotalPayments = (clone $transactionOnlineQuery)->sum('total_payment'); + $sumTotalPayments = $formatMoney($sumTotalPayments); + $nosPayments = (clone $transactionOnlineQuery)->count('total_payment'); + + $transactions = (clone $transactionOnlineQuery)->select('kodcaw', DB::raw('sum(total_payment) as totalCawanganPayment'), DB::raw('count(reference_no) as totalReferenceNo')) + ->groupBy('kodcaw') + ->get() + ->map(function($x) use($formatMoney) { + $x['totalCawanganPayment'] = $formatMoney($x['totalCawanganPayment']); + return $x; + }); + + return response()->json([ + 'nosPayments' => $nosPayments, + 'sumTotalPayments' => $sumTotalPayments, + 'transactions' => $transactions, + ]); + } +} diff --git a/app/Http/Controllers/Reports/BayaranOnlineDetailController.php b/app/Http/Controllers/Reports/BayaranOnlineDetailController.php new file mode 100644 index 0000000..30c27a6 --- /dev/null +++ b/app/Http/Controllers/Reports/BayaranOnlineDetailController.php @@ -0,0 +1,61 @@ + number_format($x, 2, '.', ','); + + $sumTotalPayments = (clone $transactionOnlineQuery)->sum('total_payment'); + $sumTotalPayments = $formatMoney($sumTotalPayments); + $sumPaymentNos = (clone $transactionOnlineQuery)->count('total_payment'); + + $transactions = (clone $transactionOnlineQuery)->select('nokp', 'customer_name', 'norujukan', 'reference_no', 'kodcaw', 'total_payment', 'tarikh', 'masa', 'status') + ->get() + ->groupBy('nokp') + ->map(fn($x) => $x->groupBy('cawangan.details_caw')) + ->map(function ($cawangan) { + + $all_entries = $cawangan->collapse(); + + $first = $all_entries->first(); + + $payment_details = $cawangan->map(function ($cawangan_payments) { + return [ + 'paymentNos' => $cawangan_payments->count(), + 'paymentSum' => $cawangan_payments->sum('total_payment'), + 'paymentDetails' => $cawangan_payments->map(function ($x) { + + $payment_details = collect($x)->except('nokp', 'customer_name', 'kodcaw', 'cawangan'); + + return $payment_details; + }), + ]; + }); + + return [ + 'customer_name' => $first->customer_name, + 'nokp' => $first->nokp, + 'payments' => $payment_details, + ]; + }) + ->values(); + + + return response()->json([ + 'sumTotalPayments' => $sumTotalPayments, + 'sumPaymentNos' => $sumPaymentNos, + 'transactions' => $transactions, + ]); + } +} diff --git a/app/QueryBuilders/TransactionOnlineBuilder.php b/app/QueryBuilders/TransactionOnlineBuilder.php new file mode 100644 index 0000000..88f0428 --- /dev/null +++ b/app/QueryBuilders/TransactionOnlineBuilder.php @@ -0,0 +1,48 @@ +with('cawangan') + ->whereDatePaidBetween($request) + ->when($request->filled('kodcaw'), fn($query) => $query->whereCawanganCode($request->kodcaw)) + ->when($request->filled('status'), fn($query) => $query->whereStatus($request->status)) + ->when($request->isNotFilled('status'), fn($query) => $query->whereStatus('PAID')); + } + + public function whereDatePaidBetween(Request $request): self + { + $startDate = $request->filled('startDate') ? + Carbon::parse($request->startDate)->startOfDay() : + Carbon::now()->startOfDay(); + + $endDate = $request->filled('endDate') ? + Carbon::parse($request->endDate)->startOfDay() : + Carbon::now()->startOfDay(); + + return $this->whereBetween('paid_at', [$startDate, $endDate]); + } + + public function whereCawanganCode(string $kodcaw): self + { + return $this->where('kodcaw', $kodcaw); + } + + public function whereStatus(string $status): self + { + return $this->where('status', $status); + } + + public function orderBy(string $orderBy): self + { + return $this->orderBy($orderBy); + } +} diff --git a/app/TransactionOnline.php b/app/TransactionOnline.php index 22831c6..bb2d328 100644 --- a/app/TransactionOnline.php +++ b/app/TransactionOnline.php @@ -2,6 +2,7 @@ namespace App; +use App\QueryBuilders\TransactionOnlineBuilder; use Illuminate\Database\Eloquent\Model; class TransactionOnline extends Model @@ -24,4 +25,14 @@ class TransactionOnline extends Model * @var array */ // protected $hidden = []; + + public function cawangan() + { + return $this->belongsTo(Cawangan::class, 'kodcaw', 'kodcaw'); + } + + public function newEloquentBuilder($query) + { + return new TransactionOnlineBuilder($query); + } } diff --git a/routes/report.php b/routes/report.php index 783e100..296afe7 100644 --- a/routes/report.php +++ b/routes/report.php @@ -1,5 +1,8 @@ group(['prefix' => 'api/reports'], function () use ($router) { $router->group(['namespace' => 'Reports'], function () use ($router) { $router->get('gadaian', ['uses' => 'GadaianController@getSummaryLaporanGadai']); @@ -21,15 +24,15 @@ $router->group(['prefix' => 'api/reports'], function () use ($router) { $router->get('rounded/ledger/{kod_cawangan}', ['uses' => 'OnePercentController@getRoundedLejerAm']); $router->get('totalrebate', ['uses' => 'OnePercentController@getTotalRebate']); $router->get('getaccrualincome', ['uses' => 'OnePercentController@getAccruedincome']); - $router->get('getaccrualincome/all',['uses' => 'OnePercentController@getAllCawanganAccruedIncome']); + $router->get('getaccrualincome/all', ['uses' => 'OnePercentController@getAllCawanganAccruedIncome']); $router->get('getTotalCurrentProfit/{kod_cawangan}', ['uses' => 'OnePercentController@getCurrentProfit']); - $router->get('stokaudit/get',['uses' => 'OnePercentController@getStokAuditBackdate']); + $router->get('stokaudit/get', ['uses' => 'OnePercentController@getStokAuditBackdate']); - $router->get('balancesheets/get',['uses' => 'BalanceSheetsController@getBalanceSheetsList']); + $router->get('balancesheets/get', ['uses' => 'BalanceSheetsController@getBalanceSheetsList']); - $router->get('updateig',['uses' => 'BalanceSheetsController@insertBalanceSheets']); - $router->get('updateigall',['uses' => 'BalanceSheetsController@updateIGBalanceSheets']); + $router->get('updateig', ['uses' => 'BalanceSheetsController@insertBalanceSheets']); + $router->get('updateigall', ['uses' => 'BalanceSheetsController@updateIGBalanceSheets']); $router->get('lelongan', ['uses' => 'LelonganController@getSummaryLaporanLelong']); $router->get('lelongan/{kod_cawangan}', ['uses' => 'LelonganController@getLaporanCawangan']); @@ -43,9 +46,10 @@ $router->group(['prefix' => 'api/reports'], function () use ($router) { $router->get('pelangganbaru', ['uses' => 'AnalisaController@getSummaryLaporanPelangganBaru']); $router->get('pelangganaktif', ['uses' => 'AnalisaController@getSummaryLaporanPelangganAktif']); - + $router->get('bakilelongbelumtuntut', ['uses' => 'LelonganController@getSummaryLaporanBakiLelongBelumTuntut']); $router->get('bakilelongbelumtuntut/{kod_cawangan}', ['uses' => 'LelonganController@getLaporanBakiLelongBelumTuntutCawangan']); - + $router->get('bayaran-online', ['uses' => 'BayaranOnlineController']); + $router->get('bayaran-online-detail', ['uses' => 'BayaranOnlineDetailController']); }); }); From 36b79e7b1550a31cf149e6b058eb831aad94452b Mon Sep 17 00:00:00 2001 From: Afiq Hamzah Date: Sat, 14 Jun 2025 16:04:21 +0800 Subject: [PATCH 070/117] Fix query bug --- app/QueryBuilders/TransactionOnlineBuilder.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/QueryBuilders/TransactionOnlineBuilder.php b/app/QueryBuilders/TransactionOnlineBuilder.php index 88f0428..cb1f52f 100644 --- a/app/QueryBuilders/TransactionOnlineBuilder.php +++ b/app/QueryBuilders/TransactionOnlineBuilder.php @@ -25,8 +25,8 @@ class TransactionOnlineBuilder extends Builder Carbon::now()->startOfDay(); $endDate = $request->filled('endDate') ? - Carbon::parse($request->endDate)->startOfDay() : - Carbon::now()->startOfDay(); + Carbon::parse($request->endDate)->endOfDay() : + Carbon::now()->endOfDay(); return $this->whereBetween('paid_at', [$startDate, $endDate]); } From 583376556e9a65cbbab8c5fc4fd94c96f6335137 Mon Sep 17 00:00:00 2001 From: Afiq Hamzah Date: Sat, 14 Jun 2025 16:12:26 +0800 Subject: [PATCH 071/117] Add missing orderBy filter --- app/QueryBuilders/TransactionOnlineBuilder.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/QueryBuilders/TransactionOnlineBuilder.php b/app/QueryBuilders/TransactionOnlineBuilder.php index cb1f52f..ffdffbd 100644 --- a/app/QueryBuilders/TransactionOnlineBuilder.php +++ b/app/QueryBuilders/TransactionOnlineBuilder.php @@ -15,7 +15,8 @@ class TransactionOnlineBuilder extends Builder ->whereDatePaidBetween($request) ->when($request->filled('kodcaw'), fn($query) => $query->whereCawanganCode($request->kodcaw)) ->when($request->filled('status'), fn($query) => $query->whereStatus($request->status)) - ->when($request->isNotFilled('status'), fn($query) => $query->whereStatus('PAID')); + ->when($request->isNotFilled('status'), fn($query) => $query->whereStatus('PAID')) + ->when($request->filled('orderBy'), fn($query) => $query->orderBy($request->orderBy)); } public function whereDatePaidBetween(Request $request): self From 6cb748b592be88d0aa8e40abff9c504e8f37349b Mon Sep 17 00:00:00 2001 From: Afiq Hamzah Date: Sat, 14 Jun 2025 16:26:54 +0800 Subject: [PATCH 072/117] Add missing orderBy filter cont'd --- app/QueryBuilders/TransactionOnlineBuilder.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/QueryBuilders/TransactionOnlineBuilder.php b/app/QueryBuilders/TransactionOnlineBuilder.php index ffdffbd..b25d41e 100644 --- a/app/QueryBuilders/TransactionOnlineBuilder.php +++ b/app/QueryBuilders/TransactionOnlineBuilder.php @@ -16,7 +16,7 @@ class TransactionOnlineBuilder extends Builder ->when($request->filled('kodcaw'), fn($query) => $query->whereCawanganCode($request->kodcaw)) ->when($request->filled('status'), fn($query) => $query->whereStatus($request->status)) ->when($request->isNotFilled('status'), fn($query) => $query->whereStatus('PAID')) - ->when($request->filled('orderBy'), fn($query) => $query->orderBy($request->orderBy)); + ->when($request->filled('orderBy'), fn($query) => $query->orderByColumn($request->orderBy)); } public function whereDatePaidBetween(Request $request): self @@ -42,7 +42,7 @@ class TransactionOnlineBuilder extends Builder return $this->where('status', $status); } - public function orderBy(string $orderBy): self + public function orderByColumn(string $orderBy): self { return $this->orderBy($orderBy); } From 0a53fad6d6d35da30cdc4cf09a0c3cbdd412589e Mon Sep 17 00:00:00 2001 From: Afiq Hamzah Date: Sat, 14 Jun 2025 16:30:03 +0800 Subject: [PATCH 073/117] Add missing orderBy filter cont'd --- app/QueryBuilders/TransactionOnlineBuilder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/QueryBuilders/TransactionOnlineBuilder.php b/app/QueryBuilders/TransactionOnlineBuilder.php index b25d41e..cc9f7e7 100644 --- a/app/QueryBuilders/TransactionOnlineBuilder.php +++ b/app/QueryBuilders/TransactionOnlineBuilder.php @@ -44,6 +44,6 @@ class TransactionOnlineBuilder extends Builder public function orderByColumn(string $orderBy): self { - return $this->orderBy($orderBy); + return $this->orderBy($orderBy, 'desc'); } } From a6e47fdf5f3a243d1ddc9d4ade35c9f132e83d2b Mon Sep 17 00:00:00 2001 From: Nur Izzati Date: Wed, 18 Jun 2025 16:48:56 +0800 Subject: [PATCH 074/117] update tarikh lelong kepada tarikh jual --- app/Http/Controllers/Reports/LelonganController.php | 2 +- app/Services/Reports/LelonganService.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Reports/LelonganController.php b/app/Http/Controllers/Reports/LelonganController.php index 27a4b7f..1e2195f 100644 --- a/app/Http/Controllers/Reports/LelonganController.php +++ b/app/Http/Controllers/Reports/LelonganController.php @@ -64,7 +64,7 @@ class LelonganController extends Controller if ($request->filled('startDate') && $request->filled('endDate')) { - $query->whereBetween('lelong.t_lelong', [$request->startDate, $request->endDate]); + $query->whereBetween('lelong.t_jual', [$request->startDate, $request->endDate]); } $summary_lelongan_data[$db_connection] = $query->first()->toArray(); diff --git a/app/Services/Reports/LelonganService.php b/app/Services/Reports/LelonganService.php index caf3f6c..410f169 100644 --- a/app/Services/Reports/LelonganService.php +++ b/app/Services/Reports/LelonganService.php @@ -46,8 +46,8 @@ class LelonganService ); $query_total_lelongan->when(!empty($this->startDate) and !empty($this->endDate), function ($q) { - return $q->where('lelong.t_lelong', '>=', $this->startDate) - ->where('lelong.t_lelong', '<=', $this->endDate); + return $q->where('lelong.t_jual', '>=', $this->startDate) + ->where('lelong.t_jual', '<=', $this->endDate); }); $total_lelongan = $this->getTotalLelongan($query_total_lelongan); From 63520051b6f505753990f7a156ff95480ba6e417 Mon Sep 17 00:00:00 2001 From: Nur Izzati Date: Sun, 22 Jun 2025 15:18:42 +0800 Subject: [PATCH 075/117] update lelong service name null: --- app/Services/Reports/LelonganService.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Services/Reports/LelonganService.php b/app/Services/Reports/LelonganService.php index 410f169..af2ed7b 100644 --- a/app/Services/Reports/LelonganService.php +++ b/app/Services/Reports/LelonganService.php @@ -299,8 +299,8 @@ class LelonganService return [ 'no_rujukan' => $lelong['norujukan'], - 'nama' => $customer_info['nama'], - 'alamat' => $customer_info['alamat1'], + 'nama' => $customer_info['nama'] ?? '-', + 'alamat' => $customer_info['alamat1'] ?? '-', 'no_kp' => $lelong['nokp'], 'masa' => $lelong['masa'], 'marhun' => $marhun_lelongan, From 1af2c361a90f604f9504a09a555ad6cee4f7bb40 Mon Sep 17 00:00:00 2001 From: Nur Izzati Date: Tue, 1 Jul 2025 15:39:29 +0800 Subject: [PATCH 076/117] update laporan tebus keseluruhan --- app/Http/Controllers/Reports/PenebusanController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Reports/PenebusanController.php b/app/Http/Controllers/Reports/PenebusanController.php index 4a79cb0..102c962 100644 --- a/app/Http/Controllers/Reports/PenebusanController.php +++ b/app/Http/Controllers/Reports/PenebusanController.php @@ -49,8 +49,8 @@ class PenebusanController extends Controller ->select(DB::raw(' count(tebus.norujukan) as bilangan_tebus, sum(gadai.berat) as berat, - sum(gadai.bakipjm) as nilai_pinjaman, - sum(tebus.pinjaman) as baki_pinjaman, + sum(gadai.pinjaman) as nilai_pinjaman, + sum(gadai.bakipjm) as baki_pinjaman, sum(tebus.nilaimarhun) as nilai_marhun, sum(tebus.bakiupah) as keuntungan_asal, sum(tebus.bakipjm - gadai.bakipjm) as keuntungan_rebet, From adf0226f2bc9c71fd21e6780ce50d74e8e3a9ad6 Mon Sep 17 00:00:00 2001 From: hafifierahman Date: Tue, 17 Jun 2025 02:23:00 +0800 Subject: [PATCH 077/117] loading waiting approval refresh --- app/Http/Controllers/GadaiController.php | 7 ++++ app/Services/Transaction/AnsuranServices.php | 43 ++++++++++++++------ routes/web.php | 2 + 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/app/Http/Controllers/GadaiController.php b/app/Http/Controllers/GadaiController.php index a3805af..b75c6e9 100644 --- a/app/Http/Controllers/GadaiController.php +++ b/app/Http/Controllers/GadaiController.php @@ -3800,4 +3800,11 @@ class GadaiController extends Controller return response()->json($view); } + + public function getApprovalFromOperation(Request $request){ + $ansuranserv = new AnsServ($request->kodcaw); + $view = $ansuranserv->getApprovalFromOperation($request); + + return response()->json($view); + } } diff --git a/app/Services/Transaction/AnsuranServices.php b/app/Services/Transaction/AnsuranServices.php index 69d395b..5cf56e7 100644 --- a/app/Services/Transaction/AnsuranServices.php +++ b/app/Services/Transaction/AnsuranServices.php @@ -8,6 +8,7 @@ use App\Tunai; use App\Transaction; use App\TransaksiKeuntungan; use App\Cawangan; +use App\Mohon; use App\TransaksiGadai; use Carbon\Carbon; use Illuminate\Http\Request; @@ -40,6 +41,7 @@ class AnsuranServices $harisemasa = $tarikh->toDateString(); if($harisemasa !== $tarikh_request->toDateString()){ + Log::debug('Date mismatch: ' . $harisemasa . ' vs ' . $tarikh_request->toDateString()); return 'date not equal'; } $transaction_gadai = TransaksiGadai::on('mysql7')->where('id',$request->tg_id)->first(); @@ -91,6 +93,19 @@ class AnsuranServices 'softDelete' => 1, )); + $tarikh_audit = Carbon::now(); + + $audit = new Audit(); + $audit->users = $request->teller; + $audit->actions = 'Hapus Ansuran'; + $audit->norujukan = $request->norujukan; + $audit->new_data = ''; + $audit->old_data = ''; + $audit->kodcaw = $this->cawangan; + $audit->created_at = $tarikh_audit; + $audit->updated_at = $tarikh_audit; + $audit->save(); + return 'success'; @@ -103,18 +118,6 @@ class AnsuranServices } return 'success'; - - // $audit = new Audit(); - // $audit->users = $request->teller; - // $audit->actions = 'Hapus Ansuran'; - // $audit->norujukan = $norujukan; - // $audit->new_data = $new_data; - // $audit->old_data = $old_data; - // $audit->kodcaw = $kodcaw; - // $audit->created_at = $current; - // $audit->updated_at = $current; - // $audit->save(); - } public function getLatestAdvanceWithoutDelete(Request $request){ @@ -125,5 +128,21 @@ class AnsuranServices return $latest; } + public function getApprovalFromOperation(Request $request){ + $tarikh = Carbon::now(); + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$this->cawangan)->first(); + + $latest = Mohon::on($cawangan['mysql']) + ->whereDate('tarikh',$tarikh->toDateString()) + ->where('teller',$request->teller) + ->where('masalulus','=','') + ->where('operasi','=','') + ->where('status','Hapus Ansuran') + ->latest('tarikh') + ->first(); + + return $latest; + } + } diff --git a/routes/web.php b/routes/web.php index 3698995..6925a0e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -885,6 +885,8 @@ $router->group(['prefix'=>'admin'], function () use ($router){ $router->post('ansuran/delete',['uses'=>'GadaiController@deleteAnsuran']); $router->get('ansuran/getLatest',['uses'=>'GadaiController@getLatestAdvanceWithoutDelete']); $router->get('laporan/imbangdugabackup',['uses' => 'LaporanController@getImbangDugaBackup']); + $router->get('ansuran/getApproval',['uses'=>'GadaiController@getApprovalFromOperation']); + $router->get('laporan/online',['uses'=>'AdminPageController@LaporanOnline']); $router->get('laporan/tuntutbaki',['uses'=>'AdminPageController@LaporanTuntutBaki']); From 448402061f1e88bbe015847b0a79a998f0a3b51c Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Mon, 30 Jun 2025 12:40:19 +0800 Subject: [PATCH 078/117] added box komen on teller and added audit trail and added endpoints for laporan --- app/Http/Controllers/KelulusanController.php | 81 ++++++++-- app/Http/Controllers/LaporanController.php | 44 ++++++ app/Mohonid.php | 8 +- app/Services/Transaction/AnsuranServices.php | 24 ++- ...us_ansuran_properties_to_mohonid_table.php | 148 ++++++++++++++++++ routes/web.php | 9 +- 6 files changed, 289 insertions(+), 25 deletions(-) create mode 100644 database/migrations/2025_06_24_166534_add_hapus_ansuran_properties_to_mohonid_table.php diff --git a/app/Http/Controllers/KelulusanController.php b/app/Http/Controllers/KelulusanController.php index a3f26c3..81388a4 100644 --- a/app/Http/Controllers/KelulusanController.php +++ b/app/Http/Controllers/KelulusanController.php @@ -10,6 +10,7 @@ use App\Mohonid; use Carbon\Carbon; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Log; class KelulusanController extends Controller { @@ -298,13 +299,16 @@ public function create(REQUEST $request,$kodcaw,$norujukan,$roles) 'tarikh'=> $harini->toDateString(), 'mohon' => $request->mohon, 'norujukan' => $norujukan, - 'katalaluan' => '', + 'katalaluan' => $request->komen, 'pinjaman' => $request->pinjaman, 'nilaimarhun' => $request->nilaimarhun, 'berat' => $request->berat, 'margin' => $request->margin, 'benar' => '0', - 'teller' => $request->teller + 'teller' => $request->teller, + 'tagoperasi'=> ($request->tagoperasi) ? true : false, + 'masa' => $harini->toTimeString(), + 'ansuran' => ($request->ansuran) ? $request->ansuran : 0.00, ]); return response()->json($mohonid,201); @@ -322,18 +326,24 @@ public function create(REQUEST $request,$kodcaw,$norujukan,$roles) $kelulusan=Mohonid::on($cawangan['mysql']) ->where('tarikh','=',$harini->toDateString()) ->where('norujukan','=',$norujukan) + ->where('recno','=',$request->recno) ->update(array( 'katalaluan' => $request->komen, 'benar' => '2', - 'id' => $request->khazanah + 'id' => $request->khazanah, + 'timestamp_approved_by_pc' => $harini, )); }else{ + $benar = ($request->tagoperasi == 1) ? 0 : 1; + $kelulusan=Mohonid::on($cawangan['mysql']) ->where('tarikh','=',$harini->toDateString()) ->where('norujukan','=',$norujukan) + ->where('recno','=',$request->recno) ->update(array( - 'benar' => '1', - 'id' => $request->khazanah + 'benar' => $benar, + 'id' => $request->khazanah, + 'timestamp_approved_by_pc' => $harini, )); } @@ -381,16 +391,28 @@ public function create(REQUEST $request,$kodcaw,$norujukan,$roles) $arraykelulusan = []; foreach($cawangan_all as $index=>$cawangan){ - $kelulusan=Mohon::on($cawangan['mysql']) - ->where('tarikh','=',$harini->toDateString()) - ->where('masalulus','=','') - ->where('pelulus','=','operasi') - ->get(); + $kelulusan = Mohon::on($cawangan['mysql']) + ->where('tarikh','=',$harini->toDateString()) + ->where('masalulus','=','') + ->where('pelulus','=','operasi') + ->get(); - if(sizeof($kelulusan) != 0){ - array_push($arraykelulusan,["kelulusanall" => $kelulusan,"cawangan" => $cawangan['details_caw'],"cawangankod" => $cawangan['kodcaw']]); + $mohonid_data = Mohonid::on($cawangan['mysql']) + ->where('tarikh','=',$harini->toDateString()) + ->where('tagoperasi', '1') + ->whereNull('operasi') + ->get(); + + // Check if EITHER has data (not just $kelulusan) + if(sizeof($kelulusan) != 0 || sizeof($mohonid_data) != 0){ + array_push($arraykelulusan,[ + "kelulusanall" => $kelulusan, + "kelulusanMohonid" => $mohonid_data, + "cawangan" => $cawangan['details_caw'], + "cawangankod" => $cawangan['kodcaw'] + ]); } - } + } return response()->json($arraykelulusan,200); } @@ -417,4 +439,37 @@ public function create(REQUEST $request,$kodcaw,$norujukan,$roles) return response()->json($arraykelulusan,200); } + public function UpdateHapusAnsuranOperasi(Request $request){ + $harini = Carbon::now(); + + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first(); + + if($request->sahkan === 1){ + $kelulusan=Mohonid::on($cawangan['mysql']) + ->where('tarikh','=',$harini->toDateString()) + ->where('norujukan','=',$request->norujukan) + ->where('recno','=',$request->siri) + ->where('tagoperasi', '=', 1) + ->update(array( + 'operasi' => $request->namaoperasi, + 'timestamp_approved_by_operasi' => $harini, + 'benar' => 1, + )); + }else if($request->sahkan === 2){ + $kelulusan=Mohonid::on($cawangan['mysql']) + ->where('tarikh','=',$harini->toDateString()) + ->where('norujukan','=',$request->norujukan) + ->where('recno','=',$request->siri) + ->where('tagoperasi', '=', 1) + ->update(array( + 'operasi' => $request->namaoperasi, + 'timestamp_approved_by_operasi' => $harini, + 'benar' => 2, + )); + } + + return response()->json($kelulusan,202); + + } + } diff --git a/app/Http/Controllers/LaporanController.php b/app/Http/Controllers/LaporanController.php index 1c5f4c8..5b6e285 100644 --- a/app/Http/Controllers/LaporanController.php +++ b/app/Http/Controllers/LaporanController.php @@ -26,6 +26,7 @@ use Carbon\Carbon; use App\imbangdugalama; use App\Services\Reports\ImbangDugaService; use App\Services\Reports\Account\GeneralLedger; +use App\Mohonid; use Illuminate\Support\Facades\Log; @@ -1698,4 +1699,47 @@ $date = new Carbon($request->tarikh); return response()->json($array_imbangduga,200); } + + public function getLaporanKelulusan(Request $request){ + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first(); + + $laporan_kelulusan = Mohonid::on($cawangan['mysql']) + ->whereBetween('tarikh', [$request->mula, $request->akhir]) + ->when($request->mohon, function($query, $mohon) { + return $query->where('mohon', $mohon); + }) + ->get(); + + if($laporan_kelulusan->isEmpty()){ + return response()->json(['message' => 'No data found'], 404); + } + + return response()->json([ + 'success' => true, + 'message' => 'Laporan kelulusan retrieved successfully', + 'data' => $laporan_kelulusan, + 'count' => $laporan_kelulusan->count(), + 'timestamp' => Carbon::now()->toISOString() + ], 200); + } + + public function getListofKelulusan(Request $request){ + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first(); + + $laporan_kelulusan = Mohonid::on($cawangan['mysql']) + ->groupBy('mohon') + ->pluck('mohon'); + + if($laporan_kelulusan->isEmpty()){ + return response()->json(['message' => 'No data found'], 404); + } + + return response()->json([ + 'success' => true, + 'message' => 'List of Type Kelulusan retrieved successfully', + 'data' => $laporan_kelulusan, + 'count' => $laporan_kelulusan->count(), + 'timestamp' => Carbon::now()->toISOString() + ], 200); + } } diff --git a/app/Mohonid.php b/app/Mohonid.php index c474be9..ce9013f 100644 --- a/app/Mohonid.php +++ b/app/Mohonid.php @@ -27,7 +27,13 @@ class Mohonid extends Model 'nilaimarhun', 'berat', 'margin', - 'teller' + 'teller', + 'masa', + 'tagoperasi', + 'ansuran', + 'operasi', + 'timestamp_approved_by_pc', + 'timestamp_approved_by_operasi', ]; /** diff --git a/app/Services/Transaction/AnsuranServices.php b/app/Services/Transaction/AnsuranServices.php index 5cf56e7..0d2dbc9 100644 --- a/app/Services/Transaction/AnsuranServices.php +++ b/app/Services/Transaction/AnsuranServices.php @@ -9,6 +9,7 @@ use App\Transaction; use App\TransaksiKeuntungan; use App\Cawangan; use App\Mohon; +use App\Mohonid; use App\TransaksiGadai; use Carbon\Carbon; use Illuminate\Http\Request; @@ -40,6 +41,12 @@ class AnsuranServices $tarikh = Carbon::now(); $harisemasa = $tarikh->toDateString(); + $audit = new Audit(); + $audit->users = $request->teller; + $audit->actions = 'Hapus Ansuran'; + $audit->norujukan = $request->norujukan; + $audit->new_data = ''; + if($harisemasa !== $tarikh_request->toDateString()){ Log::debug('Date mismatch: ' . $harisemasa . ' vs ' . $tarikh_request->toDateString()); return 'date not equal'; @@ -51,8 +58,11 @@ class AnsuranServices return 'wrong teller'; } + $audit->old_data = $transaction_gadai; + + try{ - DB::connection('mysql7')->transaction(function () use($cawangan,$request,$harisemasa,$transaction,$transaction_gadai){ + DB::connection('mysql7')->transaction(function () use($cawangan,$request,$harisemasa,$transaction,$transaction_gadai,$audit){ try{ DB::connection($cawangan['mysql'])->transaction(function () use($cawangan,$request,$transaction_gadai,$harisemasa,$transaction){ @@ -93,14 +103,12 @@ class AnsuranServices 'softDelete' => 1, )); - $tarikh_audit = Carbon::now(); + $gadai_updated = Gadai::on($cawangan['mysql']) + ->select('percentpinj','bakipjm','tempoh','t_update','bakihargajualan','tempohbayar','lelong_tawarruq','margin_semasa','tunggakanujrah','tunggakanonepercent') + ->where('norujukan',$request->norujukan)->first(); - $audit = new Audit(); - $audit->users = $request->teller; - $audit->actions = 'Hapus Ansuran'; - $audit->norujukan = $request->norujukan; - $audit->new_data = ''; - $audit->old_data = ''; + $tarikh_audit = Carbon::now(); + $audit->new_data = $gadai_updated; $audit->kodcaw = $this->cawangan; $audit->created_at = $tarikh_audit; $audit->updated_at = $tarikh_audit; diff --git a/database/migrations/2025_06_24_166534_add_hapus_ansuran_properties_to_mohonid_table.php b/database/migrations/2025_06_24_166534_add_hapus_ansuran_properties_to_mohonid_table.php new file mode 100644 index 0000000..dbbd661 --- /dev/null +++ b/database/migrations/2025_06_24_166534_add_hapus_ansuran_properties_to_mohonid_table.php @@ -0,0 +1,148 @@ +select('SELECT 1'); + $active[] = $connection; + } catch (\Exception $e) { + continue; + } + } + + return $active; + } + + public function up() + { + $databases = $this->getActiveDB(); + Log::info("Active databases: " . implode(', ', $databases)); + foreach ($databases as $database) { + Log::info("Migrating database: {$database}"); + $this->safeAddProperties($database, 'mohonid'); + } + } + + private function safeAddProperties($database, $table_name) + { + // Skip if table doesn't exist + if (!Schema::connection($database)->hasTable($table_name)) { + Log::warning("Table {$table_name} does not exist in database {$database}. Skipping migration."); + return; + } + + try { + // Get existing columns once + $existing_columns = Schema::connection($database)->getColumnListing($table_name); + + $columns_to_add = [ + 'tagoperasi' => 'boolean', + 'ansuran' => 'decimal', + 'masa' => 'time', + 'operasi' => 'string', + 'timestamp_approved_by_pc' => 'timestamp', + 'timestamp_approved_by_operasi' => 'timestamp', + ]; + + // Find missing columns (this was missing!) + $missing_columns = array_diff(array_keys($columns_to_add), $existing_columns); + + // Add all missing columns in one schema call + if (!empty($missing_columns)) { + Schema::connection($database)->table($table_name, function (Blueprint $table) use ($existing_columns) { + // Add ansuran column - decimal with default 0 + if( !in_array('tagoperasi', $existing_columns)) { + $table->boolean('tagoperasi')->default(0)->comment('Tag Operasi'); + } + + if (!in_array('ansuran', $existing_columns)) { + $table->decimal('ansuran', 10, 2)->default(0.00)->after('pinjaman')->comment('Ansuran Amount'); + } + + // Add masa column - TIME type + if (!in_array('masa', $existing_columns)) { + $table->time('masa')->nullable()->after('tarikh')->comment('Time period'); + } + + // Add operasi column - string + if (!in_array('operasi', $existing_columns)) { + $table->string('operasi')->nullable()->comment('Nama Operasi'); + } + + // Add approval timestamp columns (changed from boolean to timestamp) + if (!in_array('timestamp_approved_by_pc', $existing_columns)) { + $table->timestamp('timestamp_approved_by_pc')->nullable()->after('id')->comment('Time Approved by PC'); + } + + if (!in_array('timestamp_approved_by_operasi', $existing_columns)) { + $table->timestamp('timestamp_approved_by_operasi')->nullable()->comment('Time approved by Operasi'); + } + }); + } + + } catch (\Exception $e) { + // Don't fail entire migration for one database + Log::error("Migration failed for database {$database}: " . $e->getMessage()); + } + } + + public function down() + { + $databases = $this->getActiveDB(); + + foreach ($databases as $database) { + if (Schema::connection($database)->hasTable('mohonid')) { + try { + Schema::connection($database)->table('mohonid', function (Blueprint $table) use ($database) { + // Check each column before dropping + if (Schema::connection($database)->hasColumn('mohonid', 'ansuran')) { + $table->dropColumn('ansuran'); + } + if (Schema::connection($database)->hasColumn('mohonid', 'masa')) { + $table->dropColumn('masa'); + } + if (Schema::connection($database)->hasColumn('mohonid', 'operasi')) { + $table->dropColumn('operasi'); + } + if (Schema::connection($database)->hasColumn('mohonid', 'is_approved_by_pc')) { + $table->dropColumn('is_approved_by_pc'); + } + if (Schema::connection($database)->hasColumn('mohonid', 'is_approved_by_operasi')) { + $table->dropColumn('is_approved_by_operasi'); + } + }); + } catch (\Exception $e) { + \Log::error("Rollback failed for database {$database}: " . $e->getMessage()); + } + } + } + + + } +} diff --git a/routes/web.php b/routes/web.php index 6925a0e..d6a6fb8 100644 --- a/routes/web.php +++ b/routes/web.php @@ -692,6 +692,10 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->put('autoserahan/setapproval',['uses'=>'AutoSerahanController@SetApprovalWithdrawal']); $router->get('autoserahan/get',['uses'=>'AutoSerahanController@getAutoSerahanApproval']); $router->get('autoserahan/checkapproval',['uses'=>'AutoSerahanController@checkProsesApproval']); + $router->get('autoserahan/allrecord',['uses'=>'AutoSerahanController@getApprovedAutoSerahan']); + + /*Endpoints for Hapus Ansuran*/ + $router->put('UpdateHapusAnsuran',['uses'=>'KelulusanController@UpdateHapusAnsuranOperasi']); }); $router->group(['prefix'=>'e-arrahn'], function () use ($router){ @@ -885,9 +889,8 @@ $router->group(['prefix'=>'admin'], function () use ($router){ $router->post('ansuran/delete',['uses'=>'GadaiController@deleteAnsuran']); $router->get('ansuran/getLatest',['uses'=>'GadaiController@getLatestAdvanceWithoutDelete']); $router->get('laporan/imbangdugabackup',['uses' => 'LaporanController@getImbangDugaBackup']); - $router->get('ansuran/getApproval',['uses'=>'GadaiController@getApprovalFromOperation']); - - + $router->get('laporan/kelulusan',['uses' => 'LaporanController@getLaporanKelulusan']); + $router->get('laporan/kelulusan/list',['uses' => 'LaporanController@getListofKelulusan']); $router->get('laporan/online',['uses'=>'AdminPageController@LaporanOnline']); $router->get('laporan/tuntutbaki',['uses'=>'AdminPageController@LaporanTuntutBaki']); From 45ffeb5a63ce71947a51039f3055a5426083e20a Mon Sep 17 00:00:00 2001 From: hafifierahman Date: Sat, 5 Jul 2025 00:21:46 +0800 Subject: [PATCH 079/117] added migrations for palsu and inserting semporna data into table palsu by console commands --- app/Console/Commands/InsertSempornaData.php | 345 ++++++++++++++++++ app/Console/Kernel.php | 2 + app/Palsu.php | 90 +++++ ...tung_pembiayaan_columns_to_palsu_table.php | 122 +++++++ 4 files changed, 559 insertions(+) create mode 100644 app/Console/Commands/InsertSempornaData.php create mode 100644 app/Palsu.php create mode 100644 database/migrations/2025_07_03_223000_add_nm_jbg_untung_pembiayaan_columns_to_palsu_table.php diff --git a/app/Console/Commands/InsertSempornaData.php b/app/Console/Commands/InsertSempornaData.php new file mode 100644 index 0000000..17370d3 --- /dev/null +++ b/app/Console/Commands/InsertSempornaData.php @@ -0,0 +1,345 @@ +argument('kodcaw'); + + $this->info("Inserting data for kodcaw: {$kodcaw}"); + + // Validate if kodcaw exists in Cawangan table + $cawangan = DB::connection('mysql7')->table('arrahn_master_db')->where('kodcaw', $kodcaw)->first(); + + if (!$cawangan) { + $this->error("Error: kodcaw '{$kodcaw}' not found in Cawangan table!"); + return Command::FAILURE; + } + + // Convert stdClass to array if needed + $cawangan = (array) $cawangan; + + if (!isset($cawangan['mysql']) || empty($cawangan['mysql'])) { + $this->error("Error: Database connection not found for kodcaw '{$kodcaw}'!"); + return Command::FAILURE; + } + + $this->info("Using database connection: {$cawangan['mysql']}"); + + $data = [ + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240808-0003', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 1748.20, + 'jbg' => 4, + 'untung' => 78.00, + 'untungonepercent' => 52.00, + 'untungcajlain' => 26.00, + 'pembiayaan' => 1300.00, + ], + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240719-0015', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 8499.80, + 'jbg' => 4.5, + 'untung' => 519.30, + 'untungonepercent' => 305.55, + 'untungcajlain' => 213.75, + 'pembiayaan' => 6790.00, + ], + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240806-0011', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 8740.98, + 'jbg' => 4, + 'untung' => 475.40, + 'untungonepercent' => 279.60, + 'untungcajlain' => 195.80, + 'pembiayaan' => 6990.00, + ], + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240828-0001', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 8121.20, + 'jbg' => 3, + 'untung' => 316.65, + 'untungonepercent' => 182.70, + 'untungcajlain' => 133.95, + 'pembiayaan' => 6090.00, + ], + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240904-0007', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 16135.20, + 'jbg' => 3, + 'untung' => 617.10, + 'untungonepercent' => 363.00, + 'untungcajlain' => 254.10, + 'pembiayaan' => 12100.00, + ], + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240904-0008', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 12101.40, + 'jbg' => 3, + 'untung' => 462.60, + 'untungonepercent' => 272.10, + 'untungcajlain' => 190.50, + 'pembiayaan' => 9070.00, + ], + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240904-0009', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 6050.70, + 'jbg' => 3, + 'untung' => 231.00, + 'untungonepercent' => 135.90, + 'untungcajlain' => 95.10, + 'pembiayaan' => 4530.00, + ], + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240719-0023', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 19001.24, + 'jbg' => 4.5, + 'untung' => 149.18, + 'untungonepercent' => 87.75, + 'untungcajlain' => 61.43, + 'pembiayaan' => 1950.00, + ], + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240719-0024', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 8499.80, + 'jbg' => 4.5, + 'untung' => 65.03, + 'untungonepercent' => 38.25, + 'untungcajlain' => 26.78, + 'pembiayaan' => 850.00, + ], + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240719-0025', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 15972.57, + 'jbg' => 4.5, + 'untung' => 122.40, + 'untungonepercent' => 72.00, + 'untungcajlain' => 50.40, + 'pembiayaan' => 1600.00, + ], + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240618-0026', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 8552.90, + 'jbg' => 5.5, + 'untung' => 187.00, + 'untungonepercent' => 110.00, + 'untungcajlain' => 77.00, + 'pembiayaan' => 2000.00, + ], + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240719-0027', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 42923.11, + 'jbg' => 4.5, + 'untung' => 328.95, + 'untungonepercent' => 193.50, + 'untungcajlain' => 135.45, + 'pembiayaan' => 4300.00, + ], + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240719-0028', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 41872.04, + 'jbg' => 4.5, + 'untung' => 321.30, + 'untungonepercent' => 189.00, + 'untungcajlain' => 132.30, + 'pembiayaan' => 4200.00, + ], + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240618-0020', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 15495.86, + 'jbg' => 5.5, + 'untung' => 280.50, + 'untungonepercent' => 165.00, + 'untungcajlain' => 115.50, + 'pembiayaan' => 3000.00, + ], + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240719-0030', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 17483.01, + 'jbg' => 4.5, + 'untung' => 133.88, + 'untungonepercent' => 78.75, + 'untungcajlain' => 55.13, + 'pembiayaan' => 1750.00, + ], + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240618-0029', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 10062.25, + 'jbg' => 5.5, + 'untung' => 280.50, + 'untungonepercent' => 165.00, + 'untungcajlain' => 115.50, + 'pembiayaan' => 3000.00, + ], + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240731-0026', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 10283.50, + 'jbg' => 4.5, + 'untung' => 558.45, + 'untungonepercent' => 328.50, + 'untungcajlain' => 229.95, + 'pembiayaan' => 7300.00, + ], + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240715-0027', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 29624.77, + 'jbg' => 4.5, + 'untung' => 1147.50, + 'untungonepercent' => 675.00, + 'untungcajlain' => 472.50, + 'pembiayaan' => 15000.00, + ], + [ + 'kodcaw' => $kodcaw, + 'tarikh' => '2024-11-28', + 'norujukan' => '011237240912-0009', + 'teller' => 'DM', + 'nota' => 'Barang Kes Semporna 28/11/24', + 'nilaimarhun' => 12654.35, + 'jbg' => 3, + 'untung' => 428.40, + 'untungonepercent' => 252.00, + 'untungcajlain' => 176.40, + 'pembiayaan' => 8400.00, + ], + ]; + + $insertedCount = 0; + $skippedCount = 0; + + // Start database transaction + DB::connection($cawangan['mysql'])->beginTransaction(); + + try { + foreach ($data as $record) { + // Check if record already exists + $exists = DB::connection($cawangan['mysql'])->table('palsu') + ->where('kodcaw', $record['kodcaw']) + ->where('norujukan', $record['norujukan']) + ->exists(); + + if (!$exists) { + DB::connection($cawangan['mysql'])->table('palsu')->insert($record); + $insertedCount++; + $this->line("✓ Inserted: {$record['norujukan']}"); + } else { + $skippedCount++; + $this->line("- Skipped: {$record['norujukan']} (already exists)"); + } + } + + // Commit the transaction if everything is successful + DB::connection($cawangan['mysql'])->commit(); + $this->info("✓ Transaction committed successfully!"); + + } catch (\Exception $e) { + // Rollback the transaction if any error occurs + DB::connection($cawangan['mysql'])->rollback(); + $this->error("✗ Transaction failed and rolled back: " . $e->getMessage()); + return Command::FAILURE; + } + + $this->info("\nSummary:"); + $this->info("Inserted: {$insertedCount} records"); + $this->info("Skipped: {$skippedCount} records"); + + return Command::SUCCESS; + } +} \ No newline at end of file diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 3bf9421..9d8e527 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -7,6 +7,7 @@ use Illuminate\Console\Scheduling\Schedule; use Laravel\Lumen\Console\Kernel as ConsoleKernel; use App\Jobs\WhatsappUnsoldCommodityScanner; +use Faker\Provider\ar_SA\Color; use Illuminate\Console\Command; class Kernel extends ConsoleKernel @@ -22,6 +23,7 @@ class Kernel extends ConsoleKernel Commands\CawanganDebugConnections::class, Commands\ClearCachesAll::class, Commands\RestartSupervisor::class, + Commands\InsertSempornaData::class, ]; diff --git a/app/Palsu.php b/app/Palsu.php new file mode 100644 index 0000000..06c5eaa --- /dev/null +++ b/app/Palsu.php @@ -0,0 +1,90 @@ + request()->all()['user']['name'], + // 'actions' => 'Tambah poskod', + // 'norujukan' => $poskod->recno, + // 'new_data' => $poskod->toJson(), + // 'old_data' => '', + // 'kodcaw' => request()->all()['user']['cawangan'], + // 'created_at' => $current, + // 'updated_at' => $current, + // ]); + + // }); + + + // static::updated(function (Poskod $poskod) use($current) { + + // Audit::create([ + // 'users' => request()->all()['user']['name'], + // 'actions' => 'Kemaskini poskod', + // 'norujukan' => $poskod->recno, + // 'new_data' => $poskod->toJson(), + // 'old_data' => json_encode($poskod->getOriginal()), + // 'kodcaw' => request()->all()['user']['cawangan'], + // 'created_at' => $current, + // 'updated_at' => $current, + // ]); + + // }); + // } + + /** + * The attributes excluded from the model's JSON form. + * + * @var array + */ + // protected $hidden = [], + + // public function negeri(): BelongsTo + // { + // return $this->belongsTo(Negeri::class, 'kodnegeri', 'kodnegeri'); + // } + + // public function daerah(): BelongsTo + // { + // return $this->belongsTo(Daerah::class, 'koddaerah', 'koddaerah'); + // } +} diff --git a/database/migrations/2025_07_03_223000_add_nm_jbg_untung_pembiayaan_columns_to_palsu_table.php b/database/migrations/2025_07_03_223000_add_nm_jbg_untung_pembiayaan_columns_to_palsu_table.php new file mode 100644 index 0000000..9dffcdf --- /dev/null +++ b/database/migrations/2025_07_03_223000_add_nm_jbg_untung_pembiayaan_columns_to_palsu_table.php @@ -0,0 +1,122 @@ +select('SELECT 1'); + return true; + } catch (\Exception $e) { + return false; + } + }); + + return $db_connection ? array_values($db_connection) : []; + + } + + public function up() + { + $db_connection = $this->getActiveDB(); + + foreach ($db_connection as $dbase) { + Schema::connection($dbase)->table('palsu', function (Blueprint $table) use ($dbase) { + + if (!Schema::connection($dbase)->hasColumn('palsu', 'pembiayaan')) { + $table->decimal('pembiayaan', 11, 2)->nullable()->comment('Pembiayaan amount'); + } + + if (!Schema::connection($dbase)->hasColumn('palsu', 'nilaimarhun')) { + $table->decimal('nilaimarhun', 11, 2)->nullable()->comment('Nilai marhun amount'); + } + + if (!Schema::connection($dbase)->hasColumn('palsu', 'jbg')) { + $table->float('jbg', 4, 2)->nullable()->comment('JBG value'); + } + + if (!Schema::connection($dbase)->hasColumn('palsu', 'untung')) { + $table->decimal('untung', 11, 2)->nullable()->comment('Untung amount'); + } + + if (!Schema::connection($dbase)->hasColumn('palsu', 'untungonepercent')) { + $table->decimal('untungonepercent', 11, 2)->nullable()->comment('Satu Persen amount'); + } + + if (!Schema::connection($dbase)->hasColumn('palsu', 'untungcajlain')) { + $table->decimal('untungcajlain', 11, 2)->nullable()->comment('Caj Lain-Lain amount'); + } + + // Add index and foreign key constraint to existing norujukan column + if (Schema::connection($dbase)->hasColumn('palsu', 'norujukan')) { + // Add index to norujukan column for better performance + $table->index('norujukan'); + + // Add foreign key constraint named 'norujukan' + $table->foreign('norujukan', 'norujukan')->references('norujukan')->on('gadai'); + } + + }); + } + } + + public function down() + { + $db_connection = $this->getActiveDB(); + + foreach ($db_connection as $dbase) { + Schema::connection($dbase)->table('palsu', function (Blueprint $table) use ($dbase) { + + // Drop foreign key constraint and index from norujukan column + if (Schema::connection($dbase)->hasColumn('palsu', 'norujukan')) { + try { + $table->dropForeign('norujukan'); + echo "Dropped foreign key 'norujukan' on connection '{$dbase}'\n"; + } catch (\Exception $e) { + echo "Warning: Could not drop foreign key 'norujukan' on connection '{$dbase}': " . $e->getMessage() . "\n"; + } + + try { + $table->dropIndex(['norujukan']); + echo "Dropped index on 'norujukan' column on connection '{$dbase}'\n"; + } catch (\Exception $e) { + echo "Warning: Could not drop index on 'norujukan' on connection '{$dbase}': " . $e->getMessage() . "\n"; + } + } + + // Drop other columns if they exist + $columnsToCheck = ['nilaimarhun', 'jbg', 'untung','untungonepercent','untungcajlain', 'pembiayaan']; + + foreach ($columnsToCheck as $column) { + if (Schema::connection($dbase)->hasColumn('palsu', $column)) { + try { + $table->dropColumn($column); + echo "Dropped column '{$column}' on connection '{$dbase}'\n"; + } catch (\Exception $e) { + echo "Warning: Could not drop column '{$column}' on connection '{$dbase}': " . $e->getMessage() . "\n"; + } + } + } + }); + } + } +} \ No newline at end of file From 7ccca55b710252707cb8a3e349d07b218233895b Mon Sep 17 00:00:00 2001 From: hafifierahman Date: Sat, 5 Jul 2025 02:28:55 +0800 Subject: [PATCH 080/117] added penyelarasan table to remove bakilelong hardcode and put in untungrugiterkumpul --- app/Http/Controllers/AdminPageController.php | 5 +++ app/Http/Controllers/LelongController.php | 22 ------------ app/Penyelarasan.php | 31 ++++++++++++++++ ...07_04_230424_create_penyelarasan_table.php | 36 +++++++++++++++++++ 4 files changed, 72 insertions(+), 22 deletions(-) create mode 100644 app/Penyelarasan.php create mode 100644 database/migrations/2025_07_04_230424_create_penyelarasan_table.php diff --git a/app/Http/Controllers/AdminPageController.php b/app/Http/Controllers/AdminPageController.php index 74a330d..4f59be5 100644 --- a/app/Http/Controllers/AdminPageController.php +++ b/app/Http/Controllers/AdminPageController.php @@ -62,6 +62,7 @@ use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; use App\Jobs\AccountCheckJob; +use App\Penyelarasan; use Illuminate\Support\Str; use Illuminate\Support\Facades\Cache; @@ -3789,6 +3790,10 @@ class AdminPageController extends Controller if($kodcaw == 'KB2') $total -= 64.8; + $total += Penyelarasan::on('mysql7') + ->where('kodcaw', $kodcaw) + ->sum(DB::raw('rugilelong + bakilelong + `lain-lain`')); + return response()->json($total,200); } diff --git a/app/Http/Controllers/LelongController.php b/app/Http/Controllers/LelongController.php index aed7157..909391c 100644 --- a/app/Http/Controllers/LelongController.php +++ b/app/Http/Controllers/LelongController.php @@ -225,16 +225,12 @@ class LelongController extends Controller $rugitotal=$rugilelong + $ansrugi; - if($kodcaw == 'APM') - // $bakilelong += 4498.1; - $bakilelong += 1228.07; if($kodcaw == '010617') $rugitotal -= 6.1; if($kodcaw == '011229'){ $rugitotal -= 919.7; - $bakilelong -= 144; } if($kodcaw == '011412') @@ -242,31 +238,13 @@ class LelongController extends Controller if($kodcaw == '020303') { - $bakilelong -= 542.6; $rugitotal += 0.01; } - if($kodcaw === '011232') - { - $bakilelong += 6; - } - if($kodcaw === 'ARP'){ $rugitotal += 119; } - if($kodcaw == '020301'){ - $bakilelong -= 719.50; - } - - if($kodcaw == '011227'){ - $bakilelong -= 896.65; - } - - if($kodcaw == 'GC'){ - $bakilelong += 2135.75; - $bakilelong -= 3; //added 15/10/2024 sebab ada kemusykilan 3 ringgit daripada rugi lelong - } $arraylelong = ['bakilelong' => $bakilelong, 'rugilelong' => $rugitotal]; diff --git a/app/Penyelarasan.php b/app/Penyelarasan.php new file mode 100644 index 0000000..e71e26e --- /dev/null +++ b/app/Penyelarasan.php @@ -0,0 +1,31 @@ +id(); + $table->char('kodcaw', 20); + $table->decimal('rugilelong', 10, 2)->default(0); + $table->decimal('bakilelong', 10, 2)->default(0); + $table->decimal('lain-lain', 10, 2)->default(0); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('penyelarasan'); + } +} From c369566ca9fbcda61b36112ceb75967df83454ae Mon Sep 17 00:00:00 2001 From: Hafifie PKB Date: Sun, 6 Jul 2025 08:49:21 +0800 Subject: [PATCH 081/117] added endpoints laporan kelulusan and make id into string --- app/Http/Controllers/KelulusanController.php | 41 ++++++++++++++++++++ app/Mohonid.php | 4 ++ routes/web.php | 3 ++ 3 files changed, 48 insertions(+) diff --git a/app/Http/Controllers/KelulusanController.php b/app/Http/Controllers/KelulusanController.php index 81388a4..c9c357b 100644 --- a/app/Http/Controllers/KelulusanController.php +++ b/app/Http/Controllers/KelulusanController.php @@ -399,6 +399,8 @@ public function create(REQUEST $request,$kodcaw,$norujukan,$roles) $mohonid_data = Mohonid::on($cawangan['mysql']) ->where('tarikh','=',$harini->toDateString()) + ->whereNotNull('id') + ->whereNotNull('timestamp_approved_by_pc') ->where('tagoperasi', '1') ->whereNull('operasi') ->get(); @@ -472,4 +474,43 @@ public function create(REQUEST $request,$kodcaw,$norujukan,$roles) } + public function getApproval(Request $request){ + $harini = Carbon::now(); + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first(); + $kelulusan = Mohonid::on($cawangan['mysql']) + ->where('tarikh','=',$harini->toDateString()) + ->where('teller','=',$request->teller) + ->where('mohon','=',$request->mohon) + ->where('benar','=',0) + ->latest('masa') + ->first(); + + return response()->json($kelulusan, 200); + } + + public function getApprovalList(Request $request){ + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first(); + $kelulusan = Mohonid::on($cawangan['mysql']) + ->groupBy('mohon') + ->pluck('mohon'); + + return response()->json($kelulusan, 200); + } + + public function getApprovalLaporan(Request $request){ + $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first(); + $kelulusan = Mohonid::on($cawangan['mysql']) + ->selectRaw('recno, benar, tarikh, onlineid, mohon, norujukan, id, katalaluan, benar, operasi, pinjaman, ansuran, nilaimarhun, berat, margin, teller ,masa, timestamp_approved_by_pc, timestamp_approved_by_operasi') + ->whereBetween('tarikh', [$request->tarikh_mula, $request->tarikh_akhir]) + ->where('mohon', $request->mohon) + ->orderBy('tarikh', 'desc') + ->orderBy('masa', 'desc') + ->get(); + + + return response()->json($kelulusan, 200); + } + + + } diff --git a/app/Mohonid.php b/app/Mohonid.php index ce9013f..15ca500 100644 --- a/app/Mohonid.php +++ b/app/Mohonid.php @@ -36,6 +36,10 @@ class Mohonid extends Model 'timestamp_approved_by_operasi', ]; + protected $casts = [ + 'id' => 'string', + ]; + /** * The attributes excluded from the model's JSON form. * diff --git a/routes/web.php b/routes/web.php index d6a6fb8..78894df 100644 --- a/routes/web.php +++ b/routes/web.php @@ -696,6 +696,9 @@ $router->group(['prefix'=>'api'], function () use ($router){ /*Endpoints for Hapus Ansuran*/ $router->put('UpdateHapusAnsuran',['uses'=>'KelulusanController@UpdateHapusAnsuranOperasi']); + $router->get('getApproval',['uses'=>'KelulusanController@getApproval']); + $router->get('getApproval/list',['uses'=>'KelulusanController@getApprovalList']); + $router->get('getApproval/laporan',['uses'=>'KelulusanController@getApprovalLaporan']); }); $router->group(['prefix'=>'e-arrahn'], function () use ($router){ From 745db13b3b67e56c9644209785bca50315dfb199 Mon Sep 17 00:00:00 2001 From: Nur Izzati Date: Wed, 9 Jul 2025 13:46:45 +0800 Subject: [PATCH 082/117] rekod gadaitebus hari sama --- .../Controllers/Reports/GadaianController.php | 60 +++++++++++++++++++ routes/report.php | 3 + 2 files changed, 63 insertions(+) diff --git a/app/Http/Controllers/Reports/GadaianController.php b/app/Http/Controllers/Reports/GadaianController.php index 149de0d..048c7b9 100644 --- a/app/Http/Controllers/Reports/GadaianController.php +++ b/app/Http/Controllers/Reports/GadaianController.php @@ -65,4 +65,64 @@ class GadaianController extends Controller return json_encode($response); } + + public function getSummaryLaporanGadaiTebus(Request $request) +{ + $startDate = $request->startDate; + $endDate = $request->endDate; + + // Get active branch DBs from helper + $active_cawangan_db_connection = Helper::getActiveCawanganDbConnection(); + + // Fetch branch details with mysql info + $cawangan_available = Cawangan::select('kodcaw', 'details_caw', 'mysql') + ->whereIn('mysql', $active_cawangan_db_connection) + ->get(); + + // Get db connections + $active_cawangan_db_connection = array_column($cawangan_available->toArray(), 'mysql'); + + // Map branch info for response + $active_cawangan_detail = $cawangan_available->map(function ($c) { + return [ + 'kodcaw' => $c->kodcaw, + 'details_caw' => $c->details_caw, + ]; + })->values()->toArray(); + + // Loop through each DB + $summary_data = array_map(function ($db_connection) use ($startDate, $endDate) { + $result = DB::connection($db_connection)->table('gadai as g') + ->join('tebus as t', function ($join) { + $join->on(DB::raw('DATE(g.t_gadai)'), '=', DB::raw('DATE(t.t_tebus)')) + ->on('g.norujukan', '=', 't.norujukan'); + }) + ->whereDate('g.t_gadai', '>=', $startDate) + ->whereDate('g.t_gadai', '<=', $endDate) + ->whereDate('t.t_tebus', '>=', $startDate) + ->whereDate('t.t_tebus', '<=', $endDate) + ->selectRaw(' + COUNT(DISTINCT g.norujukan) as total_gadai_tebus_samahari, + SUM(g.pinjaman) as jumlah_pinjaman + ') + ->first(); // ambil satu hasil, bukan collection + + return (array) $result ?: [ + 'total_gadai_tebus_samahari' => 0, + 'jumlah_pinjaman' => 0.00 + ]; + }, $active_cawangan_db_connection); + + + // Gabung cawangan + hasil + $response = array_map(function ($cawangan_detail, $summary_row) { + return array_merge($cawangan_detail, $summary_row ?: [ + 'total_gadai_tebus_samahari' => 0, + 'jumlah_pinjaman' => 0.00 + ]); + }, $active_cawangan_detail, $summary_data); + + return response()->json($response); +} + } diff --git a/routes/report.php b/routes/report.php index 296afe7..c122cec 100644 --- a/routes/report.php +++ b/routes/report.php @@ -51,5 +51,8 @@ $router->group(['prefix' => 'api/reports'], function () use ($router) { $router->get('bakilelongbelumtuntut/{kod_cawangan}', ['uses' => 'LelonganController@getLaporanBakiLelongBelumTuntutCawangan']); $router->get('bayaran-online', ['uses' => 'BayaranOnlineController']); $router->get('bayaran-online-detail', ['uses' => 'BayaranOnlineDetailController']); + + $router->get('gadaitebus', ['uses' => 'GadaianController@getSummaryLaporanGadaiTebus']); + }); }); From 21897ab71dc01e58a52b875d6e1fd8314b7e4b32 Mon Sep 17 00:00:00 2001 From: Nur Izzati Date: Mon, 14 Jul 2025 17:15:46 +0800 Subject: [PATCH 083/117] tambah masa pada transaksi segera --- .../Controllers/Reports/GadaianController.php | 57 ++++++ app/Services/Reports/GadaianService.php | 184 ++++++++++++++++++ 2 files changed, 241 insertions(+) diff --git a/app/Http/Controllers/Reports/GadaianController.php b/app/Http/Controllers/Reports/GadaianController.php index 048c7b9..f085cc5 100644 --- a/app/Http/Controllers/Reports/GadaianController.php +++ b/app/Http/Controllers/Reports/GadaianController.php @@ -124,5 +124,62 @@ class GadaianController extends Controller return response()->json($response); } + public function getSummaryLaporanGadaiTebusMasa(Request $request) + { + $startDate = $request->startDate; + $endDate = $request->endDate; + + // Ambil connection aktif + $active_cawangan_db_connection = Helper::getActiveCawanganDbConnection(); + + // Dapatkan butiran cawangan + $cawangan_available = Cawangan::select('kodcaw', 'details_caw', 'mysql') + ->whereIn('mysql', $active_cawangan_db_connection) + ->get(); + + $active_cawangan_db_connection = array_column($cawangan_available->toArray(), 'mysql'); + + // Simpan hasil semua cawangan + $data = []; + + foreach ($cawangan_available as $cawangan) { + $kodcaw = $cawangan->kodcaw; + $db = $cawangan->mysql; + + $records = DB::connection($db)->table('gadai as g') + ->join('online_arrahn.transaction as trans', function ($join) { + $join->on('g.norujukan', '=', 'trans.norujukan') + ->where('trans.trans_type', '=', 'T'); + }) + ->whereBetween('g.t_gadai', [$startDate, $endDate]) + ->whereRaw('DATE(g.t_gadai) = DATE(trans.created_at)') + ->selectRaw(" + COUNT(*) as jumlah_transaksi, + AVG(TIME_TO_SEC(TIMEDIFF(TIME(trans.created_at), g.masa))) as avg_duration_sec + ") + ->first(); + + $data[] = [ + 'kodcaw' => $kodcaw, + 'details_caw' => $cawangan->details_caw, + 'jumlah_transaksi' => $records->jumlah_transaksi ?? 0, + 'purata_masa_saat' => round($records->avg_duration_sec ?? 0), + 'purata_masa_format' => gmdate("H:i:s", (int) ($records->avg_duration_sec ?? 0)) + ]; + } + + // Sort ikut purata masa (paling cepat dahulu) + $sorted = collect($data)->sortBy('purata_masa_saat')->values(); + + return response()->json($sorted); + } + + public function getLaporanGadaiTebusMasaCawangan(string $kod_cawangan, Request $request) + { + $ReportGadaianService = new ReportGadaianService($kod_cawangan, $request); + return $ReportGadaianService->getCawanganReportGadaiTebusMasa(); + } + + } diff --git a/app/Services/Reports/GadaianService.php b/app/Services/Reports/GadaianService.php index 5aad15f..bf7755d 100644 --- a/app/Services/Reports/GadaianService.php +++ b/app/Services/Reports/GadaianService.php @@ -10,6 +10,7 @@ use App\Marhun; use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Request; use App\Helper; +use Illuminate\Support\Facades\DB; class GadaianService { @@ -191,4 +192,187 @@ class GadaianService return $marhun_gadaian; } + + public function getCawanganReportGadaiTebusMasa() + { + $cawangan_connection = Cawangan::where('kodcaw', $this->kod_cawangan)->firstOrFail()->mysql; + $startDate = $this->startDate; + $endDate = $this->endDate; + + // Query asas - cari gadaian yang ditebus hari sama + $query_total_gadaitebusmasa = DB::connection($cawangan_connection)->table('gadai') + ->join('online_arrahn.transaction as trans', function ($join) { + $join->on('gadai.norujukan', '=', 'trans.norujukan') + ->where('trans.trans_type', '=', 'T'); + }) + ->whereRaw('DATE(gadai.t_gadai) = DATE(trans.created_at)') + ->when($startDate && $endDate, function ($query) use ($startDate, $endDate) { + return $query->whereBetween('gadai.t_gadai', [$startDate, $endDate]); + }) + ->select( + 'gadai.t_gadai', + 'gadai.norujukan', + 'gadai.nokp', + 'gadai.semakbarcode', + 'gadai.masa', + 'gadai.berat', + 'gadai.nilaimarhun', + 'gadai.pinjaman', + 'gadai.upah12', + 'gadai.percentpinj', + 'gadai.teller', + 'gadai.bakipjm', + 'gadai.bakiupah', + DB::raw('TIME(trans.created_at) as masa_tebus'), + DB::raw('TIMEDIFF(TIME(trans.created_at), gadai.masa) as beza_minit') + ) + ->orderByRaw('beza_minit ASC'); + + // Dapatkan hasil penuh + $total_gadaitebusmasa = $query_total_gadaitebusmasa->get(); + + // Data tambahan + $customer_info = $this->getCustomerInfo($total_gadaitebusmasa); + $marhun_gadaitebusmasa = $this->getMarhunGadaiTebusMasa($total_gadaitebusmasa, $cawangan_connection); + $cawangan_detail = $this->getCawanganDetail($cawangan_connection); + $total_summary_gadaitebusmasa = $this->getTotalSummaryGadaiTebusMasa($query_total_gadaitebusmasa); + + // Gabung data + $total_gadaitebusmasa = $total_gadaitebusmasa->zip($customer_info, $marhun_gadaitebusmasa)->map(function ($data) { + [$gadai, $customer, $marhun] = $data; + + return [ + 'no_rujukan' => $gadai->norujukan, + 'nama' => $customer['nama'] ?? '-', + 'alamat' => $customer['alamat1'] ?? '-', + 'no_kp' => $gadai->nokp, + 'masa' => $gadai->masa, + 'masa_tebus' => $gadai->masa_tebus ?? '-', + 'beza_minit' => $gadai->beza_minit, + 'marhun' => $marhun, + 'berat' => $gadai->berat, + 'nilai_marhun' => $gadai->nilaimarhun, + 'pinjaman' => $gadai->pinjaman, + 'peratusan_margin_pinjaman' => $gadai->percentpinj, + 'bakipjm' => $gadai->bakipjm, + 'keuntungan' => $gadai->bakiupah, + 'teller' => $gadai->teller, + 't_gadai' => $gadai->t_gadai, + ]; + }); + + $data = [ + 'query' => [ + 'startDate' => Helper::formatDate($startDate), + 'endDate' => Helper::formatDate($endDate), + ], + 'cawangan_detail' => $cawangan_detail, + 'gadaian' => $total_gadaitebusmasa, + 'summary_gadaian' => $total_summary_gadaitebusmasa, + ]; + + return json_encode($data); + } + + private function formatBezaMinit($minit) + { + if (is_null($minit)) { + return '-'; + } + + $abs = abs($minit); + $jam = floor($abs / 60); + $baki = $abs % 60; + $tanda = $minit < 0 ? '-' : ''; + + return "{$tanda}{$jam} jam {$baki} minit"; + } + + + private function getTotalGadaiTebusMasa($query_total_gadaitebusmasa) + { + $total_gadaitebusmasa = (clone $query_total_gadaitebusmasa) + ->select('gadai.t_gadai', + 'gadai.norujukan', + 'gadai.nokp', + 'gadai.semakbarcode', + 'gadai.masa', + 'gadai.berat', + 'gadai.nilaimarhun', + 'gadai.pinjaman', + 'gadai.upah12', + 'gadai.percentpinj', + 'gadai.teller', + 'gadai.nokp', + 'gadai.bakipjm', + 'gadai.bakiupah', + DB::raw('TIMEDIFF(TIME(trans.created_at), gadai.masa) as beza_minit')) + ->orderBy('gadai.teller') + ->orderBy('gadai.sirig') + ->get(); + return $total_gadaitebusmasa; + } + + private function getTotalSummaryGadaiTebusMasa($query_total_gadaitebusmasa) + { + $summary = (clone $query_total_gadaitebusmasa) + ->selectRaw(' + COUNT(gadai.norujukan) as total_gadaitebusmasa, + SUM(gadai.berat) as total_berat, + SUM(gadai.nilaimarhun) as total_nilai_marhun, + SUM(gadai.pinjaman) as total_pembiayaan, + SUM(gadai.bakipjm) as total_bakipjm, + SUM(gadai.bakiupah) as total_keuntungan + ') + ->first(); + + // Convert stdClass to array, and fallback to 0 if null + return [ + 'total_gadaitebusmasa' => $summary->total_gadaitebusmasa ?? 0, + 'total_berat' => $summary->total_berat ?? 0, + 'total_nilai_marhun' => $summary->total_nilai_marhun ?? 0, + 'total_pembiayaan' => $summary->total_pembiayaan ?? 0, + 'total_bakipjm' => $summary->total_bakipjm ?? 0, + 'total_keuntungan' => $summary->total_keuntungan ?? 0, + ]; + } + + private function getTotalSummaryGadaiTebusMasaGroupByTeller($query_total_gadaitebusmasa) + { + + $total_summary_gadaian_groupByTeller = (clone $query_total_gadaitebusmasa) + ->selectRaw('count(gadai.norujukan) as total_gadaitebusmasa, + sum(gadai.berat) as total_berat, + sum(gadai.nilaimarhun) as total_nilai_marhun, + sum(gadai.pinjaman) as total_pembiayaan, + sum(gadai.bakipjm) as total_bakipjm, + sum(gadai.bakiupah) as total_keuntungan') + ->groupBy('gadai.teller') + ->get(); + return $total_summary_gadaian_groupByTeller; + } + + private function getMarhunGadaiTebusMasa($total_gadaitebusmasa, $cawangan_connection) + { + + $extract_norujukan = $total_gadaitebusmasa->pluck('norujukan'); + + $marhun_gadaitebusmasa = Marhun::on($cawangan_connection) + ->select('norujukan', 'bil', 'marhun') + ->whereIn('norujukan', $extract_norujukan) + ->get() + ->groupBy('norujukan') + ->toArray(); + + $marhun_gadaitebusmasa = array_map(function ($gadaian) { + return array_map(function ($norujukan) { + return $norujukan['bil'] . ' ' . $norujukan['marhun']; + }, $gadaian); + }, $marhun_gadaitebusmasa); + + $marhun_gadaitebusmasa = array_map(function ($gadaian) { + return implode(',', $gadaian); + }, $marhun_gadaitebusmasa); + return $marhun_gadaitebusmasa; + } } From e6920c1b02beb4b6c21c6091ad00c4ae722c088d Mon Sep 17 00:00:00 2001 From: Nur Izzati Date: Mon, 14 Jul 2025 17:16:10 +0800 Subject: [PATCH 084/117] update --- routes/report.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/routes/report.php b/routes/report.php index c122cec..6cf98f2 100644 --- a/routes/report.php +++ b/routes/report.php @@ -53,6 +53,9 @@ $router->group(['prefix' => 'api/reports'], function () use ($router) { $router->get('bayaran-online-detail', ['uses' => 'BayaranOnlineDetailController']); $router->get('gadaitebus', ['uses' => 'GadaianController@getSummaryLaporanGadaiTebus']); + $router->get('gadaitebusmasa', ['uses' => 'GadaianController@getSummaryLaporanGadaiTebusMasa']); + $router->get('gadaitebusmasa/{kod_cawangan}', ['uses' => 'GadaianController@getLaporanGadaiTebusMasaCawangan']); + }); }); From 67adddb7533d8afcb832001e667595731982a5ed Mon Sep 17 00:00:00 2001 From: Nur Izzati Date: Tue, 15 Jul 2025 10:40:11 +0800 Subject: [PATCH 085/117] tambah baik code yang gadai tebus masa --- app/Services/Reports/GadaianService.php | 148 ++++++++++++++---------- 1 file changed, 86 insertions(+), 62 deletions(-) diff --git a/app/Services/Reports/GadaianService.php b/app/Services/Reports/GadaianService.php index bf7755d..1faa5ed 100644 --- a/app/Services/Reports/GadaianService.php +++ b/app/Services/Reports/GadaianService.php @@ -196,49 +196,82 @@ class GadaianService public function getCawanganReportGadaiTebusMasa() { $cawangan_connection = Cawangan::where('kodcaw', $this->kod_cawangan)->firstOrFail()->mysql; + $online_connection = Helper::getOnlineArrahnConnection(); $startDate = $this->startDate; $endDate = $this->endDate; - // Query asas - cari gadaian yang ditebus hari sama - $query_total_gadaitebusmasa = DB::connection($cawangan_connection)->table('gadai') - ->join('online_arrahn.transaction as trans', function ($join) { - $join->on('gadai.norujukan', '=', 'trans.norujukan') - ->where('trans.trans_type', '=', 'T'); - }) - ->whereRaw('DATE(gadai.t_gadai) = DATE(trans.created_at)') - ->when($startDate && $endDate, function ($query) use ($startDate, $endDate) { - return $query->whereBetween('gadai.t_gadai', [$startDate, $endDate]); - }) - ->select( - 'gadai.t_gadai', - 'gadai.norujukan', - 'gadai.nokp', - 'gadai.semakbarcode', - 'gadai.masa', - 'gadai.berat', - 'gadai.nilaimarhun', - 'gadai.pinjaman', - 'gadai.upah12', - 'gadai.percentpinj', - 'gadai.teller', - 'gadai.bakipjm', - 'gadai.bakiupah', - DB::raw('TIME(trans.created_at) as masa_tebus'), - DB::raw('TIMEDIFF(TIME(trans.created_at), gadai.masa) as beza_minit') - ) - ->orderByRaw('beza_minit ASC'); + // 1. Ambil data gadai dari cawangan + $gadai_data = DB::connection($cawangan_connection)->table('gadai') + ->whereBetween('t_gadai', [$startDate, $endDate]) + ->get(); - // Dapatkan hasil penuh - $total_gadaitebusmasa = $query_total_gadaitebusmasa->get(); + if ($gadai_data->isEmpty()) { + return response()->json([ + 'query' => [ + 'startDate' => Helper::formatDate($startDate), + 'endDate' => Helper::formatDate($endDate), + ], + 'cawangan_detail' => $this->getCawanganDetail($cawangan_connection), + 'gadaian' => [], + 'summary_gadaian' => [], + ]); + } - // Data tambahan - $customer_info = $this->getCustomerInfo($total_gadaitebusmasa); - $marhun_gadaitebusmasa = $this->getMarhunGadaiTebusMasa($total_gadaitebusmasa, $cawangan_connection); + // 2. Ambil norujukan & tarikh dari gadai + $norujukans = $gadai_data->pluck('norujukan')->unique(); + $tarikh_set = $gadai_data->pluck('t_gadai')->map(fn($d) => date('Y-m-d', strtotime($d)))->unique(); + + // 3. Ambil transaksi tebus dari online server + $transaksi_tebus = DB::connection($online_connection)->table('transaction') + ->where('trans_type', 'T') + ->whereIn('norujukan', $norujukans) + ->whereIn(DB::raw('DATE(created_at)'), $tarikh_set) + ->get() + ->groupBy(fn($trans) => $trans->norujukan . '|' . date('Y-m-d', strtotime($trans->created_at))); + + // 4. Padankan + $matched = collect(); + + foreach ($gadai_data as $item) { + $tarikh = date('Y-m-d', strtotime($item->t_gadai)); + $key = $item->norujukan . '|' . $tarikh; + + if ($transaksi_tebus->has($key)) { + $trans = $transaksi_tebus[$key]->first(); // satu transaksi je + + $masa_gadai = $item->masa; + $masa_tebus = date('H:i:s', strtotime($trans->created_at)); + $beza_saat = abs(strtotime($masa_tebus) - strtotime($masa_gadai)); + $beza_masa = gmdate("H:i:s", $beza_saat); + + $matched->push((object)[ + 't_gadai' => $item->t_gadai, + 'norujukan' => $item->norujukan, + 'nokp' => $item->nokp, + 'semakbarcode' => $item->semakbarcode, + 'masa' => $masa_gadai, + 'masa_tebus' => $masa_tebus, + 'beza_minit' => $beza_masa, + 'berat' => $item->berat, + 'nilaimarhun' => $item->nilaimarhun, + 'pinjaman' => $item->pinjaman, + 'upah12' => $item->upah12, + 'percentpinj' => $item->percentpinj, + 'teller' => $item->teller, + 'bakipjm' => $item->bakipjm, + 'bakiupah' => $item->bakiupah, + ]); + } + } + + // 5. Data tambahan + $customer_info = $this->getCustomerInfo($matched); + $marhun_info = $this->getMarhunGadaiTebusMasa($matched, $cawangan_connection); $cawangan_detail = $this->getCawanganDetail($cawangan_connection); - $total_summary_gadaitebusmasa = $this->getTotalSummaryGadaiTebusMasa($query_total_gadaitebusmasa); + $summary = $this->getTotalSummaryGadaiTebusMasa($matched); - // Gabung data - $total_gadaitebusmasa = $total_gadaitebusmasa->zip($customer_info, $marhun_gadaitebusmasa)->map(function ($data) { + // 6. Gabung akhir + $report_data = $matched->zip($customer_info, $marhun_info)->map(function ($data) { [$gadai, $customer, $marhun] = $data; return [ @@ -247,7 +280,7 @@ class GadaianService 'alamat' => $customer['alamat1'] ?? '-', 'no_kp' => $gadai->nokp, 'masa' => $gadai->masa, - 'masa_tebus' => $gadai->masa_tebus ?? '-', + 'masa_tebus' => $gadai->masa_tebus, 'beza_minit' => $gadai->beza_minit, 'marhun' => $marhun, 'berat' => $gadai->berat, @@ -261,17 +294,20 @@ class GadaianService ]; }); - $data = [ + $report_data = $report_data->sortBy(function ($item) { + list($hours, $minutes, $seconds) = explode(':', $item['beza_minit']); + return ((int)$hours * 3600) + ((int)$minutes * 60) + (int)$seconds; + })->values(); + + return response()->json([ 'query' => [ 'startDate' => Helper::formatDate($startDate), 'endDate' => Helper::formatDate($endDate), ], 'cawangan_detail' => $cawangan_detail, - 'gadaian' => $total_gadaitebusmasa, - 'summary_gadaian' => $total_summary_gadaitebusmasa, - ]; - - return json_encode($data); + 'gadaian' => $report_data, + 'summary_gadaian' => $summary, + ]); } private function formatBezaMinit($minit) @@ -313,27 +349,15 @@ class GadaianService return $total_gadaitebusmasa; } - private function getTotalSummaryGadaiTebusMasa($query_total_gadaitebusmasa) + private function getTotalSummaryGadaiTebusMasa($collection) { - $summary = (clone $query_total_gadaitebusmasa) - ->selectRaw(' - COUNT(gadai.norujukan) as total_gadaitebusmasa, - SUM(gadai.berat) as total_berat, - SUM(gadai.nilaimarhun) as total_nilai_marhun, - SUM(gadai.pinjaman) as total_pembiayaan, - SUM(gadai.bakipjm) as total_bakipjm, - SUM(gadai.bakiupah) as total_keuntungan - ') - ->first(); - - // Convert stdClass to array, and fallback to 0 if null return [ - 'total_gadaitebusmasa' => $summary->total_gadaitebusmasa ?? 0, - 'total_berat' => $summary->total_berat ?? 0, - 'total_nilai_marhun' => $summary->total_nilai_marhun ?? 0, - 'total_pembiayaan' => $summary->total_pembiayaan ?? 0, - 'total_bakipjm' => $summary->total_bakipjm ?? 0, - 'total_keuntungan' => $summary->total_keuntungan ?? 0, + 'total_gadaitebusmasa' => $collection->count(), + 'total_berat' => $collection->sum('berat'), + 'total_nilai_marhun' => $collection->sum('nilaimarhun'), + 'total_pembiayaan' => $collection->sum('pinjaman'), + 'total_bakipjm' => $collection->sum('bakipjm'), + 'total_keuntungan' => $collection->sum('bakiupah'), ]; } From 01de0d9d80af6ccb95b2a25c83085b858e49d32f Mon Sep 17 00:00:00 2001 From: Nur Izzati Date: Tue, 15 Jul 2025 16:49:00 +0800 Subject: [PATCH 086/117] update upah12 --- app/Http/Controllers/Reports/GadaianController.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/Http/Controllers/Reports/GadaianController.php b/app/Http/Controllers/Reports/GadaianController.php index f085cc5..ac5ec77 100644 --- a/app/Http/Controllers/Reports/GadaianController.php +++ b/app/Http/Controllers/Reports/GadaianController.php @@ -101,6 +101,7 @@ class GadaianController extends Controller ->whereDate('g.t_gadai', '<=', $endDate) ->whereDate('t.t_tebus', '>=', $startDate) ->whereDate('t.t_tebus', '<=', $endDate) + ->where('g.upah12', '>=', 0.00) ->selectRaw(' COUNT(DISTINCT g.norujukan) as total_gadai_tebus_samahari, SUM(g.pinjaman) as jumlah_pinjaman @@ -153,6 +154,7 @@ class GadaianController extends Controller }) ->whereBetween('g.t_gadai', [$startDate, $endDate]) ->whereRaw('DATE(g.t_gadai) = DATE(trans.created_at)') + ->where('g.upah12', '>=', 0.00) ->selectRaw(" COUNT(*) as jumlah_transaksi, AVG(TIME_TO_SEC(TIMEDIFF(TIME(trans.created_at), g.masa))) as avg_duration_sec From 0f13744b3cf4d83c19b0da89b3a5453012a08f47 Mon Sep 17 00:00:00 2001 From: Nur Izzati Date: Tue, 15 Jul 2025 20:28:21 +0800 Subject: [PATCH 087/117] update data untuk gadai tebus AT --- app/Services/Reports/GadaianService.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Services/Reports/GadaianService.php b/app/Services/Reports/GadaianService.php index 1faa5ed..c7ff57a 100644 --- a/app/Services/Reports/GadaianService.php +++ b/app/Services/Reports/GadaianService.php @@ -223,7 +223,7 @@ class GadaianService // 3. Ambil transaksi tebus dari online server $transaksi_tebus = DB::connection($online_connection)->table('transaction') - ->where('trans_type', 'T') + ->whereIn('trans_type', ['T', 'AT']) ->whereIn('norujukan', $norujukans) ->whereIn(DB::raw('DATE(created_at)'), $tarikh_set) ->get() @@ -343,6 +343,7 @@ class GadaianService 'gadai.bakipjm', 'gadai.bakiupah', DB::raw('TIMEDIFF(TIME(trans.created_at), gadai.masa) as beza_minit')) + ->where('gadai.upah12', '>=', 0.00) ->orderBy('gadai.teller') ->orderBy('gadai.sirig') ->get(); @@ -371,6 +372,7 @@ class GadaianService sum(gadai.pinjaman) as total_pembiayaan, sum(gadai.bakipjm) as total_bakipjm, sum(gadai.bakiupah) as total_keuntungan') + ->where('gadai.upah12', '>=', 0.00) ->groupBy('gadai.teller') ->get(); return $total_summary_gadaian_groupByTeller; From a3f6135304e93ed01c5c9cb0c7c200e07bb46be8 Mon Sep 17 00:00:00 2001 From: Nur Izzati Date: Tue, 15 Jul 2025 21:03:10 +0800 Subject: [PATCH 088/117] update function getSummaryLaporanGadaiTebusMasa --- .../Controllers/Reports/GadaianController.php | 70 +++++++++++-------- 1 file changed, 39 insertions(+), 31 deletions(-) diff --git a/app/Http/Controllers/Reports/GadaianController.php b/app/Http/Controllers/Reports/GadaianController.php index ac5ec77..301905f 100644 --- a/app/Http/Controllers/Reports/GadaianController.php +++ b/app/Http/Controllers/Reports/GadaianController.php @@ -140,40 +140,48 @@ class GadaianController extends Controller $active_cawangan_db_connection = array_column($cawangan_available->toArray(), 'mysql'); - // Simpan hasil semua cawangan - $data = []; - - foreach ($cawangan_available as $cawangan) { - $kodcaw = $cawangan->kodcaw; - $db = $cawangan->mysql; - - $records = DB::connection($db)->table('gadai as g') - ->join('online_arrahn.transaction as trans', function ($join) { - $join->on('g.norujukan', '=', 'trans.norujukan') - ->where('trans.trans_type', '=', 'T'); - }) - ->whereBetween('g.t_gadai', [$startDate, $endDate]) - ->whereRaw('DATE(g.t_gadai) = DATE(trans.created_at)') - ->where('g.upah12', '>=', 0.00) - ->selectRaw(" - COUNT(*) as jumlah_transaksi, - AVG(TIME_TO_SEC(TIMEDIFF(TIME(trans.created_at), g.masa))) as avg_duration_sec - ") - ->first(); - - $data[] = [ - 'kodcaw' => $kodcaw, - 'details_caw' => $cawangan->details_caw, - 'jumlah_transaksi' => $records->jumlah_transaksi ?? 0, - 'purata_masa_saat' => round($records->avg_duration_sec ?? 0), - 'purata_masa_format' => gmdate("H:i:s", (int) ($records->avg_duration_sec ?? 0)) + // Map branch info for response + $active_cawangan_detail = $cawangan_available->map(function ($c) { + return [ + 'kodcaw' => $c->kodcaw, + 'details_caw' => $c->details_caw, ]; - } + })->values()->toArray(); - // Sort ikut purata masa (paling cepat dahulu) - $sorted = collect($data)->sortBy('purata_masa_saat')->values(); + // Loop through each DB + $summary_data = array_map(function ($db_connection) use ($startDate, $endDate) { + $result = DB::connection($db_connection)->table('gadai as g') + ->join('tebus as t', function ($join) { + $join->on(DB::raw('DATE(g.t_gadai)'), '=', DB::raw('DATE(t.t_tebus)')) + ->on('g.norujukan', '=', 't.norujukan'); + }) + ->whereDate('g.t_gadai', '>=', $startDate) + ->whereDate('g.t_gadai', '<=', $endDate) + ->whereDate('t.t_tebus', '>=', $startDate) + ->whereDate('t.t_tebus', '<=', $endDate) + ->where('g.upah12', '>=', 0.00) + ->selectRaw(' + COUNT(DISTINCT g.norujukan) as total_gadai_tebus_samahari, + SUM(g.pinjaman) as jumlah_pinjaman + ') + ->first(); // ambil satu hasil, bukan collection - return response()->json($sorted); + return (array) $result ?: [ + 'total_gadai_tebus_samahari' => 0, + 'jumlah_pinjaman' => 0.00 + ]; + }, $active_cawangan_db_connection); + + + // Gabung cawangan + hasil + $response = array_map(function ($cawangan_detail, $summary_row) { + return array_merge($cawangan_detail, $summary_row ?: [ + 'total_gadai_tebus_samahari' => 0, + 'jumlah_pinjaman' => 0.00 + ]); + }, $active_cawangan_detail, $summary_data); + + return response()->json($response); } public function getLaporanGadaiTebusMasaCawangan(string $kod_cawangan, Request $request) From aaf4dc803de229fdf507571d15ef3ad59ae18fe8 Mon Sep 17 00:00:00 2001 From: Ain Izazi Date: Wed, 16 Jul 2025 12:05:56 +0800 Subject: [PATCH 089/117] add lapora barang kes --- app/Http/Controllers/BarangkesController.php | 43 ++++++++++++++++++++ routes/web.php | 7 ++++ 2 files changed, 50 insertions(+) create mode 100644 app/Http/Controllers/BarangkesController.php diff --git a/app/Http/Controllers/BarangkesController.php b/app/Http/Controllers/BarangkesController.php new file mode 100644 index 0000000..dd4f10c --- /dev/null +++ b/app/Http/Controllers/BarangkesController.php @@ -0,0 +1,43 @@ +where('kodcaw', $request->kodcaw)->first(); + + if (!$cawangan) { + return response()->json(['error' => 'Invalid kodcaw'], 403); + } + + $query = DB::connection($cawangan['mysql'])->table('palsu') + ->select([ + 'tarikh', + 'norujukan', + 'nota', + 'pembiayaan', + 'nilaimarhun', + 'jbg', + 'untung', + 'untungonepercent', + 'untungcajlain' + ]) + ->whereBetween('tarikh', [$request->tarikh_mula, $request->tarikh_akhir]); + + $result = $query->get(); + + return response()->json($result); +} +} \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 3698995..c422248 100644 --- a/routes/web.php +++ b/routes/web.php @@ -452,6 +452,13 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->get('laporan/lelong',['uses' => 'LelongController@LaporanLelong']); $router->get('lookupbatchlel/{kodcaw}',['uses' => 'LelongController@LookupBatchLel']); + // $router->post('admin/BarangKes', ['uses' => 'BarangKesController@laporanBarangKes']); + // $router->get('barangkes/laporan', ['uses' => 'BarangKesController@LaporanBarangKes']); + $router->get('palsu/laporan', ['uses' => 'BarangkesController@LaporanBarangKes']); + + + + From 9d0b4951ee6aada53cedc0477f6ae80ef577965b Mon Sep 17 00:00:00 2001 From: Afiq Hamzah Date: Thu, 24 Jul 2025 17:01:21 +0800 Subject: [PATCH 090/117] Add .env.docker.example --- .env.docker.example | 249 ++------------------------------------------ 1 file changed, 9 insertions(+), 240 deletions(-) diff --git a/.env.docker.example b/.env.docker.example index c4eb388..2299054 100644 --- a/.env.docker.example +++ b/.env.docker.example @@ -17,265 +17,34 @@ LOG_SLACK_WEBHOOK_URL= #DB_USERNAME=root #DB_PASSWORD=secret -DB_CONNECTION_36=mysql -DB_HOST_36=database_zone1 -DB_PORT_36=3306 -DB_DATABASE_36=arrahn_kb2 -DB_USERNAME_36=root -DB_PASSWORD_36=secret - DB_CONNECTION_2=mysql -DB_HOST_2=database_zone1 DB_PORT_2=3306 -DB_DATABASE_2=arrahn_wcy +DB_HOST_2=database_zone_franchise +DB_PORT_2=3306 +DB_DATABASE_2=kguru_kb DB_USERNAME_2=root DB_PASSWORD_2=secret DB_CONNECTION_3=mysql -DB_HOST_3=database_zone1 +DB_HOST_3=database_zone_franchise DB_PORT_3=3306 -DB_DATABASE_3=arrahn_1stop +DB_DATABASE_3=Kguru_melor DB_USERNAME_3=root DB_PASSWORD_3=secret DB_CONNECTION_4=mysql -DB_HOST_4=database_zone1 +DB_HOST_4=database_zone_franchise DB_PORT_4=3306 -DB_DATABASE_4=arrahn_jlwt +DB_DATABASE_4=kguru_tumpat DB_USERNAME_4=root DB_PASSWORD_4=secret -DB_CONNECTION_5=mysql -DB_HOST_5=database_zone1 -DB_PORT_5=3306 -DB_DATABASE_5=arrahn_wb -DB_USERNAME_5=root -DB_PASSWORD_5=secret - -DB_CONNECTION_6=mysql -DB_HOST_6=database_zone1 -DB_PORT_6=3306 -DB_DATABASE_6=arrahn_kls -DB_USERNAME_6=root -DB_PASSWORD_6=secret - DB_CONNECTION_7=mysql -DB_HOST_7=database_zone1 +DB_HOST_7=database_zone_franchise DB_PORT_7=3306 -DB_DATABASE_7=online_arrahn +DB_DATABASE_7=master_koopguru DB_USERNAME_7=root DB_PASSWORD_7=secret -DB_CONNECTION_8=mysql -DB_HOST_8=database_zone1 -DB_PORT_8=3306 -DB_DATABASE_8=arrahn_pp -DB_USERNAME_8=root -DB_PASSWORD_8=secret - -DB_CONNECTION_9=mysql -DB_HOST_9=database_zone1 -DB_PORT_9=3306 -DB_DATABASE_9=arrahn_mace -DB_USERNAME_9=root -DB_PASSWORD_9=secret - -DB_CONNECTION_10=mysql -DB_HOST_10=database_zone1 -DB_PORT_10=3306 -DB_DATABASE_10=arrahn_pm -DB_USERNAME_10=root -DB_PASSWORD_10=secret - -DB_CONNECTION_11=mysql -DB_HOST_11=database_zone1 -DB_PORT_11=3306 -DB_DATABASE_11=arrahn_gm -DB_USERNAME_11=root -DB_PASSWORD_11=secret - -DB_CONNECTION_12=mysql -DB_HOST_12=database_zone1 -DB_PORT_12=3306 -DB_DATABASE_12=arrahn_gcl -DB_USERNAME_12=root -DB_PASSWORD_12=secret - -DB_CONNECTION_13=mysql -DB_HOST_13=database_zone1 -DB_PORT_13=3306 -DB_DATABASE_13=arrahn_jli -DB_USERNAME_13=root -DB_PASSWORD_13=secret - -DB_CONNECTION_14=mysql -DB_HOST_14=database_zone1 -DB_PORT_14=3306 -DB_DATABASE_14=arrahn_rp -DB_USERNAME_14=root -DB_PASSWORD_14=secret - -DB_CONNECTION_15=mysql -DB_HOST_15=database_zone2 -DB_PORT_15=3306 -DB_DATABASE_15=arrahn_ktn -DB_USERNAME_15=root -DB_PASSWORD_15=secret - -DB_CONNECTION_16=mysql -DB_HOST_16=database_zone2 -DB_PORT_16=3306 -DB_DATABASE_16=arrahn_pg -DB_USERNAME_16=root -DB_PASSWORD_16=secret - -DB_CONNECTION_17=mysql -DB_HOST_17=database_zone2 -DB_PORT_17=3306 -DB_DATABASE_17=arrahn_skudai -DB_USERNAME_17=root -DB_PASSWORD_17=secret - -DB_CONNECTION_18=mysql -DB_HOST_18=database_zone2 -DB_PORT_18=3306 -DB_DATABASE_18=arrahn_pttn -DB_USERNAME_18=root -DB_PASSWORD_18=secret - -DB_CONNECTION_19=mysql -DB_HOST_19=database_zone2 -DB_PORT_19=3306 -DB_DATABASE_19=arrahn_btg -DB_USERNAME_19=root -DB_PASSWORD_19=secret - -DB_CONNECTION_20=mysql -DB_HOST_20=database_zone2 -DB_PORT_20=3306 -DB_DATABASE_20=arrahn_raub -DB_USERNAME_20=root -DB_PASSWORD_20=secret - -DB_CONNECTION_21=mysql -DB_HOST_21=database_zone2 -DB_PORT_21=3306 -DB_DATABASE_21=arrahn_kgr -DB_USERNAME_21=root -DB_PASSWORD_21=secret - -DB_CONNECTION_22=mysql -DB_HOST_22=database_zone2 -DB_PORT_22=3306 -DB_DATABASE_22=arrahn_sdk -DB_USERNAME_22=root -DB_PASSWORD_22=secret - -DB_CONNECTION_23=mysql -DB_HOST_23=database_zone2 -DB_PORT_23=3306 -DB_DATABASE_23=arrahn_sp -DB_USERNAME_23=root -DB_PASSWORD_23=secret - -DB_CONNECTION_24=mysql -DB_HOST_24=database_zone2 -DB_PORT_24=3306 -DB_DATABASE_24=arrahn_twu -DB_USERNAME_24=root -DB_PASSWORD_24=secret - -DB_CONNECTION_25=mysql -DB_HOST_25=database_zone2 -DB_PORT_25=3306 -DB_DATABASE_25=arrahn_api2 -DB_USERNAME_25=root -DB_PASSWORD_25=secret - -DB_CONNECTION_26=mysql -DB_HOST_26=database_zone2 -DB_PORT_26=3306 -DB_DATABASE_26=arrahn_kjg -DB_USERNAME_26=root -DB_PASSWORD_26=secret - -DB_CONNECTION_27=mysql -DB_HOST_27=database_zone2 -DB_PORT_27=3306 -DB_DATABASE_27=arrahn_rl -DB_USERNAME_27=root -DB_PASSWORD_27=secret - -DB_CONNECTION_28=mysql -DB_HOST_28=database_zone2 -DB_PORT_28=3306 -DB_DATABASE_28=arrahn_bfort -DB_USERNAME_28=root -DB_PASSWORD_28=secret - -DB_CONNECTION_29=mysql -DB_HOST_29=database_zone2 -DB_PORT_29=3306 -DB_DATABASE_29=arrahn_kbelud -DB_USERNAME_29=root -DB_PASSWORD_29=secret - -DB_CONNECTION_30=mysql -DB_HOST_30=database_zone2 -DB_PORT_30=3306 -DB_DATABASE_30=arrahn_tuaran -DB_USERNAME_30=root -DB_PASSWORD_30=secret - -DB_CONNECTION_31=mysql -DB_HOST_31=database_zone2 -DB_PORT_31=3306 -DB_DATABASE_31=arrahn_kngau -DB_USERNAME_31=root -DB_PASSWORD_31=secret - -DB_CONNECTION_32=mysql -DB_HOST_32=database_zone1 -DB_PORT_32=3306 -DB_DATABASE_32=arrahn_tm -DB_USERNAME_32=root -DB_PASSWORD_32=secret - -DB_CONNECTION_33=mysql -DB_HOST_33=database_zone2 -DB_PORT_33=3306 -DB_DATABASE_33=arrahn_tmlh -DB_USERNAME_33=root -DB_PASSWORD_33=secret - - -DB_CONNECTION_34=mysql -DB_HOST_34=database_zone2 -DB_PORT_34=3306 -DB_DATABASE_34=arrahn_semporna -DB_USERNAME_34=root -DB_PASSWORD_34=secret - -DB_CONNECTION_35=mysql -DB_HOST_35=database_zone1 -DB_PORT_35=3306 -DB_DATABASE_35=arrahn_kb1 -DB_USERNAME_35=root -DB_PASSWORD_35=secret - -#DB_CONNECTION_37=mysql -#DB_HOST_37=database_zone2 -#DB_PORT_37=3306 -#DB_DATABASE_37=arrahn_ld -#DB_USERNAME_37=root -#DB_PASSWORD_37=secret - -DB_CONNECTION_38=mysql -DB_HOST_38=database_zone2 -DB_PORT_38=3306 -DB_DATABASE_38=arrahn_pttn2 -DB_USERNAME_38=root -DB_PASSWORD_38=secret - CACHE_DRIVER=file QUEUE_CONNECTION=database From 835027a478ee75b1962a5f6cb990c78c2b1278ee Mon Sep 17 00:00:00 2001 From: Afiq Hamzah Date: Thu, 24 Jul 2025 17:18:13 +0800 Subject: [PATCH 091/117] Update env.docker.example --- env.docker.example/base.env | 286 ++++++++++++++++++ .../kgmk.env | 0 env.docker.example/krk.env | 54 ++++ 3 files changed, 340 insertions(+) create mode 100644 env.docker.example/base.env rename .env.docker.example => env.docker.example/kgmk.env (100%) create mode 100644 env.docker.example/krk.env diff --git a/env.docker.example/base.env b/env.docker.example/base.env new file mode 100644 index 0000000..223e054 --- /dev/null +++ b/env.docker.example/base.env @@ -0,0 +1,286 @@ +APP_NAME=Lumen +APP_ENV=localhost +APP_KEY=WbPGkYNmXZ6ZQplGlvl0iZ7zyW1b09xa +APP_DEBUG=true +APP_URL=http://apiujrah.arrahn +APP_TIMEZONE=Asia/Kuala_Lumpur + + +LOG_CHANNEL=stack +LOG_SLACK_WEBHOOK_URL= + +#tukar 12-09-23 +#DB_CONNECTION=mysql +#DB_HOST=127.0.0.1 +#DB_PORT=3306 +#DB_DATABASE=arrahn_kb2 +#DB_USERNAME=root +#DB_PASSWORD=secret + +DB_CONNECTION_36=mysql +DB_HOST_36=database_zone1 +DB_PORT_36=3306 +DB_DATABASE_36=arrahn_kb2 +DB_USERNAME_36=root +DB_PASSWORD_36=secret + +DB_CONNECTION_2=mysql +DB_HOST_2=database_zone1 +DB_PORT_2=3306 +DB_DATABASE_2=arrahn_wcy +DB_USERNAME_2=root +DB_PASSWORD_2=secret + +DB_CONNECTION_3=mysql +DB_HOST_3=database_zone1 +DB_PORT_3=3306 +DB_DATABASE_3=arrahn_1stop +DB_USERNAME_3=root +DB_PASSWORD_3=secret + +DB_CONNECTION_4=mysql +DB_HOST_4=database_zone1 +DB_PORT_4=3306 +DB_DATABASE_4=arrahn_jlwt +DB_USERNAME_4=root +DB_PASSWORD_4=secret + +DB_CONNECTION_5=mysql +DB_HOST_5=database_zone1 +DB_PORT_5=3306 +DB_DATABASE_5=arrahn_wb +DB_USERNAME_5=root +DB_PASSWORD_5=secret + +DB_CONNECTION_6=mysql +DB_HOST_6=database_zone1 +DB_PORT_6=3306 +DB_DATABASE_6=arrahn_kls +DB_USERNAME_6=root +DB_PASSWORD_6=secret + +DB_CONNECTION_7=mysql +DB_HOST_7=database_zone1 +DB_PORT_7=3306 +DB_DATABASE_7=online_arrahn +DB_USERNAME_7=root +DB_PASSWORD_7=secret + +DB_CONNECTION_8=mysql +DB_HOST_8=database_zone1 +DB_PORT_8=3306 +DB_DATABASE_8=arrahn_pp +DB_USERNAME_8=root +DB_PASSWORD_8=secret + +DB_CONNECTION_9=mysql +DB_HOST_9=database_zone1 +DB_PORT_9=3306 +DB_DATABASE_9=arrahn_mace +DB_USERNAME_9=root +DB_PASSWORD_9=secret + +DB_CONNECTION_10=mysql +DB_HOST_10=database_zone1 +DB_PORT_10=3306 +DB_DATABASE_10=arrahn_pm +DB_USERNAME_10=root +DB_PASSWORD_10=secret + +DB_CONNECTION_11=mysql +DB_HOST_11=database_zone1 +DB_PORT_11=3306 +DB_DATABASE_11=arrahn_gm +DB_USERNAME_11=root +DB_PASSWORD_11=secret + +DB_CONNECTION_12=mysql +DB_HOST_12=database_zone1 +DB_PORT_12=3306 +DB_DATABASE_12=arrahn_gcl +DB_USERNAME_12=root +DB_PASSWORD_12=secret + +DB_CONNECTION_13=mysql +DB_HOST_13=database_zone1 +DB_PORT_13=3306 +DB_DATABASE_13=arrahn_jli +DB_USERNAME_13=root +DB_PASSWORD_13=secret + +DB_CONNECTION_14=mysql +DB_HOST_14=database_zone1 +DB_PORT_14=3306 +DB_DATABASE_14=arrahn_rp +DB_USERNAME_14=root +DB_PASSWORD_14=secret + +DB_CONNECTION_15=mysql +DB_HOST_15=database_zone2 +DB_PORT_15=3306 +DB_DATABASE_15=arrahn_ktn +DB_USERNAME_15=root +DB_PASSWORD_15=secret + +DB_CONNECTION_16=mysql +DB_HOST_16=database_zone2 +DB_PORT_16=3306 +DB_DATABASE_16=arrahn_pg +DB_USERNAME_16=root +DB_PASSWORD_16=secret + +DB_CONNECTION_17=mysql +DB_HOST_17=database_zone2 +DB_PORT_17=3306 +DB_DATABASE_17=arrahn_skudai +DB_USERNAME_17=root +DB_PASSWORD_17=secret + +DB_CONNECTION_18=mysql +DB_HOST_18=database_zone2 +DB_PORT_18=3306 +DB_DATABASE_18=arrahn_pttn +DB_USERNAME_18=root +DB_PASSWORD_18=secret + +DB_CONNECTION_19=mysql +DB_HOST_19=database_zone2 +DB_PORT_19=3306 +DB_DATABASE_19=arrahn_btg +DB_USERNAME_19=root +DB_PASSWORD_19=secret + +DB_CONNECTION_20=mysql +DB_HOST_20=database_zone2 +DB_PORT_20=3306 +DB_DATABASE_20=arrahn_raub +DB_USERNAME_20=root +DB_PASSWORD_20=secret + +DB_CONNECTION_21=mysql +DB_HOST_21=database_zone2 +DB_PORT_21=3306 +DB_DATABASE_21=arrahn_kgr +DB_USERNAME_21=root +DB_PASSWORD_21=secret + +DB_CONNECTION_22=mysql +DB_HOST_22=database_zone2 +DB_PORT_22=3306 +DB_DATABASE_22=arrahn_sdk +DB_USERNAME_22=root +DB_PASSWORD_22=secret + +DB_CONNECTION_23=mysql +DB_HOST_23=database_zone2 +DB_PORT_23=3306 +DB_DATABASE_23=arrahn_sp +DB_USERNAME_23=root +DB_PASSWORD_23=secret + +DB_CONNECTION_24=mysql +DB_HOST_24=database_zone2 +DB_PORT_24=3306 +DB_DATABASE_24=arrahn_twu +DB_USERNAME_24=root +DB_PASSWORD_24=secret + +DB_CONNECTION_25=mysql +DB_HOST_25=database_zone2 +DB_PORT_25=3306 +DB_DATABASE_25=arrahn_api2 +DB_USERNAME_25=root +DB_PASSWORD_25=secret + +DB_CONNECTION_26=mysql +DB_HOST_26=database_zone2 +DB_PORT_26=3306 +DB_DATABASE_26=arrahn_kjg +DB_USERNAME_26=root +DB_PASSWORD_26=secret + +DB_CONNECTION_27=mysql +DB_HOST_27=database_zone2 +DB_PORT_27=3306 +DB_DATABASE_27=arrahn_rl +DB_USERNAME_27=root +DB_PASSWORD_27=secret + +DB_CONNECTION_28=mysql +DB_HOST_28=database_zone2 +DB_PORT_28=3306 +DB_DATABASE_28=arrahn_bfort +DB_USERNAME_28=root +DB_PASSWORD_28=secret + +DB_CONNECTION_29=mysql +DB_HOST_29=database_zone2 +DB_PORT_29=3306 +DB_DATABASE_29=arrahn_kbelud +DB_USERNAME_29=root +DB_PASSWORD_29=secret + +DB_CONNECTION_30=mysql +DB_HOST_30=database_zone2 +DB_PORT_30=3306 +DB_DATABASE_30=arrahn_tuaran +DB_USERNAME_30=root +DB_PASSWORD_30=secret + +DB_CONNECTION_31=mysql +DB_HOST_31=database_zone2 +DB_PORT_31=3306 +DB_DATABASE_31=arrahn_kngau +DB_USERNAME_31=root +DB_PASSWORD_31=secret + +DB_CONNECTION_32=mysql +DB_HOST_32=database_zone1 +DB_PORT_32=3306 +DB_DATABASE_32=arrahn_tm +DB_USERNAME_32=root +DB_PASSWORD_32=secret + +DB_CONNECTION_33=mysql +DB_HOST_33=database_zone2 +DB_PORT_33=3306 +DB_DATABASE_33=arrahn_tmlh +DB_USERNAME_33=root +DB_PASSWORD_33=secret + + +DB_CONNECTION_34=mysql +DB_HOST_34=database_zone2 +DB_PORT_34=3306 +DB_DATABASE_34=arrahn_semporna +DB_USERNAME_34=root +DB_PASSWORD_34=secret + +DB_CONNECTION_35=mysql +DB_HOST_35=database_zone1 +DB_PORT_35=3306 +DB_DATABASE_35=arrahn_kb1 +DB_USERNAME_35=root +DB_PASSWORD_35=secret + +#DB_CONNECTION_37=mysql +#DB_HOST_37=database_zone2 +#DB_PORT_37=3306 +#DB_DATABASE_37=arrahn_ld +#DB_USERNAME_37=root +#DB_PASSWORD_37=secret + +DB_CONNECTION_38=mysql +DB_HOST_38=database_zone2 +DB_PORT_38=3306 +DB_DATABASE_38=arrahn_pttn2 +DB_USERNAME_38=root +DB_PASSWORD_38=secret + +CACHE_DRIVER=file +QUEUE_CONNECTION=database + +WABOT_API=https://app.wabot.my/api/send.php +WABOT_INSTANCES_ID=67B69A20D329B +WABOT_TOKEN_KEYS=66a08339284bc +ACTIVE_JOB_SERVER=true diff --git a/.env.docker.example b/env.docker.example/kgmk.env similarity index 100% rename from .env.docker.example rename to env.docker.example/kgmk.env diff --git a/env.docker.example/krk.env b/env.docker.example/krk.env new file mode 100644 index 0000000..6b6e83e --- /dev/null +++ b/env.docker.example/krk.env @@ -0,0 +1,54 @@ +APP_NAME=Lumen +APP_ENV=localhost +APP_KEY=WbPGkYNmXZ6ZQplGlvl0iZ7zyW1b09xa +APP_DEBUG=true +APP_URL=http://apiujrah.arrahn +APP_TIMEZONE=Asia/Kuala_Lumpur + + +LOG_CHANNEL=stack +LOG_SLACK_WEBHOOK_URL= + +#tukar 12-09-23 +#DB_CONNECTION=mysql +#DB_HOST=127.0.0.1 +#DB_PORT=3306 +#DB_DATABASE=arrahn_kb2 +#DB_USERNAME=root +#DB_PASSWORD=secret + +DB_CONNECTION_3=mysql +DB_HOST_3=database-zone-franchise +DB_PORT_3=3306 +DB_DATABASE_3=krk_losong +DB_USERNAME_3=root +DB_PASSWORD_3=secret + +DB_CONNECTION_4=mysql +DB_HOST_4=database-zone-franchise +DB_PORT_4=3306 +DB_DATABASE_4=krk_kemaman +DB_USERNAME_4=root +DB_PASSWORD_4=secret + +DB_CONNECTION_5=mysql +DB_HOST_5=database-zone-franchise +DB_PORT_5=3306 +DB_DATABASE_5=krk_tokbali +DB_USERNAME_5=root +DB_PASSWORD_5=secret + +DB_CONNECTION_7=mysql +DB_HOST_7=database-zone-franchise +DB_PORT_7=3306 +DB_DATABASE_7=master_krk +DB_USERNAME_7=root +DB_PASSWORD_7=secret + +CACHE_DRIVER=file +QUEUE_CONNECTION=database + +WABOT_API=https://app.wabot.my/api/send.php +WABOT_INSTANCES_ID=67B69A20D329B +WABOT_TOKEN_KEYS=66a08339284bc +ACTIVE_JOB_SERVER=true From 4199acf60b60b86d0004fe44a068e5e0b5ebb439 Mon Sep 17 00:00:00 2001 From: Ain Izazi Date: Sun, 27 Jul 2025 13:02:48 +0800 Subject: [PATCH 092/117] fix api call laporan baki lelong --- app/Http/Controllers/GadaiController.php | 19 +++++++++++++++++++ routes/web.php | 8 +------- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/GadaiController.php b/app/Http/Controllers/GadaiController.php index a3805af..9b6e47f 100644 --- a/app/Http/Controllers/GadaiController.php +++ b/app/Http/Controllers/GadaiController.php @@ -120,6 +120,25 @@ class GadaiController extends Controller return response()->json($gadai_all); } + public function showOneGadaiByNorujukanKodcaw($kodcaw,$norujukan){ + + $cawangan_all = Cawangan::on('mysql7') + ->where('kodcaw','=',$kodcaw) + ->get(); + + $gadai_all = []; + + foreach($cawangan_all as $index=>$cawangan){ + $gadai = Gadai::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->get(); + if(sizeof($gadai) != 0){ + array_push($gadai_all,$gadai); + } + } + + + return response()->json($gadai_all); + } + public function showOneGadaiByCawanganOnly($kodcaw,$tarikh){ $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); $gadai = Gadai::on($cawangan['mysql']) diff --git a/routes/web.php b/routes/web.php index c422248..47ce7e4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -78,6 +78,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->get('gadai/{noic}',['uses'=>'GadaiController@showOneGadai']); $router->get('gadai/cawangan/{kodcaw}/{tarikh}',['uses'=>'GadaiController@showOneGadaiByCawanganOnly']); $router->get('gadai/norujukan/{norujukan}',['uses'=>'GadaiController@showOneGadaiByNorujukan']); + $router->get('gadai/norujukankodcaw/{kodcaw}/{norujukan}',['uses'=>'GadaiController@showOneGadaiByNorujukanKodcaw']); $router->get('gadai/norujukan/{kodcaw}/{norujukan}',['uses'=>'GadaiController@showOneGadaibyRujukanAndCawangan']); $router->post('gadai/{kodcaw}',['uses'=>'GadaiController@create']); $router->post('gadaiold/{kodcaw}',['uses'=>'GadaiController@createold']); @@ -452,16 +453,9 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->get('laporan/lelong',['uses' => 'LelongController@LaporanLelong']); $router->get('lookupbatchlel/{kodcaw}',['uses' => 'LelongController@LookupBatchLel']); - // $router->post('admin/BarangKes', ['uses' => 'BarangKesController@laporanBarangKes']); - // $router->get('barangkes/laporan', ['uses' => 'BarangKesController@LaporanBarangKes']); $router->get('palsu/laporan', ['uses' => 'BarangkesController@LaporanBarangKes']); - - - - - //update tagterima Tebus $router->put('updatetagterima/{kodcaw}/{norujukan}',['uses'=>'TebusController@tagterimaupdate']); From 66120c56ebd5e774e60dba4707ddc049982a0cb1 Mon Sep 17 00:00:00 2001 From: Nur Izzati Date: Mon, 28 Jul 2025 15:42:56 +0800 Subject: [PATCH 093/117] update untuk paparan detail keuntungan pada arcc --- app/Http/Controllers/TebusController.php | 40 +++++++++++++++++-- .../Controllers/TransactionController.php | 19 ++++++++- 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/TebusController.php b/app/Http/Controllers/TebusController.php index 8e99e2b..512ccd8 100644 --- a/app/Http/Controllers/TebusController.php +++ b/app/Http/Controllers/TebusController.php @@ -666,11 +666,45 @@ class TebusController extends Controller } public function listhistorypenebusan($kodcaw,Request $request){ - $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); + $cawangan = Cawangan::on('mysql7')->where('kodcaw', $kodcaw)->first(); $listtebus = Tebus::on($cawangan['mysql']) - ->where('norujukan','=',$request->norujukan) - ->get(); + ->where('norujukan', $request->norujukan) + ->get(); + + foreach ($listtebus as $tebus) { + // Cari transaction padan berdasarkan norujukan dan trans_type = 'A' + $transaction = \DB::connection('mysql7') + ->table('transaction') + ->where('norujukan', $tebus->norujukan) + ->whereIn('trans_type', ['T', 'AT']) + ->first(); + + // Jika wujud, cari transaksi_keuntungan yang padan ikut tarikh + if ($transaction) { + $createdDate = Carbon::parse($transaction->created_at)->toDateString(); + + $keuntungan = \DB::connection('mysql7') + ->table('transaksi_keuntungan') + ->where('norujukan', $tebus->norujukan) + ->whereDate('tarikh_bayaran', $createdDate) + ->first(); + + if ($transaction->trans_type == 'T') { + $tebus->bayaran_keuntungan = number_format($keuntungan->keuntungan_rebet ?? 0, 2); + } elseif ($transaction->trans_type == 'AT') { + $tebus->bayaran_keuntungan = number_format($keuntungan->bayaran_keuntungan ?? 0, 2); + } + + $tebus->bayaran_pembiayaan = number_format($keuntungan->bayaran_pembiayaan ?? 0, 2); + $tebus->duit_masuk = number_format($transaction->duit_masuk ?? 0, 2); + $tebus->trans_type = $transaction->trans_type ?? null; + } else { + $tebus->bayaran_keuntungan = null; + $tebus->bayaran_pembiayaan = null; + $tebus->duit_masuk = null; + } + } return response()->json($listtebus); } diff --git a/app/Http/Controllers/TransactionController.php b/app/Http/Controllers/TransactionController.php index 3fcd8cf..d0d8dca 100644 --- a/app/Http/Controllers/TransactionController.php +++ b/app/Http/Controllers/TransactionController.php @@ -57,9 +57,24 @@ class TransactionController extends Controller public function getTransactionByRujukan($norujukan){ - $transaction = Transaction::on('mysql7')->where([['norujukan','=',$norujukan],['trans_type','=','A']])->get(); + $transactions = Transaction::on('mysql7') + ->where('norujukan', $norujukan) + ->where('trans_type', 'A') + ->get(); - return response()->json($transaction); + foreach ($transactions as $transaction) { + $createdDate = Carbon::parse($transaction->created_at)->toDateString(); + + $keuntungan = \DB::connection('mysql7') + ->table('transaksi_keuntungan') + ->whereDate('tarikh_bayaran', $createdDate) + ->where('norujukan', $transaction->norujukan) + ->first(); // ambil seluruh rekod + + $transaction->bayaran_keuntungan = number_format($keuntungan->bayaran_keuntungan ?? 0, 2); + $transaction->bayaran_pembiayaan = number_format($keuntungan->bayaran_pembiayaan ?? 0, 2); + } + return response()->json($transactions); } public function getTransactionByid($id){ From a3234a925c7b3d38412f14755480ece0b1b7fc41 Mon Sep 17 00:00:00 2001 From: Nur Izzati Date: Sun, 3 Aug 2025 12:33:43 +0800 Subject: [PATCH 094/117] tambah carian by nama --- app/Http/Controllers/CustomerController.php | 41 ++++++++++++++++++++- routes/web.php | 4 ++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php index bf68d43..46c1ae3 100644 --- a/app/Http/Controllers/CustomerController.php +++ b/app/Http/Controllers/CustomerController.php @@ -23,11 +23,27 @@ use DB; class CustomerController extends Controller { - public function showAllCustomers(){ - $customer = Customer::on('mysql7')->get(); + public function showAllCustomers(Request $request) + { + $nama = $request->query('nama'); + $kodcaw = $request->query('kodcaw'); + + $query = Customer::on('mysql7'); + + if ($nama) { + $query->where('nama', 'LIKE', '%' . $nama . '%'); + } + + if ($kodcaw) { + $query->where('kodcaw', $kodcaw); + } + + $customer = $query->get(); + return response()->json($customer); } + public function getLatestCustomer($kodcaw){ $customer = Customer::on('mysql7')->orderBy('tarikhdaftar','desc')->orderBy('nosiri','desc')->first(); @@ -962,4 +978,25 @@ class CustomerController extends Controller return json_encode(['status'=> 'success']); } + + public function searchByName(Request $request) + { + $nama = $request->query('nama'); + $kodcaw = $request->query('kodcaw'); + + $query = Customer::query(); + + if ($kodcaw) { + $query->where('kodcaw', $kodcaw); + } + + if ($nama) { + $query->where('nama', 'like', '%' . $nama . '%'); + } + + $results = $query->get(); + + return response()->json($results); + } + } diff --git a/routes/web.php b/routes/web.php index 47ce7e4..3ca19eb 100644 --- a/routes/web.php +++ b/routes/web.php @@ -60,6 +60,10 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->get('admin/customers/nokp/search',['uses'=>'CustomerController@showOneCustomerByICAdmin']); $router->get('customer/blacklist',['uses'=>'CustomerController@blacklistCustomer']); $router->get('customer/eachcawangan/{ic}',['uses'=>'CustomerController@showCustomerByEachCawangan']); + //arcc + $router->get('customer/searchbyname',['uses'=>'CustomerController@searchByName']); + // Route::get('/api/customers/searchbyname', [CustomerController::class, 'searchByName']); + //Change Password $router->post('changepassword/{kodcaw}/{id}',['uses'=>'CustomerController@changepassword']); From bbcfd9617382e30431c0398fd57e1188da4d7498 Mon Sep 17 00:00:00 2001 From: Ain Izazi Date: Mon, 4 Aug 2025 09:38:49 +0800 Subject: [PATCH 095/117] fix seperate laporan ansuran pembiayaan --- app/Http/Controllers/GadaiController.php | 235 +++++++++++++++++------ 1 file changed, 173 insertions(+), 62 deletions(-) diff --git a/app/Http/Controllers/GadaiController.php b/app/Http/Controllers/GadaiController.php index 9b6e47f..b55b17a 100644 --- a/app/Http/Controllers/GadaiController.php +++ b/app/Http/Controllers/GadaiController.php @@ -998,77 +998,188 @@ class GadaiController extends Controller return response()->json($ansuran); } - public function getLaporanAnsuranUjrah($kodcaw,Request $request){ - $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); + + public function getLaporanAnsuranUjrah($kodcaw, Request $request) +{ + $cawangan = Cawangan::on('mysql7')->where('kodcaw', '=', $kodcaw)->first(); - $ansuran_data = Transaction::on('mysql7') - ->select('transaction.norujukan', - 'trans.tarikh_bayaran', - 'transaction.nokp', - 'transaction.kodcaw', - 'transaction.trans_type', - 'cust.nama','trans.bayaran_pembiayaan', - 'transaction.duit_masuk', - 'trans.bayaran_keuntungan', - 'transaction.teller', - 'trans.ujrah', - 'trans.onepercent') - ->leftJoin('transaksi_keuntungan as trans', function($join) - { - $join->on('transaction.norujukan', '=', 'trans.norujukan'); - $join->on('transaction.created_at', '=', 'trans.tarikh_bayaran'); - }) - ->leftJoin('customer as cust', function($join) - { - $join->on('transaction.nokp', '=', 'cust.kpbaru'); - $join->orOn('transaction.nokp', '=', 'cust.kplama'); - }) - ->where('transaction.kodcaw','=',$kodcaw) - ->where('transaction.trans_type','=','A') - ->whereDate('transaction.created_at', '>=', $request->mula) - ->whereDate('transaction.created_at', '<=', $request->akhir) - ->orderBy('transaction.teller') - ->orderBy('trans.tarikh_bayaran') - ->get(); + // Bina query asas dahulu + $query = Transaction::on('mysql7') + ->select( + 'transaction.norujukan', + 'trans.tarikh_bayaran', + 'transaction.nokp', + 'transaction.kodcaw', + 'transaction.trans_type', + 'cust.nama', + 'trans.bayaran_pembiayaan', + 'transaction.duit_masuk', + 'trans.bayaran_keuntungan', + 'transaction.teller', + 'trans.ujrah', + 'trans.onepercent' + ) + ->leftJoin('transaksi_keuntungan as trans', function ($join) { + $join->on('transaction.norujukan', '=', 'trans.norujukan'); + $join->on('transaction.created_at', '=', 'trans.tarikh_bayaran'); + }) + ->leftJoin('customer as cust', function ($join) { + $join->on('transaction.nokp', '=', 'cust.kpbaru'); + $join->orOn('transaction.nokp', '=', 'cust.kplama'); + }) + ->where('transaction.kodcaw', '=', $kodcaw) + ->where('transaction.trans_type', '=', 'A') + ->whereDate('transaction.created_at', '>=', $request->mula) + ->whereDate('transaction.created_at', '<=', $request->akhir); - $ansuran = []; + // Tambah filter berdasarkan jenis + if ($request->jenis == 'arrahnpay') { + $query->where('transaction.teller', '=', 'Online'); + } elseif ($request->jenis == 'kaunter') { + $query->where('transaction.teller', '!=', 'Online'); + } - if($ansuran_data){ - foreach($ansuran_data as $index=>$ansuranData){ - $gadai = Gadai::on($cawangan['mysql'])->where('norujukan',$ansuranData['norujukan'])->first(); + // Dapatkan data selepas filter + $ansuran_data = $query + ->orderBy('transaction.teller') + ->orderBy('trans.tarikh_bayaran') + ->get(); - array_push($ansuran,[ - "norujukan" => $ansuranData['norujukan'], - "tarikh_bayaran" => $ansuranData['tarikh_bayaran'], - "nokp" => $ansuranData['nokp'], - "kodcaw" => $ansuranData['kodcaw'], - "trans_type" => $ansuranData['trans_type'], - "nama" => $ansuranData['nama'], - "tempoh" => $gadai['tempoh'], - "bakipjm" => $gadai['bakipjm'], - "bayaran_pembiayaan" => $ansuranData['bayaran_pembiayaan'], - "duit_masuk" => $ansuranData['duit_masuk'], - "bayaran_keuntungan" => $ansuranData['bayaran_keuntungan'], - "teller" => $ansuranData['teller'], - "ansuranujrah" => $ansuranData['ujrah'], - "ansuranonepercent" => $ansuranData['onepercent'], - "t_gadai" => $gadai['t_gadai'], - ]); - } + $ansuran = []; + + // Loop data dan tambahkan maklumat dari jadual gadai + if ($ansuran_data) { + foreach ($ansuran_data as $index => $ansuranData) { + $gadai = Gadai::on($cawangan['mysql'])->where('norujukan', $ansuranData['norujukan'])->first(); + + array_push($ansuran, [ + "norujukan" => $ansuranData['norujukan'], + "tarikh_bayaran" => $ansuranData['tarikh_bayaran'], + "nokp" => $ansuranData['nokp'], + "kodcaw" => $ansuranData['kodcaw'], + "trans_type" => $ansuranData['trans_type'], + "nama" => $ansuranData['nama'], + "tempoh" => optional($gadai)->tempoh, + "bakipjm" => optional($gadai)->bakipjm, + "bayaran_pembiayaan" => $ansuranData['bayaran_pembiayaan'], + "duit_masuk" => $ansuranData['duit_masuk'], + "bayaran_keuntungan" => $ansuranData['bayaran_keuntungan'], + "teller" => $ansuranData['teller'], + "ansuranujrah" => $ansuranData['ujrah'], + "ansuranonepercent" => $ansuranData['onepercent'], + "t_gadai" => optional($gadai)->t_gadai, + ]); + } + } + + // Susun ikut teller dan tarikh bayar + usort($ansuran, function ($a, $b) { + $compare_teller = strcmp($a['teller'], $b['teller']); + + if ($compare_teller === 0) { + return strcmp($a['tarikh_bayaran'], $b['tarikh_bayaran']); } - usort($ansuran, function ($a, $b) { - $compare_teller = strcmp($a['teller'], $b['teller']); + return $compare_teller; + }); - if ($compare_teller === 0) { - return strcmp($a['tarikh_bayaran'], $b['tarikh_bayaran']); - } + return response()->json($ansuran); +} - return $compare_teller; - }); - return response()->json($ansuran); - } +// public function getLaporanAnsuranUjrah($kodcaw, Request $request) +// { + // $cawangan = Cawangan::on('mysql7')->where('kodcaw', '=', $kodcaw)->first(); + // $semuaDescpt = Transaction::on('mysql7') + // ->where('kodcaw', '=', $kodcaw) + // ->pluck('descpt'); + + // dd($semuaDescpt); + + // Dapatkan connection cawangan +// $connection = $cawangan['mysql']; + +// // Mula query utama ansuran +// $query = Transaction::on('mysql7') +// ->select( +// 'transaction.norujukan', +// 'trans.tarikh_bayaran', +// 'transaction.nokp', +// 'transaction.kodcaw', +// 'transaction.trans_type', +// 'cust.nama', +// 'trans.bayaran_pembiayaan', +// 'transaction.duit_masuk', +// 'trans.bayaran_keuntungan', +// 'transaction.teller', +// 'trans.ujrah', +// 'trans.onepercent' +// ) +// ->leftJoin('transaksi_keuntungan as trans', function ($join) { +// $join->on('transaction.norujukan', '=', 'trans.norujukan'); +// $join->on('transaction.created_at', '=', 'trans.tarikh_bayaran'); +// }) +// ->leftJoin('customer as cust', function ($join) { +// $join->on('transaction.nokp', '=', 'cust.kpbaru'); +// $join->orOn('transaction.nokp', '=', 'cust.kplama'); +// }) +// ->where('transaction.kodcaw', '=', $kodcaw) +// ->where('transaction.trans_type', '=', 'A') +// ->whereDate('transaction.created_at', '>=', $request->mula) +// ->whereDate('transaction.created_at', '<=', $request->akhir); + + +// // 💡 Tambah filter ikut jenis +// if ($request->jenis == 'online') { +// $query->where('transaction.descpt', 'LIKE', 'Laporan Ansuran Pembiayaan (Arrahn Pay)%'); +// } elseif ($request->jenis == 'kaunter') { +// $query->where('transaction.descpt', 'LIKE', 'Laporan Ansuran Pembiayaan (Kaunter aros)%'); +// } else { +// $query->where('transaction.descpt', 'LIKE', 'Laporan Ansuran Pembiayaan%'); +// } + +// // Order by +// $query->orderBy('transaction.teller')->orderBy('trans.tarikh_bayaran'); + +// // Dapatkan data +// $ansuran_data = $query->get(); + +// // Proses data +// $ansuran = []; +// if ($ansuran_data) { +// foreach ($ansuran_data as $index => $ansuranData) { +// $gadai = Gadai::on($connection)->where('norujukan', $ansuranData['norujukan'])->first(); + +// array_push($ansuran, [ +// "norujukan" => $ansuranData['norujukan'], +// "tarikh_bayaran" => $ansuranData['tarikh_bayaran'], +// "nokp" => $ansuranData['nokp'], +// "kodcaw" => $ansuranData['kodcaw'], +// "trans_type" => $ansuranData['trans_type'], +// "nama" => $ansuranData['nama'], +// "tempoh" => $gadai['tempoh'] ?? null, +// "bakipjm" => $gadai['bakipjm'] ?? null, +// "bayaran_pembiayaan" => $ansuranData['bayaran_pembiayaan'], +// "duit_masuk" => $ansuranData['duit_masuk'], +// "bayaran_keuntungan" => $ansuranData['bayaran_keuntungan'], +// "teller" => $ansuranData['teller'], +// "ansuranujrah" => $ansuranData['ujrah'], +// "ansuranonepercent" => $ansuranData['onepercent'], +// "t_gadai" => $gadai['t_gadai'] ?? null, +// ]); +// } +// } + +// // Susun data +// usort($ansuran, function ($a, $b) { +// $compare_teller = strcmp($a['teller'], $b['teller']); +// return $compare_teller === 0 +// ? strcmp($a['tarikh_bayaran'], $b['tarikh_bayaran']) +// : $compare_teller; +// }); + +// return response()->json($ansuran); +// } public function getAnsuranSummary($kodcaw,Request $request){ $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first(); From 29e5923465b0d15f26e72ea3902d0efed5d28d44 Mon Sep 17 00:00:00 2001 From: Nur Izzati Date: Thu, 7 Aug 2025 11:44:56 +0800 Subject: [PATCH 096/117] update stok audit khas blast sms) --- app/Http/Controllers/StokAuditController.php | 97 +++++++++++++------- 1 file changed, 66 insertions(+), 31 deletions(-) diff --git a/app/Http/Controllers/StokAuditController.php b/app/Http/Controllers/StokAuditController.php index 1ec14a1..0f23e61 100644 --- a/app/Http/Controllers/StokAuditController.php +++ b/app/Http/Controllers/StokAuditController.php @@ -51,16 +51,49 @@ class StokAuditController extends Controller // dd($request->kodcaw); $daritempoh = $request->daritempoh; $hinggatempoh = $request->hinggatempoh; - $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first(); + $cawangan = Cawangan::on('mysql7')->where('kodcaw', '=', $request->kodcaw)->first(); + // Query asal gadai $audit = Gadai::on($cawangan['mysql']) - ->where([['tagpalsu','=',0],['tempoh','>=',$daritempoh],['tempoh','<=',$hinggatempoh],['sttebus','=',''],['taglel','=',0]]) + ->where([ + ['tagpalsu', '=', 0], + ['tempoh', '>=', $daritempoh], + ['tempoh', '<=', $hinggatempoh], + ['sttebus', '=', ''], + ['taglel', '=', 0], + ]) ->orderBy('t_gadai', 'ASC') ->orderBy('sirig', 'ASC'); - // ->get(); - // dd($audit); - $arraynorujukan = $audit->pluck('norujukan')->toArray(); - $rekodaudit = $audit->get(); + + // Dapatkan tarikh terkini untuk trans_type 'T' dan 'A' + $tarikhTerkiniT = Transaction::on('mysql7') + ->where('trans_type', 'T') + ->max('created_at'); + + $tarikhTerkiniA = Transaction::on('mysql7') + ->where('trans_type', 'A') + ->max('created_at'); + + // Filter audit berdasarkan tiada transaksi T/A pada tarikh terkini + $rekodaudit = $audit->get()->filter(function ($item) use ($cawangan, $tarikhTerkiniT, $tarikhTerkiniA) { + $adaTebusTerkini = Transaction::on('mysql7') + ->where('norujukan', $item->norujukan) + ->where('trans_type', 'T') + ->whereDate('created_at', '>=', date('Y-m-d', strtotime($tarikhTerkiniT))) + ->exists(); + + $adaAnsuranTerkini = Transaction::on('mysql7') + ->where('norujukan', $item->norujukan) + ->where('trans_type', 'A') + ->whereDate('created_at', '>=', date('Y-m-d', strtotime($tarikhTerkiniA))) + ->exists(); + + return !$adaTebusTerkini && !$adaAnsuranTerkini; + })->values(); + + // Gunakan hanya norujukan yang dah ditapis + $arraynorujukan = $rekodaudit->pluck('norujukan')->toArray(); + $gadainokp = Gadai::on($cawangan['mysql'])->whereIn('norujukan', $arraynorujukan) ->select('nokp') ->groupBy('nokp') @@ -68,28 +101,23 @@ class StokAuditController extends Controller // dd($gadainokp); - foreach($gadainokp as $index1=>$cal){ - $customer = Customer::on('mysql7')->where('kpbaru','=',$cal['nokp']) - ->orWhere('kplama','=',$cal['nokp']) + foreach ($gadainokp as $index1 => $cal) { + $customer = Customer::on('mysql7')->where('kpbaru', '=', $cal['nokp']) + ->orWhere('kplama', '=', $cal['nokp']) ->first(); $listsag = Gadai::on($cawangan['mysql'])->whereIn('norujukan', $arraynorujukan) - // ->where('nokp','=',$cal['nokp']) - ->where('nokp', 'like', '%'.$cal['nokp'].'%') + ->where('nokp', 'like', '%' . $cal['nokp'] . '%') ->get(); - foreach($listsag as $index2=>$cal2){ - - if($cal2){ + $checkingnokp = null; + foreach ($listsag as $index2 => $cal2) { + if ($cal2) { $checkingnokp = BlastWasap::on('mysql7') - ->where('nokp','=',$cal['nokp']) - ->where('norujukan','=',$cal2['norujukan']) - ->where('kodcaw','=',$kodcaw) + ->where('nokp', '=', $cal['nokp']) + ->where('norujukan', '=', $cal2['norujukan']) + ->where('kodcaw', '=', $kodcaw) ->first(); - - // $gadainokp[$index1]['blasted'] = $checkingnokp; - - } } @@ -97,17 +125,24 @@ class StokAuditController extends Controller $gadainokp[$index1]['listsag'] = $listsag; $gadainokp[$index1]['blasted'] = $checkingnokp; } - - $totalrekod = $audit->sum('pinjaman'); - $totalberat = $audit->sum('berat'); - $totalnilaimarhun = $audit->sum('nilaimarhun'); - $totalpinjaman = $audit->sum('pinjaman'); - $totalbakipjm = $audit->sum('bakipjm'); - $totaltunggakan = $audit->sum('tunggakan'); + // Total dikira berdasarkan hasil audit yang telah ditapis + $totalrekod = $rekodaudit->sum('pinjaman'); + $totalberat = $rekodaudit->sum('berat'); + $totalnilaimarhun = $rekodaudit->sum('nilaimarhun'); + $totalpinjaman = $rekodaudit->sum('pinjaman'); + $totalbakipjm = $rekodaudit->sum('bakipjm'); + $totaltunggakan = $rekodaudit->sum('tunggakan'); - $arrayrekod = ['rekod' => $gadainokp, 'total' => $totalrekod,'totalberat' => $totalberat,'totalnilaimarhun' => $totalnilaimarhun,'totalpinjaman'=>$totalpinjaman,'totalbakipjm'=>$totalbakipjm,'totaltunggakan'=>$totaltunggakan]; - // dd($arrayrekod); - return response()->json($arrayrekod,200); + $arrayrekod = [ + 'rekod' => $gadainokp, + 'total' => $totalrekod, + 'totalberat' => $totalberat, + 'totalnilaimarhun' => $totalnilaimarhun, + 'totalpinjaman' => $totalpinjaman, + 'totalbakipjm' => $totalbakipjm, + 'totaltunggakan' => $totaltunggakan, + ]; + return response()->json($arrayrekod, 200); } From 7c09250c91c5218c595a8a9867a189e0b8d96bb0 Mon Sep 17 00:00:00 2001 From: Nur Izzati Date: Sun, 10 Aug 2025 11:40:21 +0800 Subject: [PATCH 097/117] improve code laporan SA --- app/Http/Controllers/StokAuditController.php | 45 ++++++++++++++------ 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/app/Http/Controllers/StokAuditController.php b/app/Http/Controllers/StokAuditController.php index 0f23e61..d0188c1 100644 --- a/app/Http/Controllers/StokAuditController.php +++ b/app/Http/Controllers/StokAuditController.php @@ -63,29 +63,46 @@ class StokAuditController extends Controller ['taglel', '=', 0], ]) ->orderBy('t_gadai', 'ASC') - ->orderBy('sirig', 'ASC'); + ->orderBy('sirig', 'ASC') + ->get(); - // Dapatkan tarikh terkini untuk trans_type 'T' dan 'A' + // Dapatkan semua norujukan awal + $arraynorujukan = $audit->pluck('norujukan')->toArray(); + + // Dapatkan tarikh terkini untuk setiap norujukan ikut trans_type T $tarikhTerkiniT = Transaction::on('mysql7') - ->where('trans_type', 'T') - ->max('created_at'); + ->select('norujukan', DB::raw('MAX(created_at) as tarikh_max')) + ->where('trans_type', 'T') + ->whereIn('norujukan', $arraynorujukan) + ->groupBy('norujukan') + ->pluck('tarikh_max', 'norujukan') + ->toArray(); + // Dapatkan tarikh terkini untuk setiap norujukan ikut trans_type A $tarikhTerkiniA = Transaction::on('mysql7') - ->where('trans_type', 'A') - ->max('created_at'); + ->select('norujukan', DB::raw('MAX(created_at) as tarikh_max')) + ->where('trans_type', 'A') + ->whereIn('norujukan', $arraynorujukan) + ->groupBy('norujukan') + ->pluck('tarikh_max', 'norujukan') + ->toArray(); + + // Filter audit ikut tarikh masing-masing + $rekodaudit = $audit->filter(function ($item) use ($tarikhTerkiniT, $tarikhTerkiniA) { + $norujukan = $item->norujukan; - // Filter audit berdasarkan tiada transaksi T/A pada tarikh terkini - $rekodaudit = $audit->get()->filter(function ($item) use ($cawangan, $tarikhTerkiniT, $tarikhTerkiniA) { - $adaTebusTerkini = Transaction::on('mysql7') - ->where('norujukan', $item->norujukan) + $adaTebusTerkini = isset($tarikhTerkiniT[$norujukan]) && + Transaction::on('mysql7') + ->where('norujukan', $norujukan) ->where('trans_type', 'T') - ->whereDate('created_at', '>=', date('Y-m-d', strtotime($tarikhTerkiniT))) + ->whereDate('created_at', '>=', date('Y-m-d', strtotime($tarikhTerkiniT[$norujukan]))) ->exists(); - $adaAnsuranTerkini = Transaction::on('mysql7') - ->where('norujukan', $item->norujukan) + $adaAnsuranTerkini = isset($tarikhTerkiniA[$norujukan]) && + Transaction::on('mysql7') + ->where('norujukan', $norujukan) ->where('trans_type', 'A') - ->whereDate('created_at', '>=', date('Y-m-d', strtotime($tarikhTerkiniA))) + ->whereDate('created_at', '>=', date('Y-m-d', strtotime($tarikhTerkiniA[$norujukan]))) ->exists(); return !$adaTebusTerkini && !$adaAnsuranTerkini; From ab4cfe7628641b7027477db531934209335c61d5 Mon Sep 17 00:00:00 2001 From: Nur Izzati Date: Sun, 17 Aug 2025 16:50:57 +0800 Subject: [PATCH 098/117] update api untuk carian nama arcc --- app/Http/Controllers/CallCenterController.php | 85 +++++++++++++++++++ routes/web.php | 2 + 2 files changed, 87 insertions(+) diff --git a/app/Http/Controllers/CallCenterController.php b/app/Http/Controllers/CallCenterController.php index 125434d..543ea2d 100644 --- a/app/Http/Controllers/CallCenterController.php +++ b/app/Http/Controllers/CallCenterController.php @@ -1564,4 +1564,89 @@ class CallCenterController extends Controller } return response()->json($cawnotis_all); } + + public function rekodgadai(Request $request) + { + $nokp = $request->nokp; + $kodcaw = $request->kodcaw; + // Dapatkan maklumat cawangan + $cawangan = Cawangan::on('mysql7') + ->where('kodcaw', $kodcaw) + ->first(); + + if (!$cawangan || empty($cawangan->mysql)) { + return response()->json([ + 'status' => false, + 'message' => 'Cawangan tidak dijumpai atau konfigurasi DB tidak lengkap', + 'data' => [] + ], 404); + } + + try { + // Query rekod gadai dari DB cawangan yang betul + $gadai = Gadai::on($cawangan->mysql) + ->where('nokp', $nokp) + ->get(); + + return response()->json([ + 'status' => !$gadai->isEmpty(), + 'message' => $gadai->isEmpty() ? 'Tiada rekod gadai' : 'Rekod gadai dijumpai', + 'data' => $gadai + ]); + } catch (\Exception $e) { + return response()->json([ + 'status' => false, + 'message' => 'Ralat semasa ambil data: ' . $e->getMessage(), + 'data' => [] + ], 500); + } + } + + public function rekodgadaiBatch(Request $request) +{ + $nokpList = $request->input('nokp_list', []); + $kodcaw = $request->input('kodcaw'); + + if (empty($nokpList) || empty($kodcaw)) { + return response()->json([ + 'status' => false, + 'message' => 'Parameter tidak lengkap', + 'data' => [] + ], 400); + } + + $cawangan = Cawangan::on('mysql7') + ->where('kodcaw', $kodcaw) + ->first(); + + if (!$cawangan || empty($cawangan->mysql)) { + return response()->json([ + 'status' => false, + 'message' => 'Cawangan tidak dijumpai', + 'data' => [] + ], 404); + } + + try { + $gadai = Gadai::on($cawangan->mysql) + ->whereIn('nokp', $nokpList) + ->get(); + + return response()->json([ + 'status' => !$gadai->isEmpty(), + 'message' => $gadai->isEmpty() ? 'Tiada rekod gadai' : 'Rekod gadai dijumpai', + 'data' => $gadai + ]); + } catch (\Exception $e) { + return response()->json([ + 'status' => false, + 'message' => 'Ralat semasa ambil data: ' . $e->getMessage(), + 'data' => [] + ], 500); + } +} + + + + } diff --git a/routes/web.php b/routes/web.php index 3ca19eb..fa41432 100644 --- a/routes/web.php +++ b/routes/web.php @@ -975,4 +975,6 @@ $router->group(['prefix'=>'arcc'], function () use ($router){ $router->get('bysagnotisjbg2/{kodcaw}/{notisid}/{nokp}',['uses'=>'CallCenterController@bysagnotisjbg2']); $router->put('updatecall/{kodcaw}/{notisid}/{nokp}', ['uses' => 'CallCenterController@updatecall']); $router->get('bysagnotisjbgcustomer2/{kodcaw}/{notisid}/{nokp}',['uses'=>'CallCenterController@bysagnotisjbgCustomer2']); + $router->get('rekodgadai',['uses'=>'CallCenterController@rekodgadai']); + $router->post('rekodgadai-batch',['uses'=>'CallCenterController@rekodgadaiBatch']); }); From b103299d4f4ff036e1cfd228d456c04c9af25927 Mon Sep 17 00:00:00 2001 From: Ain Izazi Date: Mon, 25 Aug 2025 09:40:16 +0800 Subject: [PATCH 099/117] add di function customer nota arcc --- app/Http/Controllers/CallCenterController.php | 75 ++++++++++++++++++- app/Http/Controllers/CustomerController.php | 20 +++++ ...120937_add_nota_arcc_to_customer_table.php | 32 ++++++++ routes/web.php | 6 +- 4 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 database/migrations/2025_08_10_120937_add_nota_arcc_to_customer_table.php diff --git a/app/Http/Controllers/CallCenterController.php b/app/Http/Controllers/CallCenterController.php index 543ea2d..4a8d890 100644 --- a/app/Http/Controllers/CallCenterController.php +++ b/app/Http/Controllers/CallCenterController.php @@ -1649,4 +1649,77 @@ class CallCenterController extends Controller -} + + public function customerUpdate($nokp,Request $request){ + $poskod = Poskod::on('mysql7')->where('poskod','=',$request->poskod)->first(); + $customer_update = Customer::on('mysql7') + ->where('kplama','=',$nokp) + ->orWhere('kpbaru','=',$nokp) + ->update(array( + 'nota_arcc'=>$request->nota_arcc, + )); + + return response()->json($customer_update, 200); + } + + + public function customerUpdateKaunter($nokp,$kodcaw, Request $request){ + $current = Carbon::now(); + + DB::connection('mysql7')->beginTransaction(); + + try{ + $poskod = Poskod::on('mysql7')->where('poskod','=',$request->poskod)->first(); + + $customer_info = DB::connection('mysql7')->table('customer') + ->select('kodcaw','kodkerja','nota_pekerjaan','nota_arcc','tarikhdaftar','nopelanggan','kpbaru','kplama','nama','t_lahir','jantina','poskod') + ->where('kplama','=',$nokp) + ->orWhere('kpbaru','=',$nokp) + ->get()->toArray(); + + + $old_data = json_encode($customer_info); + + $customer_update = Customer::on('mysql7') + ->where('kplama','=',$nokp) + ->orWhere('kpbaru','=',$nokp) + ->update(array( + 'nota_arcc' => $request->nota_arcc, + )); + + if($customer_update) + { + $customer_info_new = DB::connection('mysql7')->table('customer') + ->select('kodcaw','kodkerja','nota_pekerjaan','nota_arcc','tarikhdaftar','nopelanggan','kpbaru','kplama','nama','t_lahir','jantina','alamat1','poskod') + ->where('kplama','=',$nokp) + ->orWhere('kpbaru','=',$nokp) + ->get()->toArray(); + + $new_data = json_encode($customer_info_new); + + $audit_customer = DB::connection('mysql7') + ->table('audit_customer') + ->insert([ + 'username' => $request->namateller, + 'old_data' => $old_data, + 'new_data' => $new_data, + 'kodcaw' => $customer_info[0]->kodcaw, + 'created_at' => Carbon::now()->toDateTimeString(), + 'updated_at' => Carbon::now()->toDateTimeString(), + 'customer_name' => $customer_info[0]->nama, + 'customer_nokp' => $nokp, + ]); + } + + DB::connection('mysql7')->commit(); + + return response()->json($customer_update, 200); + + }catch (\Exception $e) { + DB::connection('mysql7')->rollback(); + return response()->json($e->getMessage(),400); + + } + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php index 46c1ae3..6080cac 100644 --- a/app/Http/Controllers/CustomerController.php +++ b/app/Http/Controllers/CustomerController.php @@ -362,6 +362,7 @@ class CustomerController extends Controller 'nota'=>$request->nota, 'kodkerja'=>$request->kodkerja, 'nota_pekerjaan'=>$request->nota_pekerjaan, + // 'nota_arcc'=>$request->nota_arcc, 'tujuangadai'=>$request->tujuangadai ]); @@ -390,6 +391,7 @@ class CustomerController extends Controller 'kodnegeri' => $poskod['kodnegeri'], 'kodkerja'=>$request->kodkerja, 'nota_pekerjaan'=>$request->nota_pekerjaan, + // 'nota_arcc'=>$request->nota_arcc, 'telefon' => $request->telefon1, 'telefon2' => $request->telefon2 )); @@ -424,6 +426,7 @@ class CustomerController extends Controller 'kodkerja' => $request->kodkerja, // 'nota_pekerjaan' => $request->nota_pekerjaan, 'nota_pekerjaan' => $request->kodkerja === '6' ? $request->nota_pekerjaan : null, + // 'nota_arcc' => $request->nota_arcc, 'noakaun' => $request->noakaun, 'nota' => $request->nota, 'alamat1' => $request->alamat, @@ -501,6 +504,7 @@ class CustomerController extends Controller 'kodbank' => $request->kodbank, 'kodkerja' => $request->kodkerja, 'nota_pekerjaan' => $request->nota_pekerjaan, + // 'nota_arcc' => $request->nota_arcc, 'noakaun' => $request->noakaun, 'nota' => $request->nota, 'nama' => $request->nama, @@ -999,4 +1003,20 @@ class CustomerController extends Controller return response()->json($results); } +// public function createNotaArcc($kodcaw, Request $request) +// { +// $current = Carbon::now(); + +// $customer = Customer::on('mysql7')->create([ +// 'kodcaw' => $kodcaw, +// 'tarikhdaftar' => $current->toDateString(), +// 'nota_arcc' => $request->nota_arcc, +// 'teller' => $request->teller, +// 'aktif' => 'A' +// ]); + +// return response()->json($customer, 201); +// } + + } diff --git a/database/migrations/2025_08_10_120937_add_nota_arcc_to_customer_table.php b/database/migrations/2025_08_10_120937_add_nota_arcc_to_customer_table.php new file mode 100644 index 0000000..b61c531 --- /dev/null +++ b/database/migrations/2025_08_10_120937_add_nota_arcc_to_customer_table.php @@ -0,0 +1,32 @@ +string('nota_arcc')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('customer', function (Blueprint $table) { + $table->dropColumn('nota_arcc'); + }); + } +} diff --git a/routes/web.php b/routes/web.php index 9f025c3..73a8349 100644 --- a/routes/web.php +++ b/routes/web.php @@ -63,7 +63,11 @@ $router->group(['prefix'=>'api'], function () use ($router){ //arcc $router->get('customer/searchbyname',['uses'=>'CustomerController@searchByName']); // Route::get('/api/customers/searchbyname', [CustomerController::class, 'searchByName']); - + // $router->put('customers/update/{nokp}', ['uses' => 'CallCenterController@customerUpdate']); //kena tengok api ni + // $router->put('customers/update/kaunter/{nokp}/{kodcaw}', ['uses' => 'CallCenterController@customerUpdateKaunter']); + $router->put('callcenter/customers/update/{nokp}', ['uses' => 'CallCenterController@customerUpdate']); //kena tengok api ni + $router->put('callcenter/customers/update/kaunter/{nokp}/{kodcaw}', ['uses' => 'CallCenterController@customerUpdateKaunter']); + //Change Password $router->post('changepassword/{kodcaw}/{id}',['uses'=>'CustomerController@changepassword']); From 824e9d67c77c3ee592938984e6fdc2f43804aa24 Mon Sep 17 00:00:00 2001 From: Nur Izzati Date: Wed, 27 Aug 2025 12:26:19 +0800 Subject: [PATCH 100/117] tambah baik laporan SA by sag --- app/Http/Controllers/StokAuditController.php | 147 +++++++++++++++++++ routes/web.php | 1 + 2 files changed, 148 insertions(+) diff --git a/app/Http/Controllers/StokAuditController.php b/app/Http/Controllers/StokAuditController.php index d0188c1..cc6129f 100644 --- a/app/Http/Controllers/StokAuditController.php +++ b/app/Http/Controllers/StokAuditController.php @@ -432,4 +432,151 @@ class StokAuditController extends Controller 'totaltunggakan'=>$totaltunggakan ?? null]; return response()->json($arrayrekod,200); } + + + public function LaporanAuditKhasByNorujukan($kodcaw, Request $request) + { + $daritempoh = $request->daritempoh; + $hinggatempoh = $request->hinggatempoh; + + $cawangan = Cawangan::on('mysql7')->where('kodcaw', '=', $request->kodcaw)->first(); + + // Ambil semua rekod gadai asas + $audit = Gadai::on($cawangan['mysql']) + ->where([ + ['tagpalsu', '=', 0], + ['tempoh', '>=', $daritempoh], + ['tempoh', '<=', $hinggatempoh], + ['sttebus', '=', ''], + ['taglel', '=', 0], + ]) + ->orderBy('norujukan', 'ASC') // susun ikut norujukan + ->get(); + + $arraynorujukan = $audit->pluck('norujukan')->toArray(); + + // Tarikh terkini ikut trans_type T + $tarikhTerkiniT = Transaction::on('mysql7') + ->select('norujukan', DB::raw('MAX(created_at) as tarikh_max')) + ->where('trans_type', 'T') + ->whereIn('norujukan', $arraynorujukan) + ->groupBy('norujukan') + ->pluck('tarikh_max', 'norujukan') + ->toArray(); + + // Tarikh terkini ikut trans_type A + $tarikhTerkiniA = Transaction::on('mysql7') + ->select('norujukan', DB::raw('MAX(created_at) as tarikh_max')) + ->where('trans_type', 'A') + ->whereIn('norujukan', $arraynorujukan) + ->groupBy('norujukan') + ->pluck('tarikh_max', 'norujukan') + ->toArray(); + + // Filter audit + $rekodaudit = $audit->filter(function ($item) use ($tarikhTerkiniT, $tarikhTerkiniA) { + $norujukan = $item->norujukan; + + $adaTebusTerkini = isset($tarikhTerkiniT[$norujukan]) && + Transaction::on('mysql7') + ->where('norujukan', $norujukan) + ->where('trans_type', 'T') + ->whereDate('created_at', '>=', date('Y-m-d', strtotime($tarikhTerkiniT[$norujukan]))) + ->exists(); + + $adaAnsuranTerkini = isset($tarikhTerkiniA[$norujukan]) && + Transaction::on('mysql7') + ->where('norujukan', $norujukan) + ->where('trans_type', 'A') + ->whereDate('created_at', '>=', date('Y-m-d', strtotime($tarikhTerkiniA[$norujukan]))) + ->exists(); + + return !$adaTebusTerkini && !$adaAnsuranTerkini; + })->values(); + + // Attach customer info + blast untuk setiap norujukan + foreach ($rekodaudit as $index => $rekod) { + $customer = Customer::on('mysql7') + ->where('kpbaru', '=', $rekod->nokp) + ->orWhere('kplama', '=', $rekod->nokp) + ->first(); + + $rekodaudit[$index]['customer'] = $customer; + + $rekodaudit[$index]['blasted'] = BlastWasap::on('mysql7') + ->where('nokp', $rekod->nokp) + ->where('norujukan', $rekod->norujukan) + ->where('kodcaw', $kodcaw) + ->first(); + + // 👉 Kira keuntungan (tunggakan sebenar) guna function + $upah = $this->kiraupahUjrahOnePercent($kodcaw, $rekod->norujukan); + $keuntungan = $upah['ujrah'] + $upah['onepercent']; + + // Save ke dalam rekod + $rekodaudit[$index]['tunggakan'] = $this->floorTo5SenFrom2dp($keuntungan); + } + + // Summary total + $summary = [ + 'totalrekod' => $rekodaudit->count(), + 'totalberat' => $rekodaudit->sum('berat'), + 'totalnilaimarhun'=> $rekodaudit->sum('nilaimarhun'), + 'totalpinjaman' => $rekodaudit->sum('pinjaman'), + 'totalbakipjm' => $rekodaudit->sum('bakipjm'), + 'totaltunggakan' => $rekodaudit->sum('tunggakan'), + ]; + + return response()->json([ + 'rekod' => $rekodaudit, + 'summary' => $summary, + ]); + } + + public function kiraupahUjrahOnePercent($kodcaw,$norujukan){ + $onepercentservices = new OnePercentServices(); + + $cawangan = Cawangan::on('mysql7') + ->where('kodcaw','=',$kodcaw) + ->first(); + + $gadai_data = Gadai::on($cawangan['mysql']) + ->where('norujukan','=',$norujukan) + ->first(); + + if($gadai_data['tempoh'] >= 12.0){ + $tempoh = 12; + }else{ + $tempoh = $gadai_data['tempoh']; + } + + $bilang_bln = $tempoh - $gadai_data['tempohbayar']; + $array_upah = $onepercentservices->kiraanKeuntunganSebenar($gadai_data['pinjaman'],$gadai_data['nilaimarhun'],$gadai_data['kadarupah'],$gadai_data['percentpinj']); + $ujrah = $bilang_bln * $array_upah['ujrah']; + $onepercent = $bilang_bln * $array_upah['onepercent']; + $onepercent_semasa = $onepercent; + $ujrah_semasa = $ujrah; + + return ['ujrah' => $ujrah_semasa, 'onepercent' => $onepercent_semasa]; + } + + // dalam Controller (private/protected) + private function floorTo5SenFrom2dp($amount) + { + // pastikan numeric + $amount = (float) $amount; + + // 1) Tukar ke sen dan buang sebarang pecahan sen (hanya baca 2 dp) + // tambah epsilon kecil untuk elak isu floating point + $cents = (int) floor($amount * 100 + 0.0000001); + + // 2) Floor ke gandaan 5 sen + $cents5 = (int) (floor($cents / 5) * 5); + + // balik ke ringgit + return $cents5 / 100; + } + + + } diff --git a/routes/web.php b/routes/web.php index 73a8349..359456b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -666,6 +666,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ //STOKAUDITKHAS $router->get('stokauditkhas/aktif/{kodcaw}',['uses'=>'StokAuditController@LaporanAuditKhasAktif']); + $router->get('stokauditkhasbynorujukan/aktif/{kodcaw}',['uses'=>'StokAuditController@LaporanAuditKhasByNorujukan']); //API BLAST WASAP $router->post('blastwasap/{kodcaw}',['uses'=>'StokAuditController@blastwasap']); From 1075d7d585bfc5612b41d24c5d55aebcf824268c Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Mon, 10 Nov 2025 18:51:01 +0800 Subject: [PATCH 101/117] models for kadar anggota koperasi --- app/Anggota.php | 18 ++++++++++++++++++ app/Customer.php | 3 ++- app/MohonAnggota.php | 15 +++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 app/Anggota.php create mode 100644 app/MohonAnggota.php diff --git a/app/Anggota.php b/app/Anggota.php new file mode 100644 index 0000000..17c19f4 --- /dev/null +++ b/app/Anggota.php @@ -0,0 +1,18 @@ + Date: Mon, 10 Nov 2025 18:55:17 +0800 Subject: [PATCH 102/117] update all controllers for kadar anggota koperasi --- app/Http/Controllers/CustomerController.php | 37 +++- app/Http/Controllers/KelulusanController.php | 182 ++++++++++++++++++- 2 files changed, 217 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php index 6080cac..5b93b81 100644 --- a/app/Http/Controllers/CustomerController.php +++ b/app/Http/Controllers/CustomerController.php @@ -14,6 +14,7 @@ use App\Blacklist; use App\AuditCustomer; use Illuminate\Http\Request; use App\TuntutBaki; +use App\Anggota; use Carbon\Carbon; use Illuminate\Support\Facades\Log; @@ -393,12 +394,38 @@ class CustomerController extends Controller 'nota_pekerjaan'=>$request->nota_pekerjaan, // 'nota_arcc'=>$request->nota_arcc, 'telefon' => $request->telefon1, - 'telefon2' => $request->telefon2 + 'telefon2' => $request->telefon2, )); return response()->json($customer_update, 200); } + public function assignAnggota($noic, Request $request) +{ + // Semak sama ada pelanggan wujud + $customer = Customer::on('mysql7') + ->where('kpbaru', $noic) + ->orWhere('kplama', $noic) + ->first(); + + if (!$customer) { + return response()->json([ + 'success' => false, + 'message' => 'Pelanggan tidak dijumpai.' + ], 404); + } + + // Kemaskini tag_anggota + $customer->tag_anggota = 1; + $customer->save(); + + return response()->json([ + 'success' => true, + 'message' => 'Tag anggota berjaya dikemaskini.', + 'data' => $customer + ], 200); +} + public function customerUpdateKaunter($nokp,$kodcaw, Request $request){ $current = Carbon::now(); @@ -825,6 +852,14 @@ class CustomerController extends Controller return response()->json($blacklist); } + public function anggotaKoperasi(Request $request){ + + $anggota = Anggota::where('noic',$request->noic)->first(); + + return response()->json($anggota); + } + + public function showCustomerByEachCawangan($ic) { $cawangan_all = Cawangan::on('mysql7')->get(); diff --git a/app/Http/Controllers/KelulusanController.php b/app/Http/Controllers/KelulusanController.php index c9c357b..5c21b70 100644 --- a/app/Http/Controllers/KelulusanController.php +++ b/app/Http/Controllers/KelulusanController.php @@ -6,6 +6,8 @@ use App\Audit; use App\Mohon; use App\Cawangan; use App\Mohonid; +use App\MohonAnggota; +use App\Customer; use Carbon\Carbon; @@ -202,6 +204,98 @@ class KelulusanController extends Controller return response()->json($kelulusan,201); } + public function updateAnggota($kodcaw, Request $request) +{ + $harini = Carbon::now(); + + // Dapatkan sambungan database cawangan + $cawangan = Cawangan::on('mysql7') + ->where('kodcaw', '=', $kodcaw) + ->first(); + + if (!$cawangan) { + return response()->json(['success' => false, 'message' => 'Kod cawangan tidak sah'], 404); + } + + $nokp = $request->nokp; + $komen = $request->komenkelulusan; + $namaoperasi = $request->namaoperasi; + $status = $request->sahkan; // 1 = Lulus, 2 = Batal + + // Debug log masuk + Log::info('UpdateKelulusanAnggota triggered', [ + 'kodcaw' => $kodcaw, + 'nokp' => $nokp, + 'status' => $status, + 'komen' => $komen, + 'namaoperasi' => $namaoperasi + ]); + + // ✅ Kalau LULUS + if ($status == 1) { + $kelulusan = MohonAnggota::on($cawangan['mysql']) + ->where('nokp', '=', $nokp) + ->update([ + 'status' => 'DILULUSKAN', + 'komen' => $komen, + 'peloperasi' => $namaoperasi, + 'datetime_pelulus' => $harini, + 'updated_at' => $harini, + ]); + + // 🟢 Update CUSTOMER di pusat (mysql7) + Customer::on('mysql7') + ->where('kpbaru', '=', $nokp) + ->update([ + 'tag_anggota' => 1, + ]); + } + // ❌ Kalau BATAL / TOLAK + else if ($status == 2) { + $kelulusan = MohonAnggota::on($cawangan['mysql']) + ->where('nokp', '=', $nokp) + ->update([ + 'status' => 'DITOLAK', + 'komen' => $komen, + 'peloperasi' => $namaoperasi, + 'datetime_pelulus' => $harini, + 'updated_at' => $harini, + ]); + } else { + return response()->json(['success' => false, 'message' => 'Status tidak sah'], 400); + } + + // 🧾 Simpan audit log + $audit = new Audit(); + $audit->users = $namaoperasi; + $audit->actions = ($status == 1) + ? "Kelulusan anggota oleh operasi (tag_anggota=1)" + : "Pembatalan / tolak anggota oleh operasi"; + $audit->new_data = json_encode([ + 'nokp' => $nokp, + 'status' => $status, + 'komen' => $komen, + ]); + $audit->kodcaw = $kodcaw; + $audit->created_at = $harini; + $audit->updated_at = $harini; + $audit->save(); + + Log::info('Kelulusan anggota dikemas kini', [ + 'nokp' => $nokp, + 'status' => $status, + 'updated_tag_anggota' => ($status == 1) ? 1 : 0 + ]); + + return response()->json([ + 'success' => true, + 'status' => ($status == 1) ? 'DILULUSKAN' : 'DITOLAK', + 'updated_rows' => $kelulusan + ], 200); +} + + + public function updatekomen($kodcaw,$norujukan,Request $request) { $harini = Carbon::now(); @@ -285,6 +379,64 @@ public function create(REQUEST $request,$kodcaw,$norujukan,$roles) return response()->json($kelulusan); } + public function createKelulusanAnggota(Request $request, $kodcaw) +{ + try { + $harini = Carbon::now(); + + // ✅ Dapatkan maklumat cawangan (database connection) + $cawangan = Cawangan::on('mysql7')->where('kodcaw', $kodcaw)->first(); + + if (!$cawangan) { + return response()->json(['success' => false, 'message' => 'Cawangan tidak dijumpai'], 404); + } + + // ✅ Simpan ke dalam model MohonAnggota + $kelulusan = new MohonAnggota(); + $kelulusan->setConnection($cawangan['mysql']); // guna connection cawangan dinamik + $kelulusan->tarikh = $harini->toDateString(); + $kelulusan->nokp = $request->nokp; + $kelulusan->nama = $request->nama ?? null; + $kelulusan->status = 'MENUNGGU OPERASI'; + $kelulusan->komen = $request->komen; + $kelulusan->teller = $request->teller; + $kelulusan->peloperasi = null; + $kelulusan->created_at = $harini; + $kelulusan->updated_at = $harini; + $kelulusan->save(); + + // ✅ Simpan audit trail + $audit = new Audit(); + $audit->users = $request->teller; + $audit->actions = 'Mohon kelulusan anggota'; + $audit->new_data = json_encode(['mohon_anggota_id' => $kelulusan->id]); + $audit->kodcaw = $kodcaw; + $audit->created_at = $harini; + $audit->updated_at = $harini; + $audit->save(); + + // ✅ Return JSON response ke frontend + return response()->json([ + 'success' => true, + 'message' => 'Permohonan kelulusan anggota berjaya dihantar kepada operasi.', + 'data' => [ + 'id' => $kelulusan->id, + 'nokp' => $kelulusan->nokp, + 'status' => $kelulusan->status, + 'komen' => $kelulusan->komen, + 'teller' => $kelulusan->teller, + ], + ], 201); + + } catch (\Throwable $th) { + Log::error('❌ createKelulusanAnggota error: ' . $th->getMessage()); + return response()->json([ + 'success' => false, + 'message' => $th->getMessage(), + ], 500); + } +} + //KEPOHONAN EDIT DAN HAPUS public function kepohonancreate(REQUEST $request,$kodcaw,$norujukan) @@ -497,7 +649,7 @@ public function create(REQUEST $request,$kodcaw,$norujukan,$roles) return response()->json($kelulusan, 200); } - public function getApprovalLaporan(Request $request){ + public function getApprovalLaporan(Request $request){ $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first(); $kelulusan = Mohonid::on($cawangan['mysql']) ->selectRaw('recno, benar, tarikh, onlineid, mohon, norujukan, id, katalaluan, benar, operasi, pinjaman, ansuran, nilaimarhun, berat, margin, teller ,masa, timestamp_approved_by_pc, timestamp_approved_by_operasi') @@ -511,6 +663,34 @@ public function create(REQUEST $request,$kodcaw,$norujukan,$roles) return response()->json($kelulusan, 200); } + public function listKelulusanAnggota(Request $request){ + + $harini = Carbon::now(); + $harini = new Carbon; + Log::info($request->all()); + $cawangan = Cawangan::on('mysql7')->get(); + + $array_kelulusan = []; + + foreach($cawangan as $caw){ + + $kelulusan = MohonAnggota::on($caw['mysql']) + ->where('tarikh', '=', $harini->toDateString()) + ->where('peloperasi', '=', 0) + ->orWhereNull('peloperasi') // Corrected this part + ->orderBy('id', 'desc') + ->get(); + + if(sizeof($kelulusan) != 0){ + array_push($array_kelulusan,["kelulusanall" => $kelulusan,"cawangan" => $caw['details_caw'],"cawangankod" => $caw['kodcaw']]); + } + + } + + + return response()->json($array_kelulusan,200); + } + } From dde4d910bb8ac9b1d0c55d3f827fa3769bd23bb4 Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Mon, 10 Nov 2025 19:11:13 +0800 Subject: [PATCH 103/117] calculation for kadar anggota koperasi --- app/Services/OnePercentServices.php | 39 +++++++++++++++++-- app/Support/OnePercent.php | 28 ++++++++++---- app/Support/v2/Calculation.php | 59 ++++++++++++++++++++++++++--- app/Support/v2/GadaiV2.php | 37 +++++++++++++++--- 4 files changed, 141 insertions(+), 22 deletions(-) diff --git a/app/Services/OnePercentServices.php b/app/Services/OnePercentServices.php index 6e8e834..ad5b9ff 100644 --- a/app/Services/OnePercentServices.php +++ b/app/Services/OnePercentServices.php @@ -3,6 +3,7 @@ namespace App\Services; use App\KadarUpah; +use App\Customer; class OnePercentServices { @@ -79,13 +80,43 @@ class OnePercentServices return ['keuntungan' => $keuntungan,'onepercent' => $onepercent, 'ujrah' => $ujrah_sebenar]; } - public function getKadarUjrah(float $nilaimarhun = 0.0, $groupid) : Float{ +public function getKadarUjrah(float $nilaimarhun = 0.0, $groupid, $nokp = null): float +{ + //Semak status pelanggan dalam table customer + if ($nokp) { + $customer = Customer::on('mysql7') + ->select('tag_anggota') + ->where(function($q) use ($nokp) { + $q->where('kpbaru', $nokp) + ->orWhere('kplama', $nokp); + }) + ->first(); - $kadarujrah = KadarUpah::on('mysql7')->select('kadarujrah')->where([['min','<=',$nilaimarhun],['max','>=',$nilaimarhun]])->where('group_id',1)->get()->toArray(); - - return isset($kadarujrah[0]) ? $kadarujrah[0]['kadarujrah'] : 0; + // Jika anggota koperasi → kadar tetap + if ($customer && (int)$customer->tag_anggota === 1) { + return 0.16; // kadar ujrah tetap untuk anggota + } } + //Jika bukan anggota → ambil dari jadual kadar_upah + $kadar = KadarUpah::on('mysql7') + ->select('kadarujrah') + ->where([ + ['min', '<=', $nilaimarhun], + ['max', '>=', $nilaimarhun], + ]) + ->where('group_id', $groupid) + ->first(); + + //Jika jumpa kadar dalam jadual + if ($kadar && isset($kadar->kadarujrah)) { + return (float) $kadar->kadarujrah; + } + + //Default fallback + return 0.0; +} + public function getRoundedMethod(float $number = 0.0) : Float{ $number_string = number_format(floor($number * 100)/100,2); diff --git a/app/Support/OnePercent.php b/app/Support/OnePercent.php index e924fc1..941b245 100644 --- a/app/Support/OnePercent.php +++ b/app/Support/OnePercent.php @@ -9,6 +9,8 @@ use Illuminate\Http\Request as HttpRequest; use App\Support\v2\GadaiV2 as Version2Gadai; use App\Support\v2\Penebusan; +use Illuminate\Support\Facades\Log; + class OnePercent extends MasterServices { protected $kodcaw; @@ -61,18 +63,30 @@ class OnePercent extends MasterServices return $response; } - public function getKadarUjrah(HttpRequest $request){ - $cawangan = Cawangan::on('mysql7')->where('kodcaw',$request->kodcaw)->first(); - $onePercentServices = new Calculation(); - $kadarujrah = $onePercentServices->getKadarUjrah($request->nilaimarhun,$cawangan['group_id']); + public function getKadarUjrah(HttpRequest $request) +{ + Log::info('[DEBUG-CONTROLLER] Data request', [ + 'nokp' => $request->nokp, + 'kodcaw' => $request->kodcaw, + 'nilaimarhun' => $request->nilaimarhun + ]); - return $kadarujrah; - } + $cawangan = Cawangan::on('mysql7')->where('kodcaw', $request->kodcaw)->first(); + $onePercentServices = new Calculation(); + + $kadarujrah = $onePercentServices->getKadarUjrah( + $request->nilaimarhun, + $cawangan['group_id'], + $request->nokp + ); + + return $kadarujrah; +} public function getOnePercent(HttpRequest $request){ $margin = (!is_numeric($request->margin)) ? 0 : $request->margin; $onePercentServices = new Calculation(); - $keuntungan = $onePercentServices->kiraanKeuntunganSebenar($request->pembiayaan,$request->nilaimarhun,$request->kadarujrah,$margin); + $keuntungan = $onePercentServices->kiraanKeuntunganSebenar($request->pembiayaan,$request->nilaimarhun,$request->kadarujrah,$margin, $request->nokp); return $keuntungan; } diff --git a/app/Support/v2/Calculation.php b/app/Support/v2/Calculation.php index 178b275..18f31a6 100644 --- a/app/Support/v2/Calculation.php +++ b/app/Support/v2/Calculation.php @@ -3,6 +3,9 @@ namespace App\Support\v2; use App\KadarUpah; +use App\Customer; +use Illuminate\Support\Facades\Log; + use Illuminate\Http\Request; class Calculation @@ -58,7 +61,6 @@ class Calculation public function kiraanKeuntunganRebet(float $pembiayaan = 0.0,float $nilaimarhun = 0.0,float $kadarujrah = 0.0,float $margin = 0.0){ $this->one_percent = $this->getKadarUpah($nilaimarhun); - $onepercent = $this->kiraanOnePercent($pembiayaan); $ujrah_sebenar = $this->kiraanUjrahSebenar($nilaimarhun,$kadarujrah,$margin); @@ -83,13 +85,60 @@ class Calculation return ['keuntungan' => $keuntungan,'onepercent' => $onepercent, 'ujrah' => $ujrah_sebenar]; } - public function getKadarUjrah(float $nilaimarhun = 0.0, $groupid) : Float{ +public function getKadarUjrah(float $nilaimarhun = 0.0, $groupid, $nokp = null): float +{ + // 1️⃣ Semak status pelanggan dalam table customer + if ($nokp) { + $customer = Customer::on('mysql7') + ->select('tag_anggota') + ->where(function($q) use ($nokp) { + $q->where('kpbaru', $nokp) + ->orWhere('kplama', $nokp); + }) + ->first(); - $kadarujrah = KadarUpah::on('mysql7')->select('kadarujrah')->where([['min','<=',$nilaimarhun],['max','>=',$nilaimarhun]])->where('group_id',$groupid)->get()->toArray(); - - return isset($kadarujrah[0]) ? $kadarujrah[0]['kadarujrah'] : 0; + // 2️⃣ Jika anggota koperasi → kadar tetap + if ($customer && (int)$customer->tag_anggota === 1) { + Log::info('[DEBUG-UJRAH] Anggota koperasi', [ + 'nokp' => $nokp, + 'kadarujrah' => 0.16, + 'groupid' => $groupid, + 'nilaimarhun' => $nilaimarhun, + ]); + return 0.16; + } } + // 3️⃣ Jika bukan anggota → ambil dari jadual kadar_upah + $kadar = KadarUpah::on('mysql7') + ->select('kadarujrah') + ->where([ + ['min', '<=', $nilaimarhun], + ['max', '>=', $nilaimarhun], + ]) + ->where('group_id', $groupid) + ->first(); + + if ($kadar && isset($kadar->kadarujrah)) { + Log::info('[DEBUG-UJRAH] Bukan anggota - dari jadual kadar_upah', [ + 'nokp' => $nokp, + 'kadarujrah' => (float)$kadar->kadarujrah, + 'groupid' => $groupid, + 'nilaimarhun' => $nilaimarhun, + ]); + return (float) $kadar->kadarujrah; + } + + // 4️⃣ Default fallback + Log::info('[DEBUG-UJRAH] Tiada kadar ditemui', [ + 'nokp' => $nokp, + 'groupid' => $groupid, + 'nilaimarhun' => $nilaimarhun, + ]); + return 0.0; +} + + public function getKadarUpah(float $nilaimarhun = 0.0){ $kadarupah = KadarUpah::on('mysql7')->where([['min','<=',$nilaimarhun],['max','>=',$nilaimarhun]])->where('group_id',1)->first(); diff --git a/app/Support/v2/GadaiV2.php b/app/Support/v2/GadaiV2.php index dd006a5..b0af4af 100644 --- a/app/Support/v2/GadaiV2.php +++ b/app/Support/v2/GadaiV2.php @@ -4,6 +4,7 @@ namespace App\Support\v2; use App\Audit; use App\Cawangan; +use App\Customer; use App\KadarUpah; use App\Support\v2\Calculation; use Carbon\Carbon; @@ -57,6 +58,31 @@ class GadaiV2 } } + private function getKadarUpahAnggota($nokp,$total_nilai_marhun = 0,$groupid = 2) : Float{ + Log::info('DEBUG NOKP:' . $nokp); + if($nokp){ + $customer = Customer::on('mysql7') + ->select('tag_anggota') + ->where(function($q) use ($nokp) { + $q->where('kpbaru', $nokp) + ->orWhere('kplama', $nokp); + }) + ->first(); + $customer = $customer ? $customer->toArray() : []; + if(isset($customer) && $customer['tag_anggota'] == 1){ + return 0.16; + }else{ + return KadarUpah::where('min', '<=', $total_nilai_marhun) + ->where('max', '>=', $total_nilai_marhun) + ->where('group_id', $groupid) + ->value('kadarujrah'); + } + } + + return 0.0; + + } + public function createMarhun($norujukan,HttpRequest $request){ $current = Carbon::now(); $current = new Carbon(); @@ -83,14 +109,13 @@ class GadaiV2 $total_berat = Marhun::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->sum('berat'); //query kadar upah baru - $kadar_raw = KadarUpah::where('min','<=',$total_nilai_marhun)->where('max','>=',$total_nilai_marhun)->where('group_id',$cawangan['group_id'])->first(); - + $kadar_raw = $this->getKadarUpahAnggota($request->nokp,$total_nilai_marhun,$cawangan['group_id']); // query kadar upah lama // $kadar_raw = KadarUpah::where('min','<=',$total_nilai_marhun)->where('max','>=',$total_nilai_marhun)->first(); $onepercentservices = new Calculation(); - $keuntungan = $onepercentservices->kiraanKeuntunganSebenar($request->pinjaman,$total_nilai_marhun,$kadar_raw['kadarujrah'],$margin_pinjam); + $keuntungan = $onepercentservices->kiraanKeuntunganSebenar($request->pinjaman,$total_nilai_marhun,$kadar_raw,$margin_pinjam); // $upah1 = $request->pinjaman * ($kadar_raw['kadarupdah']/100); // $upah6 = $upah1 * 6; // $upah12 = $upah1 * 12; @@ -102,7 +127,7 @@ class GadaiV2 $hargajualan = $request->pinjaman + $upah12; - $akrual = $this->kiraupahTawarruqStokAuditUjrahOnePercent(0.5,0,$kadar_raw['kadarujrah'],$request->pinjaman,$total_nilai_marhun,$margin_pinjam); + $akrual = $this->kiraupahTawarruqStokAuditUjrahOnePercent(0.5,0,$kadar_raw,$request->pinjaman,$total_nilai_marhun,$margin_pinjam); $gadai = Gadai::on($cawangan['mysql']) ->where('norujukan','=',$norujukan) @@ -110,7 +135,7 @@ class GadaiV2 'nilaimarhun' => $total_nilai_marhun, 'berat'=> $total_berat, 'pinjaman' => $request->pinjaman, - 'kadarupah' => $kadar_raw['kadarujrah'], + 'kadarupah' => $kadar_raw, 'marhun' => $request->marhun, 'percentpinj' => $margin_pinjam, 'teller' => $request->teller, @@ -131,7 +156,7 @@ class GadaiV2 'upahdibayar' => 0.00, 'tempohbayar' => 0.00, 'lelong_tawarruq' => 1, - 'kadarujrah' => $kadar_raw['kadarujrah'], + 'kadarujrah' => $kadar_raw, 'ujrah' => $ujrah, 'onepercent' => $onepercent, 'margin_semasa' => $margin_pinjam, From 2ebeae54ea74253da385359ccc77b21bc4903b06 Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Mon, 10 Nov 2025 19:12:26 +0800 Subject: [PATCH 104/117] database migration for kadar anggota koperasi --- ...2025_10_06_160240_create_anggota_table.php | 35 ++++++++++ ..._08_121938_add_status_to_anggota_table.php | 36 +++++++++++ ...0723_add_tag_anggota_to_customer_table.php | 32 ++++++++++ ...1_04_164447_create_mohon_anggota_table.php | 64 +++++++++++++++++++ 4 files changed, 167 insertions(+) create mode 100644 database/migrations/2025_10_06_160240_create_anggota_table.php create mode 100644 database/migrations/2025_10_08_121938_add_status_to_anggota_table.php create mode 100644 database/migrations/2025_10_13_110723_add_tag_anggota_to_customer_table.php create mode 100644 database/migrations/2025_11_04_164447_create_mohon_anggota_table.php diff --git a/database/migrations/2025_10_06_160240_create_anggota_table.php b/database/migrations/2025_10_06_160240_create_anggota_table.php new file mode 100644 index 0000000..33297f3 --- /dev/null +++ b/database/migrations/2025_10_06_160240_create_anggota_table.php @@ -0,0 +1,35 @@ +id(); + $table->string('no_anggota')->unique()->nullable(); // No keahlian + $table->string('nama'); + $table->string('noic')->unique(); // IC wajib unik + $table->string('no_tel')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('anggota'); + } +} diff --git a/database/migrations/2025_10_08_121938_add_status_to_anggota_table.php b/database/migrations/2025_10_08_121938_add_status_to_anggota_table.php new file mode 100644 index 0000000..d9afe81 --- /dev/null +++ b/database/migrations/2025_10_08_121938_add_status_to_anggota_table.php @@ -0,0 +1,36 @@ +tinyInteger('status') + ->default(1) + ->comment('1 = aktif, 0 = tidak aktif') + ->after('no_tel'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('anggota', function (Blueprint $table) { + // + $table->dropColumn('status'); + }); + } +} diff --git a/database/migrations/2025_10_13_110723_add_tag_anggota_to_customer_table.php b/database/migrations/2025_10_13_110723_add_tag_anggota_to_customer_table.php new file mode 100644 index 0000000..d2c585b --- /dev/null +++ b/database/migrations/2025_10_13_110723_add_tag_anggota_to_customer_table.php @@ -0,0 +1,32 @@ +boolean('tag_anggota')->default(0)->after('ahli'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('customer', function (Blueprint $table) { + $table->dropColumn('tag_anggota'); + }); + } +} diff --git a/database/migrations/2025_11_04_164447_create_mohon_anggota_table.php b/database/migrations/2025_11_04_164447_create_mohon_anggota_table.php new file mode 100644 index 0000000..8f9f15c --- /dev/null +++ b/database/migrations/2025_11_04_164447_create_mohon_anggota_table.php @@ -0,0 +1,64 @@ +getPdo(); + return true; + } catch (\Exception $e) { + return false; + } + }); + + return $db_connection; + } + + /** + * Jalankan migration + */ + public function up() + { + $db_connection = $this->getActiveDB(); + + foreach ($db_connection as $dbase) { + if (!Schema::connection($dbase)->hasTable('mohon_anggota')) { + Schema::connection($dbase)->create('mohon_anggota', function (Blueprint $table) { + $table->bigIncrements('id'); + $table->date('tarikh')->nullable(); + $table->string('nokp', 20)->nullable(); + $table->string('nama', 100)->nullable(); + $table->string('status', 50)->default('MENUNGGU OPERASI'); + $table->text('komen')->nullable(); + $table->string('teller', 100)->nullable(); + $table->string('peloperasi', 100)->nullable(); + $table->dateTime('datetime_pelulus')->nullable(); + $table->timestamps(); + }); + } + } + } + + /** + * Undur migration + */ + public function down() + { + $db_connection = $this->getActiveDB(); + + foreach ($db_connection as $dbase) { + Schema::connection($dbase)->dropIfExists('mohon_anggota'); + } + } +} From 6898a78506bfa0bd9df2553bd0f02139fb5d1f25 Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Mon, 10 Nov 2025 19:13:29 +0800 Subject: [PATCH 105/117] route for kadar anggota --- routes/web.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/routes/web.php b/routes/web.php index 359456b..008c397 100644 --- a/routes/web.php +++ b/routes/web.php @@ -59,7 +59,10 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->put('customers/information/update/admin', ['uses' => 'CustomerController@customerUpdateAdmin']); $router->get('admin/customers/nokp/search',['uses'=>'CustomerController@showOneCustomerByICAdmin']); $router->get('customer/blacklist',['uses'=>'CustomerController@blacklistCustomer']); + $router->get('customer/anggota',['uses'=>'CustomerController@anggotaKoperasi']); $router->get('customer/eachcawangan/{ic}',['uses'=>'CustomerController@showCustomerByEachCawangan']); + $router->put('customers/{noic}/assign-anggota', ['uses' => 'CustomerController@assignAnggota']); + //arcc $router->get('customer/searchbyname',['uses'=>'CustomerController@searchByName']); // Route::get('/api/customers/searchbyname', [CustomerController::class, 'searchByName']); @@ -390,15 +393,20 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->get('SenaraiDahLulus/{kodcaw}/{norujukan}',['uses'=>'KelulusanController@listdahlulus']); $router->get('ListLatestLulus/{kodcaw}/{norujukan}',['uses'=>'KelulusanController@listlatestlulus']); $router->put('UpdateKelulusan/{kodcaw}/{norujukan}',['uses'=>'KelulusanController@update']); + $router->put('UpdateKelulusanAnggota/{kodcaw}',['uses'=>'KelulusanController@updateAnggota']); $router->put('UpdateKelulusanKomen/{kodcaw}/{norujukan}',['uses'=>'KelulusanController@updatekomen']); $router->post('CreateKelulusan/{kodcaw}/{norujukan}/roles/{roles}',['uses'=>'KelulusanController@create']); + $router->post('CreateKelulusanAnggota/{kodcaw}/roles/{roles}',['uses'=>'KelulusanController@createKelulusanAnggota']); $router->post('CreateLulus/{kodcaw}/{norujukan}',['uses'=>'KelulusanController@kepohonancreate']); $router->get('GetLulus/{kodcaw}/',['uses'=>'KelulusanController@kepohonangetteller']); $router->put('UpdateKelulusan/kepohonan/{kodcaw}/{norujukan}',['uses'=>'KelulusanController@updatekepohonankhazanah']); $router->get('GetLulusAll/{kodcaw}/',['uses'=>'KelulusanController@listkepohonan']); $router->get('ListOperasi/',['uses'=>'KelulusanController@listoperasi']); $router->get('ListOperasiKelulusan/',['uses'=>'KelulusanController@listoperasikelulusan']); + $router->get('list/approval/anggota',['uses'=>'KelulusanController@listKelulusanAnggota']); + + //API REQUEST TELLER From 600cd753f06038f2d77ed1a47b22e2124cebac0f Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Mon, 10 Nov 2025 19:14:29 +0800 Subject: [PATCH 106/117] import csv anggota koperasi --- app/Console/Commands/ImportCSV.php | 95 +++++++ app/Console/Kernel.php | 1 + resources/data/anggota.csv | 417 +++++++++++++++++++++++++++++ 3 files changed, 513 insertions(+) create mode 100644 app/Console/Commands/ImportCSV.php create mode 100644 resources/data/anggota.csv diff --git a/app/Console/Commands/ImportCSV.php b/app/Console/Commands/ImportCSV.php new file mode 100644 index 0000000..cc792e3 --- /dev/null +++ b/app/Console/Commands/ImportCSV.php @@ -0,0 +1,95 @@ + 'no_anggota', + 'nama' => 'nama', + 'no_kp' => 'noic', + 'telefon' => 'no_tel', + ]; + + $chunk = []; + $chunkSize = 1000; + $totalRows = 0; + + $bar = $this->output->createProgressBar(); + $bar->start(); + + try { + while (($row = fgetcsv($handle)) !== false) { + $csvData = array_combine($header, $row); + $data = []; + + foreach ($columnMap as $csvCol => $dbCol) { + $data[$dbCol] = $csvData[$csvCol] ?? null; + } + + $data['status'] = 1; + $chunk[] = $data; + + if (count($chunk) >= $chunkSize) { + DB::table('anggota')->insertOrIgnore($chunk); + $totalRows += count($chunk); + $chunk = []; + $bar->advance($chunkSize); + } + } + + if (!empty($chunk)) { + DB::table('anggota')->insertOrIgnore($chunk); + $totalRows += count($chunk); + } + + $bar->finish(); + $this->info("\n✅ Successfully imported {$totalRows} rows"); + } catch (\Exception $e) { + $this->error("\n❌ Error: " . $e->getMessage()); + } + + fclose($handle); + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 9d8e527..1d236f5 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -24,6 +24,7 @@ class Kernel extends ConsoleKernel Commands\ClearCachesAll::class, Commands\RestartSupervisor::class, Commands\InsertSempornaData::class, + Commands\ImportCsv::class, ]; diff --git a/resources/data/anggota.csv b/resources/data/anggota.csv new file mode 100644 index 0000000..87b0623 --- /dev/null +++ b/resources/data/anggota.csv @@ -0,0 +1,417 @@ +id,nama,no_kp,telefon,no_anggota +9,WAN ZULKIFLY B WAN MOHAMED,680509035997,010-8995997,1 +13,HASANAH MOHAMAD,740325036196,1169670585,2 +14,HASLINA HASBULLAH,630216035760,1111473265,3 +16,NURWIDAD BINTI AZLY,891020035246,134040289,4 +19,ZULAILA BINTI CHE MAT,840313035290,1137707081,5 +25,MUHAMMAD HAFIFI BIN ABD RAHMAN,970403035003,1114884900,6 +33,FARAHAIN FATIN BINTI MOHD FAUZI,940624035560,169877154,7 +45,NURHANA BINTI FARHAN,910508125764,1137425769,8 +51,CHE FAHMI AMIRUL BIN CHE MOHAMAD ZAID,930702035381,1139239497,9 +53,KELVIN @ MOHD NAJIB BIN KEREAN,900420125525,146750406,10 +55,MUHAMMAD NAZIF BIN ABDULLAH,840830025541,166892948,11 +56,SUHAIBAH BINTI JUSOH,931212035148,199128698,12 +58,ELMA HARFAZLYANA BINTI BAHAR,990827126556,198782708,13 +59,MARINAH MAZNAH BINTI AMAT @ ABD RAHMAN,961109126102,1128686033,14 +60,SITI NUR ATHIRAH BINTI ZULKIFLI,980222036786,128108084,15 +61,MOHAMAD HAFIZUL BIN SANUAR,930619036201,149246474,16 +63,MUHAMAD MUSLIM BIN MADIRAN,970326035551,179726697,17 +64,EQA NURFITRIANA BINTI ALIMUDDIN,980202126442,1112085474,18 +65,ZULKARNAIN BIN MOHD JAMAL,980203126321,1139237021,19 +68,IRFAHANNA EMIRAH BINTI MOHD ALWI,10506031090,1110311820,20 +70,NURAIN SYAFIKA BINTI BURHAN,20828030380,179016282,21 +71,NUR FADHILAH AFIFAH BINTI MOHD NAZMI,980827035268,1117821334,22 +75,MOHD HAFIZUDDIN BIN HARUN,930822115351,134986658,23 +76,MUHAMMAD AMMAR FIRDAUS BIN RIDZUAN,970826035291,109253592,24 +77,MOHAMAD AFDHAL BIN ANWAR,890818075031,012 2017437,25 +78,NOR AIN BINTI ABDULLAH AZID,920411035470,1131590164,26 +79,SITI NOORAINI BINTI LAZIM,900617025042,1140794473,27 +82,FATIN AFIQAH BINTI MOHD SHAH,920322036084,199084590,28 +84,NUR ASIAH BINTI MUHAMMAD,950324035840,010-4152116,29 +85,AHMAD NAZRI BIN ISMAIL,700601035039,199179559,30 +86,TUAN NURHAFIZA BINTI TUAN ZULKIFLI,890624035306,133925842,31 +87,MOHAMAD NAZMI BIN MOHD SUKRI,980131035999,139245295,32 +88,AMIRUL HISHAM AIMI BIN CHE AMRAN,940515035545,139622447,33 +90,MUHAMMAD HAFIZI WAJDI BIN HASSAN,951103036043,1125509097,34 +91,NUR AMIRAH BINTI ZULKIPLI,980422036502,134863252,35 +92,WAN NOR AZIAN WAN ABDUL MANAF,740428035008,179142365,36 +94,SITI MARIAM BINTI MUHAMMAD AZHAR,800123035154,199288851,37 +95,TUAN NOR DIANA BT TUAN AZHAN,940401035870,193770187,38 +96,MOHAMMAD IZFAN BIN MAT IZANI,970805036113,137884588,39 +97,NUR IZZAH IWANI BT MOHD RAZDI,970624035146,179189543,40 +98,WAN ROZARINA BT WAN ZAIN,801210035368,129616201,41 +100,SYAHADAL AUZAEAIN BIN ZULKARNAIN,961020855069,169324952,42 +101,SYARIFAH AL QURAISYAH BT SAYED MUSTAPHA,970319035596,105750423,43 +106,MOHAMAD HAFIZ BIN CHE SOH,890905035337,199720813,44 +110,NIK NUREN SYAFIKAH BT NIK MOHAMED NAZRI,950501035164,179406274,45 +121,SITI FATIMAH SALWANI BT ROSMAN,891222035658,126209004,46 +122,AHMAD AFKAR BIN MOHD NOOR,10626030957,108847563,47 +123,MOHD THAQAFI BIN SHAMSUDDIN,920409036669,179162486,48 +124,NUR AYUNI BINTI AHMAD FAUZI,971101035686,1111433401,49 +127,NOR AZILA BT CHE SOH,751005035980,1110742242,50 +153,ALILYHAYATIE BINTI MOHAMED,840101036822,123015583,51 +162,ERNINGSIH BINTI JUNAIDI,900705125262,1139238537,52 +165,FATIN NADIA BINTI ZAIDI,920114-03-6346,199405259,53 +168,ISMAIL BIN ZAKARIA,870210035359,105681405,54 +171,KAMSAH BIN LINGGISAN,870513496697,146555718,55 +179,MOHAMAD FAIZ MOHAMED ASRI,850922035543,139938243,56 +207,RAZAKI BIN MAMAT,770215035851,199178946,57 +208,HAFEIZAH BT . AB KADIR,790918035426,129897112,58 +219,MOHD HAYYUL ILTIZAM BIN OTHMAN,851018035793,133929331,59 +232,MOHD SHAHMIN BIN SA'ARI,861130295121,196438873,60 +237,MUHAMAD FARIZ BIN ABDULLAH,871004035205,179268308,61 +245,MUHAMMAD SYAKIRIN BIN MOHD AMINUDDIN,880425065327,129077963,62 +262,MOHAMED AZMI MAHMOOD,840511035443,199731345,63 +264,MOHD RAZANI A. RAHIM,670930106593,199099713,64 +272,NOROSMINI BT. MAT NOOR,821001035984,129493588,65 +280,WAN MOHAMMAD ARMANI WAN SHARIFUDIN,870119035091,189022406,66 +312,NORALINA MOHD YUSOFF,630106035380,182269464,67 +319,NOR'AINI AH KOM BT ABDULLAH,631231675058,1112301671,68 +320,AZLY BIN OTHMAN,620809035425,199598184,69 +324,FARIDAH BT. MAMAT,600813035112,139492226,70 +325,MOHD NAIM MOHAMAD,570805035441,169214503,71 +327,NUR IZZATI HUSNA BINTI ABD RAHMAN,880417035750,194166991,72 +328,NORAZERA BINTI ADIN,930513126372,143560193,73 +343,NOR AZIAH BINTI AHMAD,770716035702,129521803,74 +354,SITI ANIZA BT HARDAH,890801125848,143751889,75 +358,RUFAIDA BINTI HAJIHIL,861221125160,178317763,76 +363,MUHAMMAD AMIN BIN RIFFIN,950626035483,132747420,77 +364,MUHAMMAD RASIHI BIN ABD KARIM,830401035435,134487279,78 +366,LIYANA FARIEHA BINTI BAKHORI,960209025136,194622615,79 +367,AFA HUSNA BINTI MD RADZI,921018025748,103737560,80 +369,NOR INTAN MARLINI BT NOR AZLAN,851124035914,139269494,81 +370,NUR AIN SOFIA BINTI ROSLI,960131035018,169409127,82 +376,MOHD FAIZUL AZAHA BIN UMANAH,840502035417,199992928,83 +378,MOHD FAIZAL BIN SAFIE,871129295529,139922275,84 +380,HASWATI BINTI KARIMIN .,820421126036,1119544351,85 +381,JURINA BINTI MADAYA,880609125224,168178634,86 +383,NURFARAHIM BT MOHD OMAR,900427035418,1126220662,87 +386,SHAZRINA BINTI AZLIND,970518125682,128373831,88 +388,HASANUDDIN BIN HUSAING,980814126339,128376008,89 +390,SITI ANNA SHAHEERA BINTI ALI,921121125026,146567467,90 +397,NUR AFRINA BINTI ALIMI,990616065714,137969408,91 +398,ABDUL HALIM BIN TALIB,901025065707,1111313873,92 +399,NUR IZZATI BINTI ZULKIFLI,890123035826,178916936,93 +400,NUR LIANA SYAFIKAH BINTI SALAM,940605035186,148478780,94 +401,AHMAD SYAHMI BIN AHMAD IZANI,870828035545,1111706484,95 +402,ROZALMI BIN RAZALI,820101035629,138973594,96 +403,SHAMSURIATI BINTI HASSAN,880826035444,133605298,97 +404,MOHD AMIRRUDDIN BIN ARZAMI,840417025943,137868197,98 +405,MOHD AZIZI BIN AB RASHID,870112295165,148983787,99 +406,SUHAIRAH BINTI SULIMAN,840615036280,139463484,100 +407,MOHD FARID BIN IBRAHIM,790406035393,199499704,101 +408,MOHD FAIZUL BIN HUSSAIN,850910035837,139090920,102 +409,MOHD KHAIDIR BIN AWANG,880606035899,139742581,103 +410,NOR AZIAH BINTI AHMAD,770716-03-5702,129521803,104 +411,FATIHA BINTI CHE ABDULLAH,950102915068,129698210,105 +412,NIK ABDULLAH BIN NIK MUHAMMAD,630411035213,148125345,106 +413,MAHNUN BINTI HUSSIN,740530035352,1155061673,107 +414,SYUKRI BIN ARIFFIN,771218715013,183416221,108 +415,ARMIN BIN MANDANGAN,981019126449,169369704,109 +416,ZAID BIN ZAKARIA,670108035479,199179138,110 +417,MOHD FIRDAUS BIN MAHAMOOD,900202035513,145075069,111 +419,NORAZANI BINTI HUSAIN,721203035204,179818808,112 +420,AZURAWATY BINTI AHMAD,840821025208,175800844,113 +421,WAN RUSLAILE BINTI WAN MOHD ZAIN,841118035644,145060899,114 +422,NOOR HAFIZI BIN MOHAMAD,890922095155,1133406383,115 +423,ISMAIL BIN ZAKARIA,870201035359,010 5681405,116 +424,MOHAMMAD FARIZ BIN MUSTAPHA,850115035969,196017695,117 +425,ABDUL HAKIM BIN AHMAD AB.NASHIR,901116025225,143464266,118 +426,AZIRIN BIN RIFFIN,730605035551,199104757,119 +427,KATHERINE RUMBANG,770421125700,1139025242,120 +428,MUHAMAD SHAHARIL BIN SIDIK,860104035049,199868018,121 +429,AMIRAH FARHAN BINTI MOHD ASRI,890711035566,136246932,122 +430,MUHAMAD HAZLAN BIN RAMLI,940225036443,148030664,123 +431,MOHD FARIS BIN RUSLEE,870812035081,179119982,124 +433,RIDHUAN BIN ABDULLAH,840612125739,1116518794,125 +434,MANIAH BINTI ASUN,840331126284,105897892,126 +435,NORFISHAH BINTI MUSTAFFA,870406026294,124478826,127 +436,NOR AZIAM BINTI JUSOH,830621035488,179627003,128 +437,HAFIZUL RAHMAN BIN MOHD FAUZI,830521035683,129397958,129 +438,NIK NOR SHAHIRAH BINTI NIK YUSOFF,950923035690,109510068,130 +439,MOHAMMED SHAZWAN BIN NORDIN,850729036165,1111683685,131 +440,MOHD REDZUAN BIN SHAARANI,870710085395,179022324,132 +441,Noor Azlan bin md noor,841201035127,199034008,133 +442,SITI RAIHAN BINTI MAT SAN,890907115154,197284647,134 +443,NIK MOHAMAD HAZIM AQMAL BIN NIK ALIM AMIRAH,920609035353,104473383,135 +445,RAJA NOR AIDAH BINTI RAJA AHMAD,901012065900,139515155,136 +447,NORLIN BINTI SAIMAN,871205235350,1160575580,137 +448,MUHAMMAD KHAIRUL BIN ALI,841212035595,179484638,138 +449,ROSLINA BINTI MOHD RAMLI,820804034326,139824757,139 +450,NUR AIN FARINA PANAI ABDULLAH,870728125228,146557037,140 +451,SUZIANA BINTI YUSOF,840822035520,104568684,141 +452,KAMSAH BIN LINGGISAN,870513 49 6697,014 655 5718,142 +453,MOHD. RAMDHAN BIN WARIMIN,890430125629,109430138,143 +454,MUHAMMAD DAUD BIN ABDULLAH,930921017159,1119526732,144 +455,NIK MUHAMMAD ARASH PUTRA BIN AZIHAN,981109036041,179003770,145 +456,MUHAMMAD IQABAL ZUEL,831202035533,149404101,146 +457,MOHD FAHMI BIN MAT LUDIN,801104115567,1121039021,147 +458,MOHD ARIFIN BIN ISMAIL,680229035095,109262869,148 +461,MOHD NOR BIN OSMAN,830601035405,129247270,149 +462,NURFARAHIAH BINTI MAT JUSOH,891028035718,199403985,150 +463,NURUL NISHA BINTI MUHAMMAD,841218035676,1110948404,151 +464,MUHAMAD IZZUWAN BIN MD SHUKRI,910607035537,179515004,152 +465,NORALINA BINTI MOHD YUSOFF,630106-03-5380,018-2269464,153 +466,NUR AININA BINTI MOHAMMAD,961010036086,1119723793,154 +467,TUAN MOHD NOR NAZRIM BIN TUAN MOHAMMAD,820527115175,122428020,155 +469,MUHAMMAD FAQIH AMRI BIN JAILANI,980917035229,166138478,156 +470,SITI NOORAAINI BINTI DAUD,761026035532,129602691,157 +471,MOHAMAD DAWAWI BIN IBRAHIM,810215035505,179415892,158 +472,RAKIAH BINTI YAACOB,590208035476,145177720,159 +473,ASMA BINTI AHMAD,871129295094,135675063,160 +474,AHMAD AZIMAN BIN CHE ALIAS,970425035485,1137999991,161 +475,MOHD SYAHMIE SYAWAL BIN MOHD BAKRI,900503036069,145144451,162 +476,MARJUNI BIN MOHD ALI,840503126521,1116027090,163 +477,AINIE HAYATIE HAMAZAH,880122115024,1116168995,164 +478,MUHAMMAD IZWAN BIN IBRAHIM,890601035127,1129079797,165 +480,FARIDAH BINTI MAMAT,600813-03-5112,139492226,166 +481,MOHD SABRI BIN ABDULLAH,530502035069,199813353,167 +482,MOHD KHALID BIN ABDUL RAHMAN,630807035295,145036476,168 +483,AZMADI B. HJ. OMAR,681028035093,199803003,169 +484,RUSMAWATI MAMAT,660827035548,104559409,170 +485,AZIMAH BT. ABDULLAH,580910035282,018770 4639,171 +486,MIHAMIDAH BT. HAMAT,680930035552,1127486160,172 +488,NOR AISAH BT. RAMELI,720723035748,1115469653,173 +490,RAZAKI B. CHE OMAR,681228035207,148131565,174 +491,SULAINI BT. JAAFAR @ MAT ZIN,740628035916,199058471,175 +492,TUAN RAZAK B. TUAN MUDA,670301035817,129695589,176 +493,AMINUDDIN MD NOR,690217035097,199975353,177 +494,ROHANA MAEL,711021035730,129249968,178 +495,WAN NOR AZIAN WAN ABDUL MANAF,720428035008,179142365,179 +496,ZAILILAH BT. HASSAN,700825035062,189163000,180 +497,NARWATI BT. LUPIN,740110035874,10416116,181 +498,CHE SOH B. HASSAN,591010035935,139070565,182 +499,MOHD EZANEE B. MOHD NOOR,610916035317,199815500,183 +500,MASTURA MUHAMMAD,761003035214,139856061,184 +501,HASSAN SHUKRI B. HUSSEIN,660604035049,139026550,185 +502,MOHD RAMLI B. YAACOB,570601035001,145091165,186 +504,NIK NOOR MASTURA BT NIK SOH,750607035174,183134464,187 +506,ROSEMALIZA BT. MUHAMAD,700224035542,199092277,188 +507,ROSHAFIZA B MAMAT,800619035051,179653635,189 +508,FATIMAH BTE MAT ZIN,821025036084,139360958,190 +509,MOHD SAHARUDIN B AB RAHMAN,810310035757,1131056099,191 +510,KAMARUL IRWAN BIN ABDUL RAZAK,780508035619,199195969,192 +511,MOHD BIN YAACOB,580925115015,129623355,193 +512,ANIS ISMAIL,720504035190,199105226,194 +513,HAFEIZAH BT. AB KADIR,790918035246,129897112,195 +514,MOHD FAIZAL B. MOHAMMAD,790118035305,139521113,196 +515,KAMRUL HISAN BIN MOHD KAMSON,650127035003,139817419,197 +516,SAFINAH BT MAHAT,620212065058,189832242,198 +517,NIK JAWAHIR BT NIK ISMAIL,700602035276,129599499,199 +518,ASMAH LAILY HUSSEIN,710328035204,139636908,200 +519,W.M. AZHARI B WAN ABDULLAH,700325035605,139821822,201 +520,WAN AZKAN BIN WAN HASSAN,660304035653,199825653,202 +521,ZAITON MAT ADAM,600821035462,179631848,203 +522,WAN MOHAMED SHARIF B WAN MUSA,540704035365,199115365,204 +523,RAMELAH BINTI DERAMAN,650629035046,196953070,205 +524,NORLY BINTI DERAMAN @ IBRAHIM,691213035190,169243019,206 +525,MUHAMAD SUKRI BIN SEMAN,740906035335,179702750,207 +526,ZAILANI YAACOB,681215035179,103346695,208 +527,AMIRIZA HAMZAH,680919035447,199806158,209 +528,MUHD NASROM SHAH B. YUSUF,720208035305,199505505,210 +529,A'SRI CHE ALI,610820035873,1111255604,211 +530,FARIDAH CHE ALI,690103035478,1139190727,212 +531,ABDUL RAHMAN ALI,701112086323,129516256,213 +532,RAMILAN ABDUL RAHMAN,650207035433,199583737,214 +533,MD AZHARI ABD RAHMAN,640406035111,139676728,215 +534,NOR FAZILLAWATI MOHAMED,830720035328,199475444,216 +535,SARINA MOHD ZAIN,700926035096,137617588,217 +536,ROSELINA MOHD MAHIDDIN,651027035588,129535394,218 +537,AMRAN MOHAMAD,720417035475,199448955,219 +538,ROZIANI BT. AHAMED KAMIL,750101039848,011 26403553,220 +539,MOHD YAMIN ISMAIL,630904035043,199602549,221 +540,AZIZAH KAMARUL ZAMAN,680615035210,179594611,222 +541,MOHD FIRDAUS JAMALUDIN,880218035387,129540047,223 +542,NOR AZLIMAH RAMLI,850708035112,179722326,224 +543,MOHD AZRUL FAIZAL ABU BAKAR,821105035735,194458020,225 +544,ABDULLAH ZAWAWI BIN MAMAT,730119035695,145042276,226 +545,AZIMAT MAMAT,650501035629,148098787,227 +546,NORHAYATI YAACOB,670110035304,179191617,228 +547,MOHD NORIKHWAN BIN SHAHIMI,850216035415,179730779,229 +548,ASHAMDI ASAARI,810910035427,173332616,230 +549,NIK NABIHAH NIK YUSOFF,880923035956,172989264,231 +550,MUHAMAD BUKHARI ABD RAHIM,820112035587,129469118,232 +551,MOHD ZANI MD ZAIN,650519035491,139972365,233 +552,NURHAIDA ABD SAMAD,821230015194,139321786,234 +553,MUHAMAD FARKIAMI AB. RAHIM,761216035621,133999602,235 +554,MOHD FAIZUL AZAHA UMANAH,840502038417,199992928,236 +555,SAIDITINA AISHAH MAHAMUD,891128065084,139278425,237 +556,MOHD HAFIZ YAHAYA,820209035567,199087605,238 +557,AHMAD KHALLIFA MOHD HANAPI,870217035167,179238977,239 +558,NUR RASHIHAH SALLEH,851117035318,139089829,240 +559,NIK FADHLINEE NIK MARWAN @ NIK FAUZI,841217035308,129578497,241 +560,ROSLINA MOHD RAMLI,820804035326,139824757,242 +561,WAN RAMLAH WAN DERAMAN,770227035840,1125712878,243 +562,MOHD ROSLAN MOHD ALI,610821035779,146455992,244 +563,ZANJABILA MOHD SALEH,851020035522,199859436,245 +564,NORAI MAT DAUD,750607035262,146060678,246 +565,MARIYANI MUDA,801209035512,129900535,247 +566,ABDULLAH HAKIM AB. ALIM,821128035885,199497979,248 +567,NOR HAFIZUDIN MOHAMED,861115296249,179274383,249 +568,NORMALA MOHD NOOR,850827035270,133267027,250 +569,SHAHILLA CHE RAZALI,830131075006,145297313,251 +570,NUR IDAYU MAT NASIR,861008295152,139019799,252 +571,MOHAMED AZMI MAHMOOD,840511-03-5443,199731345,253 +572,ABDUL RAZAK OMAR,640822035671,1111929667,254 +573,MOHD EKHWAN ZAKARIA,880422065567,1151667076,255 +574,ABDUL HAFIZ NAWAWI,870526025085,176755443,256 +575,FARAH AWANIS EDRUS,831209035296,129229523,257 +576,SADEED MUHDHAR MOHD ZAIN,870621035767,139121305,258 +577,NURUL AINI HARUN,860606296396,1137504434,259 +578,WAN MOHD RAZIS WAN SUHAIMI,831220035721,139839010,260 +579,NIK LOKMAN NIK MAN,830209035013,137440221,261 +580,MOHD SHAHRUL RIDZUAN ABDULLAH,850316035383,126865723,262 +581,WAN MOHD RIDHUAN WAN MAT LUDIN,861016296219,179717099,263 +582,MOHAMAD FAIZ MOHAMED ASRI,850922-03-5543,139347720,264 +583,MUHAMMAD FERDAUS NOOR ABAS,870119065071,179704287,265 +584,NUR FARAZLIN ROSLI,880611035172,196132336,266 +585,OTHMAN BIN DAUD,740522035889,139504781,267 +586,NOOR HAFIZI BIN MOHAMMAD,890922035155,174677645,268 +587,SITI ZALEHA HARUN,840731036042,1137550567,269 +588,FATIN FAUZANA BT. MOHD RAMLI,870615035568,1110109118,270 +589,AZID @ ABDUL AZID BIN SULAIMAN,700618035799,199271623,271 +590,MOHD SHAFIK AFFANDIE BIN MAMAT,870725035323,173550586,272 +591,HAZRUL BIN HUSSIN,831219035169,139697822,273 +592,NUR ADNIN BINTI MOHAMED,830725035298,109333696,274 +593,SAMSIANA BINTI RAHENG,840808035516,199900575,275 +594,MOHD FAIZ BIN MOHD WARDI,850817035955,1111617548,276 +595,MOHD ZAIRY BIN MOHD ROSLI,810118035503,173594115,277 +596,MOHD ASRI BIN MUKHTAR,791007035681,199721640,278 +597,NORHAPIZAH BINTI MOHAMMED @ AZIZ,871120035544,199329511,279 +598,NURUL ZATUR NAJAHAH BT YUNUS,870717065020,132128673,280 +599,MOHD EZUAN BIN ISMAIL,840324035077,137745031,281 +600,CHE RUSLI BIN MUHAMMAD,721110035459,139462647,282 +601,AHMAD AMIN BIN RASHID,850606035525,104515525,283 +602,MOHD HAFIZ BIN MOHAMMAD,840515035141,129394353,284 +603,MUZANI BIN IBRAHIM,680518035841,1140297681,285 +604,WAN AZMEER BIN WAN MAHMOOD,900114035839,133136965,286 +605,KHAIRUL ANUAR BIN YAACOB,850127035333,199618159,287 +606,AZHAN BIN MAT,870802035651,199117990,288 +607,SAKRI BIN MAT NOR,720104036207,129295955,289 +608,NASRUL HAFEZ B. MAT NASIR,831220035975,1110105975,290 +609,ARJUNAIDEY AZWAR BIN AB RAHMAN,830113035019,148284946,291 +610,MOHAMAD AZIZI BIN MOHAMED NOOR,870824295657,013 9109873,292 +611,MUHAMAD HAFIZ BIN ZAKARIA,871115035873,179156428,293 +612,MUHAMMAD ARIEZ BIN AZMAN,910504035219,179808962,294 +613,MOHAMAD RIDZWAN BIN MOHAMAD,920720035749,169357949,295 +614,ATHIRAH AZRI BINTI AZMI,870619035426,179235024,296 +615,MOHD ZULFADLI BIN IBRAHIM,860216035481,1129276057,297 +616,AIDAMARNI BINTI SALLEH,810123035890,139131328,298 +617,NORMAHWATI BT BELUDTU,840301125854,198405462,299 +618,NURHUSIN BIN APAN,831010127337,178190102,300 +619,MUHAMMAD NAFIS B ZAINUDIN,870509035089,194714564,301 +620,MOHD HAFIZUL FIKRI BIN SIDI MOHAMED NOOR,880422035149,179514823,302 +621,AHMAD ZULKHAIRI BIN ZULKFLI,890910036289,102911183,303 +622,MOHD AL-AMIN BIN YUSOFF,870516295487,1133301744,304 +623,CHE KHAIRUL AZLI CHE HASHIM,920827035829,179008827,305 +624,MOHD FIRDAUS BIN MOHAMAD,850127035237,139440200,306 +625,MOHD AYUB BIN SUHAIMI,871231675069,189650520,307 +626,MD AZWAN BIN NORDIN,900826125883,109313914,308 +627,MOHD HAFIZ FAHMI BIN SAHAK,871104125355,198955381,309 +628,SITI MASHITA BINTI MARIJIN,860930495944,019 5324767,310 +629,RIDZAN NURLINA BT MOHAMED NASIR,850119065698,189160395,311 +630,MOHAMAD FURQANUL AIZAT BIN FAUZI,900728035593,1120722721,312 +631,MUHAMMAD IZZUDDIN BIN MOKHTAR,890209035333,199011095,313 +632,MOHAMAD SHAKIR BIN ABDUL MANAN,901105035591,1110630511,314 +633,NOOR SUHAILA BINTI IBRAHIM,940423035150,104164407,315 +634,SITI NORAZNI BINTI HASSAN,900515036058,145268580,316 +635,MOHD HANIF BIN MAT ROF,811107035721,129637776,317 +636,ASMARIHAN BINTI AB GHANI,880205035150,1110970931,318 +637,HADAFI BIN MOHD ZUKIPELI,890302035071,1110104559,319 +638,MOHD SHAHLAN B. ANUAR,900728035913,179872315,320 +639,MOHD FAIZAL BIN IBRAHIM,870504295017,194178298,321 +640,MOHAMMAD KHAIRULNIZAN BIN JUSOF,910218036157,179600102,322 +641,MUHAMAD HAFIZ SHAR'E BIN HANAFI,940607035497,136749495,323 +642,ROHAYA BINTI MUHAMAD,620101038014,1117932057,324 +644,MAHARI BUKHARI BIN MAT,891115035169,145161951,325 +645,MOHAMAD AZUHAIDIE BIN AHMAD,940801035677,145116331,326 +646,MOHD ZULKIFLIE BIN MOHD ZAIN,841120035977,139559841,327 +647,IRMA SYUHADA BT IBRAHIM,840229145446,139403344,328 +648,MUHAMMAD SHAKIL BIN HAMIDIN,901226035221,179864356,329 +649,MARIATI BINTI MADAN,850919125118,198122726,330 +650,NOOR ATIQAH BT AHMAD,881228125268,102025862,331 +652,WAN MANITA BT HAMAD@ WAN MOHD,890711035662,179545432,332 +653,WAN NURHAFIZOL BIN WAN MANSOR,850127035739,179676792,333 +654,LUQMAN HAKIM BIN MOHD YAHAYA,911129035421,193458235,334 +655,MUHAMAD ASYWAM BIN A'SRI,940908036063,199016835,335 +656,MOHD HISYAM KHAIRIE BIN MOHD YUSNI,900713035689,132829323,336 +657,WAN NURUL AMIRA BINTI WAN HARON,881119035132,1110764243,337 +658,MOHD ZARIM BIN MOHD ZAMRI,930609125147,143595362,338 +659,MUHAMMAD FAIZUL HAKIMI BIN MUSTAPA,880711035225,197523023,339 +660,MOHD FAHMIE BIN ZAKARIA,910721036285,1116507469,340 +661,PG. SITI KADIZAH BINTI PG. ABDULLAH,800705125272,146510936,341 +662,SAFITERI BINTI TARNO,901121125730,168137928,342 +663,MUHAMMAD KHAIRUL AMIRIN BIN MOHD ROSLI,940425036165,129536020,343 +664,NUR FAKHIRA BINTI AHMAD KAMIL,950711035138,149693382,344 +665,MUHAMMAD HAZIM BIN MOHD ASRI,950310145475,196154087,345 +666,NURUL HIDAYAH BINTI MUSTAPA@DERAMAN,910729035308,199419472,346 +667,MOHD MUSTAKIM BIN YUSOFF,850213035911,1110814060,347 +668,NORIZAN BINTI AWANG,701017035288,1137589963,348 +669,NAZIRAH BINTI MOHAMED,911116036150,179413710,349 +670,MOHD NAWITAR BIN MOHD,780825035663,179763812,350 +671,WAN NORHISHAM BIN WAN JAAFAR,700908035391,197293648,351 +672,MOHAMAD HAMIRUL BIN HALID,901202146381,195126381,352 +673,MUNAWIR BIN MD NASIR,931019125045,198449355,353 +674,MOHD FHAEIS BIN MUHAMMAD,940413035755,187730960,354 +675,SARIP BIN SALANI,881022125297,168269145,355 +676,WAN AHMAD KAMAL BIN MOHD NOR,930530036037,173267793,356 +677,ABDUL MUHAIMIN BIN AHMAD,891218036009,136444757,357 +678,NUR ALISSYA BINTI MOHD HAZMAN,941128035232,1117806234,358 +679,DATO' DR WAN ZAWAWI BIN WAN ISMAIL,610613035547,199889217,359 +680,ABDUL MUHAIMIN BIN ABDULLAH,870129295153,1128005291,360 +681,FATIN NADIA BINTI ZAIDI,920114036346,199405259,361 +682,MOHAMMAD ASWAT BIN PATEK MOHD,850514065129,129742514,362 +683,ASMADI BIN ABDUL WAHED,900702035683,139072135,363 +684,AHMAD TARZIDIE BIN AB MANAF,851223035055,0112-6018916,364 +685,NURUL ALIA BINTI MOHAMAD KAMAL,940726035326,105705470,365 +686,JUNAIDI BIN BAKRI,890128125249,1136662466,366 +687,ASHIKIN ABDULLAH,590406035258,1111420604,367 +688,NIK NUREN SYAFIKAH BT NIK MOHAMED NAZRI,950101035164,179406274,368 +689,NOORHISHAM B. SAMAT @ MAT JURI,751016125447,139449192,369 +690,NIK MOHD NASIRUDDIN BIN NIK COB,740714036093,148007363,370 +691,AB AZIZ BIN YUNUS,600410035193,199891913,371 +692,MOHAMAD HAFIZ BIN CHE SOH,890905035331,199720813,372 +693,NIK NISREEN BT MUHAMMAD FITRI,961201855068,148471010,373 +694,FAIZAL BIN MOKTAR,920721125455,1162289550,374 +695,FATHIAH BT TAIP,921127126396,1133145854,375 +696,ABD MUHAIMIN BIN TURIDI,920126855015,184664503,376 +697,MUHAMMAD HIZHAM BIN ZAKARIA,930817035701,179442383,377 +698,ZALIHA BT MD ZAIN,870215295360,173831225,378 +699,MOHD FADZLI BIN MOHD NASRAH,950712035797,1160860255,379 +700,HASWATI BT KARIMIN,820421036036,1119544351,380 +701,NURATIKAH BINTI AJANI,940111125392,196946450,381 +702,MOHD FADILLAH BIN MATLIN,930711125549,178958563,382 +704,NAFISAH BINTI MUHAMADIN,950827125784,189602088,383 +706,WAN NUR FATIN NATASYA BT W M AZHARI,970113035574,136652264,384 +707,HAZNINA AINI BINTI HASSAN,880608295176,139973524,385 +708,MUHAMAD SHAUQI BIN SHAHAPUDIN,931013036439,148340734,386 +709,NUR FARAHIM BT MOHD OMAR,900427045418,1126220662,387 +710,NORAZRINA BINTI KAMIN,921214125834,128668241,388 +711,MOHD AMIRUDDIN BIN AZAMI,840417025942,137868197,389 +712,SRI NUR FARHANA BINTI KASIM,931114086208,010 8816543,390 +713,NOR AMYLIA EZATY BT ISMAIL,980315036312,142144227,391 +714,WAN NOR IZYAN BINTI WAN HISHAM,990415105986,1140201378,392 +715,U'WAIMAR BIN ZULHAZMI,950819885011,139984700,393 +716,MUHAMMAD AMMAR BIN ISMAIL,203030737,193517702,394 +717,AMIR THAQIF THARIY BIN SHAMSUDDIN,980822036069,1114932463,395 +718,MOHD AIZAD SALIM BIN AGUS SALIM,1126121073,136613176,396 +719,FADZLYEENA BINTI SAIREN,900204126128,149550642,397 +720,NURUL AIN IZAZI BINTI ABD AZIZ,10528030056,1112908502,398 +721,ARMAN SHARIF IBRAHIM BIN HISHAMUDIN,990624106475,129018250,399 +722,MUHAMMAD AFIQ BIN HAMZAH,910130035045,1159983870,400 +723,ZULKIFLI BIN AB HAMID,850102035679,179475958,401 +724,MUHAMAD AIMAN BIN MAZLAN,990808035309,138399913,402 +725,MOHAMAD HAFIZUDIN BIN ABDUL SATAR,910917035997,139577319,403 +726,ZULIYANA BINTI TAJUDIN,911117015992,197591920,404 +727,WAN MUHAMMAD SHAHRIL BIN WAN MOHD FADZLI,970824036039,143342577,405 +728,MUHAMMAD AIMAN HAKIM BIN MOHD RODHI,961010465075,105116144,406 +729,WAM MUHAMMAD JAMALUL'AQIL BIN WAN ZAKARIA,961117036035,169315308,407 +730,MUHAMMAD YAZID BIN OSMAN,20506040041,165276449,408 +731,PUTERI NUR AISHAH BINTI WAGIMIN,20528010740,177315254,409 +732,NURFARHANA BINTI ALIRNOR,911112065034,148160691,410 +733,AHMAD SUHAIL IRFAN BIN ZAMRI,10629030979,129607215,411 +734,NUR HUSNINA BT LUKMAN,961226035322,199652655,412 +735,CHE SOH B HASSAN,591010035395,139070565,413 +736,NUR MUZIERA SHAZRINA BINTI MUHAMAD,1024030736,172604369,414 +737,FAZILA BINTI TOMAS,951226126794,1169309126,415 +738,RIDZUAN BIN AMRAN,911118125691,1173376044,416 From 42c2c80726a6b979cbb35ef5512f96e681eabfbd Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Mon, 10 Nov 2025 23:02:30 +0800 Subject: [PATCH 107/117] comment command import csv --- app/Console/Kernel.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 1d236f5..9308414 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -24,7 +24,7 @@ class Kernel extends ConsoleKernel Commands\ClearCachesAll::class, Commands\RestartSupervisor::class, Commands\InsertSempornaData::class, - Commands\ImportCsv::class, + //Commands\ImportCsv::class, ]; From 0aaf81f1cb347b4c00ab847542be2ab12becd2d5 Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Tue, 11 Nov 2025 00:05:33 +0800 Subject: [PATCH 108/117] fix url lelong --- app/Http/Controllers/LelongController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/LelongController.php b/app/Http/Controllers/LelongController.php index 909391c..b30badd 100644 --- a/app/Http/Controllers/LelongController.php +++ b/app/Http/Controllers/LelongController.php @@ -607,7 +607,7 @@ class LelongController extends Controller if(env('APP_ENV') != 'production'){ $link = 'http://niklah.arrahn.com.my/api/portalApi'; }else{ - $link = 'http://adminbid.arrahn/api/portalApi'; + $link = 'https://https://adminbid-kopkb.erahn.com.my/api/portalApi'; } $lelong = Http::withOptions(['verify' => true])->get($link,[ From f998d6e7dc1d0821836d7ff1108a5b565b69cfa9 Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Tue, 11 Nov 2025 00:08:26 +0800 Subject: [PATCH 109/117] fix error url lelong --- app/Http/Controllers/LelongController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/LelongController.php b/app/Http/Controllers/LelongController.php index b30badd..65f8b22 100644 --- a/app/Http/Controllers/LelongController.php +++ b/app/Http/Controllers/LelongController.php @@ -607,7 +607,7 @@ class LelongController extends Controller if(env('APP_ENV') != 'production'){ $link = 'http://niklah.arrahn.com.my/api/portalApi'; }else{ - $link = 'https://https://adminbid-kopkb.erahn.com.my/api/portalApi'; + $link = 'https://adminbid-kopkb.erahn.com.my/api/portalApi'; } $lelong = Http::withOptions(['verify' => true])->get($link,[ From da7883919e57362532a19a791d7db47646c2b84f Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Tue, 11 Nov 2025 22:23:37 +0800 Subject: [PATCH 110/117] add column name on operasi approval --- app/Http/Controllers/KelulusanController.php | 64 +++++++++++++------- 1 file changed, 42 insertions(+), 22 deletions(-) diff --git a/app/Http/Controllers/KelulusanController.php b/app/Http/Controllers/KelulusanController.php index 5c21b70..ead5d4d 100644 --- a/app/Http/Controllers/KelulusanController.php +++ b/app/Http/Controllers/KelulusanController.php @@ -231,7 +231,7 @@ class KelulusanController extends Controller 'namaoperasi' => $namaoperasi ]); - // ✅ Kalau LULUS + // Kalau LULUS if ($status == 1) { $kelulusan = MohonAnggota::on($cawangan['mysql']) ->where('nokp', '=', $nokp) @@ -243,14 +243,14 @@ class KelulusanController extends Controller 'updated_at' => $harini, ]); - // 🟢 Update CUSTOMER di pusat (mysql7) + // Update CUSTOMER di pusat (mysql7) Customer::on('mysql7') ->where('kpbaru', '=', $nokp) ->update([ 'tag_anggota' => 1, ]); } - // ❌ Kalau BATAL / TOLAK + // Kalau BATAL / TOLAK else if ($status == 2) { $kelulusan = MohonAnggota::on($cawangan['mysql']) ->where('nokp', '=', $nokp) @@ -663,33 +663,53 @@ public function create(REQUEST $request,$kodcaw,$norujukan,$roles) return response()->json($kelulusan, 200); } - public function listKelulusanAnggota(Request $request){ - - $harini = Carbon::now(); - $harini = new Carbon; - Log::info($request->all()); - $cawangan = Cawangan::on('mysql7')->get(); + public function listKelulusanAnggota(Request $request) +{ + $harini = Carbon::now(); + Log::info($request->all()); + $cawangan = Cawangan::on('mysql7')->get(); - $array_kelulusan = []; + $array_kelulusan = []; - foreach($cawangan as $caw){ - - $kelulusan = MohonAnggota::on($caw['mysql']) - ->where('tarikh', '=', $harini->toDateString()) - ->where('peloperasi', '=', 0) - ->orWhereNull('peloperasi') // Corrected this part + foreach ($cawangan as $caw) { + + $kelulusan = MohonAnggota::on($caw['mysql']) + ->whereDate('tarikh', $harini->toDateString()) + ->where(function ($query) { + $query->where('peloperasi', '=', 0) + ->orWhereNull('peloperasi'); + }) ->orderBy('id', 'desc') ->get(); - if(sizeof($kelulusan) != 0){ - array_push($array_kelulusan,["kelulusanall" => $kelulusan,"cawangan" => $caw['details_caw'],"cawangankod" => $caw['kodcaw']]); - } + if ($kelulusan->isNotEmpty()) { - } + // Kumpul semua nokp daripada senarai kelulusan + $nokpList = $kelulusan->pluck('nokp')->unique()->toArray(); + // Ambil semua nama daripada table customer (main DB) + $customers = Customer::whereIn('kpbaru', $nokpList) + ->pluck('nama', 'kpbaru') + ->toArray(); + + // Masukkan nama ke dalam setiap item kelulusan + $kelulusan = $kelulusan->map(function ($item) use ($customers) { + $item->nama = $customers[$item->nokp] ?? '-'; + return $item; + }); + + // Tambah ke array utama + $array_kelulusan[] = [ + "kelulusanall" => $kelulusan, + "cawangan" => $caw['details_caw'], + "cawangankod" => $caw['kodcaw'] + ]; + } + } + + return response()->json($array_kelulusan, 200); +} - return response()->json($array_kelulusan,200); - } From cb0b80428bdd995b0392bd354a846ac0066c678d Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Thu, 13 Nov 2025 23:33:11 +0800 Subject: [PATCH 111/117] fix kadar upah return 0 --- app/Services/OnePercentServices.php | 39 ++----------------- app/Support/v2/Calculation.php | 59 +++-------------------------- 2 files changed, 9 insertions(+), 89 deletions(-) diff --git a/app/Services/OnePercentServices.php b/app/Services/OnePercentServices.php index ad5b9ff..6e8e834 100644 --- a/app/Services/OnePercentServices.php +++ b/app/Services/OnePercentServices.php @@ -3,7 +3,6 @@ namespace App\Services; use App\KadarUpah; -use App\Customer; class OnePercentServices { @@ -80,43 +79,13 @@ class OnePercentServices return ['keuntungan' => $keuntungan,'onepercent' => $onepercent, 'ujrah' => $ujrah_sebenar]; } -public function getKadarUjrah(float $nilaimarhun = 0.0, $groupid, $nokp = null): float -{ - //Semak status pelanggan dalam table customer - if ($nokp) { - $customer = Customer::on('mysql7') - ->select('tag_anggota') - ->where(function($q) use ($nokp) { - $q->where('kpbaru', $nokp) - ->orWhere('kplama', $nokp); - }) - ->first(); + public function getKadarUjrah(float $nilaimarhun = 0.0, $groupid) : Float{ - // Jika anggota koperasi → kadar tetap - if ($customer && (int)$customer->tag_anggota === 1) { - return 0.16; // kadar ujrah tetap untuk anggota - } + $kadarujrah = KadarUpah::on('mysql7')->select('kadarujrah')->where([['min','<=',$nilaimarhun],['max','>=',$nilaimarhun]])->where('group_id',1)->get()->toArray(); + + return isset($kadarujrah[0]) ? $kadarujrah[0]['kadarujrah'] : 0; } - //Jika bukan anggota → ambil dari jadual kadar_upah - $kadar = KadarUpah::on('mysql7') - ->select('kadarujrah') - ->where([ - ['min', '<=', $nilaimarhun], - ['max', '>=', $nilaimarhun], - ]) - ->where('group_id', $groupid) - ->first(); - - //Jika jumpa kadar dalam jadual - if ($kadar && isset($kadar->kadarujrah)) { - return (float) $kadar->kadarujrah; - } - - //Default fallback - return 0.0; -} - public function getRoundedMethod(float $number = 0.0) : Float{ $number_string = number_format(floor($number * 100)/100,2); diff --git a/app/Support/v2/Calculation.php b/app/Support/v2/Calculation.php index 18f31a6..178b275 100644 --- a/app/Support/v2/Calculation.php +++ b/app/Support/v2/Calculation.php @@ -3,9 +3,6 @@ namespace App\Support\v2; use App\KadarUpah; -use App\Customer; -use Illuminate\Support\Facades\Log; - use Illuminate\Http\Request; class Calculation @@ -61,6 +58,7 @@ class Calculation public function kiraanKeuntunganRebet(float $pembiayaan = 0.0,float $nilaimarhun = 0.0,float $kadarujrah = 0.0,float $margin = 0.0){ $this->one_percent = $this->getKadarUpah($nilaimarhun); + $onepercent = $this->kiraanOnePercent($pembiayaan); $ujrah_sebenar = $this->kiraanUjrahSebenar($nilaimarhun,$kadarujrah,$margin); @@ -85,60 +83,13 @@ class Calculation return ['keuntungan' => $keuntungan,'onepercent' => $onepercent, 'ujrah' => $ujrah_sebenar]; } -public function getKadarUjrah(float $nilaimarhun = 0.0, $groupid, $nokp = null): float -{ - // 1️⃣ Semak status pelanggan dalam table customer - if ($nokp) { - $customer = Customer::on('mysql7') - ->select('tag_anggota') - ->where(function($q) use ($nokp) { - $q->where('kpbaru', $nokp) - ->orWhere('kplama', $nokp); - }) - ->first(); + public function getKadarUjrah(float $nilaimarhun = 0.0, $groupid) : Float{ - // 2️⃣ Jika anggota koperasi → kadar tetap - if ($customer && (int)$customer->tag_anggota === 1) { - Log::info('[DEBUG-UJRAH] Anggota koperasi', [ - 'nokp' => $nokp, - 'kadarujrah' => 0.16, - 'groupid' => $groupid, - 'nilaimarhun' => $nilaimarhun, - ]); - return 0.16; - } + $kadarujrah = KadarUpah::on('mysql7')->select('kadarujrah')->where([['min','<=',$nilaimarhun],['max','>=',$nilaimarhun]])->where('group_id',$groupid)->get()->toArray(); + + return isset($kadarujrah[0]) ? $kadarujrah[0]['kadarujrah'] : 0; } - // 3️⃣ Jika bukan anggota → ambil dari jadual kadar_upah - $kadar = KadarUpah::on('mysql7') - ->select('kadarujrah') - ->where([ - ['min', '<=', $nilaimarhun], - ['max', '>=', $nilaimarhun], - ]) - ->where('group_id', $groupid) - ->first(); - - if ($kadar && isset($kadar->kadarujrah)) { - Log::info('[DEBUG-UJRAH] Bukan anggota - dari jadual kadar_upah', [ - 'nokp' => $nokp, - 'kadarujrah' => (float)$kadar->kadarujrah, - 'groupid' => $groupid, - 'nilaimarhun' => $nilaimarhun, - ]); - return (float) $kadar->kadarujrah; - } - - // 4️⃣ Default fallback - Log::info('[DEBUG-UJRAH] Tiada kadar ditemui', [ - 'nokp' => $nokp, - 'groupid' => $groupid, - 'nilaimarhun' => $nilaimarhun, - ]); - return 0.0; -} - - public function getKadarUpah(float $nilaimarhun = 0.0){ $kadarupah = KadarUpah::on('mysql7')->where([['min','<=',$nilaimarhun],['max','>=',$nilaimarhun]])->where('group_id',1)->first(); From bc95a600090422f3d308ec4e8aa2e5de6aee7470 Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Tue, 18 Nov 2025 00:30:36 +0800 Subject: [PATCH 112/117] put excpetion if kadar upah = 0 --- app/Support/v2/GadaiV2.php | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/app/Support/v2/GadaiV2.php b/app/Support/v2/GadaiV2.php index b0af4af..4dac90e 100644 --- a/app/Support/v2/GadaiV2.php +++ b/app/Support/v2/GadaiV2.php @@ -108,8 +108,19 @@ class GadaiV2 $total_nilai_marhun = Marhun::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->sum('n_marhun'); $total_berat = Marhun::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->sum('berat'); - //query kadar upah baru - $kadar_raw = $this->getKadarUpahAnggota($request->nokp,$total_nilai_marhun,$cawangan['group_id']); + $kadar_raw = $this->getKadarUpahAnggota($request->nokp, $total_nilai_marhun, $cawangan['group_id']); + + if (empty($kadar_raw) || $kadar_raw == 0) { + + Log::error('[BLOCKED] Kadar upah kosong / 0', [ + 'nokp' => $request->nokp, + 'total_nilai_marhun' => $total_nilai_marhun, + 'group_id' => $cawangan['group_id'], + ]); + + throw new \Exception("Kadar upah kosong / 0, transaksi dibatalkan!"); + } + // query kadar upah lama // $kadar_raw = KadarUpah::where('min','<=',$total_nilai_marhun)->where('max','>=',$total_nilai_marhun)->first(); From 2451969c888f68295ae27502d1d5479a49abf902 Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Sun, 14 Dec 2025 10:37:29 +0800 Subject: [PATCH 113/117] disable logs kadar anggota --- app/Support/OnePercent.php | 10 +++++----- app/Support/v2/GadaiV2.php | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/Support/OnePercent.php b/app/Support/OnePercent.php index 941b245..2133931 100644 --- a/app/Support/OnePercent.php +++ b/app/Support/OnePercent.php @@ -65,11 +65,11 @@ class OnePercent extends MasterServices public function getKadarUjrah(HttpRequest $request) { - Log::info('[DEBUG-CONTROLLER] Data request', [ - 'nokp' => $request->nokp, - 'kodcaw' => $request->kodcaw, - 'nilaimarhun' => $request->nilaimarhun - ]); + // Log::info('[DEBUG-CONTROLLER] Data request', [ + // 'nokp' => $request->nokp, + // 'kodcaw' => $request->kodcaw, + // 'nilaimarhun' => $request->nilaimarhun + // ]); $cawangan = Cawangan::on('mysql7')->where('kodcaw', $request->kodcaw)->first(); $onePercentServices = new Calculation(); diff --git a/app/Support/v2/GadaiV2.php b/app/Support/v2/GadaiV2.php index 4dac90e..bab4e6e 100644 --- a/app/Support/v2/GadaiV2.php +++ b/app/Support/v2/GadaiV2.php @@ -59,7 +59,7 @@ class GadaiV2 } private function getKadarUpahAnggota($nokp,$total_nilai_marhun = 0,$groupid = 2) : Float{ - Log::info('DEBUG NOKP:' . $nokp); + //Log::info('DEBUG NOKP:' . $nokp); if($nokp){ $customer = Customer::on('mysql7') ->select('tag_anggota') From b8cf2a172d1c9ed6ad122de4e0581eb2927e9bd1 Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Thu, 18 Dec 2025 10:54:32 +0800 Subject: [PATCH 114/117] fix bilangan pelanggan baru on report terkumpul --- app/Http/Controllers/LaporanController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/LaporanController.php b/app/Http/Controllers/LaporanController.php index 5b6e285..11b340f 100644 --- a/app/Http/Controllers/LaporanController.php +++ b/app/Http/Controllers/LaporanController.php @@ -846,7 +846,8 @@ $date = new Carbon($request->tarikh); $bilangan_gadai = $gadai->count(); $bilangan_tebus = $tebus->count(); // $bilangan_ansuran = $ansuran->count(); - $bilangan_customer_baru = Customer::on($cawangan['mysql'])->where([['tarikhdaftar','>=',$request->mula],['tarikhdaftar','<=',$request->akhir]])->count(); + //$bilangan_customer_baru = Customer::on($cawangan['mysql'])->where([['tarikhdaftar','>=',$request->mula],['tarikhdaftar','<=',$request->akhir]])->count(); + $bilangan_customer_baru = Customer::on('mysql7')->where([['tarikhdaftar','>=',$request->mula],['tarikhdaftar','<=',$request->akhir]])->count(); //f $data_lelong = Lelong::on($cawangan['mysql'])->where([['t_jual','>=',$request->mula],['t_jual','<=',$request->akhir]])->get(); From 043c1fa83b9914bb3663838c033f566c40a70fc3 Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Tue, 23 Dec 2025 10:21:02 +0800 Subject: [PATCH 115/117] include lahad datu on report stok audit --- config/report.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/config/report.php b/config/report.php index 6a5ba4f..0aa77b7 100644 --- a/config/report.php +++ b/config/report.php @@ -1,7 +1,5 @@ [ - 'lahad datu', - ] + 'excluded_cawangan' => [] ]; From eb47c2a9bcfc8cc096f498645aac127c442fade3 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 26 Aug 2026 15:40:26 +0800 Subject: [PATCH 116/117] latest stable version --- app/Http/Controllers/AdminPageController.php | 325 ++++++++++++++++-- app/Http/Controllers/LaporanController.php | 2 +- app/Http/Controllers/LelongController.php | 2 +- app/Http/Controllers/MarhunController.php | 4 +- .../Controllers/Reports/GadaianController.php | 2 +- app/Services/Reports/OnePercentService.php | 2 +- 6 files changed, 306 insertions(+), 31 deletions(-) diff --git a/app/Http/Controllers/AdminPageController.php b/app/Http/Controllers/AdminPageController.php index 4f59be5..64049a1 100644 --- a/app/Http/Controllers/AdminPageController.php +++ b/app/Http/Controllers/AdminPageController.php @@ -30,6 +30,7 @@ use App\Status; use App\LookupStatus; use App\ARFiles; use App\WTDDraft; +use App\WTDSimulasi; use App\SerahBaki; use App\WTD; use App\StokAudit1; @@ -62,7 +63,6 @@ use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; use App\Jobs\AccountCheckJob; -use App\Penyelarasan; use Illuminate\Support\Str; use Illuminate\Support\Facades\Cache; @@ -2364,19 +2364,84 @@ class AdminPageController extends Controller $cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first(); - $latestbatch = SerahBaki::on($cawangan['mysql'])->where('norujukan','baru')->get()->toArray(); + //$latestbatch = SerahBaki::on($cawangan['mysql'])->where('norujukan','baru')->get()->toArray(); + //new added + $serahBaki = SerahBaki::on($cawangan['mysql']) + ->where('norujukan', 'baru') + ->get(); + + $allBatchNo = $serahBaki->pluck('batchno')->unique()->toArray(); + + $wtddraftData = WTDDraft::on('mysql7') + ->selectRaw(" + batchno_serah, + YEAR(t_jual) as tahun, + GROUP_CONCAT( + DISTINCT MONTH(t_jual) + ORDER BY MONTH(t_jual) + SEPARATOR ',' + ) as bulan + ") + ->where('kodcaw', $request->kodcaw) + ->whereIn('batchno_serah', $allBatchNo) + ->groupBy('batchno_serah', DB::raw('YEAR(t_jual)')) + ->get() + ->groupBy('batchno_serah') + ->map(function ($rows) { + return $rows->map(function ($row) { + return [ + 'tahun' => $row->tahun, + 'bulan' => $row->bulan + ]; + })->values(); + }); + + $finalData = $serahBaki->map(function ($item) use ($wtddraftData) { + $batchno = $item->batchno; + + $tahun = null; + $bulan = []; + + if (!empty($wtddraftData[$batchno])) { + // ambil tahun pertama (kebiasaannya satu tahun sahaja) + $tahun = $wtddraftData[$batchno][0]['tahun']; + + // convert string "2,3,4,5" → array + $bulan = explode(',', $wtddraftData[$batchno][0]['bulan']); + } + + return [ + 'batchno' => $batchno, + 'norujukan' => $item->norujukan, + 'tarikh' => $item->tarikh, + 't_jual' => $item->t_jual, + 'baki' => $item->baki, + 't_htr_ag' => $item->t_htr_ag, + 'aktif' => $item->aktif, + 'tahun' => $tahun, + 'bulan' => implode(',',$bulan), + // field lain kekal + ]; + }); + + $finalDataArray = $finalData->toArray(); + //end new added + $batch_old = WTDDraft::on('mysql7')->select('kodcaw')->where('batchno_serah',0)->where('kodcaw',$request->kodcaw) ->groupBy('kodcaw')->get(); $batch_old_noruj = WTDDraft::on('mysql7')->where('batchno_serah',0)->where('kodcaw',$request->kodcaw)->pluck('norujukan'); $lelong_data = Lelong::on($cawangan['mysql'])->whereIn('norujukan',$batch_old_noruj)->get(); - + foreach($batch_old as $index=>$bo) { - array_push($latestbatch,['recno' => 0,'norujukan' => 'lama','batchno' => 0,'baki' => $lelong_data->sum('baki'),'aktif' => 1]); + //array_push($latestbatch,['recno' => 0,'norujukan' => 'lama','batchno' => 0,'baki' => $lelong_data->sum('baki'),'aktif' => 1]); + array_push($finalDataArray,['recno' => 0,'norujukan' => 'lama','batchno' => 0,'baki' => $lelong_data->sum('baki'),'aktif' => 1]); + } - $data = $this->paginate($latestbatch,8); + //$data = $this->paginate($latestbatch,8); + $data = $this->paginate($finalDataArray,8); return response()->json($data,200); @@ -2698,8 +2763,9 @@ class AdminPageController extends Controller 't_update' => $current->toDateString())); } - $serahbakiupdate = SerahBaki::on($cawangan['mysql'])->where('batchno',$batchno)->update(array('aktif' => 1,'t_jual' => $current->toDateString(),'nopelanggan' => $request->nocek));; - + //$serahbakiupdate = SerahBaki::on($cawangan['mysql'])->where('batchno',$batchno)->update(array('aktif' => 1,'t_jual' => $current->toDateString(),'nopelanggan' => $request->nocek));; + $serahbakiupdate = SerahBaki::on($cawangan['mysql'])->where('batchno',$batchno)->update(array('aktif' => 1,'t_jual' => $current->toDateString(),'nopelanggan' => $request->nocek,'t_htr_ag' => $request->tarikhAG)); + return response()->json('success',200); }catch (\Throwable $e){ @@ -3160,8 +3226,6 @@ class AdminPageController extends Controller return response()->json($customers); } - - public function AkruKeuntunganSebenar(Request $request){ @@ -3760,16 +3824,16 @@ class AdminPageController extends Controller $get_imbangduga = imbangdugabackup::on($cawangan['mysql'])->where('tarikh', $lastDayOfYear)->first(); $get_imbangduga = optional($get_imbangduga)->toArray() ?? []; - if(empty($get_imbangduga)){ - $requestData = new Request([ - 'tarikh' => $request->tarikh, - 'kodcaw' => $kodcaw, - ]); - $exception_case = $this->AkruKeuntunganSebenar($requestData); - } + // if(empty($get_imbangduga)){ + // $requestData = new Request([ + // 'tarikh' => $request->tarikh, + // 'kodcaw' => $kodcaw, + // ]); + // $exception_case = $this->AkruKeuntunganSebenar($requestData); + // } $backdate_keun_sebenar += isset($get_imbangduga['keun_sebenar']) ? $get_imbangduga['keun_sebenar'] : 0; - $backdate_keun_sebenar += $exception_case; + $backdate_keun_sebenar += (float) ($exception_case ?? 0); $recentDate->subYear()->startOfYear(); } @@ -3785,14 +3849,7 @@ class AdminPageController extends Controller $total = ($utgrugilama + $lelong + $upahsimpantebus + $upahsimpanlelong + $upahsimpanansur + $gstcajlelong + $keuntungansebenar + $upahsimpankeuntungansebelumtawarruq + $available_akru + $total_keuntungan_sebenar + $akru_ujrah + $akru_1percent) + $parameter; if($kodcaw == '011229') - $total -= 45390.37; - - if($kodcaw == 'KB2') - $total -= 64.8; - - $total += Penyelarasan::on('mysql7') - ->where('kodcaw', $kodcaw) - ->sum(DB::raw('rugilelong + bakilelong + `lain-lain`')); + $total -= 45390.37; return response()->json($total,200); } @@ -3965,4 +4022,222 @@ class AdminPageController extends Controller 'result' => $status === 'completed' ? $result : null, ]); } + + //function wtd baru + public function janaSimulasiWTD(Request $request) + { + $cawangan = Cawangan::on('mysql7')->where('kodcaw', '=', $request->kodcaw)->first(); + + //listing sag belum tuntut cwgn + $sag_cwgn = collect( + Lelong::on($cawangan['mysql']) + ->selectRaw('norujukan') + ->whereYear('t_jual', $request->tahun) + ->whereNull('trkhtuntut') + ->where('baki', '>', 0) + ->pluck('norujukan') // lebih bersih + ); + + //listing sag blocked + $sag_online = collect( + WTDDraft::on('mysql7') + ->selectRaw('norujukan') + ->where('kodcaw', '=', $request->kodcaw) + ->pluck('norujukan') + ); + //dd($sag_online); + //filter sag yg tk wujud dlm wtd_draft + $filtersag = $sag_cwgn->diff($sag_online); + + //query baru + $tarikh_belum_tuntut = Lelong::on($cawangan['mysql']) + ->selectRaw(' + MONTH(t_jual) as bulan, + SUM(pinjaman) as pembiayaan, + ABS(SUM(baki)) as baki, + COUNT(DISTINCT norujukan) as jumlah_norujukan, + kodcaw + ') + ->whereIn('norujukan', $filtersag) + ->groupBy('bulan', 'kodcaw') + ->orderBy('bulan') + ->get(); + + $tarikh_belum_tuntut = $tarikh_belum_tuntut->map(function ($item) { + $item->bulan = \Carbon\Carbon::create()->month($item->bulan)->format('F'); + return $item; + }); + + return response()->json($tarikh_belum_tuntut); + } + + public function RekodSimulasiWTD(Request $request) + { + $cawangan = Cawangan::on('mysql7')->where('kodcaw', '=', $request->kodcaw)->first(); + + $rekod_simulasi = Lelong::on($cawangan['mysql']) + ->join('gadai','lelong.norujukan','=','gadai.norujukan') + ->selectRaw('ABS(lelong.baki) as baki, lelong.t_lelong, lelong.pinjaman, lelong.norujukan, gadai.nokp') + ->whereMonth('lelong.t_jual', $request->month) + ->whereYear('lelong.t_jual', $request->year) + ->whereNull('lelong.trkhtuntut') + ->where('lelong.baki', '>', 0) + ->get(); + + return response()->json($rekod_simulasi); + } + + public function prosesSimulasiWTD(Request $request) + { + $proses = $request->input; + + // dd($proses, $cawangan); + + $baki = 0; + $jumlahPembiayaan = 0; + $simulasi = WTDSimulasi::max('simulasi')+1; + + foreach ($proses as $item) { + WTDSimulasi::create([ + 'bulan' => $item['bulan'], + 'tahun' => $item['tahun'], + 'kodcaw' => $item['kodcaw'], + 'jumlah_sag' => $item['jumlah_sag'], + 'pembiayaan'=> $item['pembiayaan'], + 'baki'=> $item['baki'], + 'simulasi' => $simulasi, + ]); + $baki += $item['baki']; + $jumlahPembiayaan = $item['pembiayaan']; + } + + return response()->json(['status' => 'success','simulasi' => $simulasi,'baki' => $baki,'pinjaman' => $jumlahPembiayaan]); + } + + public function pengesahanSimulasiWTD(Request $request) + { + // Decode the JSON records from the request + $records = json_decode($request->records, true); + + // Retrieve and clean 'kodcaw' from the request + $kodcaw = $request->kodcaw; + $kodcaw_clean = str_replace('"', '', $kodcaw); + + // Get the database connection for the branch (cawangan) + $cawangan = Cawangan::where('kodcaw', $kodcaw_clean)->first(); + + // Check if 'Cawangan' exists + if (!$cawangan) { + return response()->json(['status' => 'error', 'message' => 'Invalid branch code (kodcaw).'], 404); + } + + $cawangan_connection = $cawangan->mysql; + + // Get the latest batch number and increment it + $latestBatch = SerahBaki::on($cawangan_connection)->max('batchno') + 1; + + // Initialize total variables + $totalPembiayaan = 0; + $totalBaki = 0; + + + try { + // Iterate through the records and save them to the WTDDraft table + foreach ($records as $record) { + // Check if 'bulan' and 'tahun' exist in the record + if (!isset($record['bulan']) || !isset($record['tahun'])) { + return response()->json(['status' => 'error', 'message' => 'Missing bulan or tahun in records.'], 400); + } + $month = DateTime::createFromFormat('F', $record["bulan"])->format('n'); + + + // Query norujukan records from the database + $query_norujukan = Lelong::on($cawangan_connection) + ->join('gadai', 'lelong.norujukan', '=', 'gadai.norujukan') + ->selectRaw('ABS(lelong.baki) as baki, lelong.t_lelong, lelong.pinjaman, lelong.norujukan, gadai.nokp, lelong.t_jual') + ->whereMonth('lelong.t_jual', $month) + ->whereYear('lelong.t_jual', $record["tahun"]) + ->whereNull('lelong.trkhtuntut') + ->where('lelong.baki', '>', 0) + ->get(); + + // Save each record to the WTDDraft table + foreach ($query_norujukan as $query) { + $wtddraft = new WTDDraft(); + $wtddraft->nokp = $query['nokp']; + $wtddraft->kodcaw = $kodcaw_clean; + $wtddraft->norujukan = $query['norujukan']; + $wtddraft->t_jual = $query['t_jual']; + $wtddraft->t_gadai = $query['t_gadai'] ?? null; // Optional: ensure 't_gadai' exists + $wtddraft->t_lelong = $query['t_lelong']; + $wtddraft->batchno_serah = $latestBatch; + $wtddraft->save(); + } + + // Accumulate totals + $totalPembiayaan += $record['pembiayaan'] ?? 0; + $totalBaki += $record['baki'] ?? 0; + } + + // Create a new record in the SerahBaki table + SerahBaki::on($cawangan_connection)->create([ + 'norujukan' => 'baru', + 'batchno' => $latestBatch, + 'hargajual' => 0.00, + 'pinjaman' => $totalPembiayaan, + 'upah' => 0.00, + 'cajlel' => 0.00, + 'gst_cl' => 0.00, + 'gst_hj' => 0.00, + 'baki' => $totalBaki, + 'tarikh' => Carbon::now()->toDateString(), + 't_jual' => Carbon::now()->toDateString(), + 'nopelanggan' => '', + 'aktif' => 0, + ]); + + // Return a success response with the new batch number + return response()->json(['status' => 'success', 'batchno' => $latestBatch], 200); + + } catch (\Throwable $e) { + // Log the error and return a failure response + Log::error($e->getMessage()); + Log::error($e->getLine()); + return response()->json(['status' => 'error', 'message' => $e->getMessage()], 500); + } + } + + + + public function simulasiToDraft(Request $request) + { + $bulan = $request->bulan; + + if (!$bulan || count($bulan) === 0) { + return response()->json(['error' => 'Sila pilih sekurang-kurangnya satu bulan.'], 400); + } + + $simulasi = WTDSimulasi::whereIn('bulan', $bulan)->get(); + + if ($simulasi->isEmpty()) { + return response()->json(['error' => 'Tiada data untuk bulan yang dipilih.'], 404); + } + + // foreach ($simulasi as $data) { + // WTDDraft::create([ + // 'nokp' => $data->nokp ?? null, + // 'kodcaw' => $data->kodcaw ?? null, + // 'norujukan' => $data->norujukan ?? null, + // 't_jual' => $data->t_jual ?? null, + // 't_gadai' => $data->t_gadai ?? null, + // 't_lelong' => $data->t_lelong ?? null, + // 'batchno_serah' => $data->simulasi, // Simpan sebagai rujukan + // ]); + // } + + //dd($bulan, $simulasi); + + return response()->json(['message' => 'Data berjaya dipindahkan ke WTD Draft!']); + + } } diff --git a/app/Http/Controllers/LaporanController.php b/app/Http/Controllers/LaporanController.php index 11b340f..71c951f 100644 --- a/app/Http/Controllers/LaporanController.php +++ b/app/Http/Controllers/LaporanController.php @@ -847,7 +847,7 @@ $date = new Carbon($request->tarikh); $bilangan_tebus = $tebus->count(); // $bilangan_ansuran = $ansuran->count(); //$bilangan_customer_baru = Customer::on($cawangan['mysql'])->where([['tarikhdaftar','>=',$request->mula],['tarikhdaftar','<=',$request->akhir]])->count(); - $bilangan_customer_baru = Customer::on('mysql7')->where([['tarikhdaftar','>=',$request->mula],['tarikhdaftar','<=',$request->akhir]])->count(); + $bilangan_customer_baru = Customer::on('mysql7')->whereBetween('tarikhdaftar', [$request->mula, $request->akhir])->where('kodcaw', $request->kodcaw)->count(); //f $data_lelong = Lelong::on($cawangan['mysql'])->where([['t_jual','>=',$request->mula],['t_jual','<=',$request->akhir]])->get(); diff --git a/app/Http/Controllers/LelongController.php b/app/Http/Controllers/LelongController.php index 65f8b22..2fadd77 100644 --- a/app/Http/Controllers/LelongController.php +++ b/app/Http/Controllers/LelongController.php @@ -605,7 +605,7 @@ class LelongController extends Controller if($cawangan['tagarrahnbid'] == 1){ if(env('APP_ENV') != 'production'){ - $link = 'http://niklah.arrahn.com.my/api/portalApi'; + $link = 'https://adminbid-kopkb.erahn.com.my/api/portalApi'; }else{ $link = 'https://adminbid-kopkb.erahn.com.my/api/portalApi'; } diff --git a/app/Http/Controllers/MarhunController.php b/app/Http/Controllers/MarhunController.php index 8c8a7b7..53c44d3 100644 --- a/app/Http/Controllers/MarhunController.php +++ b/app/Http/Controllers/MarhunController.php @@ -203,7 +203,7 @@ class MarhunController extends Controller $marhun = Marhun::on($cawangan['mysql']) ->select('marhun.norujukan','gadai.nokp','customer.nama','marhun.marhun','marhun.nota','marhun.berat','marhun.karat','marhun.harga','marhun.n_marhun','marhun.t_gadai','marhun.tag_permata', 'marhun.berat_batu_permata') ->rightJoin('gadai', 'gadai.norujukan', '=', 'marhun.norujukan') - ->rightJoin('online_arrahn.customer as customer', 'customer.kpbaru','=','gadai.nokp') + ->rightJoin('master_erahn.customer as customer', 'customer.kpbaru','=','gadai.nokp') ->where('marhun.t_gadai','=',$tarikh) ->orderBy('marhun.t_gadai') ->get(); @@ -221,7 +221,7 @@ class MarhunController extends Controller $marhun = Marhun::on($cawangan['mysql']) ->select('marhun.norujukan','gadai.sttebus','gadai.pinjaman','gadai.nokp','customer.nama','marhun.marhun','marhun.nota','marhun.berat','marhun.karat','marhun.harga','marhun.n_marhun','marhun.t_gadai') ->rightJoin('gadai', 'gadai.norujukan', '=', 'marhun.norujukan') - ->rightJoin('online_arrahn.customer as customer', 'customer.kpbaru','=','gadai.nokp') + ->rightJoin('master_erahn.customer as customer', 'customer.kpbaru','=','gadai.nokp') ->where('marhun.t_gadai','<=',$tarikh) ->whereYear('marhun.t_gadai','=',$current->year) ->where('gadai.sttebus','=','') diff --git a/app/Http/Controllers/Reports/GadaianController.php b/app/Http/Controllers/Reports/GadaianController.php index 301905f..abc8104 100644 --- a/app/Http/Controllers/Reports/GadaianController.php +++ b/app/Http/Controllers/Reports/GadaianController.php @@ -48,7 +48,7 @@ class GadaianController extends Controller $summary_gadaian_data = array_map(function ($db_connection) use ($request) { $query = Gadai::on($db_connection); - $query->select(DB::raw('count(norujukan) as total_gadaian, sum(berat) as sum_berat, sum(nilaimarhun) as sum_nilai_marhun, sum(pinjaman) as sum_pinjaman')); + $query->select(DB::raw('count(norujukan) as total_gadaian, sum(berat) as sum_berat, sum(nilaimarhun) as sum_nilai_marhun, sum(pinjaman) as sum_pinjaman, sum(upah12) as sum_upah_12')); $query->when($request->filled('startDate') and $request->filled('endDate'), function ($q) use ($request) { return $q->where('t_gadai', '>=', $request->startDate) diff --git a/app/Services/Reports/OnePercentService.php b/app/Services/Reports/OnePercentService.php index c747c07..5abfcde 100644 --- a/app/Services/Reports/OnePercentService.php +++ b/app/Services/Reports/OnePercentService.php @@ -398,7 +398,7 @@ class OnePercentService $t_gadai = Carbon::parse($gadai->t_gadai); $t_bayaran = Carbon::parse($trans->tarikh_bayaran); - if ($t_gadai->month === $t_bayaran->month && $t_gadai->year === $t_bayaran->year) { + if (($t_gadai->month == $t_bayaran->month) && ($t_gadai->year == $t_bayaran->year)) { return false; }else{ return true; From f6b036976fc32a1c361ca551bd19426e19400814 Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Wed, 26 Aug 2026 22:57:52 +0800 Subject: [PATCH 117/117] change kadar anggota to 1% --- app/Support/v2/GadaiV2.php | 70 ++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/app/Support/v2/GadaiV2.php b/app/Support/v2/GadaiV2.php index bab4e6e..b3febe1 100644 --- a/app/Support/v2/GadaiV2.php +++ b/app/Support/v2/GadaiV2.php @@ -58,31 +58,34 @@ class GadaiV2 } } - private function getKadarUpahAnggota($nokp,$total_nilai_marhun = 0,$groupid = 2) : Float{ - //Log::info('DEBUG NOKP:' . $nokp); - if($nokp){ - $customer = Customer::on('mysql7') - ->select('tag_anggota') - ->where(function($q) use ($nokp) { - $q->where('kpbaru', $nokp) - ->orWhere('kplama', $nokp); - }) - ->first(); - $customer = $customer ? $customer->toArray() : []; - if(isset($customer) && $customer['tag_anggota'] == 1){ - return 0.16; - }else{ - return KadarUpah::where('min', '<=', $total_nilai_marhun) - ->where('max', '>=', $total_nilai_marhun) - ->where('group_id', $groupid) - ->value('kadarujrah'); - } - } - - return 0.0; - + private function getKadarUpahAnggota($nokp, $total_nilai_marhun = 0, $groupid = 2): ?float +{ + if (!$nokp) { + return null; // tiada nokp = tak boleh tentukan kadar } + $customer = Customer::on('mysql7') + ->select('tag_anggota') + ->where(function ($q) use ($nokp) { + $q->where('kpbaru', $nokp) + ->orWhere('kplama', $nokp); + }) + ->first(); + + $customer = $customer ? $customer->toArray() : []; + + if (isset($customer['tag_anggota']) && $customer['tag_anggota'] == 1) { + return 0.00; // ahli — kadar 0.00 memang sah + } + + $kadar = KadarUpah::where('min', '<=', $total_nilai_marhun) + ->where('max', '>=', $total_nilai_marhun) + ->where('group_id', $groupid) + ->value('kadarujrah'); + + return is_null($kadar) ? null : (float) $kadar; // tak jumpa row = null (block) +} + public function createMarhun($norujukan,HttpRequest $request){ $current = Carbon::now(); $current = new Carbon(); @@ -108,19 +111,18 @@ class GadaiV2 $total_nilai_marhun = Marhun::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->sum('n_marhun'); $total_berat = Marhun::on($cawangan['mysql'])->where('norujukan','=',$norujukan)->sum('berat'); - $kadar_raw = $this->getKadarUpahAnggota($request->nokp, $total_nilai_marhun, $cawangan['group_id']); + $kadar_raw = $this->getKadarUpahAnggota($request->nokp, $total_nilai_marhun, $cawangan['group_id']); - if (empty($kadar_raw) || $kadar_raw == 0) { - - Log::error('[BLOCKED] Kadar upah kosong / 0', [ - 'nokp' => $request->nokp, - 'total_nilai_marhun' => $total_nilai_marhun, - 'group_id' => $cawangan['group_id'], - ]); - - throw new \Exception("Kadar upah kosong / 0, transaksi dibatalkan!"); - } +if (is_null($kadar_raw)) { + Log::error('[BLOCKED] Kadar upah tidak dijumpai', [ + 'nokp' => $request->nokp, + 'total_nilai_marhun' => $total_nilai_marhun, + 'group_id' => $cawangan['group_id'], + ]); + throw new \Exception("Kadar upah tidak dijumpai, transaksi dibatalkan!"); +} +// $kadar_raw = 0.00 (ahli) akan lepas ke sini dan diteruskan // query kadar upah lama // $kadar_raw = KadarUpah::where('min','<=',$total_nilai_marhun)->where('max','>=',$total_nilai_marhun)->first();