mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/exchange-2.0.git
synced 2026-08-19 04:23:55 +00:00
138 lines
5.1 KiB
PHP
138 lines
5.1 KiB
PHP
<?php
|
|
|
|
namespace App\Classes\Modules\Accounting\ControllersLogic;
|
|
|
|
|
|
use App\Classes\Exceptions\MalformedRequestException;
|
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
|
use App\Classes\Modules\Accounting\Services\CreatesBankStatementTransactionOwner;
|
|
use App\Classes\Modules\Accounting\Services\FetchesBankStatementTransaction;
|
|
use App\Classes\ValueObjects\Constants\StatementTransactionOwnerType;
|
|
use App\Classes\ValueObjects\Constants\SystemType;
|
|
use App\Classes\Modules\Accounting\Processors\ChecksBillNumber;
|
|
use App\Classes\ValueObjects\Constants\TransactionType;
|
|
use App\Models\Booking;
|
|
use App\Models\Transaction;
|
|
use App\Models\Wallet;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
|
|
class UpdateBankStatementDetailLogic extends AbstractControllerLogic
|
|
{
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
protected function notification():array {
|
|
return [
|
|
'title' => 'Updated Bank Statement Transactions Details',
|
|
'message' => 'You have successfully updated the Bank Statement Transactions Details'
|
|
];
|
|
}
|
|
|
|
/** @var FetchesBankStatementTransaction */
|
|
private $fetchesBankStatementTransaction;
|
|
|
|
|
|
/** @var ChecksBillNumber */
|
|
private $checksBillNumber;
|
|
|
|
/**
|
|
* @param FetchesBankStatementTransaction $fetchesBankStatementTransaction
|
|
* @param ChecksBillNumber $checksBillNumber
|
|
*/
|
|
public function __construct(FetchesBankStatementTransaction $fetchesBankStatementTransaction, ChecksBillNumber $checksBillNumber)
|
|
{
|
|
$this->fetchesBankStatementTransaction = $fetchesBankStatementTransaction;
|
|
$this->checksBillNumber = $checksBillNumber;
|
|
}
|
|
|
|
public function logic(Request $request): JsonResponse
|
|
{
|
|
$bankStatementTransaction = $this->fetchesBankStatementTransaction->execute(['id' => $request->route('id')]);
|
|
|
|
$transactionReference = $request->input('transaction_reference');
|
|
$systemReference = $request->input('system_references');
|
|
|
|
$owner_type = $owner_id = $owner_reference = $statementTransactionOwnerType = $system = null;
|
|
|
|
$salesSystems = ['lite', 'cntr', 'probashi', 'pets'];
|
|
$allowedSystems = array_merge($salesSystems, ['exchange', 'izyim']);
|
|
|
|
if (!in_array($systemReference, $allowedSystems) && !in_array($request->input('pay_for'), ['internal_bank_transfer', 'others'])) {
|
|
throw new MalformedRequestException('System Reference not allowed');
|
|
}
|
|
|
|
switch ($request->input('pay_for')) {
|
|
case 'sales':
|
|
$owner_reference = $transactionReference;
|
|
$statementTransactionOwnerType = StatementTransactionOwnerType::SALES;
|
|
break;
|
|
|
|
case 'top_up':
|
|
$owner_reference = $transactionReference;
|
|
$statementTransactionOwnerType = StatementTransactionOwnerType::WALLET_TOP_UP;
|
|
break;
|
|
|
|
case 'internal_bank_transfer':
|
|
$statementTransactionOwnerType = StatementTransactionOwnerType::INTERNAL_BANK_TRANSFER_IN;
|
|
break;
|
|
|
|
case 'others':
|
|
$owner_reference = $transactionReference;
|
|
$statementTransactionOwnerType = StatementTransactionOwnerType::NON_OPERATIONAL;
|
|
break;
|
|
|
|
default:
|
|
throw new MalformedRequestException('Transaction Type Not Allowed');
|
|
}
|
|
|
|
if (in_array($systemReference, ['exchange', 'izyim'])) {
|
|
$transaction = $this->checksBillNumber->execute($transactionReference, $systemReference);
|
|
|
|
if($systemReference === 'exchange') {
|
|
$owner_type = Transaction::class;
|
|
$owner_id = $transaction->id;
|
|
if($transaction->type === TransactionType::TOP_UP) {
|
|
$owner_reference = $transaction->owner->owner->reference;
|
|
}
|
|
|
|
if($transaction->type === TransactionType::PAYMENT && $transaction->owner_type === Booking::class) {
|
|
$owner_reference = $transaction->owner->marking;
|
|
}
|
|
|
|
}
|
|
|
|
if($systemReference === 'izyim') {
|
|
$transaction = $transaction[0];
|
|
$owner_type = Transaction::class;
|
|
$owner_id = $transaction['owner_id'];
|
|
$owner_reference = $transaction['owner_reference'];
|
|
|
|
}
|
|
}
|
|
|
|
$system = $systemReference != null ? SystemType::SYSTEM_NAMES[$systemReference] : '';
|
|
|
|
$this->createBankStatementTransactionOwner($bankStatementTransaction, $statementTransactionOwnerType, $system, $owner_type, $owner_id, $owner_reference);
|
|
|
|
return $this->response([]);
|
|
}
|
|
|
|
private function createBankStatementTransactionOwner($bankStatementTransaction, $statementTransactionOwnerType, $system, $owner_type, $owner_id, $owner_reference)
|
|
{
|
|
$ownerData = [
|
|
'type' => $statementTransactionOwnerType,
|
|
'system' => $system,
|
|
'owner_type' => $owner_type,
|
|
'owner_id' => $owner_id,
|
|
'owner_reference' => $owner_reference,
|
|
];
|
|
|
|
$bankStatementTransaction->owners()->firstOrCreate($ownerData);
|
|
|
|
}
|
|
|
|
|
|
}
|