Merge branch 'supplier-bill-group-dashboard' of gitlab.com:CIEFWorldwideSdnBhd/exchange-2.0 into development

This commit is contained in:
Jia Sheng
2024-07-22 00:46:40 +08:00
7 changed files with 48 additions and 40 deletions
@@ -139,7 +139,7 @@ class CreateSupplierBillGroupLogic extends AbstractControllerLogic
$billGroup->issuer = $supplier->id;
$billGroup->receiver = 1;
$billGroup->reference = $this->generatesTransactionBillNumber->execute('BSPO-');
$billGroup->amount = $amount;
$billGroup->amount = $amount + $service_charges;
$billGroup->original_amount = $original_amount;
$billGroup->currency_id = 1;
$billGroup->original_currency_id = $payments[0]['original_currency']['id'];
@@ -28,7 +28,8 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic
/**
* @return array
*/
protected function notification():array {
protected function notification(): array
{
return [
'title' => 'Create Supplier Transactions',
'message' => 'You have successfully created currency supplier transactions'
@@ -73,7 +74,7 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic
$this->fetchesTransaction = $fetchesTransaction;
}
public function logic(Request $request) : JsonResponse
public function logic(Request $request): JsonResponse
{
$supplier = $this->fetchesCompany->execute(['id' => $request->route('id')]);
@@ -83,7 +84,7 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic
$payments = $request->input('payments');
// todo-refund: activate this for partial refund
foreach($payments as $payment){
foreach ($payments as $payment) {
$payment = $this->fetchesTransaction->execute(['id' => $payment['id']]);
$pendingRefundRequest = $payment->transactions()->refunds()->where('status', ApprovalStatus::PENDING_VERIFICATION)->first();
@@ -101,7 +102,7 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic
$this->createSupplierTransactionProcessor->execute($supplier, $rate, $payments);
if(!count($this->createSupplierTransactionProcessor->getBills())) return $this->response([]);
if (!count($this->createSupplierTransactionProcessor->getBills())) return $this->response([]);
$group = new Group();
$group->save();
@@ -131,7 +132,7 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic
$transferFee = (float)$this->createSupplierTransactionProcessor->getTransferTransactions()->sum('service_charge');
$original_amount += $transferFee;
$amount += $transferFee / $currency_rate;
$amount = $amount + ($transferFee / $currency_rate) + $service_charge;
$group->issuer = $issuer;
$group->receiver = $receiver;
@@ -150,7 +151,7 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic
$object = new DocumentObject(
DocumentType::CURRENCY_VENDOR_ORDER,
[chunk_split('data:application/pdf;base64,'.base64_encode($pdf->output()))],
[chunk_split('data:application/pdf;base64,' . base64_encode($pdf->output()))],
'',
ApprovalStatus::COMPLETED,
'currency_vendor_order'
@@ -224,7 +224,7 @@ class UpdateGroupLogic extends AbstractControllerLogic
$group->issuer = $supplier->id;
$group->original_amount = $group->transactions()->sum('original_amount') + ((float)$transferFeeTransactions->sum('service_charge') + (float)$group_transfer_fee_original_amount);
$group->amount = $group->transactions()->sum('amount') + (((float)$transferFeeTransactions->sum('service_charge') + (float)$group_transfer_fee_original_amount) / $rate);
$group->amount = $group->transactions()->sum('amount') + (((float)$transferFeeTransactions->sum('service_charge') + (float)$group_transfer_fee_original_amount) / $rate) + $group->transactions()->sum('service_charge');
$group->currency_rate = $rate;
$group->tax = $group->transactions()->sum('tax');
$group->service_charge = $group->transactions()->sum('service_charge');
@@ -12,7 +12,7 @@ class CalculatesBillGroupPaymentAmount
$bill_refund_amount = round(floatval($billGroup->billRefunds->sum('amount')), 7);
$floating_amount = round(floatval($billGroup->transactions()->whereIn('status', [ApprovalStatus::PENDING_SUBMISSION, ApprovalStatus::PENDING_VERIFICATION])->sum('amount')), 7);
$paid_amount = round(floatval($billGroup->transactions()->where('status', ApprovalStatus::APPROVED)->sum('amount')), 7);
$outstanding_amount = $billGroup->amount - $bill_refund_amount - $paid_amount - $floating_amount + $billGroup->service_charge;
$outstanding_amount = $billGroup->amount - $bill_refund_amount - $paid_amount - $floating_amount;
$outstanding_amount = round($outstanding_amount, 7);
return [
@@ -53,7 +53,7 @@ class UpdateBillGroupAndGroupToIncludeTransferFee extends Command
{
// update group to include transfer fee
$groups = Group::all();
$groups = Group::where('created_at', '>=', '2024-06-01')->get();
foreach ($groups as $group) {
$group_transfer_fee = 0;
@@ -70,7 +70,7 @@ class UpdateBillGroupAndGroupToIncludeTransferFee extends Command
$correctOriginalAmount = $correctOriginalAmount + $originalTransferFees + $group_transfer_fee;
$correctAmount = $group->transactions()->sum('amount');
$transferFees = $originalTransferFees / $group->currency_rate;
$correctAmount = $correctAmount + $transferFees + ($group_transfer_fee / $group->currency_rate);
$correctAmount = $correctAmount + $transferFees + ($group_transfer_fee / $group->currency_rate) + $group->service_charge;
if ($group->original_amount != $correctOriginalAmount || $group->amount != $correctAmount) {
$group->original_amount = $correctOriginalAmount;
@@ -112,15 +112,16 @@ class UpdateBillGroupAndGroupToIncludeTransferFee extends Command
continue;
}
$totalOriginal = $billGroup->groups()->sum('original_amount');
$total = $billGroup->groups()->sum('amount');
$totalOriginal = round($billGroup->groups()->sum('original_amount'), 2);
$total = round($billGroup->groups()->sum('amount') + $billGroup->service_charge, 2);
// update bill group payment transaction amount if there is only 1 payment transaction
$payment_transactions = $billGroup->transactions()->whereIn('status', [ApprovalStatus::PENDING_SUBMISSION, ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->get();
if ($payment_transactions->count() === 1) {
$payment_transaction = $payment_transactions->first();
if ($payment_transaction->amount === $billGroup->amount) {
if ($payment_transaction->amount - ($billGroup->amount + $billGroup->service_charge) < 0.01) {
$payment_transaction->original_amount = $total;
$payment_transaction->amount = $total;
$payment_transaction->save();
@@ -19,7 +19,7 @@
<div class="font-heading all-caps fs-12"></div>
</div>
<div class="col-auto text-right" v-if="selectedBillGroup.id">
<div class="font-heading fs-12">{{selectedBillGroup.currency.short_code}} {{formatAmount(selectedBillGroup.amount)}}</div>
<div class="font-heading fs-12">{{selectedBillGroup.currency.short_code}} {{formatAmount(selectedBillGroup.amount - selectedBillGroup.service_charge)}}</div>
</div>
<div class="col-auto text-right" v-else>
<div class="font-heading fs-12">MYR 0.00</div>
@@ -49,38 +49,40 @@
</div>
<div class="row align-items-end m-b-10 text-success">
<div class="col">
<div class="font-heading all-caps fs-12">Paid Total:</div>
<div class="font-heading all-caps fs-12" :class="{'bold': section === 'paidBillGroupList'}">Paid Total:</div>
</div>
<div class="col-auto text-right" v-if="selectedBillGroup.id">
<div class="font-heading fs-12">{{selectedBillGroup.currency.short_code}} {{ formatAmount(selectedBillGroup.paid_amount) }}</div>
<div class="font-heading fs-12" :class="{'bold': section === 'paidBillGroupList'}">{{selectedBillGroup.currency.short_code}} {{ formatAmount(selectedBillGroup.paid_amount) }}</div>
</div>
<div class="col-auto text-right" v-else>
<div class="font-heading fs-12">MYR 0.00</div>
<div class="font-heading fs-12" :class="{'bold': section === 'paidBillGroupList'}">MYR 0.00</div>
</div>
</div>
<div class="row align-items-end m-b-10">
<div class="col">
<div class="font-heading all-caps fs-12">Floating Amount:</div>
<div v-if="section !== 'paidBillGroupList'">
<div class="row align-items-end m-b-10">
<div class="col">
<div class="font-heading all-caps fs-12">Floating Amount:</div>
</div>
<div class="col-auto text-right" v-if="selectedBillGroup.id">
<div class="font-heading fs-12">{{selectedBillGroup.currency.short_code}} {{ formatAmount(selectedBillGroup.floating_amount) }}</div>
</div>
<div class="col-auto text-right" v-else>
<div class="font-heading fs-12">MYR 0.00</div>
</div>
</div>
<div class="col-auto text-right" v-if="selectedBillGroup.id">
<div class="font-heading fs-12">{{selectedBillGroup.currency.short_code}} {{ formatAmount(selectedBillGroup.floating_amount) }}</div>
</div>
<div class="col-auto text-right" v-else>
<div class="font-heading fs-12">MYR 0.00</div>
<div class="row align-items-end bold text-danger">
<div class="col">
<div class="font-heading all-caps fs-12">OutStanding Total:</div>
</div>
<div class="col-auto text-right" v-if="selectedBillGroup.id">
<div class="font-heading fs-12">{{selectedBillGroup.currency.short_code}} {{ formatAmount(selectedBillGroup.outstanding_amount) }}</div>
</div>
<div class="col-auto text-right" v-else>
<div class="font-heading fs-12">MYR 0.00</div>
</div>
</div>
</div>
<div class="row align-items-end bold text-danger">
<div class="col">
<div class="font-heading all-caps fs-12">OutStanding Total:</div>
</div>
<div class="col-auto text-right" v-if="selectedBillGroup.id">
<div class="font-heading fs-12">{{selectedBillGroup.currency.short_code}} {{ formatAmount(selectedBillGroup.outstanding_amount) }}</div>
</div>
<div class="col-auto text-right" v-else>
<div class="font-heading fs-12">MYR 0.00</div>
</div>
</div>
<div v-if="selectedBillGroup.status === 0 && (selectedBillGroup.outstanding_amount > 0 || (selectedBillGroup.bill_refund_amount === (selectedBillGroup.amount + selectedBillGroup.service_charge) && !selectedBillGroup.payment_history.some((item)=> [0, 1, 2, 3].includes(item.status))))">
<div v-if="section === 'paymentInProgressBillGroupList' && selectedBillGroup.status === 0 && (selectedBillGroup.outstanding_amount > 0 || (selectedBillGroup.bill_refund_amount === (selectedBillGroup.amount + selectedBillGroup.service_charge) && !selectedBillGroup.payment_history.some((item)=> [0, 1, 2, 3].includes(item.status))))">
<div class="row p-r-15 m-t-20 m-b-10">
<div class="col p-r-0">
<validation-wrapper-component :validator="$v.parameters.payAmount">
@@ -129,6 +131,10 @@
type: Function,
required: true
},
section:{
type: String,
required: true
},
},
watch: {
selectedBillGroup(){
@@ -66,8 +66,8 @@
</div>
</div>
</div>
<div class="col-12 col-md" v-if="section === 'paymentInProgressBillGroupList'">
<bill-group-payment-summary-component :selectedBillGroup="selectedBillGroup" :refreshList="updateList" section="paymentInProgressBillGroupList"></bill-group-payment-summary-component>
<div class="col-12 col-md">
<bill-group-payment-summary-component :selectedBillGroup="selectedBillGroup" :refreshList="updateList" :section="section"></bill-group-payment-summary-component>
</div>
</div>
</div>