From 8cde06d92aff1207bcc6c5aaef1590fe54f874ed Mon Sep 17 00:00:00 2001 From: Afiq Hamzah Date: Tue, 6 Aug 2024 13:14:08 +0800 Subject: [PATCH] Update query to include partial norujukan sag match --- app/Http/Controllers/TebusController.php | 4 + .../TransactionOnlineController.php | 75 +-------- .../TransactionOnlineTrailController.php | 145 ++++++++++++++++++ routes/web.php | 4 +- 4 files changed, 153 insertions(+), 75 deletions(-) create mode 100644 app/Http/Controllers/TransactionOnlineTrailController.php diff --git a/app/Http/Controllers/TebusController.php b/app/Http/Controllers/TebusController.php index a0e92a4..6b6d193 100644 --- a/app/Http/Controllers/TebusController.php +++ b/app/Http/Controllers/TebusController.php @@ -483,6 +483,10 @@ class TebusController extends Controller $wakil = Wakil::on($cawangan['mysql']) ->orderBy('nowakil','desc') ->first(); + + if(!$wakil){ + return response(0); + } if($wakil['nowakil']) return response($wakil['nowakil']); diff --git a/app/Http/Controllers/TransactionOnlineController.php b/app/Http/Controllers/TransactionOnlineController.php index 10e9c9e..277e7f4 100644 --- a/app/Http/Controllers/TransactionOnlineController.php +++ b/app/Http/Controllers/TransactionOnlineController.php @@ -719,78 +719,5 @@ class TransactionOnlineController extends Controller } } - public function getListTransactionOnlineTrail(Request $request) - { - - $date = $request->date ? $request->date : Carbon::now()->toDateString(); - $isGroupByNorujukan = $request->filled('isGroupedByNorujukan') && $request->isGroupedByNorujukan === '1'; - - $transactionsOnline = TransactionOnline::whereDate('tarikh', $date) - ->when($request->filled('norujukan'), function ($query) use ($request) { - return $query->where('norujukan', $request->norujukan); - }) - ->orderBy('tarikh', 'desc') - ->orderBy('masa', 'desc') - ->get() - ->filter(fn($x) => $x['status'] === 'PAID') - ->when($isGroupByNorujukan, function ($query) { - return $query->groupBy('norujukan')->sortKeysDesc(); - }) - ->toArray(); - - $transaction = Transaction::whereDate('created_at', $date) - ->where('teller', 'Online') - ->when($request->norujukan, function ($query) use ($request) { - return $query->where('norujukan', $request->norujukan); - }) - ->orderBy('created_at', 'desc') - ->get() - ->when($isGroupByNorujukan, function ($query) { - return $query->groupBy('norujukan')->sortKeysDesc(); - }) - ->toArray(); - - $transaksiKeuntungan = TransaksiKeuntungan::whereDate('tarikh_bayaran', $date) - ->when($request->norujukan, function ($query) use ($request) { - return $query->where('norujukan', $request->norujukan); - }) - ->orderBy('tarikh_bayaran', 'desc') - ->get() - ->when($isGroupByNorujukan, function ($query) { - return $query->groupBy('norujukan')->sortKeysDesc(); - }) - ->toArray(); - - $connectionCawangan = Cawangan::on('mysql7')->where('kodcaw', 'KB2')->first()->mysql; - - $cawanganTransactionOnline = TransactionOnline::whereDate('tarikh', $date) - ->get() - ->pluck('kodcaw') - ->unique() - ->all(); - - $connectionCawangan = Cawangan::on('mysql7')->whereIn('kodcaw', $cawanganTransactionOnline)->get()->pluck('mysql'); - - $glDetail = $connectionCawangan->map(fn($x) => GlDetail::on($x)->where('teller', 'ONLINE')->whereDate('tarikh', $date)->get()) - ->flatten() - ->when($isGroupByNorujukan, function ($glDetail) { - return $glDetail->groupBy('descpt') - ->keyBy(function ($group, $key) { - $array = explode(' ', $key); - return end($array); - }); - }) - ->when($request->filled('norujukan'), function ($glDetail) use ($request) { - return $glDetail->filter(fn($x) => strpos($x->descpt, $request->norujukan) !== false); - }) - ->sortKeysDesc() - ->toArray(); - - return response()->json([ - 'transactionsOnline' => $transactionsOnline, - 'transaction' => $transaction, - 'transaksiKeuntungan' => $transaksiKeuntungan, - 'glDetail' => $glDetail, - ]); - } + } diff --git a/app/Http/Controllers/TransactionOnlineTrailController.php b/app/Http/Controllers/TransactionOnlineTrailController.php new file mode 100644 index 0000000..23f3a5c --- /dev/null +++ b/app/Http/Controllers/TransactionOnlineTrailController.php @@ -0,0 +1,145 @@ +date ? $request->date : Carbon::now()->toDateString(); + + $transactionsOnline = $this->getTransactionOnlineQuery($date, $request); + $transaction = $this->getTransactionQuery($date, $request); + $transaksiKeuntungan = $this->getTransaksiKeuntunganQuery($date, $request); + $glDetail = $this->getGlDetailQuery($date, $request); + + return response()->json([ + 'transactionsOnline' => $transactionsOnline, + 'transaction' => $transaction, + 'transaksiKeuntungan' => $transaksiKeuntungan, + 'glDetail' => $glDetail, + ]); + } + + private function getTransactionOnlineQuery($date, $request) + { + $transactionOnline = TransactionOnline::whereDate('tarikh', $date) + ->when($request->filled('norujukan'), function ($query) use ($request) { + return $query->where('norujukan', $request->norujukan); + }) + ->get(); + + if ($transactionOnline->isEmpty()) { + $transactionOnline = TransactionOnline::whereDate('tarikh', $date) + ->when($request->filled('norujukan'), function ($query) use ($request) { + return $query->where('norujukan', 'LIKE', '%' . $request->norujukan . '%'); + }) + ->get(); + } + + $transactionOnline = $transactionOnline + ->sortByDesc('tarikh') + ->sortByDesc('masa') + ->filter(fn($x) => $x['status'] === 'PAID') + ->when($request->filled('isGroupedByNorujukan') && $request->isGroupedByNorujukan === '1', function ($query) { + return $query->groupBy('norujukan')->sortKeysDesc(); + }) + ->toArray(); + + return $transactionOnline; + } + + private function getTransactionQuery($date, $request) + { + + $transaction = Transaction::whereDate('created_at', $date) + ->when($request->filled('norujukan'), function ($query) use ($request) { + return $query->where('norujukan', $request->norujukan); + }) + ->when($request->filled('isGroupedByNorujukan') && $request->isGroupedByNorujukan === '1', function ($query) { + return $query->groupBy('norujukan')->sortKeysDesc(); + }) + ->get(); + + if ($transaction->isEmpty()) { + $transaction = Transaction::whereDate('created_at', $date) + ->when($request->filled('norujukan'), function ($query) use ($request) { + return $query->where('norujukan', 'LIKE', '%' . $request->norujukan . '%'); + }) + ->when($request->filled('isGroupedByNorujukan') && $request->isGroupedByNorujukan === '1', function ($query) { + return $query->groupBy('norujukan')->sortKeysDesc(); + }) + ->get(); + } + + return $transaction->sortByDesc('created_at')->toArray(); + } + + private function getTransaksiKeuntunganQuery($date, $request) + { + $transaksiKeuntungan = TransaksiKeuntungan::whereDate('tarikh_bayaran', $date) + ->when($request->filled('norujukan'), function ($query) use ($request) { + return $query->where('norujukan', $request->norujukan); + }) + ->when($request->filled('isGroupedByNorujukan') && $request->isGroupedByNorujukan === '1', function ($query) { + return $query->groupBy('norujukan')->sortKeysDesc(); + }) + ->get(); + + if ($transaksiKeuntungan->isEmpty()) { + $transaksiKeuntungan = TransaksiKeuntungan::whereDate('tarikh_bayaran', $date) + ->when($request->filled('norujukan'), function ($query) use ($request) { + return $query->where('norujukan', 'LIKE', '%' . $request->norujukan . '%'); + }) + ->when($request->filled('isGroupedByNorujukan') && $request->isGroupedByNorujukan === '1', function ($query) { + return $query->groupBy('norujukan')->sortKeysDesc(); + }) + ->get(); + } + + return $transaksiKeuntungan->toArray(); + } + + public function getGlDetailQuery($date, $request) + { + + $isGroupByNorujukan = $request->filled('isGroupedByNorujukan') && $request->isGroupedByNorujukan === '1'; + + $connectionCawangan = Cawangan::on('mysql7')->where('kodcaw', 'KB2')->first()->mysql; + + $cawanganTransactionOnline = TransactionOnline::whereDate('tarikh', $date) + ->get() + ->pluck('kodcaw') + ->unique() + ->all(); + + $connectionCawangan = Cawangan::on('mysql7')->whereIn('kodcaw', $cawanganTransactionOnline)->get()->pluck('mysql'); + + $glDetail = $connectionCawangan->map(fn($x) => GlDetail::on($x)->where('teller', 'ONLINE')->whereDate('tarikh', $date)->get()) + ->flatten() + ->when($isGroupByNorujukan, function ($glDetail) { + return $glDetail->groupBy('descpt') + ->keyBy(function ($group, $key) { + $array = explode(' ', $key); + return end($array); + }); + }) + ->when($request->filled('norujukan'), function ($glDetail) use ($request) { + return $glDetail->filter(fn($x) => strpos($x->descpt, $request->norujukan) !== false); + }) + ->sortKeysDesc() + ->toArray(); + + return $glDetail; + } +} diff --git a/routes/web.php b/routes/web.php index ba84d71..1695078 100644 --- a/routes/web.php +++ b/routes/web.php @@ -17,6 +17,8 @@ // return \Illuminate\Support\Str::random(32); // }); +use App\Http\Controllers\TransactionOnlineTrailController; +use App\Transaction; $router->group(['namespace' => '\Rap2hpoutre\LaravelLogViewer'], function() use ($router) { $router->get('logs', 'LogViewerController@index'); @@ -261,7 +263,7 @@ $router->group(['prefix'=>'api'], function () use ($router){ $router->put('transaction/online/unsuccesfull/update',['uses'=>'TransactionOnlineController@updateUnsuccessfulTransaction']); $router->put('transaction/online/tagportal',['uses'=>'TransactionOnlineController@updateTagPortal']); $router->get('transaction/online/query',['uses'=>'TransactionOnlineController@getListTransactionOnlineQuery']); - $router->get('transaction/online/trail',['uses'=>'TransactionOnlineController@getListTransactionOnlineTrail']); + $router->get('transaction/online/trail',['uses'=>'TransactionOnlineTrailController@index']); $router->get('transaction/online/log',['uses'=>'TransactionOnlineLogController@index']); $router->post('transaction/online/log',['uses'=>'TransactionOnlineLogController@create']);