Transfer Fee Transaction - Company Balance Account API

This commit is contained in:
ahmedsophyudden
2022-01-11 23:07:49 +08:00
parent d2d92f668e
commit 36c659c84e
7 changed files with 128 additions and 3 deletions
@@ -125,7 +125,7 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic
$payment->original_amount * (1 / $rate), $payment->original_amount, 1, $payment->original_currency_id,
$rate, 0, $supplier->id == 2 ? 0 : $serviceCharge, null, ApprovalStatus::PENDING_VERIFICATION);
$transactions[] = $this->createsTransaction->execute($payment->booking, $object);
$transactions[] = $billTransaction = $this->createsTransaction->execute($payment->booking, $object);
$transferFeeNumber = $this->generatesTransactionBillNumber->execute('TRFR-');
$trasferFee = $this->calculatesTransactionTransferFee->execute($payment->original_amount);
@@ -134,7 +134,7 @@ class CreateSupplierTransactionLogic extends AbstractControllerLogic
$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);
$transferFeeTransactions[] = $this->createsTransaction->execute($billTransaction, $object);
}
if(!count($transactions)) return $this->response([]);
@@ -0,0 +1,46 @@
<?php
namespace App\Classes\Modules\Transactions\ControllersLogic;
use App\Models\Company;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Transactions\Services\GeneratesCompanyBalanceAccount;
class FetchCompanyAccountBalanceLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Company Balance Account',
'message' => 'You have successfully retrieved company balance account'
];
}
/** @var GeneratesCompanyBalanceAccount */
private $generatesCompanyBalanceAccount;
/**
* FetchCompanyAccountBalanceLogic constructor.
* @param GeneratesCompanyBalanceAccount $generatesCompanyBalanceAccount
*/
public function __construct(GeneratesCompanyBalanceAccount $generatesCompanyBalanceAccount)
{
$this->generatesCompanyBalanceAccount = $generatesCompanyBalanceAccount;
}
public function logic(Request $request) : JsonResponse
{
$company = Company::find($request->route('id'));
return $this->response(['data' => $this->generatesCompanyBalanceAccount->execute($company)]);
}
}
@@ -0,0 +1,41 @@
<?php
namespace App\Classes\Modules\Transactions\Services;
use Carbon\Carbon;
use App\Models\Company;
use App\Http\Resources\CompanyResource;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Classes\Modules\Transactions\Services\ChecksIfTransactionBillNumberExists;
class GeneratesCompanyBalanceAccount
{
/** @var ChecksIfTransactionBillNumberExists */
private $checksIfTransactionBillNumberExists;
/**
* GeneratesTransactionBillNo constructor.
* @param ChecksIfTransactionBillNumberExists $checksIfTransactionBillNumberExists
*/
public function __construct(ChecksIfTransactionBillNumberExists $checksIfTransactionBillNumberExists)
{
$this->checksIfTransactionBillNumberExists = $checksIfTransactionBillNumberExists;
}
/**
* @param Company $company
*/
public function execute(Company $company) {
$transferFeeTransactions = $company->issuerTransactions()->where('transactions.type', TransactionType::TRANSFER_FEE)->whereIn('transactions.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->orderBy('id', 'DESC')->get();
return [
'company' => new CompanyResource($company),
'transferFeeTransactions' => $transferFeeTransactions,
'account_balance' => $transferFeeTransactions->sum('amount'),
];
}
}
@@ -0,0 +1,21 @@
<?php
namespace App\Http\Controllers\Transactions;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use App\Classes\Modules\Transactions\ControllersLogic\FetchCompanyAccountBalanceLogic;
class FetchCompanyAccountBalanceController
{
/**
* @param Request $request
* @param FetchCompanyAccountBalanceLogic $logic
* @return JsonResponse
*/
public function fetch(Request $request, FetchCompanyAccountBalanceLogic $logic) : JsonResponse {
return $logic->execute($request);
}
}
+7
View File
@@ -101,6 +101,13 @@ class Company extends AbstractModel implements Documentable
{
return $this->hasManyDeep(Transaction::class, [Booking::class], ['company_id', 'owner_id'], ['id', 'id']);
}
/**
* @return HasMany
*/
public function issuerTransactions(): HasMany
{
return $this->HasMany(Transaction::class, 'issuer');
}
/**
* @return MorphMany
+10 -1
View File
@@ -3,6 +3,7 @@
namespace App\Models;
use App\Classes\General\Interfaces\Documentable;
use App\Classes\General\Interfaces\Transactionable;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransactionType;
use Carbon\Carbon;
@@ -16,7 +17,7 @@ use Illuminate\Database\Eloquent\Relations\MorphMany;
use Illuminate\Database\Eloquent\Relations\MorphTo;
class Transaction extends AbstractModel implements Documentable
class Transaction extends AbstractModel implements Documentable, Transactionable
{
use SoftDeletes;
@@ -27,6 +28,14 @@ class Transaction extends AbstractModel implements Documentable
return $this->morphTo();
}
/**
* @return MorphMany
*/
public function transactions(): MorphMany
{
return $this->MorphMany(Transaction::class, 'owner');
}
/**
* @return MorphMany
*/
+1
View File
@@ -16,4 +16,5 @@ Route::group(['prefix' => 'transactions', 'namespace' => 'Transactions', 'as' =>
Route::post('booking/{id}/details/update', 'CreatePurchaseOrderTransactionController@create')->name('po.create');
Route::get('/company/{id}/account/balance', 'FetchCompanyAccountBalanceController@fetch')->name('company.account.balance');
});