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) ->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(); } return $transaction ->when($request->filled('isGroupedByNorujukan') && $request->isGroupedByNorujukan === '1', function ($query) { return $query->groupBy('norujukan')->sortKeysDesc(); }) ->sortByDesc('created_at')->toArray(); } private function getTransaksiKeuntunganQuery($date, $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(); if ($transaksiKeuntungan->isEmpty()) { $transaksiKeuntungan = TransaksiKeuntungan::whereDate('tarikh_bayaran', $date) ->when($request->filled('norujukan'), function ($query) use ($request) { return $query->where('norujukan', 'LIKE', '%' . $request->norujukan . '%'); }) ->get(); } return $transaksiKeuntungan ->when($request->filled('isGroupedByNorujukan') && $request->isGroupedByNorujukan === '1', function ($query) { return $query->groupBy('norujukan')->sortKeysDesc(); }) ->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)->orderBy('recno')->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); }) ->toArray(); return $glDetail; } }