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 @@ +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/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/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..9308414 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,8 @@ class Kernel extends ConsoleKernel Commands\CawanganDebugConnections::class, Commands\ClearCachesAll::class, Commands\RestartSupervisor::class, + Commands\InsertSempornaData::class, + //Commands\ImportCsv::class, ]; diff --git a/app/Customer.php b/app/Customer.php index deaa404..557e865 100644 --- a/app/Customer.php +++ b/app/Customer.php @@ -61,7 +61,8 @@ class Customer extends Model 'kumpulan', 'telefon2', 'nota_pekerjaan', - 'tagpelanggan' + 'tagpelanggan', + 'tag_anggota' ]; /** 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/AdminPageController.php b/app/Http/Controllers/AdminPageController.php index 1cb8547..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; @@ -2363,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); @@ -2697,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){ @@ -3080,34 +3147,83 @@ 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); } @@ -3708,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(); } @@ -3906,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/AutoSerahanController.php b/app/Http/Controllers/AutoSerahanController.php new file mode 100644 index 0000000..9891d5e --- /dev/null +++ b/app/Http/Controllers/AutoSerahanController.php @@ -0,0 +1,1045 @@ +where('approval_status', 'PENDING'); + if (isset($request->kodcaw)) $query->where('kodcaw', '=', $request->kodcaw); + $listapproval = $query->paginate(5); + + 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); + + $listapproval = optional($listapproval)->first(); + + $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' => $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, + ]); + 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(); + + DB::connection('mysql7')->beginTransaction(); + + try{ + + $deno_pendser = DenoPendSer::on('mysql7')->create([ + 'tarikh' => $current->toDateString(), + 'masa' => $current->toTimeString(), + 'kodcaw' => ($request->version == 'v3') ? $this->interchangeCawangan($request->kodcaw,$request->version) : $request->kodcaw, + 'kodlaluan' => $request->teller, + 'amaun' => $request->amaun, + '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' => 0, + 'update' => 0 + ]); + + 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, + '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, + 'action' => 'create', + 'updated_at' => $current, + ]); + 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); + DB::connection('mysql7')->commit(); + return response()->json(['status' => 'success','denoid' => $deno_pendser->id]); + } + + }catch(\Exception $e){ + DB::connection('mysql7')->rollBack(); + return response()->json(['status' => 'failed','message' => $e->getMessage()]); + } + } + + 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']; + $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'){ + + $pendserid = empty($approval) ? $denopendser_id : $approval['denopendser_id_v3']; + + $totalpendahuluan = $amaun + $pendahuluan; + + $bakiakhir = $bakiawal - $keluar + $masuk + $totalpendahuluan - $serahan - $totpanjaran; + + $denopendser = DenoPendSer::on('mysql7')->where('no',$pendserid)->first(); + + $this->updateDenominasi($kodcaw,$denopendser,$jenis); + + $gldetail = GlDetail::on($cawangan['mysql'])->create([ + 'kodcaw' => $kodcaw, + 'tarikh' => $current->toDateString(), + 'dtacct' => '1000/010', + 'ktacct' => '7000/102', + 'descpt' => 'Pendahuluan Daripada V2', + 'pendahuluan' => $amaun, + 'teller' => $teller . ' (AUTO V2)', + 'date_created' => $current + ]); + + DenoPendSer::on('mysql7')->where('no',$pendserid)->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',$id)->update(array( + 'updated_pendahuluan_v3' => 1, + 'gldetail_id_v3' => $gldetail->id + )); + + }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',$pendserid)->first(); + + $this->updateDenominasi($kodcaw,$denopendser,$jenis); + + $gldetail = GlDetail::on($cawangan['mysql'])->create([ + 'kodcaw' => $kodcaw, + 'tarikh' => $current->toDateString(), + 'dtacct' => '1000/010', + 'ktacct' => '1000/020', + 'descpt' => 'Serahan Kepada V3', + 'serahan' => $amaun, + 'teller' => $teller . ' (AUTO V3)', + 'date_created' => $current + ]); + + DenoPendSer::on('mysql7')->where('no',$pendserid)->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 + )); + + } + + // 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; + } + } + + public function autoSerahanApproval(Request $request){ + $current = Carbon::now(); + + DB::connection('mysql7')->beginTransaction(); + + 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'; + $approval->approval_timestamp = $current; + $approval->save(); + + DB::connection('mysql7')->commit(); + return response()->json(['status' => 'success','approve_status' => 'approved'],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(['status' => 'success','approve_status' => 'rejected'],200); + } + + }catch(\Exception $e){ + DB::connection('mysql7')->rollBack(); + return response()->json(['status' => 'error','message' =>$e->getMessage(), 'line' => $e->getLine()]); + } + } + + private function updateDenominasi($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 + )); + } + + 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'); + $this->checkDenominasi($request->kodcaw,'v2'); + + $kodcaw = $this->interchangeCawangan($request->kodcaw,'v2'); + + $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){ + + $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); + + return response()->json(['status' => 'success','gldetail_id' => $updated_pendahuluan['gldetail_id']],200); + } + + public function removeAutoSerahan(Request $request){ + $this->checkVault($request->kodcaw,'v2'); + $this->checkDenominasi($request->kodcaw,'v2'); + + $kodcaw = $this->interchangeCawangan($request->kodcaw,'v2'); + + $updated_serahan = $this->autoSerahanRemove('serahan',$kodcaw,$request->amaun,$request->array_approval); + + 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->array_approval); + + 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{ + if($jenis == 'pendahuluan'){ + $approval = $id; + + $totalpendahuluan = $pendahuluan - $amaun; + + $bakiakhir = $bakiawal - $keluar + $masuk + $totalpendahuluan - $serahan - $totpanjaran; + $denopendser = Denopendser::on('mysql7')->where('no', $approval['denopendser_id_v3']); + $denopendser = optional($denopendser)->first(); + + $this->updateDenominasiRemove($kodcaw,$denopendser,'pendahuluan'); + + Vault::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()],['kodcaw','=', $kodcaw]])->update(array( + 'pendahuluan' => $totalpendahuluan, + 'bakiakhir' => $bakiakhir, + 'bakieod' => $bakiakhir + )); + + $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, + )); + }else{ + $approval = $id; + + $totalserahan = $serahan - $amaun; + + $bakiakhir = $bakiawal - $keluar + $masuk + $pendahuluan - $totalserahan - $totpanjaran; + $denopendser = Denopendser::on('mysql7')->where('no', $approval['denopendser_id_v2']); + $denopendser = optional($denopendser)->first(); + + $this->updateDenominasiRemove($kodcaw,$denopendser,'serahan'); + + Vault::on($cawangan['mysql'])->where([['tarikh','=',$current->toDateString()],['kodcaw','=', $kodcaw]])->update(array( + 'serahan' => $totalserahan, + 'bakiakhir' => $bakiakhir, + 'bakieod' => $bakiakhir + )); + + 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, + )); + } + + 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 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); + } + + } + + public function getAutoSerahanApproval(Request $request){ + $query = ApprovalWithdrawal::on('mysql7')->where('kodcaw',$request->kodcaw)->where('id',$request->id)->first(); + return response()->json($query,200); + } + + private function checkVault($kodcaw,$version){ + + $kodcaw = $this->interchangeCawangan($kodcaw,$version); + $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,$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(); + 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 + ]); + return $savedeno; + } + + $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; + + } + } + + 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 == 'v3'){ + 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/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/app/Http/Controllers/CallCenterController.php b/app/Http/Controllers/CallCenterController.php index d2a2708..4a8d890 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 ]); @@ -1564,4 +1564,162 @@ 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); + } } + + + + + + 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 bf68d43..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; @@ -23,11 +24,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(); @@ -346,6 +363,7 @@ class CustomerController extends Controller 'nota'=>$request->nota, 'kodkerja'=>$request->kodkerja, 'nota_pekerjaan'=>$request->nota_pekerjaan, + // 'nota_arcc'=>$request->nota_arcc, 'tujuangadai'=>$request->tujuangadai ]); @@ -374,13 +392,40 @@ 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 + '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(); @@ -408,6 +453,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, @@ -485,6 +531,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, @@ -805,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(); @@ -962,4 +1017,41 @@ 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); + } + +// 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/app/Http/Controllers/GadaiController.php b/app/Http/Controllers/GadaiController.php index f02788d..be32471 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']) @@ -981,77 +1000,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(); @@ -3802,4 +3932,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/Http/Controllers/KelulusanController.php b/app/Http/Controllers/KelulusanController.php index a3f26c3..ead5d4d 100644 --- a/app/Http/Controllers/KelulusanController.php +++ b/app/Http/Controllers/KelulusanController.php @@ -6,10 +6,13 @@ use App\Audit; use App\Mohon; use App\Cawangan; use App\Mohonid; +use App\MohonAnggota; +use App\Customer; use Carbon\Carbon; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Log; class KelulusanController extends Controller { @@ -201,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(); @@ -284,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) @@ -298,13 +451,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 +478,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 +543,30 @@ 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()) + ->whereNotNull('id') + ->whereNotNull('timestamp_approved_by_pc') + ->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 +593,124 @@ 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); + + } + + 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); + } + + public function listKelulusanAnggota(Request $request) +{ + $harini = Carbon::now(); + Log::info($request->all()); + $cawangan = Cawangan::on('mysql7')->get(); + + $array_kelulusan = []; + + 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 ($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); +} + + + + } diff --git a/app/Http/Controllers/LaporanController.php b/app/Http/Controllers/LaporanController.php index 1c5f4c8..71c951f 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; @@ -845,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')->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(); @@ -1698,4 +1700,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/Http/Controllers/LelongController.php b/app/Http/Controllers/LelongController.php index a1b515f..2fadd77 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; @@ -223,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') @@ -240,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]; @@ -625,9 +605,9 @@ 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 = 'http://adminbid.arrahn/api/portalApi'; + $link = 'https://adminbid-kopkb.erahn.com.my/api/portalApi'; } $lelong = Http::withOptions(['verify' => true])->get($link,[ @@ -1772,5 +1752,147 @@ 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); + } + // 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' + ) + ->distinct() + ->orderByRaw(" + SUBSTRING_INDEX(SUBSTRING_INDEX(lelong.norujukan, '-', 1), '^[A-Za-z]+', -1), + CAST(SUBSTRING_INDEX(lelong.norujukan, '-', -1) AS UNSIGNED) + ") + ->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); + + } + + + 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/app/Http/Controllers/PendahuluanSerahanController.php b/app/Http/Controllers/PendahuluanSerahanController.php index 4f66d96..d596715 100644 --- a/app/Http/Controllers/PendahuluanSerahanController.php +++ b/app/Http/Controllers/PendahuluanSerahanController.php @@ -94,16 +94,19 @@ 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{ + }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) ->where([['tarikh','>=',$request->mula],['tarikh','<=',$request->hingga]]) @@ -111,7 +114,43 @@ 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 == '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) + ->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); 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/app/Http/Controllers/Reports/AnalisaController.php b/app/Http/Controllers/Reports/AnalisaController.php new file mode 100644 index 0000000..df7401b --- /dev/null +++ b/app/Http/Controllers/Reports/AnalisaController.php @@ -0,0 +1,172 @@ +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(); + + // 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); + } + + // 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/app/Http/Controllers/Reports/AnsuranController.php b/app/Http/Controllers/Reports/AnsuranController.php index e6009c9..abc8014 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; @@ -19,46 +20,99 @@ class AnsuranController extends Controller } public function getSummaryLaporanAnsuran(Request $request) - { - $online_array_db_connection = Helper::getOnlineArrahnConnection(); +{ + $online_array_db_connection = Helper::getOnlineArrahnConnection(); + $cawangan_available = Cawangan::on($online_array_db_connection)->select('kodcaw', 'details_caw', 'mysql')->get(); - $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(' - 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 - '); + $kodcaw_array = array_column($cawangan_available->toArray(), 'kodcaw'); + $kod_caw_with_cawangan_detail_array = $cawangan_available->pluck('details_caw', 'kodcaw')->toArray(); - $summary_ansuran = (clone $ansuran_query)->get()->toArray()[0]; + // 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(); - $summary_ansuran_by_cawangan = (clone $ansuran_query) - ->addSelect('transaction.kodcaw as kod_cawangan') - ->groupBy('transaction.kodcaw') - ->get(); + $total_nilai_marhun_by_cawangan = []; - $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); + // 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 - $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; - }); + // Get database connection for this branch + $mysql_connection = $cawangan_available->where('kodcaw', $kodcaw)->first()->mysql ?? null; + if (!$mysql_connection) { + continue; + } - $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); +} + + } 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/Http/Controllers/Reports/GadaianController.php b/app/Http/Controllers/Reports/GadaianController.php index ac5fd80..abc8104 100644 --- a/app/Http/Controllers/Reports/GadaianController.php +++ b/app/Http/Controllers/Reports/GadaianController.php @@ -26,18 +26,29 @@ 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); - $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) @@ -54,4 +65,131 @@ 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) + ->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 (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 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'); + + // 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) + ->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 (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) + { + $ReportGadaianService = new ReportGadaianService($kod_cawangan, $request); + return $ReportGadaianService->getCawanganReportGadaiTebusMasa(); + } + + + } diff --git a/app/Http/Controllers/Reports/LelonganController.php b/app/Http/Controllers/Reports/LelonganController.php new file mode 100644 index 0000000..1e2195f --- /dev/null +++ b/app/Http/Controllers/Reports/LelonganController.php @@ -0,0 +1,165 @@ +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_jual', [$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 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')) + ->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) + ->orderBy('lelong.norujukan', 'asc'); + + + 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/Http/Controllers/Reports/OutstandingController.php b/app/Http/Controllers/Reports/OutstandingController.php new file mode 100644 index 0000000..7b8c110 --- /dev/null +++ b/app/Http/Controllers/Reports/OutstandingController.php @@ -0,0 +1,137 @@ +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); + } + + 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/app/Http/Controllers/Reports/PenebusanController.php b/app/Http/Controllers/Reports/PenebusanController.php index 18dd89a..102c962 100644 --- a/app/Http/Controllers/Reports/PenebusanController.php +++ b/app/Http/Controllers/Reports/PenebusanController.php @@ -21,14 +21,24 @@ class PenebusanController extends Controller public function getSummaryLaporanTebus(Request $request) { - + // 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_penebusan_data = array_map(function ($db_connection) use ($request) { $penebusan = Tebus::on($db_connection) @@ -39,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, diff --git a/app/Http/Controllers/StokAuditController.php b/app/Http/Controllers/StokAuditController.php index 1ec14a1..cc6129f 100644 --- a/app/Http/Controllers/StokAuditController.php +++ b/app/Http/Controllers/StokAuditController.php @@ -51,16 +51,66 @@ 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); + ->orderBy('sirig', 'ASC') + ->get(); + + // Dapatkan semua norujukan awal $arraynorujukan = $audit->pluck('norujukan')->toArray(); - $rekodaudit = $audit->get(); + + // Dapatkan tarikh terkini untuk setiap norujukan 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(); + + // Dapatkan tarikh terkini untuk setiap norujukan 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 ikut tarikh masing-masing + $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(); + + // 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 +118,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 +142,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); } @@ -380,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/app/Http/Controllers/TebusController.php b/app/Http/Controllers/TebusController.php index 49c4530..538672f 100644 --- a/app/Http/Controllers/TebusController.php +++ b/app/Http/Controllers/TebusController.php @@ -669,11 +669,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){ diff --git a/app/Http/Controllers/TransactionOnlineController.php b/app/Http/Controllers/TransactionOnlineController.php index 213aabc..92b6e6a 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']) @@ -138,6 +144,7 @@ class TransactionOnlineController extends Controller 'descpt' => 'SERAHAN BAYAR ONLINE - ' . $transaction['norujukan'], 'serahan' => $transaction['total_payment'], 'teller' => 'ONLINE', + 'date_created' => $current ]; try { @@ -451,8 +458,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 +754,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'; + } + } + + + } diff --git a/app/Http/Controllers/VaultController.php b/app/Http/Controllers/VaultController.php index a50e4c0..0ac0be0 100644 --- a/app/Http/Controllers/VaultController.php +++ b/app/Http/Controllers/VaultController.php @@ -5,7 +5,9 @@ use App\Vault; use App\Cawangan; use App\Tunai; use App\AddTunai; +use App\ApprovalWithdrawal; use App\Audit; +use App\DenoPendSer; use App\GlDetail; use App\imbangdugalama; use App\GlCode; @@ -14,6 +16,7 @@ use App\Tebus; use Illuminate\Http\Request; use Carbon\Carbon; +use Illuminate\Support\Facades\DB; class VaultController extends Controller { @@ -283,7 +286,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(); @@ -314,7 +318,8 @@ class VaultController extends Controller 'ktacct' => $request->ktacct, 'descpt' => $request->keterangan, 'pendahuluan' => $request->amaun, - 'teller' => $request->teller + 'teller' => $request->teller, + 'date_created' => $current ]); }else if($request->jenisgldetail == 'serahan') { @@ -325,7 +330,9 @@ class VaultController extends Controller 'ktacct' => $request->ktacct, 'descpt' => $request->keterangan, 'serahan' => $request->amaun, - 'teller' => $request->teller + 'teller' => $request->teller, + 'date_created' => $current + ]); } @@ -718,6 +725,4 @@ class VaultController extends Controller return response()->json($vault); } - - } diff --git a/app/MohonAnggota.php b/app/MohonAnggota.php new file mode 100644 index 0000000..a215876 --- /dev/null +++ b/app/MohonAnggota.php @@ -0,0 +1,15 @@ + 'string', ]; /** 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/app/Penyelarasan.php b/app/Penyelarasan.php new file mode 100644 index 0000000..e71e26e --- /dev/null +++ b/app/Penyelarasan.php @@ -0,0 +1,31 @@ +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')) + ->when($request->filled('orderBy'), fn($query) => $query->orderByColumn($request->orderBy)); + } + + 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)->endOfDay() : + Carbon::now()->endOfDay(); + + 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 orderByColumn(string $orderBy): self + { + return $this->orderBy($orderBy, 'desc'); + } +} 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); + } + } } 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/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, ]; diff --git a/app/Services/Reports/GadaianService.php b/app/Services/Reports/GadaianService.php index 5aad15f..c7ff57a 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,213 @@ class GadaianService return $marhun_gadaian; } + + public function getCawanganReportGadaiTebusMasa() + { + $cawangan_connection = Cawangan::where('kodcaw', $this->kod_cawangan)->firstOrFail()->mysql; + $online_connection = Helper::getOnlineArrahnConnection(); + $startDate = $this->startDate; + $endDate = $this->endDate; + + // 1. Ambil data gadai dari cawangan + $gadai_data = DB::connection($cawangan_connection)->table('gadai') + ->whereBetween('t_gadai', [$startDate, $endDate]) + ->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' => [], + ]); + } + + // 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') + ->whereIn('trans_type', ['T', 'AT']) + ->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); + $summary = $this->getTotalSummaryGadaiTebusMasa($matched); + + // 6. Gabung akhir + $report_data = $matched->zip($customer_info, $marhun_info)->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, + ]; + }); + + $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' => $report_data, + 'summary_gadaian' => $summary, + ]); + } + + 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')) + ->where('gadai.upah12', '>=', 0.00) + ->orderBy('gadai.teller') + ->orderBy('gadai.sirig') + ->get(); + return $total_gadaitebusmasa; + } + + private function getTotalSummaryGadaiTebusMasa($collection) + { + return [ + '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'), + ]; + } + + 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') + ->where('gadai.upah12', '>=', 0.00) + ->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; + } } 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/LelonganService.php b/app/Services/Reports/LelonganService.php new file mode 100644 index 0000000..af2ed7b --- /dev/null +++ b/app/Services/Reports/LelonganService.php @@ -0,0 +1,353 @@ +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_jual', '>=', $this->startDate) + ->where('lelong.t_jual', '<=', $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; + } + + 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( + '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 + ) + ->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) + ->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) + ->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/app/Services/Reports/OnePercentService.php b/app/Services/Reports/OnePercentService.php index caf62ce..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) { + if (($t_gadai->month == $t_bayaran->month) && ($t_gadai->year == $t_bayaran->year)) { return false; }else{ return true; 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) diff --git a/app/Services/Transaction/AnsuranServices.php b/app/Services/Transaction/AnsuranServices.php index 69d395b..0d2dbc9 100644 --- a/app/Services/Transaction/AnsuranServices.php +++ b/app/Services/Transaction/AnsuranServices.php @@ -8,6 +8,8 @@ use App\Tunai; 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; @@ -39,7 +41,14 @@ 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'; } $transaction_gadai = TransaksiGadai::on('mysql7')->where('id',$request->tg_id)->first(); @@ -49,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){ @@ -91,6 +103,17 @@ class AnsuranServices 'softDelete' => 1, )); + $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(); + + $tarikh_audit = Carbon::now(); + $audit->new_data = $gadai_updated; + $audit->kodcaw = $this->cawangan; + $audit->created_at = $tarikh_audit; + $audit->updated_at = $tarikh_audit; + $audit->save(); + return 'success'; @@ -103,18 +126,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 +136,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/app/Support/OnePercent.php b/app/Support/OnePercent.php index e924fc1..2133931 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/GadaiV2.php b/app/Support/v2/GadaiV2.php index fdb7e5b..48b679a 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,34 @@ class GadaiV2 } } + 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(); @@ -82,15 +111,24 @@ 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 = 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']); + +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(); $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; @@ -105,7 +143,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) @@ -113,7 +151,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, @@ -134,7 +172,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, 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/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' => [] ]; diff --git a/database/migrations/2025_02_23_154307_create_approval_withdrawal.php b/database/migrations/2025_02_23_154307_create_approval_withdrawal.php new file mode 100644 index 0000000..9ffe7ae --- /dev/null +++ b/database/migrations/2025_02_23_154307_create_approval_withdrawal.php @@ -0,0 +1,44 @@ +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); + $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->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('approval_withdrawal'); + } +} 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..2d01199 --- /dev/null +++ b/database/migrations/2025_02_25_103124_add_timestamp_to_gldetail_table.php @@ -0,0 +1,49 @@ +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/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/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 diff --git a/database/migrations/2025_07_04_230424_create_penyelarasan_table.php b/database/migrations/2025_07_04_230424_create_penyelarasan_table.php new file mode 100644 index 0000000..b6c8f42 --- /dev/null +++ b/database/migrations/2025_07_04_230424_create_penyelarasan_table.php @@ -0,0 +1,36 @@ +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'); + } +} 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/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'); + } + } +} diff --git a/.env.docker.example b/env.docker.example/base.env similarity index 90% rename from .env.docker.example rename to env.docker.example/base.env index 84f0f6f..223e054 100644 --- a/.env.docker.example +++ b/env.docker.example/base.env @@ -1,20 +1,28 @@ 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 @@ -240,6 +248,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 +263,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 +278,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 diff --git a/env.docker.example/kgmk.env b/env.docker.example/kgmk.env new file mode 100644 index 0000000..2299054 --- /dev/null +++ b/env.docker.example/kgmk.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_2=mysql +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_zone_franchise +DB_PORT_3=3306 +DB_DATABASE_3=Kguru_melor +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=kguru_tumpat +DB_USERNAME_4=root +DB_PASSWORD_4=secret + +DB_CONNECTION_7=mysql +DB_HOST_7=database_zone_franchise +DB_PORT_7=3306 +DB_DATABASE_7=master_koopguru +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 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 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 diff --git a/routes/report.php b/routes/report.php index 9c67016..6cf98f2 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,14 +24,38 @@ $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('updateig', ['uses' => 'BalanceSheetsController@insertBalanceSheets']); + $router->get('updateigall', ['uses' => 'BalanceSheetsController@updateIGBalanceSheets']); + + $router->get('lelongan', ['uses' => 'LelonganController@getSummaryLaporanLelong']); + $router->get('lelongan/{kod_cawangan}', ['uses' => 'LelonganController@getLaporanCawangan']); + + $router->get('aging', ['uses' => 'AgingController@getSummaryLaporanAging']); + + $router->get('outstanding', ['uses' => 'OutstandingController@getSummaryLaporanOutstanding']); + + $router->get('petibesi', ['uses' => 'OutstandingController@getSummaryLaporanPetibesi']); + + $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']); + + $router->get('gadaitebus', ['uses' => 'GadaianController@getSummaryLaporanGadaiTebus']); + $router->get('gadaitebusmasa', ['uses' => 'GadaianController@getSummaryLaporanGadaiTebusMasa']); + $router->get('gadaitebusmasa/{kod_cawangan}', ['uses' => 'GadaianController@getLaporanGadaiTebusMasaCawangan']); - $router->get('balancesheets/get',['uses' => 'BalanceSheetsController@getBalanceSheetsList']); - $router->get('updateig',['uses' => 'BalanceSheetsController@insertBalanceSheets']); - $router->get('updateigall',['uses' => 'BalanceSheetsController@updateIGBalanceSheets']); }); }); diff --git a/routes/web.php b/routes/web.php index b22304c..20d0d66 100644 --- a/routes/web.php +++ b/routes/web.php @@ -59,7 +59,18 @@ $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']); + // $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']); @@ -78,6 +89,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']); @@ -381,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 @@ -448,7 +465,11 @@ $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']); + $router->get('palsu/laporan', ['uses' => 'BarangkesController@LaporanBarangKes']); //update tagterima Tebus @@ -474,6 +495,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 @@ -655,6 +677,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']); @@ -677,6 +700,26 @@ $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('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']); + $router->put('autoserahan/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']); + $router->get('autoserahan/allrecord',['uses'=>'AutoSerahanController@getApprovedAutoSerahan']); + + /*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){ @@ -870,7 +913,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('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']); @@ -955,4 +999,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']); });