diff --git a/app/Classes/Modules/Transactions/ControllersLogic/UpdateRefundTransactionStatusLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/UpdateRefundTransactionStatusLogic.php index 0a29023d..5836bf20 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/UpdateRefundTransactionStatusLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/UpdateRefundTransactionStatusLogic.php @@ -15,6 +15,7 @@ use App\Classes\Modules\Wallets\Processors\CreditWalletProcessor; use App\Classes\Modules\Bookings\Services\CalculatesBookingPayableAmount; use App\Classes\Modules\Bookings\Services\CalculatesBookingRefundAmount; use App\Classes\Modules\Transactions\Standards\Rules\CanUpdateRefundTransactionStatus; +use App\Classes\Modules\Transactions\Processors\CreateInvoiceTransactionV2Processor; use App\Classes\ValueObjects\Constants\RemarkRefundReason; use App\Classes\ValueObjects\Constants\TransactionType; use Illuminate\Support\Facades\Log; @@ -59,6 +60,9 @@ class UpdateRefundTransactionStatusLogic extends AbstractControllerLogic /** @var CanUpdateRefundTransactionStatus */ private $canUpdateRefundTransactionStatus; + /** @var CreateInvoiceTransactionV2Processor */ + private $createInvoiceTransactionV2Processor; + /** * CreatePaymentVerificationDocumentLogic constructor. * @param FetchesCompany $fetchesCompany @@ -70,8 +74,9 @@ class UpdateRefundTransactionStatusLogic extends AbstractControllerLogic * @param CalculatesBookingRefundAmount $calculatesBookingRefundAmount * @param UpdateBookingAmountLogic $updateBookingAmountLogic * @param CanUpdateRefundTransactionStatus $canUpdateRefundTransactionStatus + * @param CreateInvoiceTransactionV2Processor $createInvoiceTransactionV2Processor */ - public function __construct(FetchesCompany $fetchesCompany, FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, DeletesDocument $deletesDocument, CreditWalletProcessor $creditWalletProcessor, CalculatesBookingPayableAmount $calculatesBookingPayableAmount, CalculatesBookingRefundAmount $calculatesBookingRefundAmount, UpdateBookingAmountLogic $updateBookingAmountLogic, CanUpdateRefundTransactionStatus $canUpdateRefundTransactionStatus) + public function __construct(FetchesCompany $fetchesCompany, FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, DeletesDocument $deletesDocument, CreditWalletProcessor $creditWalletProcessor, CalculatesBookingPayableAmount $calculatesBookingPayableAmount, CalculatesBookingRefundAmount $calculatesBookingRefundAmount, UpdateBookingAmountLogic $updateBookingAmountLogic, CanUpdateRefundTransactionStatus $canUpdateRefundTransactionStatus, CreateInvoiceTransactionV2Processor $createInvoiceTransactionV2Processor) { $this->fetchesCompany = $fetchesCompany; $this->fetchesTransaction = $fetchesTransaction; @@ -82,6 +87,7 @@ class UpdateRefundTransactionStatusLogic extends AbstractControllerLogic $this->calculatesBookingRefundAmount = $calculatesBookingRefundAmount; $this->updateBookingAmountLogic = $updateBookingAmountLogic; $this->canUpdateRefundTransactionStatus = $canUpdateRefundTransactionStatus; + $this->createInvoiceTransactionV2Processor = $createInvoiceTransactionV2Processor; } /** @@ -140,6 +146,16 @@ class UpdateRefundTransactionStatusLogic extends AbstractControllerLogic $this->updatesTransactionStatus->execute($paymentTransaction, ApprovalStatus::REFUNDED); } + //A full refund will need invoice generated + if($refundAmount === $booking->fix_amount){ + $this->createInvoiceTransactionV2Processor->execute($booking, "", null, [ + 'generateEInvoice' => false, + 'generateEInvoiceWithNormalInvoiceTemplate' => false, + 'generateEInvoiceRefund' => true, + 'bookingOriginalStatus' => $booking->status + ]); + } + return $this->response([]); } } diff --git a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionV2Processor.php b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionV2Processor.php index 5684ba18..1b6a671e 100644 --- a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionV2Processor.php +++ b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionV2Processor.php @@ -106,11 +106,7 @@ class CreateInvoiceTransactionV2Processor $generateEInvoiceRefund = $options['generateEInvoiceRefund'] ?? false; $bookingOriginalStatus = $options['bookingOriginalStatus'] ?? ApprovalStatus::COMPLETED; - if($generateEInvoiceRefund){ - $generateEInvoice = true; //With or without refund, these 2 flags are meant to Generate E-Invoice, so cannot have opposite indicator - } - - if ($booking->status === ApprovalStatus::COMPLETED && !$generateEInvoice) { + if ($booking->status === ApprovalStatus::COMPLETED && !$generateEInvoiceRefund) { return; } @@ -240,6 +236,19 @@ class CreateInvoiceTransactionV2Processor $voucherRedemption = $transaction->voucherRedemption; + if($generateEInvoiceRefund){ + $metadata = $booking->attributesKVP()->where('key', KVPKey::AUTOCOUNT_DOCNO_INVOICE)->first(); + if($metadata){ + $generateEInvoice = true; + } + else{ + $metadata = $transaction->attributesKVP()->where('key', KVPKey::AUTOCOUNT_DOCNO_INVOICE)->first(); + if($metadata){ + $generateEInvoice = true; + } + } + } + // purchase order if(!$generateEInvoiceRefund){ $this->invoiceDocumentProcessor->execute($invoice_transaction, $purchaseOrder, $supplier, DocumentType::PURCHASE_ORDER, $voucherRedemption, $generateEInvoiceWithNormalInvoiceTemplate); diff --git a/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue b/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue index e65e5372..d3670541 100644 --- a/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue +++ b/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue @@ -148,7 +148,7 @@ -