From b9bceb12fb4307bcbd3f22351b91ea5fe7ca4416 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Thu, 25 Mar 2021 23:00:19 +0800 Subject: [PATCH] Invoice Transaction (Backend) --- .../ApprovePaymentVerificationLogic.php | 22 ++-- .../CreateInvoiceTransactionLogic.php | 107 ++++++++++++++++++ 2 files changed, 122 insertions(+), 7 deletions(-) create mode 100644 app/Classes/Modules/Transactions/ControllersLogic/CreateInvoiceTransactionLogic.php diff --git a/app/Classes/Modules/Bookings/ControllersLogic/ApprovePaymentVerificationLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/ApprovePaymentVerificationLogic.php index 1f814831..ae05c651 100644 --- a/app/Classes/Modules/Bookings/ControllersLogic/ApprovePaymentVerificationLogic.php +++ b/app/Classes/Modules/Bookings/ControllersLogic/ApprovePaymentVerificationLogic.php @@ -4,12 +4,17 @@ namespace App\Classes\Modules\Bookings\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; + +use App\Classes\Modules\Bookings\ControllersLogic\CreateInvoiceTransactionLogic; + use App\Classes\Modules\Documents\Services\ApprovesDocument; use App\Classes\Modules\Documents\Services\FetchesDocument; use App\Classes\Modules\Documents\Services\RejectsDocument; use App\Classes\Modules\Transactions\Services\FetchesTransaction; use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus; + use App\Classes\ValueObjects\Constants\ApprovalStatus; + use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -23,13 +28,14 @@ class ApprovePaymentVerificationLogic extends AbstractControllerLogic * @param RejectsDocument $rejectsDocument * @param FetchesDocument $fetchesDocument */ - public function __construct(FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, ApprovesDocument $approvesDocument, RejectsDocument $rejectsDocument, FetchesDocument $fetchesDocument) + public function __construct(FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, ApprovesDocument $approvesDocument, RejectsDocument $rejectsDocument, FetchesDocument $fetchesDocument, CreateInvoiceTransactionLogic $createInvoiceTransactionLogic) { $this->fetchesTransaction = $fetchesTransaction; $this->updatesTransactionStatus = $updatesTransactionStatus; $this->approvesDocument = $approvesDocument; $this->rejectsDocument = $rejectsDocument; - $this->fetchesDocument = $fetchesDocument; + $this->createInvoiceTransactionLogic = $createInvoiceTransactionLogic; + } /** @@ -54,11 +60,6 @@ class ApprovePaymentVerificationLogic extends AbstractControllerLogic /** @var RejectsDocument */ private $rejectsDocument; - /** @var FetchesDocument */ - private $fetchesDocument; - - - /** * @param Request $request * @return JsonResponse @@ -75,6 +76,13 @@ class ApprovePaymentVerificationLogic extends AbstractControllerLogic $this->updatesTransactionStatus->execute($transaction, $status === 'approve' ? ApprovalStatus::APPROVED : ApprovalStatus::REJECTED); + if ($status == 'approve') { + $request->request->add([ + 'booking_id' => $transaction->booking_id, + ]); + $this->createInvoiceTransactionLogic->execute($request); + } + return $this->response([]); } diff --git a/app/Classes/Modules/Transactions/ControllersLogic/CreateInvoiceTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/CreateInvoiceTransactionLogic.php new file mode 100644 index 00000000..51ed24cd --- /dev/null +++ b/app/Classes/Modules/Transactions/ControllersLogic/CreateInvoiceTransactionLogic.php @@ -0,0 +1,107 @@ +listsTransactions = $listsTransactions; + $this->generatesTransactionBillNumber = $generatesTransactionBillNumber; + $this->createsTransaction = $createsTransaction; + } + + /** + * @return array + */ + protected function notification():array { + return [ + 'title' => 'Created InvoiceTransaction', + 'message' => 'You have successfully created a invoice transaction' + ]; + } + + /** @var ListsTransactions */ + private $listsTransactions; + + /** @var CreatesTransaction */ + private $createsTransaction; + + /** @var GeneratesTransactionBillNumber */ + private $generatesTransactionBillNumber; + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function logic(Request $request) : JsonResponse + { + $booking_id = $request->input('booking_id'); + + $transaction = $this->listsTransactions->execute([ + 'booking_id' => $booking_id + ]); + + $allow = true; + $total_currency_rate = 0; + + foreach ($transaction as $key => $row) { + $total_currency_rate += $row->currency_rate; + + if ($row->status != ApprovalStatus::APPROVED ) { + $allow = false; + } + } + + $total_average_currency_rate = $total_currency_rate / count($transaction); + + if ($allow) { + $transaction = $transaction[0]; + + $billNumber = $this->generatesTransactionBillNumber->execute('INV-'); + $object = new TransactionObject( + $billNumber, + TransactionType::INVOICE, + $transaction->issuer, + $transaction->receiver, + $transaction->recipient_bank_account_id, + $transaction->payment_method, + $transaction->amount, + $transaction->original_amount, + $transaction->currency_id, + $transaction->original_currency_id, + $total_average_currency_rate, + $transaction->tax, + $transaction->service_charge, + null, + ApprovalStatus::APPROVED + ); + + $transaction = $this->createsTransaction->execute($transaction->booking, $object); + } + + return $this->response([]); + } + +} \ No newline at end of file