create Wallet Transaction - integration (convert the amount)

This commit is contained in:
weiken.intex
2020-12-06 22:01:42 +08:00
parent f08a863e2c
commit 3eef8cff25
4 changed files with 70 additions and 7 deletions
@@ -12,4 +12,9 @@ class RateCalculatesCurrency extends AbstractUpdateRecord
{
return $convert_amount = ($conversion_currency->selling / $convertable_currency->selling) * $amount;
}
public function execute_rate(Currency $conversion_currency, Currency $convertable_currency)
{
return $convert_rate = ($conversion_currency->selling / $convertable_currency->selling);
}
}
@@ -9,6 +9,10 @@ use App\Classes\Modules\Wallets\DataTransferObjects\WalletTransactionObject;
use App\Classes\Modules\Wallets\Services\CreatesWalletTransaction;
use App\Classes\Modules\Wallets\Services\GeneratesWalletTransactionBillNo;
use App\Http\Resources\WalletTransactionResource;
use App\Classes\Modules\Wallets\Services\FetchesWallet;
use App\Classes\Modules\Currencies\Services\FetchesCurrency;
use App\Classes\Modules\Currencies\Services\RateCalculatesCurrency;
/*
use App\Classes\Modules\Accounts\Standards\Rules\CanCreateUser;
use App\Classes\Modules\Accounts\Services\CreatesUser;
@@ -58,6 +62,12 @@ class CreateWalletTransactionLogic extends AbstractControllerLogic
/** @var CanCreateWalletTransaction */
private $canCreateWalletTransaction;
private $fetchesCurrency;
private $rateCalculatesCurrency;
private $fetchesWallet;
/**
* CreateWalletLogic constructor.
@@ -65,11 +75,17 @@ class CreateWalletTransactionLogic extends AbstractControllerLogic
* @param GeneratesWalletCode $generatesWalletCode
* @param CanCreateCompanyWallet $canCreateCompanyWallet
*/
public function __construct(CreatesWalletTransaction $createsWalletTransaction, GeneratesWalletTransactionBillNo $generatesWalletTransactionBillNo, CanCreateWalletTransaction $canCreateWalletTransaction)
public function __construct(
CreatesWalletTransaction $createsWalletTransaction, GeneratesWalletTransactionBillNo $generatesWalletTransactionBillNo, CanCreateWalletTransaction $canCreateWalletTransaction,
FetchesCurrency $fetchesCurrency,RateCalculatesCurrency $rateCalculatesCurrency, FetchesWallet $fetchesWallet
)
{
$this->createsWalletTransaction = $createsWalletTransaction;
$this->generatesWalletTransactionBillNo = $generatesWalletTransactionBillNo;
$this->canCreateWalletTransaction = $canCreateWalletTransaction;
$this->fetchesCurrency = $fetchesCurrency;
$this->rateCalculatesCurrency = $rateCalculatesCurrency;
$this->fetchesWallet = $fetchesWallet;
}
/**
@@ -82,12 +98,19 @@ class CreateWalletTransactionLogic extends AbstractControllerLogic
try {
DB::beginTransaction();
$wallet = $this->fetchesWallet->execute(['id' => $request->route('id')]);
$conversion_currency = $this->fetchesCurrency->execute(['id' => $request->input('currency_id')]);
$convertable_currency = $this->fetchesCurrency->execute(['id' => $wallet->currency_id]);//MYR
$convert_amount = $this->rateCalculatesCurrency->execute($conversion_currency, $convertable_currency, $request->input('amount'));
$convert_rate = $this->rateCalculatesCurrency->execute_rate($conversion_currency, $convertable_currency);
$object = new WalletTransactionObject(
$request->route('id'), $this->generatesWalletTransactionBillNo->execute(),$request->input('trans_type'),
number_format( (float) $request->input('amount'), 5, '.', ''), $request->input('currency_id') , number_format( (float) $request->input('original_amount'), 5, '.', ''),
$request->input('original_currency_id'),number_format( (float) $request->input('currency_rate'), 5, '.', '')
$wallet->id, $this->generatesWalletTransactionBillNo->execute(),$request->input('trans_type'),
number_format( (float) $convert_amount, 5, '.', ''), $wallet->currency_id , number_format( (float) $request->input('amount'), 5, '.', ''),
$request->input('currency_id'),number_format( (float) $convert_rate, 5, '.', '')
);
$this->canCreateWalletTransaction->passes($object);
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Wallets\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Wallet;
class FetchesWallet extends AbstractFetchRecord
{
/** @var Currency */
private $repository;
/**
* FetchesUser constructor.
* @param Currency $repository
*/
public function __construct(Wallet $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -14,7 +14,8 @@ class WalletTransactionValidation extends AbstractValidation
return [
'wallet_id' => $object->getWalletId(),
'currency_id' => $object->getCurrency(),
'original_currency_id' => $object->getOriginalCurrency(),
'amount' => $object->getAmount(),
'trans_type'=>$object->getTransType()
];
}
@@ -26,7 +27,8 @@ class WalletTransactionValidation extends AbstractValidation
return [
'wallet_id' => 'required',
'currency_id' => 'required',
'original_currency_id' => 'required',
'amount' => 'required',
'trans_type'=>'required'
];
}