From 80791179f484750aa83c02456e931cee8becf8f0 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Tue, 21 Jan 2025 02:07:29 +0800 Subject: [PATCH 1/5] fix invoice refund service charge --- .../ControllersLogic/CreateBookingRefundLogic.php | 2 ++ .../Processors/CreateInvoiceDocumentProcessor.php | 14 +++++++++++++- .../bookings/elements/PaymentHistoryComponent.vue | 6 ++++++ .../pages/pdfs/purchase_order_table.blade.php | 15 +++++++++++---- 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingRefundLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingRefundLogic.php index b9cfcb44..6148291c 100644 --- a/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingRefundLogic.php +++ b/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingRefundLogic.php @@ -108,10 +108,12 @@ class CreateBookingRefundLogic extends AbstractControllerLogic // $transactionRefundCalculationObject = new TransactionRefundCalculationObject($booking, $transaction, $request->input('amount')); // $transactionRefundCalculationObject->init(); + // full refund if ((float)$request->input('amount') === (float)$transaction->original_amount) { $refundAmount = $transaction->original_amount / $transaction->currency_rate; $service_charges_to_refund = $transaction->service_charge; } else { + // partial refund $refundAmount = bcdiv($request->input('amount'), $transaction->currency_rate, 7); $bookingAmountBeforeCurrentRefund = $booking->fix_amount - $refundInPending; diff --git a/app/Classes/Modules/Transactions/Processors/CreateInvoiceDocumentProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateInvoiceDocumentProcessor.php index 1aa5210b..1db15909 100644 --- a/app/Classes/Modules/Transactions/Processors/CreateInvoiceDocumentProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CreateInvoiceDocumentProcessor.php @@ -7,6 +7,8 @@ use App\Classes\Modules\Documents\Services\CreatesFiles; use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\DocumentType; +use App\Classes\ValueObjects\Constants\TransactionType; +use App\Models\Booking; use App\Models\Document; use Illuminate\Support\Facades\Log; use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf; @@ -42,9 +44,19 @@ class CreateInvoiceDocumentProcessor */ public function execute($transaction, $purchaseOrder, $supplier, $document_type, $voucherRedemption = null) { + // calculate current Paid Amount + $booking = $transaction->owner_type == Booking::class ? $transaction->owner : null; + $currentPaidAmount = null; + if ($booking) { + $payment = $booking->transactions()->where('type', TransactionType::PAYMENT)->whereIn('status', [ApprovalStatus::COMPLETED, ApprovalStatus::APPROVED])->first(); + $refundAmount = $payment->transactions()->refunds()->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED])->sum('amount'); + $paymentAmount = $payment->amount; + $currentPaidAmount = $paymentAmount - $refundAmount; + } + $lowercaseDocumentType = strtolower($document_type); - $order_pdf = LaravelMpdf::loadView('pages.pdfs.' . $lowercaseDocumentType, ['transaction' => $transaction, 'po_order_transaction' => $purchaseOrder, 'supplier' => $supplier, 'voucher_redemption' => $voucherRedemption]); + $order_pdf = LaravelMpdf::loadView('pages.pdfs.' . $lowercaseDocumentType, ['transaction' => $transaction, 'po_order_transaction' => $purchaseOrder, 'supplier' => $supplier, 'voucher_redemption' => $voucherRedemption, 'current_paid_amount' => $currentPaidAmount]); if($purchaseOrder->booking->service_id === 4) { $purchaseOrderDocuments = $purchaseOrder->booking->documents()->where('document_type', DocumentType::ECOMMERCE_PURCHASE_ORDER)->get(); diff --git a/resources/assets/vue/components/bookings/elements/PaymentHistoryComponent.vue b/resources/assets/vue/components/bookings/elements/PaymentHistoryComponent.vue index 0d893096..f35f8573 100644 --- a/resources/assets/vue/components/bookings/elements/PaymentHistoryComponent.vue +++ b/resources/assets/vue/components/bookings/elements/PaymentHistoryComponent.vue @@ -83,6 +83,12 @@ {{item.original_currency.short_code}} {{(Math.round((totalRefunds + Number.EPSILON) * 100) / 100).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}} +
+
Service Type
+
+ {{item.booking.service.name}} ({{item.booking.service.id}}) +
+
Supplier
diff --git a/resources/views/pages/pdfs/purchase_order_table.blade.php b/resources/views/pages/pdfs/purchase_order_table.blade.php index 5862ac69..a662792c 100644 --- a/resources/views/pages/pdfs/purchase_order_table.blade.php +++ b/resources/views/pages/pdfs/purchase_order_table.blade.php @@ -53,7 +53,14 @@ Service Charges - {{ number_format($transaction->service_charge, 2) }} + service_charge; + if (isset($current_paid_amount)) { + $refundedServiceCharge = $subtotal + $serviceCharge - $current_paid_amount; + $serviceCharge = $serviceCharge - $refundedServiceCharge; + } + ?> + {{ number_format($serviceCharge, 2) }} @if($voucher_redemption) @@ -72,10 +79,10 @@ @endif @php - $displayedTotal = bcadd(bcadd(bcadd($displayedSubtotal, $transaction->service_charge, 5), $transaction->tax, 5), $voucherDiscount, 5); - $expectedTotal = bcadd(bcadd(bcadd($subtotal, $transaction->service_charge, 5), $transaction->tax, 5), $voucherDiscount, 5); + $displayedTotal = bcadd(bcadd(bcadd($displayedSubtotal, $serviceCharge, 5), $transaction->tax, 5), $voucherDiscount, 5); + $expectedTotal = bcadd(bcadd(bcadd($subtotal, $serviceCharge, 5), $transaction->tax, 5), $voucherDiscount, 5); $discrepancy = bcsub($expectedTotal, $displayedTotal, 5); - $total = bcadd(bcadd(bcadd($subtotal, $transaction->service_charge, 5), $transaction->tax, 5), $voucherDiscount, 5); + $total = bcadd(bcadd(bcadd($subtotal, $serviceCharge, 5), $transaction->tax, 5), $voucherDiscount, 5); @endphp From b990cf34148e98c33c8aae49638250b3b6418fa4 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Tue, 21 Jan 2025 11:53:13 +0800 Subject: [PATCH 2/5] disable crisp chat, change to chatdaddy --- .../assets/vue/vuex/modules/authentication.js | 30 +++++++++---------- .../accounts/payment_proof_email.blade.php | 3 +- resources/views/vendor/js.blade.php | 2 +- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/resources/assets/vue/vuex/modules/authentication.js b/resources/assets/vue/vuex/modules/authentication.js index dd45f936..ff3ad9d8 100644 --- a/resources/assets/vue/vuex/modules/authentication.js +++ b/resources/assets/vue/vuex/modules/authentication.js @@ -20,22 +20,22 @@ export default { getCompanyId: (state, getters) => getters.getDecodedAccessToken.user.company_id, getAccessToken(state, getters, dispatch) { - if(getters.isAuthenticated){ - $crisp.push(["set", "user:email", getters.getUserEmail]); - if(getters.isAdmin){ - $crisp.push(["set", "user:nickname", getters.getUserName]); - } + // if(getters.isAuthenticated){ + // $crisp.push(["set", "user:email", getters.getUserEmail]); + // if(getters.isAdmin){ + // $crisp.push(["set", "user:nickname", getters.getUserName]); + // } - if(getters.isCustomer && ('company_marking' in getters.getDecodedAccessToken.user)){ - $crisp.push(["set", "user:nickname", getters.getDecodedAccessToken.user.company_marking]); - $crisp.push(["set", "session:data", [ - [ - ["exchange-marking", getters.getDecodedAccessToken.user.company_marking], - ["company-name", getters.getDecodedAccessToken.user.company_name] - ] - ]]); - } - } + // if(getters.isCustomer && ('company_marking' in getters.getDecodedAccessToken.user)){ + // $crisp.push(["set", "user:nickname", getters.getDecodedAccessToken.user.company_marking]); + // $crisp.push(["set", "session:data", [ + // [ + // ["exchange-marking", getters.getDecodedAccessToken.user.company_marking], + // ["company-name", getters.getDecodedAccessToken.user.company_name] + // ] + // ]]); + // } + // } return state.authentication.access_token }, diff --git a/resources/views/emails/accounts/payment_proof_email.blade.php b/resources/views/emails/accounts/payment_proof_email.blade.php index b3653cdb..7e1dde56 100644 --- a/resources/views/emails/accounts/payment_proof_email.blade.php +++ b/resources/views/emails/accounts/payment_proof_email.blade.php @@ -7,5 +7,6 @@
-
If you have questions, contact us at here. We truly appreciate your trust in our services and look forward to serving you in the future.
+
If you have questions, contact us at here. We truly appreciate your trust in our services and look forward to serving you in the future.
+ @endsection \ No newline at end of file diff --git a/resources/views/vendor/js.blade.php b/resources/views/vendor/js.blade.php index 97df1105..954360e2 100644 --- a/resources/views/vendor/js.blade.php +++ b/resources/views/vendor/js.blade.php @@ -6,7 +6,7 @@ 'routes' => collect(\Route::getRoutes())->mapWithKeys(function ($route) { return [$route->getName() => $route->uri()]; }) ]) !!}; - + From d8985d9453b5c6c85d4e721ad04df79ffc30e4b6 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Feb 2025 00:28:06 +0700 Subject: [PATCH 3/5] fix error - bcadd(): Argument #2 ($num2) is not well-formed (View: /exchange-2.0/resources/views/pages/pdfs/purchase_order_table.blade.php) --- .../pages/pdfs/purchase_order_table.blade.php | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/resources/views/pages/pdfs/purchase_order_table.blade.php b/resources/views/pages/pdfs/purchase_order_table.blade.php index a662792c..24453912 100644 --- a/resources/views/pages/pdfs/purchase_order_table.blade.php +++ b/resources/views/pages/pdfs/purchase_order_table.blade.php @@ -79,7 +79,21 @@ @endif @php - $displayedTotal = bcadd(bcadd(bcadd($displayedSubtotal, $serviceCharge, 5), $transaction->tax, 5), $voucherDiscount, 5); + $displayedSubtotal = is_numeric($displayedSubtotal) ? sprintf('%F', $displayedSubtotal) : '0'; + $serviceCharge = is_numeric($serviceCharge) ? sprintf('%F', $serviceCharge) : '0'; + $tax = is_numeric($transaction->tax) ? sprintf('%F', $transaction->tax) : '0'; + $voucherDiscount = is_numeric($voucherDiscount) ? sprintf('%F', $voucherDiscount) : '0'; + + $displayedTotal = bcadd( + bcadd( + bcadd($displayedSubtotal, $serviceCharge, 5), + $tax, + 5 + ), + $voucherDiscount, + 5 + ); + $expectedTotal = bcadd(bcadd(bcadd($subtotal, $serviceCharge, 5), $transaction->tax, 5), $voucherDiscount, 5); $discrepancy = bcsub($expectedTotal, $displayedTotal, 5); $total = bcadd(bcadd(bcadd($subtotal, $serviceCharge, 5), $transaction->tax, 5), $voucherDiscount, 5); From 941a4e78e1d570ccc25743bfe96d029e5622fd0c Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Feb 2025 01:08:16 +0700 Subject: [PATCH 4/5] add a test route to trigger re deploy --- routes/web.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/routes/web.php b/routes/web.php index 80725e55..d8518e07 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1339,3 +1339,8 @@ Route::get('/site.webmanifest', function () { $contents = File::get($filePath); return response($contents, 200)->header('Content-Type', 'application/manifest+json'); }); + + +Route::get('/test-test', function () { + dd('test-test'); +}); From 14168b38371a618b22da30f94e6a6d7cd4175731 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Thu, 20 Feb 2025 10:29:22 +0800 Subject: [PATCH 5/5] debug invoice --- resources/views/pages/pdfs/purchase_order_table.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/pages/pdfs/purchase_order_table.blade.php b/resources/views/pages/pdfs/purchase_order_table.blade.php index 24453912..e96e6116 100644 --- a/resources/views/pages/pdfs/purchase_order_table.blade.php +++ b/resources/views/pages/pdfs/purchase_order_table.blade.php @@ -57,7 +57,7 @@ $serviceCharge = $transaction->service_charge; if (isset($current_paid_amount)) { $refundedServiceCharge = $subtotal + $serviceCharge - $current_paid_amount; - $serviceCharge = $serviceCharge - $refundedServiceCharge; + $serviceCharge = $serviceCharge - $refundedServiceCharge + $voucherDiscount; } ?> {{ number_format($serviceCharge, 2) }}