Add tabbable views in billplz transaction summary logic

This commit is contained in:
Afiq Hamzah
2025-02-17 14:33:30 +08:00
parent 5b813b290e
commit ef695e675f
2 changed files with 50 additions and 25 deletions
@@ -14,7 +14,24 @@ class BillplzTransactionSummaryController extends Controller
$transactionDataPKB = collect( Http::arrahn()->get('/api/transaction/online/query', ['date' => $date, 'status' => 'paid'])->json() );
$transactionDataKOOP = collect( Http::arrahn_koop()->get('/api/transaction/online/query', ['date' => $date, 'status' => 'paid'])->json() );
$transactionData = $transactionDataPKB->merge($transactionDataKOOP);
$transactionDataPKB = $this->processArrahnTransactions($transactionDataPKB);
$transactionDataKOOP = $this->processArrahnTransactions($transactionDataKOOP);
$transactionData = $this->processArrahnTransactions($transactionData);
$billIds = $transactionData->keys();
$billIds = $billIds->toArray();
$billplzBills = Http::get(config('api.url_arrahn_portal') . '/api/billplz', ['bill_ids' => json_encode($billIds)])->json();
$data = array_map(fn($x, $y) => $this->processBillplzBills($x, $y), $billplzBills, [$transactionDataKOOP, $transactionDataPKB]);
[$billPlzTransactionSummaryPKB, $billPlzTransactionSummaryKOOP] = $data;
return view('online.billplz-transaction-summary.index', compact('billPlzTransactionSummaryPKB' ,'billPlzTransactionSummaryKOOP', 'date'));
}
public function processArrahnTransactions($transactionData)
{
// Group transactionData by bill_id
$transactionData = $transactionData->groupBy(function($transaction) {
return $transaction['billplz_id'];
@@ -23,15 +40,18 @@ class BillplzTransactionSummaryController extends Controller
$transactionData = array_map(fn($x) => ['arrahn_transactions' => $x], $transactionData);
$transactionData = collect($transactionData);
$billIds = $transactionData->keys();
$billplzBills = Http::get(config('api.url_arrahn_portal') . '/api/billplz', ['bill_ids' => json_encode($billIds)])->json();
$billplzBills = collect($billplzBills)->map(function($bill) {
return $transactionData;
}
public function processBillplzBills($bills_group, $transactionData)
{
$bills_group = collect($bills_group)->map(function($bill) {
$bill['paid_amount_formatted'] = floatval($bill['paid_amount']['amount']) / 100;
return $bill;
});
$sumOfArrahnTransactions = $transactionData->sum(fn($x) => array_reduce($x['arrahn_transactions'], fn($carry, $item) => $carry + $item['total_payment'], 0));
$sumOfBillplzTransactions = collect($billplzBills)->sum(fn($x) => $x['paid_amount_formatted']);
$sumOfBillplzTransactions = collect($bills_group)->sum(fn($x) => $x['paid_amount_formatted']);
$numberOfArrahnTransactions = $transactionData->count();
$paymentGatewayCost = 'RM ' . number_format($sumOfBillplzTransactions - $sumOfArrahnTransactions, 2);
@@ -39,20 +59,25 @@ class BillplzTransactionSummaryController extends Controller
$sumOfBillplzTransactions = 'RM ' . number_format($sumOfBillplzTransactions, 2);
if ($transactionData->count() !== count($billplzBills)) {
throw new \Exception("The number of items in transactionData and billplzBills must be the same.");
if ($transactionData->count() !== count($bills_group)) {
throw new \Exception("The number of items in transactionData and bills_group must be the same.");
}
$billPlzTransactionSummary = $transactionData->zip($billplzBills)->map(function ($zippedItem) {
$billPlzTransactionSummary = $transactionData->zip($bills_group)->map(function ($zippedItem) {
[$transactionData, $billplzBill] = $zippedItem;
$transactionData['billplz_bill'] = $billplzBill;
return $transactionData;
});
return view('online.billplz-transaction-summary.index', compact( 'billPlzTransactionSummary', 'sumOfArrahnTransactions', 'sumOfBillplzTransactions', 'paymentGatewayCost', 'numberOfArrahnTransactions', 'date'));
return[
'billPlzTransactionSummary' => $billPlzTransactionSummary,
'sumOfArrahnTransactions' => $sumOfArrahnTransactions,
'sumOfBillplzTransactions' => $sumOfBillplzTransactions,
'paymentGatewayCost' => $paymentGatewayCost,
'numberOfArrahnTransactions' => $numberOfArrahnTransactions,
];
}
}
@@ -10,8 +10,8 @@
</breadcrumb>
<div>
<div class="flex mb-4 border-b border-gray-200">
<div class="container p-4 mx-auto">
<div class="flex mb-0 border-b border-gray-200">
<button class="flex items-center tab-button active" data-tab="pkb-transactions-summary">
<span>PKB (v2)</span>
</button>
@@ -27,20 +27,20 @@
<div class="container px-4 mx-auto">
<div class="flex flex-col items-center">
<div class="flex flex-row mt-6 space-x-4">
<x-card title="Sum of Billplz Transactions" subtitle="{{ $sumOfBillplzTransactions }}"></x-card>
<x-card title="Sum of Billplz Transactions" subtitle="{{ $billPlzTransactionSummaryPKB['sumOfBillplzTransactions'] }}"></x-card>
<div class="flex items-center"><span class="text-5xl font-bold">-</span></div>
<x-card title="Sum of Arrahn Transactions" subtitle="{{ $sumOfArrahnTransactions }}"></x-card>
<x-card title="Sum of Arrahn Transactions" subtitle="{{ $billPlzTransactionSummaryPKB['sumOfArrahnTransactions'] }}"></x-card>
<div class="flex items-center"><span class="text-5xl font-bold"> = </span></div>
<x-card title="Payment Gateway Cost" subtitle="{{ $paymentGatewayCost }}"></x-card>
<x-card title="Payment Gateway Cost" subtitle="{{ $billPlzTransactionSummaryPKB['paymentGatewayCost'] }}"></x-card>
</div>
<hr class="w-full my-4 border-b-2 border-gray-300 border-solid">
<div class="flex flex-row mb-6 space-x-4">
<x-card title="No of Arrahn Transactions" subtitle="{{ $numberOfArrahnTransactions }}"></x-card>
<x-card title="No of Arrahn Transactions" subtitle="{{ $billPlzTransactionSummaryPKB['numberOfArrahnTransactions'] }}"></x-card>
<div class="flex items-center"><span class="text-5xl font-bold">x</span></div>
<x-card title="Charge Per Transaction" subtitle="RM 1.00"></x-card>
<div class="flex items-center"><span class="text-5xl font-bold"> = </span></div>
<x-card title="Payment Gateway Cost"
subtitle="RM {{ number_format(($numberOfArrahnTransactions * 100) / 100, 2) }}"></x-card>
subtitle="RM {{ number_format(($billPlzTransactionSummaryPKB['numberOfArrahnTransactions'] * 100) / 100, 2) }}"></x-card>
</div>
</div>
</div>
@@ -52,7 +52,7 @@
<x-table.header content="Transaction Billplz" />
</x-slot>
<x-slot name="body">
@forelse ($billPlzTransactionSummary as $data)
@forelse ($billPlzTransactionSummaryPKB['billPlzTransactionSummary'] as $data)
<tr>
<x-table.data :content="$loop->iteration" />
<x-table.data :content="$data['billplz_bill']['id']" />
@@ -118,20 +118,20 @@
<div class="container px-4 mx-auto">
<div class="flex flex-col items-center">
<div class="flex flex-row mt-6 space-x-4">
<x-card title="Sum of Billplz Transactions" subtitle="{{ $sumOfBillplzTransactions }}"></x-card>
<x-card title="Sum of Billplz Transactions" subtitle="{{ $billPlzTransactionSummaryKOOP['sumOfBillplzTransactions'] }}"></x-card>
<div class="flex items-center"><span class="text-5xl font-bold">-</span></div>
<x-card title="Sum of Arrahn Transactions" subtitle="{{ $sumOfArrahnTransactions }}"></x-card>
<x-card title="Sum of Arrahn Transactions" subtitle="{{ $billPlzTransactionSummaryKOOP['sumOfArrahnTransactions'] }}"></x-card>
<div class="flex items-center"><span class="text-5xl font-bold"> = </span></div>
<x-card title="Payment Gateway Cost" subtitle="{{ $paymentGatewayCost }}"></x-card>
<x-card title="Payment Gateway Cost" subtitle="{{ $billPlzTransactionSummaryKOOP['paymentGatewayCost'] }}"></x-card>
</div>
<hr class="w-full my-4 border-b-2 border-gray-300 border-solid">
<div class="flex flex-row mb-6 space-x-4">
<x-card title="No of Arrahn Transactions" subtitle="{{ $numberOfArrahnTransactions }}"></x-card>
<x-card title="No of Arrahn Transactions" subtitle="{{ $billPlzTransactionSummaryKOOP['numberOfArrahnTransactions'] }}"></x-card>
<div class="flex items-center"><span class="text-5xl font-bold">x</span></div>
<x-card title="Charge Per Transaction" subtitle="RM 1.00"></x-card>
<div class="flex items-center"><span class="text-5xl font-bold"> = </span></div>
<x-card title="Payment Gateway Cost"
subtitle="RM {{ number_format(($numberOfArrahnTransactions * 100) / 100, 2) }}"></x-card>
subtitle="RM {{ number_format(($billPlzTransactionSummaryKOOP['numberOfArrahnTransactions'] * 100) / 100, 2) }}"></x-card>
</div>
</div>
</div>
@@ -143,7 +143,7 @@
<x-table.header content="Transaction Billplz" />
</x-slot>
<x-slot name="body">
@forelse ($billPlzTransactionSummary as $data)
@forelse ($billPlzTransactionSummaryKOOP['billPlzTransactionSummary'] as $data)
<tr>
<x-table.data :content="$loop->iteration" />
<x-table.data :content="$data['billplz_bill']['id']" />