Merge branch 'dillon/90-e-invoice-e' into vapor/development

This commit is contained in:
Dillon Ngo
2025-12-12 13:10:50 +08:00
18 changed files with 357 additions and 144 deletions
@@ -2,28 +2,29 @@
namespace App\Classes\Modules\Bookings\ControllersLogic;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\Exceptions\CriteriaNotFulfilledException;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Jobs\Commands\V2\CreateInvoiceTransactionV2CommandJob;
use App\Classes\Modules\Bookings\DataTransferObjects\BookingObject;
use App\Classes\Modules\Bookings\DataTransferObjects\UpdateBookingInvoiceStatusObject;
use App\Classes\Modules\Bookings\Services\CalculatesBookingOutstanding;
use App\Classes\Modules\Bookings\Services\FetchesBooking;
use App\Classes\Modules\Bookings\Services\UpdatesBookingInvoiceStatus;
use App\Classes\Modules\Bookings\Services\UpdatesBookingFixedAmount;
use App\Classes\Modules\Bookings\Standards\Rules\CanUpdateBooking;
use App\Classes\Modules\Transactions\Processors\CreateInvoiceTransactionV2Processor;
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Http\Resources\BookingResource;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Bookings\Services\FetchesBooking;
use App\Classes\Modules\Bookings\Standards\Rules\CanUpdateBooking;
use App\Classes\Modules\Bookings\DataTransferObjects\BookingObject;
use App\Classes\Modules\Rules\DataTransferObjects\CheckTransferPeriodLockRuleVariant2DTO;
use App\Classes\Modules\Bookings\Services\CalculatesBookingOutstanding;
use App\Classes\Modules\Rules\Services\RuleEvaluator;
use App\Classes\Modules\Rules\Standards\Rules\CanPassTransferPeriodLockRule;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\Exceptions\CriteriaNotFulfilledException;
use Illuminate\Support\Facades\Log;
class UpdateBookingAmountLogic extends AbstractControllerLogic
@@ -61,6 +62,12 @@ class UpdateBookingAmountLogic extends AbstractControllerLogic
/** @var CanPassTransferPeriodLockRule */
private $canPassTransferPeriodLockRule;
/** @var UpdatesBookingInvoiceStatus */
private $updatesBookingInvoiceStatus;
/** @var CreateInvoiceTransactionV2Processor */
private $createInvoiceTransactionProcessor;
/**
* UpdateBookingAmountLogic constructor.
* @param CanUpdateBooking $canUpdateBooking
@@ -70,8 +77,10 @@ class UpdateBookingAmountLogic extends AbstractControllerLogic
* @param UpdatesTransactionStatus $updatesTransactionStatus
* @param RuleEvaluator $ruleEvaluator
* @param CanPassTransferPeriodLockRule $canPassTransferPeriodLockRule
* @param UpdatesBookingInvoiceStatus $updatesBookingInvoiceStatus
* @param CreateInvoiceTransactionV2Processor $createInvoiceTransactionProcessor
*/
public function __construct(CanUpdateBooking $canUpdateBooking, UpdatesBookingFixedAmount $updatesBookingFixedAmount, FetchesBooking $fetchesBooking, CalculatesBookingOutstanding $calculatesBookingOutstanding, UpdatesTransactionStatus $updatesTransactionStatus, RuleEvaluator $ruleEvaluator, CanPassTransferPeriodLockRule $canPassTransferPeriodLockRule)
public function __construct(CanUpdateBooking $canUpdateBooking, UpdatesBookingFixedAmount $updatesBookingFixedAmount, FetchesBooking $fetchesBooking, CalculatesBookingOutstanding $calculatesBookingOutstanding, UpdatesTransactionStatus $updatesTransactionStatus, RuleEvaluator $ruleEvaluator, CanPassTransferPeriodLockRule $canPassTransferPeriodLockRule, UpdatesBookingInvoiceStatus $updatesBookingInvoiceStatus, CreateInvoiceTransactionV2Processor $createInvoiceTransactionProcessor)
{
$this->canUpdateBooking = $canUpdateBooking;
$this->updatesBookingFixedAmount = $updatesBookingFixedAmount;
@@ -80,6 +89,8 @@ class UpdateBookingAmountLogic extends AbstractControllerLogic
$this->updatesTransactionStatus = $updatesTransactionStatus;
$this->ruleEvaluator = $ruleEvaluator;
$this->canPassTransferPeriodLockRule = $canPassTransferPeriodLockRule;
$this->updatesBookingInvoiceStatus = $updatesBookingInvoiceStatus;
$this->createInvoiceTransactionProcessor = $createInvoiceTransactionProcessor;
}
/**
@@ -124,6 +135,14 @@ class UpdateBookingAmountLogic extends AbstractControllerLogic
$booking = $this->updatesBookingFixedAmount->execute($booking, $input_amount);
if($booking->invoice_status === ApprovalStatus::APPROVED){
$updateBookingInvoiceStatusObject = new UpdateBookingInvoiceStatusObject($booking->id, ApprovalStatus::PENDING_VERIFICATION);
$this->updatesBookingInvoiceStatus->execute($booking, $updateBookingInvoiceStatusObject);
}
else{
$this->createInvoiceTransactionProcessor->execute($booking);
}
return $this->resourceResponse(new BookingResource($booking));
}