diff --git a/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingRefundLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingRefundLogic.php index 35a55f79..78901631 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); } 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 7f4e747c..5c920bee 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/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/pages/pdfs/purchase_order_table.blade.php b/resources/views/pages/pdfs/purchase_order_table.blade.php index 52f328d3..e96e6116 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 + $voucherDiscount; + } + ?> + {{ number_format($serviceCharge, 2) }} @if($voucher_redemption) @@ -72,10 +79,24 @@ @endif @php - $displayedTotal = bcadd(bcadd(bcadd($displayedSubtotal, round($transaction->service_charge, 2), 5), $transaction->tax, 5), $voucherDiscount, 5); - $expectedTotal = bcadd(bcadd(bcadd($subtotal, $transaction->service_charge, 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, $transaction->service_charge, 5), $transaction->tax, 5), $voucherDiscount, 5); + $total = bcadd(bcadd(bcadd($subtotal, $serviceCharge, 5), $transaction->tax, 5), $voucherDiscount, 5); @endphp 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()]; }) ]) !!}; - + diff --git a/routes/web.php b/routes/web.php index 0936a61b..ee36a74d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1355,3 +1355,7 @@ Route::get('/admin-workflow', function () { Route::get('/admin-workflow/list', function () { return view('pages.admin-workflow.list-workflow'); })->name('admin-workflow.list'); + +Route::get('/test-test', function () { + dd('test-test'); +});