diff --git a/app/Http/Controllers/TransactionOnlineTrailController.php b/app/Http/Controllers/TransactionOnlineTrailController.php index ac1e4b3..9f55d96 100644 --- a/app/Http/Controllers/TransactionOnlineTrailController.php +++ b/app/Http/Controllers/TransactionOnlineTrailController.php @@ -16,12 +16,13 @@ class TransactionOnlineTrailController extends Controller public function index(Request $request) { - $date = $request->date ? $request->date : Carbon::now()->toDateString(); + $transactionsOnline = $this->getTransactionOnlineQuery($request); - $transactionsOnline = $this->getTransactionOnlineQuery($date, $request); - $transaction = $this->getTransactionQuery($date, $request); - $transaksiKeuntungan = $this->getTransaksiKeuntunganQuery($date, $request); - $glDetail = $this->getGlDetailQuery($date, $request); + $list_norujukan = array_map(fn($x) => ['norujukan' => $x['norujukan'], 'kodcaw' => $x['kodcaw']], $transactionsOnline); + + $transaction = $this->getTransactionQuery($list_norujukan, $request); + $transaksiKeuntungan = $this->getTransaksiKeuntunganQuery($list_norujukan, $request); + $glDetail = $this->getGlDetailQuery($list_norujukan, $request); return response()->json([ 'transactionsOnline' => $transactionsOnline, @@ -31,16 +32,22 @@ class TransactionOnlineTrailController extends Controller ]); } - private function getTransactionOnlineQuery($date, $request) + private function getTransactionOnlineQuery($request) { - $transactionOnline = TransactionOnline::whereDate('tarikh', $date) + $startDate = $request->startDate ? $request->startDate : Carbon::now()->toDateString(); + $endDate = $request->endDate ? $request->endDate : Carbon::now()->toDateString(); + + $transactionOnline = TransactionOnline::whereBetween('tarikh', [$startDate, $endDate]) + ->when($request->filled('billplzBillId'), function ($query) use ($request) { + return $query->where('billplz_id', $request->billplzBillId); + }) ->when($request->filled('norujukan'), function ($query) use ($request) { return $query->where('norujukan', $request->norujukan); }) ->get(); if ($transactionOnline->isEmpty()) { - $transactionOnline = TransactionOnline::whereDate('tarikh', $date) + $transactionOnline = TransactionOnline::whereBetween('tarikh', [$startDate, $endDate]) ->when($request->filled('norujukan'), function ($query) use ($request) { return $query->where('norujukan', 'LIKE', '%' . $request->norujukan . '%'); }) @@ -50,7 +57,9 @@ class TransactionOnlineTrailController extends Controller $transactionOnline = $transactionOnline ->sortByDesc('tarikh') ->sortByDesc('masa') - ->filter(fn($x) => $x['status'] === 'PAID') + ->when($request->filled('status'), function ($query) use ($request) { + return $query->where('status', $request->status); + }) ->when($request->filled('isGroupedByNorujukan') && $request->isGroupedByNorujukan === '1', function ($query) { return $query->groupBy('norujukan')->sortKeysDesc(); }) @@ -59,78 +68,56 @@ class TransactionOnlineTrailController extends Controller return $transactionOnline; } - private function getTransactionQuery($date, $request) + private function getTransactionQuery($list_norujukan, $request) { + $extract_norujukan = array_column($list_norujukan, 'norujukan'); + $startDate = $request->startDate ? $request->startDate : Carbon::now()->toDateString(); + $endDate = $request->endDate ? $request->endDate : Carbon::now()->toDateString(); - $transaction = Transaction::whereDate('created_at', $date) - ->where('teller', 'Online') - ->when($request->filled('norujukan'), function ($query) use ($request) { - return $query->where('norujukan', $request->norujukan); - }) - ->get(); - - if ($transaction->isEmpty()) { - $transaction = Transaction::whereDate('created_at', $date) - ->where('teller', 'Online') - ->when($request->filled('norujukan'), function ($query) use ($request) { - return $query->where('norujukan', 'LIKE', '%' . $request->norujukan . '%'); - }) - ->get(); - } + $transaction = Transaction::whereIn('norujukan', $extract_norujukan) + ->whereBetween('created_at', [$startDate, $endDate]) + ->where('teller', 'online') + ->get(); return $transaction - ->when($request->filled('isGroupedByNorujukan') && $request->isGroupedByNorujukan === '1', function ($query) { - return $query->groupBy('norujukan')->sortKeysDesc(); - }) - ->sortByDesc('created_at')->toArray(); + ->when($request->filled('isGroupedByNorujukan') && $request->isGroupedByNorujukan === '1', function ($query) { + return $query->groupBy('norujukan')->sortKeysDesc(); + }) + ->sortByDesc('created_at')->toArray(); } - private function getTransaksiKeuntunganQuery($date, $request) + private function getTransaksiKeuntunganQuery($list_norujukan, $request) { - $transaksiKeuntungan = TransaksiKeuntungan::whereDate('tarikh_bayaran', $date) - ->whereHas('transaction', function ($query) { - return $query->where('teller', 'Online'); - }) - ->when($request->filled('norujukan'), function ($query) use ($request) { - return $query->where('norujukan', $request->norujukan); - }) - ->get(); + $extract_norujukan = array_column($list_norujukan, 'norujukan'); + $startDate = $request->startDate ? $request->startDate : Carbon::now()->toDateString(); + $endDate = $request->endDate ? $request->endDate : Carbon::now()->toDateString(); - if ($transaksiKeuntungan->isEmpty()) { - $transaksiKeuntungan = TransaksiKeuntungan::whereDate('tarikh_bayaran', $date) - ->whereHas('transaction', function ($query) { - return $query->where('teller', 'Online'); - }) - ->when($request->filled('norujukan'), function ($query) use ($request) { - return $query->where('norujukan', 'LIKE', '%' . $request->norujukan . '%'); - }) - ->orderBy('id', 'desc') - ->get(); - } + $transaksiKeuntungan = TransaksiKeuntungan::whereIn('norujukan', $extract_norujukan) + ->whereBetween('tarikh_bayaran', [$startDate, $endDate]) + ->whereHas('transaction', fn($query) => $query->where('teller', 'online')) + ->get(); return $transaksiKeuntungan - ->when($request->filled('isGroupedByNorujukan') && $request->isGroupedByNorujukan === '1', function ($query) { - return $query->groupBy('norujukan')->sortKeysDesc(); - }) - ->toArray(); + ->when($request->filled('isGroupedByNorujukan') && $request->isGroupedByNorujukan === '1', function ($query) { + return $query->groupBy('norujukan')->sortKeysDesc(); + }) + ->toArray(); } - public function getGlDetailQuery($date, $request) + public function getGlDetailQuery($list_norujukan, $request) { + $startDate = $request->startDate ? $request->startDate : Carbon::now()->toDateString(); + $endDate = $request->endDate ? $request->endDate : Carbon::now()->toDateString(); + + $extract_norujukan = array_unique(array_column($list_norujukan, 'norujukan')); + $extract_kodcaw = array_unique(array_column($list_norujukan, 'kodcaw')); $isGroupByNorujukan = $request->filled('isGroupedByNorujukan') && $request->isGroupedByNorujukan === '1'; - $connectionCawangan = Cawangan::on('mysql7')->where('kodcaw', 'KB2')->first()->mysql; + $connectionCawangan = Cawangan::on('mysql7')->whereIn('kodcaw', $extract_kodcaw)->get()->pluck('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)->orderBy('recno')->get()) + $glDetail = $connectionCawangan->map(fn($x) => GlDetail::on($x)->where('teller', 'ONLINE')->whereBetween('tarikh', [$startDate, $endDate]) + ->orderBy('recno')->get()) ->flatten() ->when($isGroupByNorujukan, function ($glDetail) { return $glDetail->groupBy('descpt') @@ -142,6 +129,13 @@ class TransactionOnlineTrailController extends Controller ->when($request->filled('norujukan'), function ($glDetail) use ($request) { return $glDetail->filter(fn($x) => strpos($x->descpt, $request->norujukan) !== false); }) + ->when($request->filled('billplzBillId'), function ($glDetail) use ($extract_norujukan) { + return $glDetail->filter(function ($x) use ($extract_norujukan) { + return collect($extract_norujukan)->contains(function ($norujukan) use ($x) { + return strpos($x->descpt, $norujukan) !== false; + }); + }); + }) ->toArray(); return $glDetail;