From 36c659c84e58cc8982e68d8ffe169e4460ca0c3f Mon Sep 17 00:00:00 2001 From: ahmedsophyudden Date: Tue, 11 Jan 2022 23:07:49 +0800 Subject: [PATCH] Transfer Fee Transaction - Company Balance Account API --- .../CreateSupplierTransactionLogic.php | 4 +- .../FetchCompanyAccountBalanceLogic.php | 46 +++++++++++++++++++ .../GeneratesCompanyBalanceAccount.php | 41 +++++++++++++++++ .../FetchCompanyAccountBalanceController.php | 21 +++++++++ app/Models/Company.php | 7 +++ app/Models/Transaction.php | 11 ++++- routes/transaction.php | 1 + 7 files changed, 128 insertions(+), 3 deletions(-) create mode 100644 app/Classes/Modules/Transactions/ControllersLogic/FetchCompanyAccountBalanceLogic.php create mode 100644 app/Classes/Modules/Transactions/Services/GeneratesCompanyBalanceAccount.php create mode 100644 app/Http/Controllers/Transactions/FetchCompanyAccountBalanceController.php diff --git a/app/Classes/Modules/Transactions/ControllersLogic/CreateSupplierTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/CreateSupplierTransactionLogic.php index 6b5110ec..b524b3e9 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/CreateSupplierTransactionLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/CreateSupplierTransactionLogic.php @@ -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([]); diff --git a/app/Classes/Modules/Transactions/ControllersLogic/FetchCompanyAccountBalanceLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/FetchCompanyAccountBalanceLogic.php new file mode 100644 index 00000000..b73f5ca3 --- /dev/null +++ b/app/Classes/Modules/Transactions/ControllersLogic/FetchCompanyAccountBalanceLogic.php @@ -0,0 +1,46 @@ + '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)]); + + } + + + +} diff --git a/app/Classes/Modules/Transactions/Services/GeneratesCompanyBalanceAccount.php b/app/Classes/Modules/Transactions/Services/GeneratesCompanyBalanceAccount.php new file mode 100644 index 00000000..51c71cb1 --- /dev/null +++ b/app/Classes/Modules/Transactions/Services/GeneratesCompanyBalanceAccount.php @@ -0,0 +1,41 @@ +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'), + ]; + + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Transactions/FetchCompanyAccountBalanceController.php b/app/Http/Controllers/Transactions/FetchCompanyAccountBalanceController.php new file mode 100644 index 00000000..d36b0605 --- /dev/null +++ b/app/Http/Controllers/Transactions/FetchCompanyAccountBalanceController.php @@ -0,0 +1,21 @@ +execute($request); + } +} diff --git a/app/Models/Company.php b/app/Models/Company.php index 7b8e4387..e18bbf85 100644 --- a/app/Models/Company.php +++ b/app/Models/Company.php @@ -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 diff --git a/app/Models/Transaction.php b/app/Models/Transaction.php index a3e16c79..450d9545 100644 --- a/app/Models/Transaction.php +++ b/app/Models/Transaction.php @@ -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 */ diff --git a/routes/transaction.php b/routes/transaction.php index 578b02c2..d3ce05b2 100644 --- a/routes/transaction.php +++ b/routes/transaction.php @@ -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'); }); \ No newline at end of file