diff --git a/app/Http/Controllers/BillplzTransactionReviewController.php b/app/Http/Controllers/BillplzTransactionReviewController.php index b7ddc1f..2817731 100644 --- a/app/Http/Controllers/BillplzTransactionReviewController.php +++ b/app/Http/Controllers/BillplzTransactionReviewController.php @@ -8,7 +8,7 @@ use Illuminate\Http\Request; class BillplzTransactionReviewController extends Controller { - public function __invoke(Request $request, BillplzService $billplzService) + public function index(Request $request, BillplzService $billplzService) { $date = $request->date ?? Carbon::now()->toDateString(); @@ -16,4 +16,13 @@ class BillplzTransactionReviewController extends Controller return response()->json($billplzTransactionReview, 200); } + + public function show(Request $request, BillplzService $billplzService) + { + $date = $request->date ?? Carbon::now()->toDateString(); + + $billplzTransactionReview = $billplzService->getBillplzTransactionReviewByBillId($request->bill_id); + + return response()->json($billplzTransactionReview, 200); + } } diff --git a/app/Services/BillplzService.php b/app/Services/BillplzService.php index 98e6f51..e7f38fe 100644 --- a/app/Services/BillplzService.php +++ b/app/Services/BillplzService.php @@ -110,7 +110,7 @@ class BillplzService public function getTransactions($date) { - $arrahnTransactions = $this->getArrahnTransactions($date); + $arrahnTransactions = $this->getArrahnTransactions(['date' => $date]); $billplzID = collect($arrahnTransactions)->pluck('billplz_id')->unique()->values(); $billplzTransactions = collect($billplzID)->map(function ($billId) { @@ -126,15 +126,38 @@ class BillplzService return $billplzTransactions; } - public function getArrahnTransactions($date) + public function getTransactionsByBillId($billId) { - return Http::arrahn()->get('/api/transaction/online/query', ['date' => $date])->json(); + $billplzID = collect([$billId]); + + $billplzTransactions = collect($billplzID)->map(function ($billId) { + return $this->client->transaction()->get($billId)->toArray(); + }) + ->map(function ($data) { + $latestTransaction = reset($data['transactions']) == false ? [] : reset($data['transactions']); + $billId = ['bill_id' => $data['bill_id']]; + return array_merge($billId, $latestTransaction); + }) + ->keyBy('bill_id'); + + return $billplzTransactions; + } + + public function getArrahnTransactions($queryData) + { + if(isset($queryData['date'])){ + return Http::arrahn()->get('/api/transaction/online/query', ['date' => $queryData['date']])->json(); + } + + if(isset($queryData['billId'])){ + return Http::arrahn()->get('/api/transaction/online/query', ['billId' => $queryData['billId']])->json(); + } } public function getBillplzTransactionReview($date) { $date = Carbon::now()->toDateString(); - $arrahnTransactions = $this->getArrahnTransactions($date); + $arrahnTransactions = $this->getArrahnTransactions(['date' => $date]); // sort array by tarikh desc and masa key desc array_multisort(array_column($arrahnTransactions, 'tarikh'), SORT_DESC, array_column($arrahnTransactions, 'masa'), SORT_DESC, $arrahnTransactions); @@ -175,6 +198,46 @@ class BillplzService return $summarizedBillplzTransactions; } + public function getBillplzTransactionReviewByBillId($billId) + { + + $arrahnTransactions = $this->getArrahnTransactions(['billId' => $billId]); + + $billplzID = collect([$billId]); + $billplzTransactions = $this->getTransactionsByBillId($billId); + + + $merged = $billplzID->map(function ($billId) use ($billplzTransactions, $arrahnTransactions) { + return [ + 'bill_id' => $billId, + 'arrahn_transactions' => $arrahnTransactions, + 'billplz_latest_transaction' => $billplzTransactions->get($billId), + ]; + }); + + + $summarizedBillplzTransactions = collect($merged)->map(function ($data) { + $data['arrahn_transactions'] = collect($data['arrahn_transactions'])->map(function ($transaction) { + return[ + 'nokp' => $transaction['nokp'], + 'norujukan' => $transaction['norujukan'], + 'kodcaw' => $transaction['kodcaw'], + 'total_payment' => $transaction['total_payment'], + 'customer_name' => $transaction['customer_name'], + 'status' => $transaction['status'], + 'paid_at' => $transaction['paid_at'], + 'tarikh_attempt_bayar' => $transaction['tarikh'], + 'masa_attempt_bayar' => $transaction['masa'], + 'portal' => $transaction['tagportal'] == 1 ? 'Arrahn Pay' : 'SPARE', + ]; + }); + + return $data; + }); + + return $summarizedBillplzTransactions; + } + public function getTransactionByBillId($billId) { try { diff --git a/routes/api.php b/routes/api.php index 6fc6b83..275a46e 100644 --- a/routes/api.php +++ b/routes/api.php @@ -19,4 +19,5 @@ Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); }); -Route::get('/billplz-transaction-review', BillplzTransactionReviewController::class)->name('billplz-transaction-review'); +Route::get('/billplz-transaction-review', [BillplzTransactionReviewController::class, 'index']); +Route::get('/billplz-transaction-review/{bill_id}', [BillplzTransactionReviewController::class, 'show']); diff --git a/routes/web.php b/routes/web.php index 32ae058..4e6a160 100644 --- a/routes/web.php +++ b/routes/web.php @@ -267,7 +267,3 @@ Route::get('/requestic', 'App\Http\Controllers\TacController@requestKadPengenala Route::get('/requesticfe', 'App\Http\Controllers\TacController@requestKadPengenalanfe')->name('requesticfe'); Route::get('/requesttac', 'App\Http\Controllers\TacController@TACrequest')->name('requesttac'); Route::get('/requesttacfe', 'App\Http\Controllers\TacController@TACrequestfe')->name('requesttacfe'); - - - -