From ec9587b91cd3e77662b8da35987b9658798ec4ee Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Sat, 31 May 2025 22:22:58 +0800 Subject: [PATCH] E-Invoice - New business rule, transfer now has duration limit, apply on payment verification document upload by user --- ...CreatePaymentVerificationDocumentLogic.php | 28 +++++++++++++++++-- .../CreatePaymentVerificationDocumentDTO.php | 25 +++++++++++++++++ .../PaymentVerificationFormComponent.vue | 8 ++++-- 3 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 app/Classes/Modules/Bookings/DataTransferObjects/CreatePaymentVerificationDocumentDTO.php diff --git a/app/Classes/Modules/Bookings/ControllersLogic/CreatePaymentVerificationDocumentLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/CreatePaymentVerificationDocumentLogic.php index bfd0229d..cd39e81a 100644 --- a/app/Classes/Modules/Bookings/ControllersLogic/CreatePaymentVerificationDocumentLogic.php +++ b/app/Classes/Modules/Bookings/ControllersLogic/CreatePaymentVerificationDocumentLogic.php @@ -2,8 +2,9 @@ namespace App\Classes\Modules\Bookings\ControllersLogic; - +use App\Classes\Exceptions\CriteriaNotFulfilledException; use App\Classes\General\Abstracts\AbstractControllerLogic; +use App\Classes\Modules\Bookings\DataTransferObjects\CreatePaymentVerificationDocumentDTO; use App\Classes\Modules\Companies\Services\FetchesCompany; use App\Classes\Modules\Companies\Services\UpdatesCompanyStatus; use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject; @@ -11,6 +12,8 @@ use App\Classes\Modules\Documents\Services\CreatesDocument; use App\Classes\Modules\Documents\Services\CreatesFiles; use App\Classes\Modules\Transactions\Services\FetchesTransaction; use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus; +use App\Classes\Modules\Rules\Services\RuleEvaluator; +use App\Classes\Modules\Rules\Standards\Rules\CanPassOrderDurationLimitRule; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\CompanyType; use App\Classes\ValueObjects\Constants\DocumentType; @@ -44,19 +47,29 @@ class CreatePaymentVerificationDocumentLogic extends AbstractControllerLogic /** @var UpdatesTransactionStatus */ private $updatesTransactionStatus; + /** @var RuleEvaluator */ + private $ruleEvaluator; + + /** @var CanPassOrderDurationLimitRule */ + private $canPassOrderDurationLimitRule; + /** * CreatePaymentVerificationDocumentLogic constructor. * @param FetchesTransaction $fetchesTransaction * @param CreatesDocument $createsDocument * @param CreatesFiles $createsFile * @param UpdatesTransactionStatus $updatesTransactionStatus + * @param RuleEvaluator $ruleEvaluator + * @param CanPassOrderDurationLimitRule $canPassOrderDurationLimitRule */ - public function __construct(FetchesTransaction $fetchesTransaction, CreatesDocument $createsDocument, CreatesFiles $createsFile, UpdatesTransactionStatus $updatesTransactionStatus) + public function __construct(FetchesTransaction $fetchesTransaction, CreatesDocument $createsDocument, CreatesFiles $createsFile, UpdatesTransactionStatus $updatesTransactionStatus, RuleEvaluator $ruleEvaluator, CanPassOrderDurationLimitRule $canPassOrderDurationLimitRule) { $this->fetchesTransaction = $fetchesTransaction; $this->createsDocument = $createsDocument; $this->createsFile = $createsFile; $this->updatesTransactionStatus = $updatesTransactionStatus; + $this->ruleEvaluator = $ruleEvaluator; + $this->canPassOrderDurationLimitRule = $canPassOrderDurationLimitRule; } /** @@ -66,6 +79,15 @@ class CreatePaymentVerificationDocumentLogic extends AbstractControllerLogic */ public function logic(Request $request) : JsonResponse { + $dto = new CreatePaymentVerificationDocumentDTO($request->all()); + + $result = $this->ruleEvaluator->evaluate([ + $this->canPassOrderDurationLimitRule, + ], $dto); + + if ($result->failed()) { + throw new CriteriaNotFulfilledException("- " . implode("
- ", $result->messages())); + } $transaction = $this->fetchesTransaction->execute(['id' => $request->route('payment_id')]); @@ -80,4 +102,4 @@ class CreatePaymentVerificationDocumentLogic extends AbstractControllerLogic return $this->response([]); } -} \ No newline at end of file +} diff --git a/app/Classes/Modules/Bookings/DataTransferObjects/CreatePaymentVerificationDocumentDTO.php b/app/Classes/Modules/Bookings/DataTransferObjects/CreatePaymentVerificationDocumentDTO.php new file mode 100644 index 00000000..ab0b7c96 --- /dev/null +++ b/app/Classes/Modules/Bookings/DataTransferObjects/CreatePaymentVerificationDocumentDTO.php @@ -0,0 +1,25 @@ +bookingId = $data['booking_id']; + $this->companyId = $data['company_id']; + } + + public function toArray(): array + { + return [ + 'booking_id' => $this->bookingId, + 'company_id' => $this->companyId, + ]; + } +} diff --git a/resources/assets/vue/components/bookings/forms/PaymentVerificationFormComponent.vue b/resources/assets/vue/components/bookings/forms/PaymentVerificationFormComponent.vue index 4e47728a..abb3c07c 100644 --- a/resources/assets/vue/components/bookings/forms/PaymentVerificationFormComponent.vue +++ b/resources/assets/vue/components/bookings/forms/PaymentVerificationFormComponent.vue @@ -120,13 +120,15 @@ submitForm(){ this.parameters = { - files: this.files + files: this.files, + booking_id: this.id, + company_id: this.data.booking.company.id, }; - this.submit(this.route('api.booking.payment.verification.create', this.id, this.data.id), 'post', this.section, true, false) + this.submit(this.route('api.booking.payment.verification.create', this.id, this.data.id), 'post', this.section, true, true); } }, mixins: [ModalFromHandler] } - \ No newline at end of file +