From 2b167b1950c3391d476d8a95190b9d9db6fa8d0a Mon Sep 17 00:00:00 2001 From: ahmedsophyudden Date: Sun, 5 Sep 2021 22:52:33 +0800 Subject: [PATCH] add partial refund credit note flow --- .../CreateBookingRefundCreditNoteLogic.php | 24 +++++++++++++------ .../CreateBookingRefundLogic.php | 14 +++-------- .../CalculateTransactionRefundCreditNote.php | 14 +++++++++++ ...nsactionBillNumberFromRefundBillNumber.php | 22 +++++++++++++++++ 4 files changed, 56 insertions(+), 18 deletions(-) create mode 100644 app/Classes/Modules/Transactions/Services/CalculateTransactionRefundCreditNote.php create mode 100644 app/Classes/Modules/Transactions/Services/FetchTransactionBillNumberFromRefundBillNumber.php diff --git a/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingRefundCreditNoteLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingRefundCreditNoteLogic.php index 9c66abc5..79a32b11 100644 --- a/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingRefundCreditNoteLogic.php +++ b/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingRefundCreditNoteLogic.php @@ -7,10 +7,12 @@ use App\Classes\Exceptions\MalformedRequestException; use App\Classes\General\Abstracts\AbstractControllerLogic; use App\Classes\Modules\Transactions\Services\FetchesTransaction; use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus; +use App\Classes\Modules\Transactions\Services\FetchTransactionBillNumberFromRefundBillNumber; use App\Classes\Modules\Companies\Services\FetchesCompanyPaymentAttemptLimit; use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject; use App\Classes\Modules\Transactions\Services\CreatesTransaction; use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber; +use App\Classes\Modules\Transactions\Services\CalculateTransactionRefundCreditNote; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\TransactionType; use App\Http\Resources\TransactionResource; @@ -38,12 +40,18 @@ class CreateBookingRefundCreditNoteLogic extends AbstractControllerLogic /** @var UpdatesTransactionStatus */ private $updatesTransactionStatus; + /** @var FetchTransactionBillNumberFromRefundBillNumber */ + private $fetchTransactionBillNumberFromRefundBillNumber; + /** @var FetchesCompanyPaymentAttemptLimit */ private $fetchesCompanyPaymentAttemptLimit; /** @var GeneratesTransactionBillNumber */ private $generatesTransactionBillNumber; + /** @var CalculateTransactionRefundCreditNote */ + private $calculateTransactionRefundCreditNote; + /** @var CreatesTransaction */ private $createsTransaction; @@ -51,16 +59,20 @@ class CreateBookingRefundCreditNoteLogic extends AbstractControllerLogic * CreateBookingPaymentLogic constructor. * @param FetchesTransaction $fetchesTransaction * @param UpdatesTransactionStatus $updatesTransactionStatus + * @param FetchTransactionBillNumberFromRefundBillNumber $fetchTransactionBillNumberFromRefundBillNumber * @param FetchesCompanyPaymentAttemptLimit $fetchesCompanyPaymentAttemptLimit * @param GeneratesTransactionBillNumber $generatesTransactionBillNumber + * @param CalculateTransactionRefundCreditNote $calculateTransactionRefundCreditNote * @param CreatesTransaction $createsTransaction */ - public function __construct(FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, FetchesCompanyPaymentAttemptLimit $fetchesCompanyPaymentAttemptLimit, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CreatesTransaction $createsTransaction) + public function __construct(FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, FetchTransactionBillNumberFromRefundBillNumber $fetchTransactionBillNumberFromRefundBillNumber, FetchesCompanyPaymentAttemptLimit $fetchesCompanyPaymentAttemptLimit, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CalculateTransactionRefundCreditNote $calculateTransactionRefundCreditNote, CreatesTransaction $createsTransaction) { $this->fetchesTransaction = $fetchesTransaction; $this->updatesTransactionStatus = $updatesTransactionStatus; + $this->fetchTransactionBillNumberFromRefundBillNumber = $fetchTransactionBillNumberFromRefundBillNumber; $this->fetchesCompanyPaymentAttemptLimit = $fetchesCompanyPaymentAttemptLimit; $this->generatesTransactionBillNumber = $generatesTransactionBillNumber; + $this->calculateTransactionRefundCreditNote = $calculateTransactionRefundCreditNote; $this->createsTransaction = $createsTransaction; } @@ -76,17 +88,15 @@ class CreateBookingRefundCreditNoteLogic extends AbstractControllerLogic $transaction = $this->fetchesTransaction->execute(['id' => $request->route('payment_id')]); - $this->updatesTransactionStatus->execute($transaction, ApprovalStatus::REFUNDED); + $this->updatesTransactionStatus->execute($transaction, ApprovalStatus::APPROVED); - $paymentAttemptLimit = $this->fetchesCompanyPaymentAttemptLimit->execute($booking->company); - - $billNumber = $this->generatesTransactionBillNumber->execute('CDTN-'); + $billNumber = $this->generatesTransactionBillNumber->execute('CRDNT-'); $object = new TransactionObject($billNumber, TransactionType::CREDIT_NOTE, 1, $booking->company->id, $booking->bank_id, $transaction->payment_method, - $transaction->amount, $transaction->original_amount, 1, + $this->calculateTransactionRefundCreditNote->execute($transaction, $transaction->currency_rate), $transaction->original_amount, 1, $transaction->original_currency_id, $transaction->currency_rate, - $transaction->tax, $transaction->service_charge, Carbon::now()->addMinutes($paymentAttemptLimit), ApprovalStatus::PENDING_VERIFICATION); + $transaction->tax, $transaction->service_charge, null, ApprovalStatus::PENDING_VERIFICATION); $transaction = $this->createsTransaction->execute($booking, $object); diff --git a/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingRefundLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingRefundLogic.php index 0734973e..0e31eed0 100644 --- a/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingRefundLogic.php +++ b/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingRefundLogic.php @@ -100,13 +100,7 @@ class CreateBookingRefundLogic extends AbstractControllerLogic $transaction = $this->fetchesTransaction->execute(['id' => $request->route('payment_id')]); - $billNumber = $this->generatesTransactionBillNumber->execute('RFD-').'-'.$transaction->bill_no; - - if((int) $transaction->type === TransactionType::BILL){ - $transaction = $booking->transactions()->payments()->complete()->where('original_amount', '=', $transaction->original_amount)->where('id', '<', $transaction->id)->orderByDesc('id')->first(); - } - - // $this->updatesTransactionStatus->execute($transaction, ApprovalStatus::REFUNDED); + $billNumber = $this->generatesTransactionBillNumber->execute('RFD-'); $unrequestedAmount = $this->calculateTransactionRefundOriginalAmount->execute($transaction, $request->input('amount')); @@ -116,13 +110,11 @@ class CreateBookingRefundLogic extends AbstractControllerLogic $totalRefundAmount = $this->calculateTransactionRefundAmount->execute($transaction, $configurations->getTotal()); - // $refundServiceCharge = $this->calculateTransactionRefundServiceCharge->execute($transaction, $configurations->getServiceCharge()); - $object = new TransactionObject($billNumber, TransactionType::REFUND, 1, $booking->company->id, $configurations->getConfigurations()->getBankId(), $configurations->getConversionObject()->getPaymentMethod(), $totalRefundAmount, $request->input('amount'), 1, - $configurations->getConversionObject()->getCurrencyId(), $configurations->getConfigurations()->getRate(), - $configurations->getTax(), $configurations->getServiceCharge(), null, ApprovalStatus::PENDING_VERIFICATION); + $configurations->getConversionObject()->getCurrencyId(), ((int) $transaction->type === TransactionType::BILL) ? $transaction->currency_rate : 0, + 0, 0, null, ApprovalStatus::PENDING_VERIFICATION); $transaction = $this->createsTransaction->execute($booking, $object); diff --git a/app/Classes/Modules/Transactions/Services/CalculateTransactionRefundCreditNote.php b/app/Classes/Modules/Transactions/Services/CalculateTransactionRefundCreditNote.php new file mode 100644 index 00000000..0201cb34 --- /dev/null +++ b/app/Classes/Modules/Transactions/Services/CalculateTransactionRefundCreditNote.php @@ -0,0 +1,14 @@ +original_amount * (1/$currency_rate); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Transactions/Services/FetchTransactionBillNumberFromRefundBillNumber.php b/app/Classes/Modules/Transactions/Services/FetchTransactionBillNumberFromRefundBillNumber.php new file mode 100644 index 00000000..8c0cab44 --- /dev/null +++ b/app/Classes/Modules/Transactions/Services/FetchTransactionBillNumberFromRefundBillNumber.php @@ -0,0 +1,22 @@ +bill_no); + + return $array[3].'-'.$array[4].'-'.$array[5]; + + } + +} \ No newline at end of file