add transfer fee transaction and fixed currency_vendor_order pdf calculation

This commit is contained in:
ahmedsophyudden
2022-01-08 03:28:18 +08:00
parent 77b2d21e68
commit d2d92f668e
5 changed files with 109 additions and 51 deletions
@@ -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