mirror of
https://gitlab.com/uldvstar/exchange-2.0.git
synced 2026-08-19 04:24:16 +00:00
clean up development
This commit is contained in:
@@ -85,7 +85,7 @@ class CreateSupplierTransactionProcessor
|
|||||||
$billNumber = $this->generatesTransactionBillNumber->execute('SPLR-');
|
$billNumber = $this->generatesTransactionBillNumber->execute('SPLR-');
|
||||||
$constant = SegmentConstant::where('reference', SegmentConstants::SERVICE_CHARGE)->where('detail->id', $supplier->id)->first();
|
$constant = SegmentConstant::where('reference', SegmentConstants::SERVICE_CHARGE)->where('detail->id', $supplier->id)->first();
|
||||||
|
|
||||||
$serviceCharge = $this->calculatesTransactionServiceCharge->execute($payment->original_amount, $rate, $constant ? (float) $constant->detail->amount : 0);
|
$serviceCharge = $this->calculatesTransactionServiceCharge->execute($payment->original_amount, $rate, $constant);
|
||||||
|
|
||||||
$object = new TransactionObject($billNumber, TransactionType::BILL, $supplier->id, 1,
|
$object = new TransactionObject($billNumber, TransactionType::BILL, $supplier->id, 1,
|
||||||
$supplier->banks()->where('default', true)->first()->id, PaymentMethodType::CASH,
|
$supplier->banks()->where('default', true)->first()->id, PaymentMethodType::CASH,
|
||||||
@@ -97,7 +97,7 @@ class CreateSupplierTransactionProcessor
|
|||||||
$this->pushBill($billTransaction);
|
$this->pushBill($billTransaction);
|
||||||
|
|
||||||
$transferFeeNumber = $this->generatesTransactionBillNumber->execute('TRFR-');
|
$transferFeeNumber = $this->generatesTransactionBillNumber->execute('TRFR-');
|
||||||
$transferFee = $this->calculatesTransactionTransferFee->execute($payment->original_amount);
|
$transferFee = $this->calculatesTransactionTransferFee->execute($payment->original_amount, $constant);
|
||||||
$object = new TransactionObject($transferFeeNumber, TransactionType::TRANSFER_FEE, 1, $supplier->id,
|
$object = new TransactionObject($transferFeeNumber, TransactionType::TRANSFER_FEE, 1, $supplier->id,
|
||||||
$supplier->banks()->where('default', true)->first()->id, PaymentMethodType::CASH,
|
$supplier->banks()->where('default', true)->first()->id, PaymentMethodType::CASH,
|
||||||
$payment->original_amount, $payment->original_amount, $payment->original_currency_id, $payment->original_currency_id,
|
$payment->original_amount, $payment->original_amount, $payment->original_currency_id, $payment->original_currency_id,
|
||||||
|
|||||||
@@ -2,18 +2,38 @@
|
|||||||
|
|
||||||
namespace App\Classes\Modules\Transactions\Services;
|
namespace App\Classes\Modules\Transactions\Services;
|
||||||
|
|
||||||
|
use App\Models\SegmentConstant;
|
||||||
|
|
||||||
class CalculatesTransactionServiceCharge
|
class CalculatesTransactionServiceCharge
|
||||||
{
|
{
|
||||||
|
/** @var CalculatesTransactionTransferFee */
|
||||||
|
private $calculatesTransactionTransferFee;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CalculatesTransactionServiceCharge constructor.
|
||||||
|
* @param CalculatesTransactionTransferFee $calculatesTransactionTransferFee
|
||||||
|
*/
|
||||||
|
public function __construct(CalculatesTransactionTransferFee $calculatesTransactionTransferFee)
|
||||||
|
{
|
||||||
|
$this->calculatesTransactionTransferFee = $calculatesTransactionTransferFee;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param float $amount
|
* @param float $amount
|
||||||
* @param float $rate
|
* @param float $rate
|
||||||
* @param float $service_charge
|
* @param SegmentConstant|null $service_charge
|
||||||
* @param float $transfer_fee
|
|
||||||
* @return float
|
* @return float
|
||||||
*/
|
*/
|
||||||
public function execute(float $amount, float $rate, ?float $service_charge = 0, ?float $transfer_fee = 0.00) {
|
public function execute(float $amount, float $rate, ?SegmentConstant $service_charge) {
|
||||||
return (($amount + $transfer_fee) * (1/$rate)) * $service_charge / 100;
|
|
||||||
|
if(!$service_charge) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$transfer_fee = $this->calculatesTransactionTransferFee->execute($amount, $service_charge);
|
||||||
|
return $service_charge->detail->amount->type === 'percentage' ? (($amount + $transfer_fee) * ( (float) $service_charge->detail->amount->value /100) * (1/$rate)) : (float) $service_charge->detail->amount->value;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -2,16 +2,23 @@
|
|||||||
|
|
||||||
namespace App\Classes\Modules\Transactions\Services;
|
namespace App\Classes\Modules\Transactions\Services;
|
||||||
|
|
||||||
|
use App\Models\SegmentConstant;
|
||||||
|
|
||||||
class CalculatesTransactionTransferFee
|
class CalculatesTransactionTransferFee
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param float $amount
|
* @param float $amount
|
||||||
* @param float $transfer_fee
|
* @param SegmentConstant|null $service_charge
|
||||||
* @return float
|
* @return float
|
||||||
*/
|
*/
|
||||||
public function execute(float $amount, ?float $transfer_fee = 0) {
|
public function execute(float $amount, ?SegmentConstant $service_charge) {
|
||||||
return $amount * ($transfer_fee / 100);
|
|
||||||
|
if(!$service_charge) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $service_charge->detail->transferFee->type === 'percentage' ? $amount * ((float) $service_charge->detail->transferFee->value /100) : (float) $service_charge->detail->transferFee->value;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use App\Models\Booking;
|
||||||
use App\Models\Transaction;
|
use App\Models\Transaction;
|
||||||
use App\Classes\ValueObjects\Constants\TransactionType;
|
use App\Classes\ValueObjects\Constants\TransactionType;
|
||||||
|
|
||||||
@@ -17,19 +18,23 @@ class UpdateTransactionBillOwnerSeeder extends Seeder
|
|||||||
{
|
{
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
|
|
||||||
$transaction = Transaction::where('type', TransactionType::BILL)->get();
|
$bookings = Booking::all();
|
||||||
|
|
||||||
foreach ($transaction as $key => $row) {
|
foreach ($bookings as $booking) {
|
||||||
|
|
||||||
|
$transactions = $booking->transactions()->bills()->get();
|
||||||
|
foreach ($transactions as $row) {
|
||||||
$key = 0;
|
$key = 0;
|
||||||
$bills = $row->booking->transactions()->bills()->where('original_amount', '=', $row->original_amount)->get();
|
$bills = $booking->transactions()->bills()->where('original_amount', '=', $row->original_amount)->get();
|
||||||
if(count($bills) > 1){ $key = $bills->search(function($bill)use($row){ return $bill->id === $row->id; }); }
|
if(count($bills) > 1){ $key = $bills->search(function($bill)use($row){ return $bill->id === $row->id; }); }
|
||||||
$paymentTransaction = $row->booking->transactions()->payments()->complete()->where('original_amount', '=', $row->original_amount)->skip($key)->first();
|
$paymentTransaction = $booking->transactions()->payments()->complete()->where('original_amount', '=', $row->original_amount)->skip($key)->first();
|
||||||
|
|
||||||
$row->owner_type = Transaction::class;
|
$row->owner_type = Transaction::class;
|
||||||
$row->owner_id = $paymentTransaction->id;
|
$row->owner_id = $paymentTransaction->id;
|
||||||
$row->updated_at = $row->updated_at;
|
$row->updated_at = $row->updated_at;
|
||||||
$row->update();
|
$row->update();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col-auto">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-auto p-r-10">
|
<div class="col-auto p-r-10">
|
||||||
<div class="font-heading all-caps fs-8 muted">Currencies</div>
|
<div class="font-heading all-caps fs-8 muted">Currencies</div>
|
||||||
@@ -42,7 +42,19 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="font-heading all-caps fs-10">{{item.service_charge ? parseFloat(item.service_charge.detail.amount).toFixed(3) : '0.000'}}%</div>
|
<div class="font-heading all-caps fs-10">{{item.service_charge ? ((Math.round((parseFloat(item.service_charge.detail.amount.value) + Number.EPSILON) * 1000) / 1000).toFixed(3)+ '' +(item.service_charge.detail.amount.type === 'percentage' ? '%' : ' MYR')) : '0.000%'}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-auto p-r-10">
|
||||||
|
<div class="font-heading all-caps fs-8 muted">Transfer Fee</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<div class="font-heading all-caps fs-10">{{item.service_charge ? ((Math.round((parseFloat(item.service_charge.detail.transferFee.value) + Number.EPSILON) * 1000) / 1000).toFixed(3)+ '' +(item.service_charge.detail.transferFee.type === 'percentage' ? '%' : ' FEC')) : '0.000%'}}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+66
-10
@@ -14,13 +14,49 @@
|
|||||||
<small class="bold fs-10 text-danger">{{error}}</small>
|
<small class="bold fs-10 text-danger">{{error}}</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row m-b-10">
|
<div class="row m-b-10 m-r-0">
|
||||||
<div class="col">
|
<div class="col p-r-0">
|
||||||
<validation-wrapper-component :validator="$v.parameters.amount">
|
<validation-wrapper-component :validator="$v.parameters.detail.amount.value">
|
||||||
<label>Service Charge</label>
|
<label>Service Charge (MYR)</label>
|
||||||
<input type="text" class="form-control" v-model="parameters.detail.amount" v-money="threeDecimalPercentage">
|
<input type="text" class="form-control" v-model="parameters.detail.amount.value" v-money="parameters.detail.amount.type === 'percentage' ? threeDecimalPercentage : productPrice">
|
||||||
</validation-wrapper-component>
|
</validation-wrapper-component>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-2 text-white pointer text-center" :class="[{'bg-master-lightest': parameters.detail.amount.type === 'percentage'}, {'bg-info': parameters.detail.amount.type === 'fix_amount'}]" @click="parameters.detail.amount.type = 'fix_amount'">
|
||||||
|
<div class="row h-100 align-items-center">
|
||||||
|
<div class="col p-r-20 fs-20" :class="[{'text-master': parameters.detail.amount.type === 'percentage'}]">
|
||||||
|
MYR
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-2 text-white pointer text-center" :class="[{'bg-master-lightest': parameters.detail.amount.type === 'fix_amount'}, {'bg-info': parameters.detail.amount.type === 'percentage'}]" @click="parameters.detail.amount.type = 'percentage'">
|
||||||
|
<div class="row h-100 align-items-center">
|
||||||
|
<div class="col p-r-20 fs-20" :class="[{'text-master': parameters.detail.amount.type === 'fix_amount'}]">
|
||||||
|
%
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row m-b-10 m-r-0">
|
||||||
|
<div class="col p-r-0">
|
||||||
|
<validation-wrapper-component :validator="$v.parameters.detail.transferFee.value" >
|
||||||
|
<label>Transfer Fee (FEC)</label>
|
||||||
|
<input type="text" class="form-control" v-model="parameters.detail.transferFee.value" v-money="parameters.detail.transferFee.type === 'percentage' ? threeDecimalPercentage : productPrice">
|
||||||
|
</validation-wrapper-component>
|
||||||
|
</div>
|
||||||
|
<div class="col-2 text-white pointer" :class="[{'bg-master-lightest': parameters.detail.transferFee.type === 'percentage'}, {'bg-info': parameters.detail.transferFee.type === 'fix_amount'}]" @click="parameters.detail.transferFee.type = 'fix_amount'">
|
||||||
|
<div class="row h-100 align-items-center text-center">
|
||||||
|
<div class="col p-r-20 p-l-20 fs-20" :class="[{'text-master': parameters.detail.transferFee.type === 'percentage'}]">
|
||||||
|
FEC
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-2 text-white pointer" :class="[{'bg-master-lightest': parameters.detail.transferFee.type === 'fix_amount'}, {'bg-info': parameters.detail.transferFee.type === 'percentage'}]" @click="parameters.detail.transferFee.type = 'percentage'">
|
||||||
|
<div class="row h-100 align-items-center text-center">
|
||||||
|
<div class="col p-r-20 fs-20" :class="[{'text-master': parameters.detail.transferFee.type === 'fix_amount'}]">
|
||||||
|
%
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col p-r-5">
|
<div class="col p-r-5">
|
||||||
@@ -52,30 +88,50 @@
|
|||||||
reference: 'SERVICE_CHARGE',
|
reference: 'SERVICE_CHARGE',
|
||||||
detail: {
|
detail: {
|
||||||
id: this.supplierId,
|
id: this.supplierId,
|
||||||
|
amount: {
|
||||||
type: "percentage",
|
type: "percentage",
|
||||||
amount: 0,
|
value: 0
|
||||||
|
},
|
||||||
|
transferFee: {
|
||||||
|
type: "percentage",
|
||||||
|
value: 0
|
||||||
|
},
|
||||||
|
transferCompanyId: this.supplierId
|
||||||
},
|
},
|
||||||
segment_id: 1
|
segment_id: 1
|
||||||
},
|
},
|
||||||
|
serviceChargeOptions: false,
|
||||||
|
transferFeeOptions: false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
validations: {
|
validations: {
|
||||||
parameters: {
|
parameters: {
|
||||||
amount: {
|
|
||||||
detail: {
|
detail: {
|
||||||
amount: {
|
amount: {
|
||||||
|
value: required
|
||||||
|
},
|
||||||
|
transferFee: {
|
||||||
|
value: required
|
||||||
|
},
|
||||||
|
transferCompanyId: {
|
||||||
required: true
|
required: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
},
|
},
|
||||||
created(){
|
created(){
|
||||||
if(this.data){
|
if(this.data){
|
||||||
this.parameters.detail = {
|
this.parameters.detail = {
|
||||||
id: this.supplierId,
|
id: this.supplierId,
|
||||||
type: "percentage",
|
amount: {
|
||||||
amount: parseFloat(this.data.detail.amount).toFixed(3),
|
type: this.data.detail.amount.type,
|
||||||
|
value: parseFloat(this.data.detail.amount.value).toFixed(3)
|
||||||
|
},
|
||||||
|
transferFee: {
|
||||||
|
type: this.data.detail.transferFee.type,
|
||||||
|
value: parseFloat(this.data.detail.transferFee.value).toFixed(3)
|
||||||
|
},
|
||||||
|
transferCompanyId: this.data.detail.transferCompanyId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -57,7 +57,7 @@
|
|||||||
<td>RMB {{$sub_total_booking_amount}}</td>
|
<td>RMB {{$sub_total_booking_amount}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="70%" style="text-align: right;">Transfer fee (0.002%): </td>
|
<td width="70%" style="text-align: right;">Transfer fee: </td>
|
||||||
@php
|
@php
|
||||||
$transfer_fee = number_format((float)$transferFeeTransactions->sum('service_charge'), 2, '.', '');
|
$transfer_fee = number_format((float)$transferFeeTransactions->sum('service_charge'), 2, '.', '');
|
||||||
@endphp
|
@endphp
|
||||||
|
|||||||
Reference in New Issue
Block a user