Files
exchange-2.0/app/Classes/Modules/Accounting/ControllersLogic/UpdateBankStatementDetailLogic.php
T

216 lines
9.6 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\UpdatesBankStatementDetails;
use App\Classes\Modules\Accounting\Services\FetchesBankStatementDetails;
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\Models\Transaction;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use ErrorException;
use Illuminate\Support\Facades\Log;
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 CanUpdateCompany */
// private $canUpdateCompany;
/** @var UpdatesBankStatementDetails */
private $updatesBankStatementDetails;
/** @var FetchesBankStatementDetails */
private $fetchesBankStatementDetails;
/** @var FetchesBankStatementTransaction */
private $fetchesBankStatementTransaction;
/** @var CreatesBankStatementTransactionOwner */
private $createsBankStatementTransactionOwner;
/** @var ChecksBillNumber */
private $checksBillNumber;
/**
* UpdateBankStatementDetailLogic constructor.
* @param UpdatesBankStatementDetails $updatesBankStatementDetails
* @param FetchesBankStatementDetails $fetchesBankStatementDetails
* @param fetchesBankStatementTransaction $fetchesBankStatementTransaction
* @param CreatesBankStatementTransactionOwner $createsBankStatementTransactionOwner
* @param ChecksBillNumber $checksBillNumber
*/
public function __construct(UpdatesBankStatementDetails $updatesBankStatementDetails, FetchesBankStatementDetails $fetchesBankStatementDetails, FetchesBankStatementTransaction $fetchesBankStatementTransaction, CreatesBankStatementTransactionOwner $createsBankStatementTransactionOwner, ChecksBillNumber $checksBillNumber)
{
$this->updatesBankStatementDetails = $updatesBankStatementDetails;
$this->fetchesBankStatementDetails = $fetchesBankStatementDetails;
$this->fetchesBankStatementTransaction = $fetchesBankStatementTransaction;
$this->createsBankStatementTransactionOwner = $createsBankStatementTransactionOwner;
$this->checksBillNumber = $checksBillNumber;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request): JsonResponse
{
$bankStatementTransaction = $this->fetchesBankStatementTransaction->execute(['id' => $request->route('id')]);
$owner_type = null;
$owner_id = null;
$statementTransactionOwnerType = null;
$system = null;
$owner_reference = null;
switch ($request->input('pay_for')) {
case 'sales':
if (in_array($request->input('system_references'), ['exchange', 'izyim'])) {
// $transaction = $this->verifyBillNumber($request->input('transaction_reference'), $request->input('system_references'));
$transaction = $this->checksBillNumber->execute($request->input('transaction_reference'), $request->input('system_references'));
// todo-new: update / test on izyim system
$owner_type = Transaction::class;
$owner_id = $transaction->id;
// todo-new: owner_reference
// booking number / order number
$owner_reference = null;
$statementTransactionOwnerType = StatementTransactionOwnerType::SALES;
$system = $request->input('system_references');
} else {
switch ($request->input('system_references')) {
case 'lite':
$statementTransactionOwnerType = StatementTransactionOwnerType::SALES_LITE;
break;
case 'cntr':
$statementTransactionOwnerType = StatementTransactionOwnerType::SALES_CNTR;
break;
case 'probashi':
$statementTransactionOwnerType = StatementTransactionOwnerType::SALES_PROBASHI;
break;
case 'pets':
$statementTransactionOwnerType = StatementTransactionOwnerType::SALES_PETS;
break;
default:
throw new MalformedRequestException('System Reference not allowed');
}
}
break;
case 'top_up':
// $transaction = $this->verifyBillNumber($request->input('transaction_reference'), $request->input('system_references'));
$transaction = $this->checksBillNumber->execute($request->input('transaction_reference'), $request->input('system_references'));
$owner_type = Transaction::class;
$owner_id = $transaction->id;
// todo-new: owner_reference
// top_up - store customer marking
$owner_reference = null;
$statementTransactionOwnerType = StatementTransactionOwnerType::WALLET_TOP_UP;
$system = $request->input('system_references');
break;
case 'internal_bank_transfer':
$statementTransactionOwnerType = StatementTransactionOwnerType::INTERNAL_BANK_TRANSFER_IN; // if negative -> out, positive -> in
$system = $request->input('system_references');
break;
case 'others':
$owner_reference = $request->input('transaction_reference');
$statementTransactionOwnerType = StatementTransactionOwnerType::NON_OPERATIONAL;
$system = $request->input('system_references');
break;
default:
throw new MalformedRequestException('Transaction Type Not Allowed');
}
$system == null ? '' : $system = SystemType::SYSTEM_NAMES[$system];
dd([
'type' => $statementTransactionOwnerType,
'system' => $system,
// 'owner_type' => Transaction::class,
// todo-new: make sure owner_type is a class
'owner_type' => $owner_type,
'owner_id' => $owner_id,
'owner_reference' => $owner_reference
]);
$bankStatementTransaction->owners()->firstOrCreate([
'type' => $statementTransactionOwnerType,
'system' => $system,
// 'owner_type' => Transaction::class,
// todo-new: make sure owner_type is a class
'owner_type' => $owner_type,
'owner_id' => $owner_id,
'owner_reference' => $owner_reference
]);
dd($bankStatementTransaction->owners()->first());
// $this->canCreateUser->passes($user_object);
// $user = $this->createsBankStatementTransactionOwner->execute($bankStatementTransactionObject);
// return $this->resourceResponse(new BankStatementDetailResource($query));
}
// public function verifyBillNumber($bill_no, $system_reference)
// {
// if ($system_reference == 'izyim') {
// try {
// $url = 'https://izyim.cief-malaysia.com/public/api/v1/transactions/query';
// $client = new \GuzzleHttp\Client(['verify' => false]);
// $response = $client->request('GET', $url . '?api-key=510acd13d8d24375cf038ad626c282565451461a9c2399357e0b65365300787e&filters={"bill_no":' . $bill_no . '}');
// $body = $response->getBody();
// $data = json_decode($body, true);
// dd($data);
// $payload = $data['payload'];
// $transactions2 = $payload['data'];
// dd($transactions2);
// return $transactions2;
// } catch (\Exception $exception) {
// Log::error($exception);
// dd($exception);
// preg_match('/\{.*\}/s', $exception->getMessage(), $matches);
// $jsonError = json_decode($matches[0]);
// // Retrieved Transactions failed
// throw new MalformedRequestException($jsonError->title);
// }
// }
// if ($system_reference == 'exchange') {
// $transaction = Transaction::where('bill_no', $bill_no)->first();
// if ($transaction) {
// return $transaction;
// }
// }
// // if not found
// throw new MalformedRequestException('Bill Number Not Found.');
// }
}