add calculation service charge for transaction bill

This commit is contained in:
ahmedsophyudden
2022-01-02 15:01:52 +08:00
parent 7dc3102585
commit 77b2d21e68
3 changed files with 68 additions and 22 deletions
@@ -3,31 +3,32 @@
namespace App\Classes\Modules\Transactions\ControllersLogic;
use Carbon\Carbon;
use App\Models\Document;
use Barryvdh\DomPDF\PDF;
use App\Models\Transaction;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Storage;
use Meneses\LaravelMpdf\Facades\LaravelMpdf;
use App\Classes\ValueObjects\Constants\DocumentType;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Classes\Modules\Documents\Services\CreatesFiles;
use App\Classes\ValueObjects\Constants\PaymentMethodType;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use Meneses\LaravelLaravelMpdf\Facades\LaravelLaravelMpdf;
use App\Classes\Modules\Documents\Services\CreatesDocument;
use App\Classes\Modules\Transactions\Services\CreatesTransaction;
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
use App\Classes\Modules\Documents\Services\CreatesDocument;
use App\Classes\Modules\Documents\Services\CreatesFiles;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PaymentMethodType;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Classes\ValueObjects\Constants\DocumentType;
use App\Models\Document;
use App\Models\Transaction;
use Barryvdh\DomPDF\PDF;
use Carbon\Carbon;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Meneses\LaravelLaravelMpdf\Facades\LaravelLaravelMpdf;
use Meneses\LaravelMpdf\Facades\LaravelMpdf;
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber;
use App\Classes\Modules\Transactions\Services\CalculatesTransactionServiceCharge;
class CreateSupplierTransactionLogic extends AbstractControllerLogic
{
@@ -64,6 +65,9 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic
/** @var GeneratesTransactionBillNumber */
private $generatesTransactionBillNumber;
/** @var CalculatesTransactionServiceCharge */
private $calculatesTransactionServiceCharge;
/** @var PDF */
private $pdf;
@@ -74,9 +78,10 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic
* @param UpdatesTransactionStatus $updatesTransactionStatus
* @param CreatesTransaction $createsTransaction
* @param GeneratesTransactionBillNumber $generatesTransactionBillNumber
* @param CalculatesTransactionServiceCharge $calculatesTransactionServiceCharge
* @param PDF $pdf
*/
public function __construct(FetchesCompany $fetchesCompany, FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, CreatesTransaction $createsTransaction, CreatesDocument $createsDocument, CreatesFiles $createsFile, GeneratesTransactionBillNumber $generatesTransactionBillNumber, PDF $pdf)
public function __construct(FetchesCompany $fetchesCompany, FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, CreatesTransaction $createsTransaction, CreatesDocument $createsDocument, CreatesFiles $createsFile, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CalculatesTransactionServiceCharge $calculatesTransactionServiceCharge, PDF $pdf)
{
$this->fetchesCompany = $fetchesCompany;
@@ -86,6 +91,7 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic
$this->createsDocument = $createsDocument;
$this->createsFile = $createsFile;
$this->generatesTransactionBillNumber = $generatesTransactionBillNumber;
$this->calculatesTransactionServiceCharge = $calculatesTransactionServiceCharge;
$this->pdf = $pdf;
}
@@ -106,10 +112,11 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic
$this->updatesTransactionStatus->execute($payment, ApprovalStatus::COMPLETED);
$billNumber = $this->generatesTransactionBillNumber->execute('SPLR-');
$serviceCharge = $this->calculatesTransactionServiceCharge->execute($payment->original_amount, $rate);
$object = new TransactionObject($billNumber, TransactionType::BILL, $supplier->id, 1,
$supplier->banks()->where('default', true)->first()->id, PaymentMethodType::CASH,
$payment->original_amount * (1 / $rate), $payment->original_amount, 1, $payment->original_currency_id,
$rate, 0, 0, null, ApprovalStatus::PENDING_VERIFICATION);
$rate, 0, $supplier->id == 2 ? 0 : $serviceCharge, null, ApprovalStatus::PENDING_VERIFICATION);
$transactions[] = $this->createsTransaction->execute($payment->booking, $object);
}
@@ -0,0 +1,19 @@
<?php
namespace App\Classes\Modules\Transactions\Services;
class CalculatesTransactionServiceCharge
{
/**
* @param float $amount
* @param float $rate
* @param float $transfer_fee
* @param float $service_charge
* @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;
}
}
@@ -46,9 +46,29 @@
<table style="margin-bottom: 25px; border: none;">
<tbody>
<tr>
<td width="70%" style="text-align: right;">Total amount: </td>
<td width="70%" style="text-align: right;">Sub total booking amount: </td>
<td>RMB {{number_format((float)$transactions->sum('original_amount'), 2, '.', '')}}</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>
</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>
</tr>
<tr>
<td width="70%" style="text-align: right;">Sub total amount: </td>
<td>MYR {{number_format((float)$transactions->sum('amount'), 2, '.', '')}}</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>
</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>
</tr>
</tbody>
</table>
<htmlpagefooter name="page-footer">