mirror of
https://gitlab.com/uldvstar/exchange-2.0.git
synced 2026-08-19 04:24:16 +00:00
add transfer fee transaction and fixed currency_vendor_order pdf calculation
This commit is contained in:
+18
-2
@@ -28,6 +28,7 @@ use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
||||
|
||||
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
|
||||
use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber;
|
||||
use App\Classes\Modules\Transactions\Services\CalculatesTransactionTransferFee;
|
||||
use App\Classes\Modules\Transactions\Services\CalculatesTransactionServiceCharge;
|
||||
|
||||
class CreateSupplierTransactionLogic extends AbstractControllerLogic
|
||||
@@ -68,6 +69,9 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic
|
||||
/** @var CalculatesTransactionServiceCharge */
|
||||
private $calculatesTransactionServiceCharge;
|
||||
|
||||
/** @var CalculatesTransactionTransferFee */
|
||||
private $calculatesTransactionTransferFee;
|
||||
|
||||
/** @var PDF */
|
||||
private $pdf;
|
||||
|
||||
@@ -79,9 +83,10 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic
|
||||
* @param CreatesTransaction $createsTransaction
|
||||
* @param GeneratesTransactionBillNumber $generatesTransactionBillNumber
|
||||
* @param CalculatesTransactionServiceCharge $calculatesTransactionServiceCharge
|
||||
* @param CalculatesTransactionTransferFee $calculatesTransactionTransferFee
|
||||
* @param PDF $pdf
|
||||
*/
|
||||
public function __construct(FetchesCompany $fetchesCompany, FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, CreatesTransaction $createsTransaction, CreatesDocument $createsDocument, CreatesFiles $createsFile, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CalculatesTransactionServiceCharge $calculatesTransactionServiceCharge, PDF $pdf)
|
||||
public function __construct(FetchesCompany $fetchesCompany, FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, CreatesTransaction $createsTransaction, CreatesDocument $createsDocument, CreatesFiles $createsFile, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CalculatesTransactionServiceCharge $calculatesTransactionServiceCharge, CalculatesTransactionTransferFee $calculatesTransactionTransferFee, PDF $pdf)
|
||||
{
|
||||
|
||||
$this->fetchesCompany = $fetchesCompany;
|
||||
@@ -92,6 +97,7 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic
|
||||
$this->createsFile = $createsFile;
|
||||
$this->generatesTransactionBillNumber = $generatesTransactionBillNumber;
|
||||
$this->calculatesTransactionServiceCharge = $calculatesTransactionServiceCharge;
|
||||
$this->calculatesTransactionTransferFee = $calculatesTransactionTransferFee;
|
||||
$this->pdf = $pdf;
|
||||
}
|
||||
|
||||
@@ -102,6 +108,7 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic
|
||||
$rate = $request->input('rate');
|
||||
|
||||
$transactions = collect();
|
||||
$transferFeeTransactions = collect();
|
||||
|
||||
foreach($request->input('payments') as $payment){
|
||||
|
||||
@@ -119,11 +126,20 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic
|
||||
$rate, 0, $supplier->id == 2 ? 0 : $serviceCharge, null, ApprovalStatus::PENDING_VERIFICATION);
|
||||
|
||||
$transactions[] = $this->createsTransaction->execute($payment->booking, $object);
|
||||
|
||||
$transferFeeNumber = $this->generatesTransactionBillNumber->execute('TRFR-');
|
||||
$trasferFee = $this->calculatesTransactionTransferFee->execute($payment->original_amount);
|
||||
$object = new TransactionObject($transferFeeNumber, TransactionType::TRANSFER_FEE, 1, $supplier->id,
|
||||
$supplier->banks()->where('default', true)->first()->id, PaymentMethodType::CASH,
|
||||
$payment->original_amount, $payment->original_amount, $payment->original_currency_id, $payment->original_currency_id,
|
||||
1, 0, $trasferFee, null, ApprovalStatus::PENDING_VERIFICATION);
|
||||
|
||||
$transferFeeTransactions[] = $this->createsTransaction->execute($payment->booking, $object);
|
||||
}
|
||||
|
||||
if(!count($transactions)) return $this->response([]);
|
||||
|
||||
$pdf = LaravelMpdf::loadView('pages.pdfs.currency_vendor_order', ['transactions' => $transactions, 'supplier' => $supplier]);
|
||||
$pdf = LaravelMpdf::loadView('pages.pdfs.currency_vendor_order', ['transactions' => $transactions, 'transferFeeTransactions' => $transferFeeTransactions, 'supplier' => $supplier]);
|
||||
|
||||
$path = Str::studly($supplier->name).'_'.Carbon::now()->format('Y_m_d_h_s_i').'.pdf';
|
||||
|
||||
|
||||
@@ -8,12 +8,12 @@ class CalculatesTransactionServiceCharge
|
||||
/**
|
||||
* @param float $amount
|
||||
* @param float $rate
|
||||
* @param float $transfer_fee
|
||||
* @param float $service_charge
|
||||
* @param float $transfer_fee
|
||||
* @return float
|
||||
*/
|
||||
public function execute(float $amount, float $rate, ?float $transfer_fee = 0.002, ?float $service_charge = 0.75) {
|
||||
return (($amount + ($amount * $transfer_fee/100)) * (1/$rate)) * $service_charge / 100;
|
||||
public function execute(float $amount, float $rate, ?float $service_charge = 0.75, ?float $transfer_fee = 0.00) {
|
||||
return (($amount + $transfer_fee) * (1/$rate)) * $service_charge / 100;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Transactions\Services;
|
||||
|
||||
class CalculatesTransactionTransferFee
|
||||
{
|
||||
|
||||
/**
|
||||
* @param float $amount
|
||||
* @param float $transfer_fee
|
||||
* @return float
|
||||
*/
|
||||
public function execute(float $amount, ?float $transfer_fee = 0.002) {
|
||||
return $amount * $transfer_fee/100;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -25,4 +25,6 @@ final class TransactionType {
|
||||
public const CREDIT_NOTE = 9;
|
||||
|
||||
public const WITHDRAW = 10;
|
||||
|
||||
public const TRANSFER_FEE = 11;
|
||||
}
|
||||
|
||||
@@ -1,29 +1,33 @@
|
||||
@extends('layouts.base_pdf')
|
||||
@section('inner_content')
|
||||
<style>
|
||||
table, th, td {
|
||||
border: 1px solid black;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
th, td {
|
||||
padding: 15px;
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
table,
|
||||
th,
|
||||
td {
|
||||
border: 1px solid black;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
th,
|
||||
td {
|
||||
padding: 15px;
|
||||
}
|
||||
</style>
|
||||
<br>
|
||||
<htmlpageheader name="page-header">
|
||||
<br>
|
||||
<htmlpageheader name="page-header">
|
||||
<br>
|
||||
<table style="margin-bottom: 25px; border: none;">
|
||||
<tbody>
|
||||
<table style="margin-bottom: 25px; border: none;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{$supplier->name}}</td>
|
||||
<td>{{\Carbon\Carbon::now('Asia/Singapore')->format('d-m-Y h:s')}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</htmlpageheader>
|
||||
<br>
|
||||
<table style="width:100%">
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
</htmlpageheader>
|
||||
<br>
|
||||
<table style="width:100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Reference</td>
|
||||
<td>Marking</td>
|
||||
@@ -32,50 +36,69 @@
|
||||
<td>Bank in Details</td>
|
||||
</tr>
|
||||
@foreach($transactions as $transaction)
|
||||
<tr style="margin-bottom: 10px;">
|
||||
<td>{{$transaction->booking->marking}}</td>
|
||||
<td>{{$transaction->booking->company->reference}}</td>
|
||||
<td>{{$transaction->currency_rate}}</td>
|
||||
<td>{{$transaction->currency->short_code}} {{number_format((float)$transaction->amount, 2, '.', '')}}</td>
|
||||
<td>Account Holder Name: {{$transaction->booking->bank->holder_name}}<br>{{$transaction->booking->bank->bank_name}}: {{$transaction->booking->bank->account_no}}
|
||||
<br>Branch: {{$transaction->booking->bank->bank_branch}}<br>Bank in Amount: {{$transaction->original_currency->short_code}} {{$transaction->original_amount}}</td>
|
||||
</tr>
|
||||
<tr style="margin-bottom: 10px;">
|
||||
<td>{{$transaction->booking->marking}}</td>
|
||||
<td>{{$transaction->booking->company->reference}}</td>
|
||||
<td>{{$transaction->currency_rate}}</td>
|
||||
<td>{{$transaction->currency->short_code}} {{number_format((float)$transaction->amount, 2, '.', '')}}</td>
|
||||
<td>Account Holder Name: {{$transaction->booking->bank->holder_name}}<br>{{$transaction->booking->bank->bank_name}}: {{$transaction->booking->bank->account_no}}
|
||||
<br>Branch: {{$transaction->booking->bank->bank_branch}}<br>Bank in Amount: {{$transaction->original_currency->short_code}} {{$transaction->original_amount}}
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
<table style="margin-bottom: 25px; border: none;">
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
<table style="margin-bottom: 25px; border: none;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td width="70%" style="text-align: right;">Sub total booking amount: </td>
|
||||
<td>RMB {{number_format((float)$transactions->sum('original_amount'), 2, '.', '')}}</td>
|
||||
@php
|
||||
$sub_total_booking_amount = number_format((float)$transactions->sum('original_amount'), 2, '.', '');
|
||||
@endphp
|
||||
<td>RMB {{$sub_total_booking_amount}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="70%" style="text-align: right;">Transfer fee (0.002%): </td>
|
||||
<td>RMB {{number_format((float)$transactions->sum('original_amount') * 0.002 / 100, 2, '.', '')}}</td>
|
||||
@php
|
||||
$transfer_fee = number_format((float)$transferFeeTransactions->sum('service_charge'), 2, '.', '');
|
||||
@endphp
|
||||
<td>RMB {{$transfer_fee}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="70%" style="text-align: right;">Total booking amount: </td>
|
||||
<td>RMB {{number_format((float) ($transactions->sum('original_amount') +($transactions->sum('original_amount') * 0.002 / 100)), 2, '.', '')}}</td>
|
||||
@php
|
||||
$total_booking_amount = number_format((float) ($transactions->sum('original_amount') + $transfer_fee), 2, '.', '');
|
||||
@endphp
|
||||
<td>RMB {{$total_booking_amount}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="70%" style="text-align: right;">Sub total amount: </td>
|
||||
<td>MYR {{number_format((float)$transactions->sum('amount'), 2, '.', '')}}</td>
|
||||
@php
|
||||
$sub_total_amount = number_format((float)$transactions->sum('amount') + ($transfer_fee * 1/$transactions[0]->currency_rate), 2, '.', '');
|
||||
@endphp
|
||||
<td>MYR {{$sub_total_amount}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="70%" style="text-align: right;">Service charge ({{ $supplier->id == 2 ? 0 : '0.75%' }}): </td>
|
||||
<td>MYR {{number_format((float)$transactions->sum('service_charge'), 2, '.', '')}}</td>
|
||||
<td width="70%" style="text-align: right;">Service charge ({{ $supplier->id == 2 ? '0.00' : '0.75%' }}): </td>
|
||||
@php
|
||||
$service_charge = number_format((float)$sub_total_amount * 0.75 / 100, 2, '.', '');
|
||||
@endphp
|
||||
<td>MYR {{$service_charge}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="70%" style="text-align: right;">Total amount: </td>
|
||||
<td>MYR {{number_format((float) ($transactions->sum('amount') + $transactions->sum('service_charge')), 2, '.', '')}}</td>
|
||||
@php
|
||||
$total_amount = number_format((float)$sub_total_amount + $service_charge, 2, '.', '');
|
||||
@endphp
|
||||
<td>MYR {{$total_amount}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<htmlpagefooter name="page-footer">
|
||||
<table width="100%" style="border: none;">
|
||||
<tr>
|
||||
<td style="text-align: right; ">Page {PAGENO} of {nbpg}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<htmlpagefooter name="page-footer">
|
||||
<table width="100%" style="border: none;">
|
||||
<tr>
|
||||
<td style="text-align: right; ">Page {PAGENO} of {nbpg}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</htmlpagefooter>
|
||||
</htmlpagefooter>
|
||||
@endsection
|
||||
Reference in New Issue
Block a user