From 1075d7d585bfc5612b41d24c5d55aebcf824268c Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Mon, 10 Nov 2025 18:51:01 +0800 Subject: [PATCH 01/18] 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 02/18] 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 03/18] 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 04/18] 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 05/18] 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 06/18] 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 07/18] 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 08/18] 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 09/18] 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 10/18] 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 11/18] 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 12/18] 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 13/18] 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 14/18] 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 15/18] 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 e1878e31e416a2a5689459dc73cab80aa86adfed Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Sun, 14 Jun 2026 15:02:45 +0800 Subject: [PATCH 16/18] pdpa for koperasi --- app/Http/Controllers/CustomerController.php | 21 +++++++++++++++++++++ routes/web.php | 1 + 2 files changed, 22 insertions(+) diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php index 5b93b81..18d25a2 100644 --- a/app/Http/Controllers/CustomerController.php +++ b/app/Http/Controllers/CustomerController.php @@ -1038,6 +1038,27 @@ class CustomerController extends Controller return response()->json($results); } + public function updateTagPdpa(Request $request) + { + $tarikh_cetak_pdpa = Carbon::now()->toDateString(); + + $no_ic = $request->input('no_ic'); + + $customer = Customer::where('kplama', $no_ic) + ->orWhere('kpbaru', $no_ic) + ->first(); + + if (!$customer) { + return response()->json(['error' => 'Customer not found.'], 404); + } + + $customer->tag_pdpa = $request->input('tag_pdpa'); + $customer->tarikh_cetak_pdpa = $tarikh_cetak_pdpa; + $customer->save(); + + return response()->json(['message' => 'Customer PDPA updated successfully.'], 200); + } + // public function createNotaArcc($kodcaw, Request $request) // { // $current = Carbon::now(); diff --git a/routes/web.php b/routes/web.php index 008c397..fdcefdd 100644 --- a/routes/web.php +++ b/routes/web.php @@ -62,6 +62,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->get('customer/anggota',['uses'=>'CustomerController@anggotaKoperasi']); $router->get('customer/eachcawangan/{ic}',['uses'=>'CustomerController@showCustomerByEachCawangan']); $router->put('customers/{noic}/assign-anggota', ['uses' => 'CustomerController@assignAnggota']); + $router->post('/customers/update-tag-pdpa', ['uses' => 'CustomerController@updateTagPdpa']); //arcc $router->get('customer/searchbyname',['uses'=>'CustomerController@searchByName']); From 237a5aa44be599c1be45dd84ed8807802ff360b9 Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Sun, 14 Jun 2026 15:05:02 +0800 Subject: [PATCH 17/18] fix figure on laporan terkumpul --- app/Http/Controllers/LaporanController.php | 38 ++++++++++++---------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/app/Http/Controllers/LaporanController.php b/app/Http/Controllers/LaporanController.php index 11b340f..2cdd162 100644 --- a/app/Http/Controllers/LaporanController.php +++ b/app/Http/Controllers/LaporanController.php @@ -804,7 +804,7 @@ $date = new Carbon($request->tarikh); $tebus = Tebus::on($cawangan['mysql']) ->join('gadai as gad','gad.norujukan','=','tebus.norujukan') - ->where([['t_tebus','>=',$request->mula],['t_tebus','<=',$request->akhir],['tebus.jenistebus','=','T']]); + ->where([['t_tebus','>=',$request->mula],['t_tebus','<=',$request->akhir]]); $ansuran = Transaction::on('mysql7')->whereDate('created_at','>=',$request->mula)->whereDate('created_at','<=',$request->akhir)->where([['trans_type','=','A'],['kodcaw','=',$request->kodcaw]]); $bayaranonlinequery = Transaction::on('mysql7')->whereDate('created_at','>=',$request->mula)->whereDate('created_at','<=',$request->akhir)->where('teller','=','Online')->where('kodcaw',$request->kodcaw); @@ -834,20 +834,22 @@ $date = new Carbon($request->tarikh); ->whereDate('trans.created_at','<=',$request->akhir) ->where('trans.trans_type','=','A') ->where('trans.kodcaw','=',$request->kodcaw) + // ->pluck('trans.norujukan'); // ->groupBy('trans.id') ->sum('bayaran_keuntungan'); - + // dd($total_keuntunganansuran); // $total_ansuran = number_format($total_ansuran,2); $total_keuntungan = floatval($total_upah) + floatval($total_keuntunganansuran) + floatval($total_keuntungantebus); - + //b $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('mysql7')->where([['tarikhdaftar','>=',$request->mula],['tarikhdaftar','<=',$request->akhir]])->count(); + //$bilangan_customer_baru = Customer::on('mysql7')->where([['tarikhdaftar','=',$request->tarikh],['kodcaw',$request->kodcaw]])->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(); @@ -970,21 +972,23 @@ $date = new Carbon($request->tarikh); ->whereDate('trans.created_at','<=',$request->akhir) ->where('trans.teller','<>','Online') ->where('trans.trans_type','=','A') - ->where('trans.kodcaw',$request->kodcaw) - ->pluck('transaksi_keuntungan.norujukan'); + ->where('trans.kodcaw',$request->kodcaw); + // ->pluck('transaksi_keuntungan.norujukan'); + - $gadaiDataKaunter = Gadai::on($cawangan['mysql'])->whereIn('norujukan',$total_keuntunganansuran_data_kaunter)->whereNotNull('hargajualan')->pluck('norujukan'); - - $keuntunganansuran_kaunter_query = TransaksiKeuntungan::on('mysql7') - ->whereIn('norujukan',$gadaiDataKaunter) - ->whereDate('tarikh_bayaran','>=',$request->mula) - ->whereDate('tarikh_bayaran','<=',$request->akhir); + // $gadaiDataKaunter = Gadai::on($cawangan['mysql'])->whereIn('norujukan',$total_keuntunganansuran_data_kaunter)->whereNotNull('hargajualan')->pluck('norujukan'); + // $keuntunganansuran_kaunter_query = TransaksiKeuntungan::on('mysql7') + // ->whereIn('norujukan',$gadaiDataKaunter) + // ->where('kodcaw',$request->kodcaw) + // ->whereDate('tarikh_bayaran','>=',$request->mula) + // ->whereDate('tarikh_bayaran','<=',$request->akhir); + //dd($keuntunganansuran_kaunter_query->get()->toArray()); - $total_keuntunganansuran_kaunter = $keuntunganansuran_kaunter_query->sum('bayaran_keuntungan'); - $bil_keuntunganansuran_kaunter = $keuntunganansuran_kaunter_query->count(); - + $total_keuntunganansuran_kaunter = $total_keuntunganansuran_data_kaunter->sum('bayaran_keuntungan'); + //dd($total_keuntunganansuran_kaunter); + $bil_keuntunganansuran_kaunter = $total_keuntunganansuran_data_kaunter->count(); $total_keuntunganansuran_data_online = TransaksiKeuntungan::on('mysql7') ->leftJoin('transaction as trans', function($join) { @@ -1245,7 +1249,7 @@ $date = new Carbon($request->tarikh); array_push($atarray,[ 'tarikh' => $tarikh, 'masa' => $masa, - 'users' => $at['users'], + 'users' => isset($at['users']) && $at['users'] !== '' ? $at['users'] : '-', 'pelulus' => isset($atnewdata['namapelulus']) ? $atnewdata['namapelulus'] : '-', 'actions' => $at['actions'], 'norujukan' => $at['norujukan'], From 2fa36eabf7888cbdc3ab2ee7e28e58b68d7dbfcf Mon Sep 17 00:00:00 2001 From: nurafrinaalimi16 Date: Sun, 14 Jun 2026 15:06:24 +0800 Subject: [PATCH 18/18] include kplama on report marhun --- app/Http/Controllers/MarhunController.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/MarhunController.php b/app/Http/Controllers/MarhunController.php index 8c8a7b7..d35e7f1 100644 --- a/app/Http/Controllers/MarhunController.php +++ b/app/Http/Controllers/MarhunController.php @@ -203,7 +203,10 @@ 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', function($join) { + $join->on('customer.kpbaru', '=', 'gadai.nokp') + ->orOn('customer.kplama', '=', 'gadai.nokp'); + }) ->where('marhun.t_gadai','=',$tarikh) ->orderBy('marhun.t_gadai') ->get(); @@ -221,7 +224,10 @@ 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', function($join) { + $join->on('customer.kpbaru', '=', 'gadai.nokp') + ->orOn('customer.kplama', '=', 'gadai.nokp'); + }) ->where('marhun.t_gadai','<=',$tarikh) ->whereYear('marhun.t_gadai','=',$current->year) ->where('gadai.sttebus','=','')