-auto update booking fix amount once refund approve

This commit is contained in:
JiaSheng
2024-03-18 22:13:05 +08:00
parent 0a12bca442
commit daa422d41a
3 changed files with 23 additions and 7 deletions
@@ -13,20 +13,25 @@ class CalculatesBookingOutstanding
/** @var CalculatesBookingFloatingAmount */ /** @var CalculatesBookingFloatingAmount */
private $calculatesBookingFloatingAmount; private $calculatesBookingFloatingAmount;
/** @var CalculatesBookingRefundAmount */
private $calculatesBookingRefundAmount;
/** /**
* CalculatesBookingOutstanding constructor. * CalculatesBookingOutstanding constructor.
* @param CalculatesBookingPayableAmount $calculatesBookingPayableAmount * @param CalculatesBookingPayableAmount $calculatesBookingPayableAmount
* @param CalculatesBookingFloatingAmount $calculatesBookingFloatingAmount * @param CalculatesBookingFloatingAmount $calculatesBookingFloatingAmount
* @param CalculatesBookingRefundAmount $calculatesBookingRefundAmount
*/ */
public function __construct(CalculatesBookingPayableAmount $calculatesBookingPayableAmount, CalculatesBookingFloatingAmount $calculatesBookingFloatingAmount) public function __construct(CalculatesBookingPayableAmount $calculatesBookingPayableAmount, CalculatesBookingFloatingAmount $calculatesBookingFloatingAmount, CalculatesBookingRefundAmount $calculatesBookingRefundAmount)
{ {
$this->calculatesBookingPayableAmount = $calculatesBookingPayableAmount; $this->calculatesBookingPayableAmount = $calculatesBookingPayableAmount;
$this->calculatesBookingFloatingAmount = $calculatesBookingFloatingAmount; $this->calculatesBookingFloatingAmount = $calculatesBookingFloatingAmount;
$this->calculatesBookingRefundAmount = $calculatesBookingRefundAmount;
} }
public function execute(Booking $booking){ public function execute(Booking $booking){
return $booking->fix_amount - $this->calculatesBookingFloatingAmount->execute($booking, $booking->fix_currency_id) - $this->calculatesBookingPayableAmount->execute($booking, $booking->fix_currency_id); return $booking->fix_amount - $this->calculatesBookingFloatingAmount->execute($booking, $booking->fix_currency_id) - $this->calculatesBookingPayableAmount->execute($booking, $booking->fix_currency_id) + $this->calculatesBookingRefundAmount->execute($booking, $booking->fix_currency_id);
} }
} }
@@ -4,6 +4,7 @@ namespace App\Classes\Modules\Transactions\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic; use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Bookings\ControllersLogic\UpdateBookingAmountLogic;
use App\Classes\Modules\Companies\Services\FetchesCompany; use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Transactions\Services\FetchesTransaction; use App\Classes\Modules\Transactions\Services\FetchesTransaction;
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus; use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
@@ -51,6 +52,9 @@ class UpdateRefundTransactionStatusLogic extends AbstractControllerLogic
/** @var CalculatesBookingRefundAmount */ /** @var CalculatesBookingRefundAmount */
private $calculatesBookingRefundAmount; private $calculatesBookingRefundAmount;
/** @var UpdateBookingAmountLogic */
private $updateBookingAmountLogic;
/** /**
* CreatePaymentVerificationDocumentLogic constructor. * CreatePaymentVerificationDocumentLogic constructor.
* @param FetchesCompany $fetchesCompany * @param FetchesCompany $fetchesCompany
@@ -60,8 +64,9 @@ class UpdateRefundTransactionStatusLogic extends AbstractControllerLogic
* @param CreditWalletProcessor $creditWalletProcessor * @param CreditWalletProcessor $creditWalletProcessor
* @param CalculatesBookingPayableAmount $calculatesBookingPayableAmount * @param CalculatesBookingPayableAmount $calculatesBookingPayableAmount
* @param CalculatesBookingRefundAmount $calculatesBookingRefundAmount * @param CalculatesBookingRefundAmount $calculatesBookingRefundAmount
* @param UpdateBookingAmountLogic $updateBookingAmountLogic
*/ */
public function __construct(FetchesCompany $fetchesCompany, FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, DeletesDocument $deletesDocument, CreditWalletProcessor $creditWalletProcessor, CalculatesBookingPayableAmount $calculatesBookingPayableAmount, CalculatesBookingRefundAmount $calculatesBookingRefundAmount) public function __construct(FetchesCompany $fetchesCompany, FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, DeletesDocument $deletesDocument, CreditWalletProcessor $creditWalletProcessor, CalculatesBookingPayableAmount $calculatesBookingPayableAmount, CalculatesBookingRefundAmount $calculatesBookingRefundAmount, UpdateBookingAmountLogic $updateBookingAmountLogic)
{ {
$this->fetchesCompany = $fetchesCompany; $this->fetchesCompany = $fetchesCompany;
$this->fetchesTransaction = $fetchesTransaction; $this->fetchesTransaction = $fetchesTransaction;
@@ -70,6 +75,7 @@ class UpdateRefundTransactionStatusLogic extends AbstractControllerLogic
$this->creditWalletProcessor = $creditWalletProcessor; $this->creditWalletProcessor = $creditWalletProcessor;
$this->calculatesBookingPayableAmount = $calculatesBookingPayableAmount; $this->calculatesBookingPayableAmount = $calculatesBookingPayableAmount;
$this->calculatesBookingRefundAmount = $calculatesBookingRefundAmount; $this->calculatesBookingRefundAmount = $calculatesBookingRefundAmount;
$this->updateBookingAmountLogic = $updateBookingAmountLogic;
} }
/** /**
@@ -93,20 +99,25 @@ class UpdateRefundTransactionStatusLogic extends AbstractControllerLogic
$refundAmount = $this->calculatesBookingRefundAmount->calculateRefundAmount($paymentTransaction, $booking->fix_currency_id); $refundAmount = $this->calculatesBookingRefundAmount->calculateRefundAmount($paymentTransaction, $booking->fix_currency_id);
$paidAmount = $paymentTransaction->original_amount - $refundAmount;
if ($refundTransaction->status == ApprovalStatus::APPROVED) { if ($refundTransaction->status == ApprovalStatus::APPROVED) {
$this->creditWalletProcessor->execute($booking->company, $refundTransaction->type, $refundTransaction->amount, $reference); $this->creditWalletProcessor->execute($booking->company, $refundTransaction->type, $refundTransaction->amount, $reference);
$po_transaction = $booking->transactions()->where('type', TransactionType::PURCHASE_ORDER)->first(); $po_transaction = $booking->transactions()->where('type', TransactionType::PURCHASE_ORDER)->first();
if ($po_transaction) { if ($po_transaction) {
$this->updatesTransactionStatus->execute($po_transaction, (float) number_format($po_transaction->amount, 2, '.', '') === (float) number_format((float)$booking->fix_amount - $refundAmount, 2, '.', '') ? ApprovalStatus::PENDING_VERIFICATION : ApprovalStatus::PENDING_SUBMISSION); $this->updatesTransactionStatus->execute($po_transaction, (float) number_format($po_transaction->amount, 2, '.', '') === (float) number_format((float)$booking->fix_amount - $refundAmount, 2, '.', '') ? ApprovalStatus::PENDING_VERIFICATION : ApprovalStatus::PENDING_SUBMISSION);
} }
$request['fix_amount'] = $paidAmount;
$request->route()->setParameter('id', $booking->id);
$this->updateBookingAmountLogic->execute($request);
} }
if ($supplierRefundTransaction) { if ($supplierRefundTransaction) {
$this->updatesTransactionStatus->execute($supplierRefundTransaction, $request->route('status')); $this->updatesTransactionStatus->execute($supplierRefundTransaction, $request->route('status'));
} }
$paidAmount = $paymentTransaction->original_amount - $refundAmount;
if (!$paidAmount > 0) { if (!$paidAmount > 0) {
$this->updatesTransactionStatus->execute($paymentTransaction, ApprovalStatus::REFUNDED); $this->updatesTransactionStatus->execute($paymentTransaction, ApprovalStatus::REFUNDED);
} }
@@ -56,7 +56,7 @@
<span class="flag-icon" :class="'flag-icon-'+item.original_currency.country.short_code.toLowerCase()"></span> {{item.original_currency.short_code}} <span class="flag-icon" :class="'flag-icon-'+item.original_currency.country.short_code.toLowerCase()"></span> {{item.original_currency.short_code}}
</div> </div>
</div> </div>
<div class="col text-right" v-if="totalRefunds !== 0"> <!-- <div class="col text-right" v-if="totalRefunds !== 0">
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<div class="font-heading fs-10 muted all-caps">Refunded Amount</div> <div class="font-heading fs-10 muted all-caps">Refunded Amount</div>
@@ -65,7 +65,7 @@
</div> </div>
</div> </div>
</div> </div>
</div> </div> -->
</div> </div>
<div class="row"> <div class="row">
<div class="col-auto"> <div class="col-auto">