From 130aa78dfe057eaafe70dbb8acfb0969d33490e3 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Fri, 1 May 2026 10:13:38 +0800 Subject: [PATCH] Fix a 504 Endpoint request timed out error at customer payment-and-billing page with storage invoice --- ...heckStorageInvoiceTransactionProcessor.php | 3 +- .../TransactionForStorageResource.php | 157 ++++++++++++++++++ .../PaymentsBillingVariant2Components.vue | 6 +- 3 files changed, 162 insertions(+), 4 deletions(-) create mode 100644 app/Http/Resources/TransactionForStorageResource.php diff --git a/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php index 1e98267d..161ac253 100644 --- a/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php @@ -25,6 +25,7 @@ use App\Classes\ValueObjects\Constants\PackingListType; use App\Classes\ValueObjects\Constants\TaxPercentage; use App\Classes\ValueObjects\Constants\TransactionDetailType; use App\Http\Resources\TransactionWithStorageResource; +use App\Http\Resources\TransactionForStorageResource; use App\Models\Order; use App\Models\PackingList; use App\Models\Transaction; @@ -379,7 +380,7 @@ class CheckStorageInvoiceTransactionProcessor 'currentDate' => $dt2->format('Y-m-d H:i:s'), 'cbm' => $cbm, 'pricePerCBM' => $pricePerCBM, - 'storageInvoice' => new TransactionWithStorageResource($storageInvoice) + 'storageInvoice' => new TransactionForStorageResource($storageInvoice) ]; return $result; } diff --git a/app/Http/Resources/TransactionForStorageResource.php b/app/Http/Resources/TransactionForStorageResource.php new file mode 100644 index 00000000..e2a975b9 --- /dev/null +++ b/app/Http/Resources/TransactionForStorageResource.php @@ -0,0 +1,157 @@ +owner instanceof Transaction) { + if ($this->owner) { + if ($this->owner->owner) { + $order = new OrderResource($this->owner->owner->owner); + } + } + } else if (!($this->owner instanceof Transaction) && !($this->owner instanceof Wallet)) { + if ($this->owner) { + $order = new OrderResource($this->owner->owner); + } + + if($this->groups){ + $group_payment_attempts = GroupForOrderV2Resource::collection($this->groups->whereNotIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])); + $group_payment_expired = GroupForOrderV2Resource::collection($this->groupsWithTrashed->whereIn('status', [ApprovalStatus::EXPIRED])); + $group_payment_history_query = $this->groups->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::REJECTED]); + $group_payment_history = GroupForOrderV2Resource::collection($group_payment_history_query); + } + + } else { + $group = Group::where('reference', $this->payment_reference)->first(); + if ($group) { + $groupTransactions = GroupTransactionResource::collection($group->groupTransactions); + } + + } + + $packingListReference = null; + if ($this->owner instanceof PackingList) { + $packingListReference = $this->owner->reference; + } + + $ts = $this->groups->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION])->last(); + if ($ts && $group_payment_history && $group_payment_attempts) { + $paymentTransaction = Transaction::where('payment_reference', $ts->reference)->whereIn('status', [ApprovalStatus::PENDING_SUBMISSION])->first(); + if($paymentTransaction){ + $groupTotalAmount = (double) $this->amount; + + foreach ($group_payment_history as $key => $value) { + if ($value->id === $ts->id && $value->reference === $ts->reference) { + unset($group_payment_history[$key]); + } + } + + foreach ($group_payment_attempts as $key => $value) { + if ($value->id === $ts->id && $value->reference == $ts->reference) { + $groupPaymentAttemptsFiltered[$key] = $value; + } + } + } + } + + + $payment_history = TransactionResource::collection($this->transactions() + ->payments() + ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::COMPLETED, ApprovalStatus::REJECTED]) + ->get()); + + //For 'Your Payment Proof' at frontend + + if($group_payment_history_query && count($group_payment_history_query) > 0){ + if($this->getReferenceForGroupPayment($group_payment_history_query)){ + foreach ($payment_history as $item) { + $item['payment_reference'] = $this->getReferenceForGroupPayment($group_payment_history_query); + } + } + } + + return [ + 'id' => $this->id, + // 'owner_type' => $this->owner_type, + 'order' => $order, + // 'group_transactions' => $groupTransactions, + // 'group_reference' => $groupTransactions ? ($group ? $group->reference : null ) : null, + // 'groups_payment_attempts' => $groupPaymentAttemptsFiltered, + // 'groups_payment_expired' => $group_payment_expired, + // 'groups_payment_history' => $group_payment_history, + // 'documents' => $groupTransactions ? DocumentResource::collection($this->documents->where('status', ApprovalStatus::PENDING_VERIFICATION)) : DocumentResource::collection($this->documents), + // 'type' => (int) $this->type, + 'bill_no' => $this->bill_no, + 'amount' => (double) $this->amount, + // 'payment_method' => (int) $this->payment_method, + // 'payment_reference' => $this->payment_reference, + // 'outstanding' => (double) $this->amount - ($this->transactions()->where('type', TransactionType::PAYMENT)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->sum('amount')), + // 'floating' => $group_payment_attempts ? $groupTotalAmount : (double) $this->transactions()->where('type', TransactionType::PAYMENT)->whereIn('status', [ApprovalStatus::PENDING_SUBMISSION, ApprovalStatus::PENDING_VERIFICATION])->sum('amount'), + // 'service_charge' => (double) $this->service_charge, + // 'tax' => (double) $this->tax, + // 'original_amount' => (double) $this->original_amount, + // 'currency' => new CurrencyResource($this->currency), + // 'original_currency' => new CurrencyResource($this->original_currency), + // 'currency_rate' => (double) $this->currency_rate, + // 'status' => (int) $this->status, + // 'details' => TransactionDetailResource::collection($this->transactionDetails), + // 'transactions' => TransactionResource::collection($this->transactions), + // 'payment_attempts' => TransactionResource::collection( + // $this->transactions() + // ->payments()->where('status', ApprovalStatus::PENDING_SUBMISSION) + // ->get() + // ), + // 'payments_expired' => TransactionResource::collection( + // $this->transactions() + // ->payments()->where('status', ApprovalStatus::EXPIRED) + // ->get() + // ), + // 'payment_history' => $payment_history, + // 'remarks' => RemarkResource::collection($this->remarks), + // 'packing_list_reference' => $packingListReference, + // 'storages' => $this->storages ? $this->storages : null, //from middleware + // 'is_waived' => (int) $this->is_waived, + // 'expires_on' => Carbon::parse($this->expires_on)->format('d-m-Y h:i:s A'), + // 'updated_at' => Carbon::parse($this->updated_at)->format('d-m-Y'), + 'created_at' => Carbon::parse($this->created_at)->format('d-m-Y'), + // 'is_einvoice_applicable' => Carbon::parse($this->created_at)->isAfter(Carbon::parse(env('E_INVOICE_START_DATE', '2025-07-01 00:00:00'))) && $this->is_einvoice_applicable, + ]; + } + + private function getReferenceForGroupPayment($groups){ + if (is_array($groups) && count($groups) > 0) { + $firstGroup = $groups[0]; + return $firstGroup['reference']; + } + return null; + } +} diff --git a/resources/assets/vue/components/paymentsBilling/elements/PaymentsBillingVariant2Components.vue b/resources/assets/vue/components/paymentsBilling/elements/PaymentsBillingVariant2Components.vue index ffb04129..efd6c36f 100644 --- a/resources/assets/vue/components/paymentsBilling/elements/PaymentsBillingVariant2Components.vue +++ b/resources/assets/vue/components/paymentsBilling/elements/PaymentsBillingVariant2Components.vue @@ -52,7 +52,7 @@ -->
-
+
@@ -82,7 +82,7 @@
-
+
@@ -112,7 +112,7 @@
-
+