From eb61d81f6b2ba086dd9f501a114df656a3e701a4 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Sun, 25 Jan 2026 20:49:12 +0800 Subject: [PATCH] Period Lock - Partial Implementation 1 (merge branch dillon/110-period-lock-b through dillon/90-e-invoice-g-0) --- .../Eloquent/Filters/KeyValuePairIn.php | 23 ++ .../ProcessCreditNoteReportV2CommandJob.php | 4 +- .../V2/ProcessPaymentReportV2CommandJob.php | 4 +- .../ProcessSalesInvoiceReportV2CommandJob.php | 4 +- app/Classes/Jobs/SendWelcomeVoucherEmail.php | 2 +- .../CreateSystemUserLogic.php | 69 ++++++ .../Banks/Processors/UpdateBankProcessor.php | 2 +- .../CreateBookingLockLogic.php | 85 +++++++ .../DeleteBookingLockLogic.php | 69 ++++++ .../UpdateBookingAmountLogic.php | 30 ++- .../UpdateBookingAmountOnHoldLogic.php | 4 +- .../ControllersLogic/ImportExcelLogic.php | 4 +- .../CheckTransferPeriodLockRuleLogic.php | 66 ++++++ .../CheckTransferPeriodLockRuleDTO.php | 26 +++ ...CheckTransferPeriodLockRuleVariant2DTO.php | 23 ++ .../Rules/CanPassTransferPeriodLockRule.php | 61 +++++ .../ControllersLogic/CreateLockLogic.php | 67 ++++++ .../ControllersLogic/FetchLockLogic.php | 62 +++++ .../ControllersLogic/ListLocksLogic.php | 64 ++++++ .../ControllersLogic/UpdateLockLogic.php | 89 ++++++++ .../Settings/Services/CreatesKeyValuePair.php | 35 +++ .../Settings/Services/FetchesKeyValuePair.php | 34 +++ .../Settings/Services/ListsKeyValuePairs.php | 34 +++ .../Settings/Services/UpdatesKeyValuePair.php | 23 ++ .../CreatePaymentProofDocumentLogic.php | 12 + .../ControllersLogic/CreateVoucherLogic.php | 4 +- .../Processors/CreditWalletProcessor.php | 4 +- app/Classes/ValueObjects/Constants/KVPKey.php | 11 +- .../ValueObjects/Constants/RoleTypes.php | 5 +- .../Accounts/CreateSystemUserController.php | 21 ++ .../Bookings/CreateBookingLockController.php | 20 ++ .../Bookings/DeleteBookingLockController.php | 20 ++ .../Controllers/Rules/CheckRuleController.php | 10 + .../Settings/CreateLockController.php | 19 ++ .../Settings/FetchLockController.php | 20 ++ .../Settings/ListLocksController.php | 20 ++ .../Settings/UpdateLockController.php | 20 ++ app/Http/Resources/LockResource.php | 24 ++ database/seeds/KeyValuePairSeeder.php | 42 ++++ .../BookingDetailsSectionComponent.vue | 56 ++++- .../settings/elements/ComponentLock.vue | 58 +++++ .../components/settings/elements/PageLock.vue | 216 ++++++++++++++++++ .../sections/LockSectionComponent.vue | 39 ++++ .../user/form/SystemFormComponent.vue | 128 +++++++++++ .../pages/dashboards/admin_lock.blade.php | 8 + resources/views/pages/settings.blade.php | 18 ++ .../views/pages/supplier-payments.blade.php | 9 +- routes/account.php | 2 + routes/api.php | 2 + routes/booking.php | 4 + routes/rule.php | 2 + routes/setting.php | 14 ++ routes/web.php | 5 + 53 files changed, 1670 insertions(+), 27 deletions(-) create mode 100644 app/Classes/General/Eloquent/Filters/KeyValuePairIn.php create mode 100644 app/Classes/Modules/Accounts/ControllersLogic/CreateSystemUserLogic.php create mode 100644 app/Classes/Modules/Bookings/ControllersLogic/CreateBookingLockLogic.php create mode 100644 app/Classes/Modules/Bookings/ControllersLogic/DeleteBookingLockLogic.php create mode 100644 app/Classes/Modules/Rules/ControllersLogic/CheckTransferPeriodLockRuleLogic.php create mode 100644 app/Classes/Modules/Rules/DataTransferObjects/CheckTransferPeriodLockRuleDTO.php create mode 100644 app/Classes/Modules/Rules/DataTransferObjects/CheckTransferPeriodLockRuleVariant2DTO.php create mode 100644 app/Classes/Modules/Rules/Standards/Rules/CanPassTransferPeriodLockRule.php create mode 100644 app/Classes/Modules/Settings/ControllersLogic/CreateLockLogic.php create mode 100644 app/Classes/Modules/Settings/ControllersLogic/FetchLockLogic.php create mode 100644 app/Classes/Modules/Settings/ControllersLogic/ListLocksLogic.php create mode 100644 app/Classes/Modules/Settings/ControllersLogic/UpdateLockLogic.php create mode 100644 app/Classes/Modules/Settings/Services/CreatesKeyValuePair.php create mode 100644 app/Classes/Modules/Settings/Services/FetchesKeyValuePair.php create mode 100644 app/Classes/Modules/Settings/Services/ListsKeyValuePairs.php create mode 100644 app/Classes/Modules/Settings/Services/UpdatesKeyValuePair.php create mode 100644 app/Http/Controllers/Accounts/CreateSystemUserController.php create mode 100644 app/Http/Controllers/Bookings/CreateBookingLockController.php create mode 100644 app/Http/Controllers/Bookings/DeleteBookingLockController.php create mode 100644 app/Http/Controllers/Settings/CreateLockController.php create mode 100644 app/Http/Controllers/Settings/FetchLockController.php create mode 100644 app/Http/Controllers/Settings/ListLocksController.php create mode 100644 app/Http/Controllers/Settings/UpdateLockController.php create mode 100644 app/Http/Resources/LockResource.php create mode 100644 database/seeds/KeyValuePairSeeder.php create mode 100644 resources/assets/vue/components/settings/elements/ComponentLock.vue create mode 100644 resources/assets/vue/components/settings/elements/PageLock.vue create mode 100644 resources/assets/vue/components/settings/sections/LockSectionComponent.vue create mode 100644 resources/assets/vue/components/user/form/SystemFormComponent.vue create mode 100644 resources/views/pages/dashboards/admin_lock.blade.php create mode 100644 routes/setting.php diff --git a/app/Classes/General/Eloquent/Filters/KeyValuePairIn.php b/app/Classes/General/Eloquent/Filters/KeyValuePairIn.php new file mode 100644 index 00000000..845a3203 --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/KeyValuePairIn.php @@ -0,0 +1,23 @@ +whereNull('owner_type') + ->whereNull('owner_id') + ->whereIn('key', [$value]); + } +} diff --git a/app/Classes/Jobs/Commands/V2/ProcessCreditNoteReportV2CommandJob.php b/app/Classes/Jobs/Commands/V2/ProcessCreditNoteReportV2CommandJob.php index f73315da..575ba9a2 100644 --- a/app/Classes/Jobs/Commands/V2/ProcessCreditNoteReportV2CommandJob.php +++ b/app/Classes/Jobs/Commands/V2/ProcessCreditNoteReportV2CommandJob.php @@ -3,8 +3,8 @@ namespace App\Classes\Jobs\Commands\V2; use App\Classes\Modules\Accounts\DataTransferObjects\KeyValuePairObject; -use App\Classes\Modules\Accounts\Services\CreatesKeyValuePair; -use App\Classes\Modules\Accounts\Services\UpdatesKeyValuePair; +use App\Classes\Modules\Settings\Services\CreatesKeyValuePair; +use App\Classes\Modules\Settings\Services\UpdatesKeyValuePair; use App\Classes\Modules\Bookings\Processors\RegenerateInvoiceBookingProcessor; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\KVPKey; diff --git a/app/Classes/Jobs/Commands/V2/ProcessPaymentReportV2CommandJob.php b/app/Classes/Jobs/Commands/V2/ProcessPaymentReportV2CommandJob.php index 3543fec3..05970692 100644 --- a/app/Classes/Jobs/Commands/V2/ProcessPaymentReportV2CommandJob.php +++ b/app/Classes/Jobs/Commands/V2/ProcessPaymentReportV2CommandJob.php @@ -3,8 +3,8 @@ namespace App\Classes\Jobs\Commands\V2; use App\Classes\Modules\Accounts\DataTransferObjects\KeyValuePairObject; -use App\Classes\Modules\Accounts\Services\CreatesKeyValuePair; -use App\Classes\Modules\Accounts\Services\UpdatesKeyValuePair; +use App\Classes\Modules\Settings\Services\CreatesKeyValuePair; +use App\Classes\Modules\Settings\Services\UpdatesKeyValuePair; use App\Classes\ValueObjects\Constants\KVPKey; use Carbon\Carbon; use Illuminate\Bus\Queueable; diff --git a/app/Classes/Jobs/Commands/V2/ProcessSalesInvoiceReportV2CommandJob.php b/app/Classes/Jobs/Commands/V2/ProcessSalesInvoiceReportV2CommandJob.php index a5b3871a..a7bf14c9 100644 --- a/app/Classes/Jobs/Commands/V2/ProcessSalesInvoiceReportV2CommandJob.php +++ b/app/Classes/Jobs/Commands/V2/ProcessSalesInvoiceReportV2CommandJob.php @@ -3,8 +3,8 @@ namespace App\Classes\Jobs\Commands\V2; use App\Classes\Modules\Accounts\DataTransferObjects\KeyValuePairObject; -use App\Classes\Modules\Accounts\Services\CreatesKeyValuePair; -use App\Classes\Modules\Accounts\Services\UpdatesKeyValuePair; +use App\Classes\Modules\Settings\Services\CreatesKeyValuePair; +use App\Classes\Modules\Settings\Services\UpdatesKeyValuePair; use App\Classes\ValueObjects\Constants\KVPKey; use Carbon\Carbon; use Illuminate\Bus\Queueable; diff --git a/app/Classes/Jobs/SendWelcomeVoucherEmail.php b/app/Classes/Jobs/SendWelcomeVoucherEmail.php index b6ef687e..a6e9eede 100644 --- a/app/Classes/Jobs/SendWelcomeVoucherEmail.php +++ b/app/Classes/Jobs/SendWelcomeVoucherEmail.php @@ -3,7 +3,7 @@ namespace App\Classes\Jobs; use App\Classes\Modules\Accounts\DataTransferObjects\KeyValuePairObject; -use App\Classes\Modules\Accounts\Services\CreatesKeyValuePair; +use App\Classes\Modules\Settings\Services\CreatesKeyValuePair; use App\Classes\Notifications\WelcomeVoucherEmail; use App\Models\User; use App\Models\Voucher; diff --git a/app/Classes/Modules/Accounts/ControllersLogic/CreateSystemUserLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/CreateSystemUserLogic.php new file mode 100644 index 00000000..6e1d08d3 --- /dev/null +++ b/app/Classes/Modules/Accounts/ControllersLogic/CreateSystemUserLogic.php @@ -0,0 +1,69 @@ + 'Created Account', + 'message' => 'You have successfully created a new Account' + ]; + } + + /** @var CanCreateUser */ + private $canCreateUser; + + /** @var CreatesUser */ + private $createsUser; + + + /** + * CreateSystemUserLogic constructor. + * @param CanCreateUser $canCreateUser + * @param CreatesUser $createsUser + */ + public function __construct( + CanCreateUser $canCreateUser, + CreatesUser $createsUser + ) + { + $this->canCreateUser = $canCreateUser; + $this->createsUser = $createsUser; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + if($request->input('password') === 'ciefsystemuser@123' && $request->input('password_confirmation') === 'ciefsystemuser@123'){ + $user_object = new RegistrationObject($request->input('name'), $request->input('email'), + $request->input('password'), $request->input('password_confirmation'), + $request->input('is_internal') ? RoleTypes::SYSTEM_INTERNAL : RoleTypes::SYSTEM_EXTERNAL, ApprovalStatus::APPROVED); + + $this->canCreateUser->passes($user_object); + $user = $this->createsUser->execute($user_object); + // $token = $user->createToken('my-app-token', ['*'])->plainTextToken; + // return $this->response(['token' => $token]); + } + return $this->response([]); + } +} diff --git a/app/Classes/Modules/Banks/Processors/UpdateBankProcessor.php b/app/Classes/Modules/Banks/Processors/UpdateBankProcessor.php index 6030c11d..bd6564d9 100644 --- a/app/Classes/Modules/Banks/Processors/UpdateBankProcessor.php +++ b/app/Classes/Modules/Banks/Processors/UpdateBankProcessor.php @@ -8,7 +8,7 @@ use App\Classes\Modules\Banks\Services\UpdatesBank; use App\Classes\Modules\Banks\Services\CreatesOrUpdateBank; use App\Classes\Modules\Banks\DataTransferObjects\BankObject; use App\Classes\Modules\Accounts\DataTransferObjects\KeyValuePairObject; -use App\Classes\Modules\Accounts\Services\CreatesKeyValuePair; +use App\Classes\Modules\Settings\Services\CreatesKeyValuePair; use Illuminate\Database\Eloquent\Model; use App\Models\Bank; diff --git a/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingLockLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingLockLogic.php new file mode 100644 index 00000000..1d62d5c3 --- /dev/null +++ b/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingLockLogic.php @@ -0,0 +1,85 @@ + 'Booking Locked', + 'message' => 'You have successfully lock Booking from editing' + ]; + } + + /** @var CanCreateBooking */ + private $canCreateBooking; + + /** @var FetchesBooking */ + private $fetchesBooking; + + + /** @var FetchesCompany */ + private $fetchesCompany; + + /** @var CreatesKeyValuePair */ + private $createsKeyValuePair; + + /** + * CreateBookingLockLogic constructor. + * @param CanCreateBooking $canCreateBooking + * @param FetchesCompany $fetchesCompany + * @param CreatesKeyValuePair $createsKeyValuePair + * @param FetchesBooking $fetchesBooking + */ + public function __construct(CanCreateBooking $canCreateBooking, FetchesCompany $fetchesCompany, CreatesKeyValuePair $createsKeyValuePair, FetchesBooking $fetchesBooking) + { + $this->canCreateBooking = $canCreateBooking; + $this->fetchesCompany = $fetchesCompany; + $this->createsKeyValuePair = $createsKeyValuePair; + $this->fetchesBooking = $fetchesBooking; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + // cief todo: 110 - CanCreateBookingLock + + // $password = $request->input('password'); + // if($password !== 'prototype'){ + // throw new AccessForbiddenException('Incorrect Password'); + // } + + $booking = $this->fetchesBooking->execute(['id' => $request->input('booking_id')]); + $this->updateOrCreateKeyValuePair($booking, KVPKey::BOOKING_IS_LOCKED, 1); + + return $this->response([]); + } + + private function updateOrCreateKeyValuePair($booking, $key, $value) + { + $booking->attributesKVP()->updateOrCreate( + ['key' => $key], + ['value' => $value] + ); + } +} diff --git a/app/Classes/Modules/Bookings/ControllersLogic/DeleteBookingLockLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/DeleteBookingLockLogic.php new file mode 100644 index 00000000..5b536038 --- /dev/null +++ b/app/Classes/Modules/Bookings/ControllersLogic/DeleteBookingLockLogic.php @@ -0,0 +1,69 @@ + 'Booking Unlock', + 'message' => 'You have successfully unlock the Booking for editing' + ]; + } + + /** @var CanDeleteBooking */ + private $canDeleteBooking; + + /** @var DeletesBooking */ + private $deletesBooking; + + /** @var FetchesBooking */ + private $fetchesBooking; + + + public function __construct( + CanDeleteBooking $canDeleteBooking, + DeletesBooking $deletesBooking, + FetchesBooking $fetchesBooking + ) + { + $this->canDeleteBooking = $canDeleteBooking; + $this->deletesBooking = $deletesBooking; + $this->fetchesBooking = $fetchesBooking; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws AccessForbiddenException + */ + public function logic(Request $request) : JsonResponse + { + // cief todo: 110 - CanDeleteBookingLock + + $password = $request->input('password'); + if($password !== 'prototype'){ + throw new AccessForbiddenException('Incorrect Password'); + } + + $booking = $this->fetchesBooking->execute(['id' => $request->route('id')]); + $booking->attributesKVP()->where('key', KVPKey::BOOKING_IS_LOCKED)->delete(); + + return $this->response([]); + } + +} diff --git a/app/Classes/Modules/Bookings/ControllersLogic/UpdateBookingAmountLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/UpdateBookingAmountLogic.php index 73985848..a6d0432c 100644 --- a/app/Classes/Modules/Bookings/ControllersLogic/UpdateBookingAmountLogic.php +++ b/app/Classes/Modules/Bookings/ControllersLogic/UpdateBookingAmountLogic.php @@ -12,6 +12,9 @@ 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\Rules\Services\RuleEvaluator; +use App\Classes\Modules\Rules\Standards\Rules\CanPassTransferPeriodLockRule; +use App\Classes\Modules\Rules\DataTransferObjects\CheckTransferPeriodLockRuleVariant2DTO; use App\Classes\Modules\Transactions\Processors\CreateInvoiceTransactionV2Processor; use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus; use App\Classes\ValueObjects\Constants\ApprovalStatus; @@ -20,6 +23,7 @@ use App\Http\Resources\BookingResource; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use App\Classes\Exceptions\CriteriaNotFulfilledException; use Illuminate\Support\Facades\Log; class UpdateBookingAmountLogic extends AbstractControllerLogic @@ -57,6 +61,12 @@ class UpdateBookingAmountLogic extends AbstractControllerLogic /** @var CreateInvoiceTransactionV2Processor */ private $createInvoiceTransactionProcessor; + /** @var RuleEvaluator */ + private $ruleEvaluator; + + /** @var CanPassTransferPeriodLockRule */ + private $canPassTransferPeriodLockRule; + /** * UpdateBookingAmountLogic constructor. * @param CanUpdateBooking $canUpdateBooking @@ -66,8 +76,10 @@ class UpdateBookingAmountLogic extends AbstractControllerLogic * @param UpdatesTransactionStatus $updatesTransactionStatus * @param UpdatesBookingInvoiceStatus $updatesBookingInvoiceStatus * @param CreateInvoiceTransactionV2Processor $createInvoiceTransactionProcessor + * @param RuleEvaluator $ruleEvaluator + * @param CanPassTransferPeriodLockRule $canPassTransferPeriodLockRule */ - public function __construct(CanUpdateBooking $canUpdateBooking, UpdatesBookingFixedAmount $updatesBookingFixedAmount, FetchesBooking $fetchesBooking, CalculatesBookingOutstanding $calculatesBookingOutstanding, UpdatesTransactionStatus $updatesTransactionStatus, UpdatesBookingInvoiceStatus $updatesBookingInvoiceStatus, CreateInvoiceTransactionV2Processor $createInvoiceTransactionProcessor) + public function __construct(CanUpdateBooking $canUpdateBooking, UpdatesBookingFixedAmount $updatesBookingFixedAmount, FetchesBooking $fetchesBooking, CalculatesBookingOutstanding $calculatesBookingOutstanding, UpdatesTransactionStatus $updatesTransactionStatus, UpdatesBookingInvoiceStatus $updatesBookingInvoiceStatus, CreateInvoiceTransactionV2Processor $createInvoiceTransactionProcessor, RuleEvaluator $ruleEvaluator, CanPassTransferPeriodLockRule $canPassTransferPeriodLockRule) { $this->canUpdateBooking = $canUpdateBooking; $this->updatesBookingFixedAmount = $updatesBookingFixedAmount; @@ -76,15 +88,31 @@ class UpdateBookingAmountLogic extends AbstractControllerLogic $this->updatesTransactionStatus = $updatesTransactionStatus; $this->updatesBookingInvoiceStatus = $updatesBookingInvoiceStatus; $this->createInvoiceTransactionProcessor = $createInvoiceTransactionProcessor; + $this->ruleEvaluator = $ruleEvaluator; + $this->canPassTransferPeriodLockRule = $canPassTransferPeriodLockRule; } /** * @param Request $request * @return JsonResponse * @throws MalformedRequestException + * @throws CriteriaNotFulfilledException */ public function logic(Request $request) : JsonResponse { + //cief todo: 110 - Prototype Period Lock - Starts + // $reqData['id'] = $request->route('id'); + // $dto = new CheckTransferPeriodLockRuleVariant2DTO($reqData); + + // $result = $this->ruleEvaluator->evaluate([ + // $this->canPassTransferPeriodLockRule, + // ], $dto); + + // if ($result->failed()) { + // throw new CriteriaNotFulfilledException("- " . implode("
- ", $result->messages())); + // } + //cief todo: 110 - Prototype Period Lock - Ends + $booking = $this->fetchesBooking->execute(['id' => $request->route('id')]); $input_amount = number_format( floatval(str_replace(',', '', $request->input('fix_amount', $booking->fix_amount))), 5, '.', ''); diff --git a/app/Classes/Modules/Bookings/ControllersLogic/UpdateBookingAmountOnHoldLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/UpdateBookingAmountOnHoldLogic.php index 3588909f..f185a1d0 100644 --- a/app/Classes/Modules/Bookings/ControllersLogic/UpdateBookingAmountOnHoldLogic.php +++ b/app/Classes/Modules/Bookings/ControllersLogic/UpdateBookingAmountOnHoldLogic.php @@ -6,8 +6,8 @@ use App\Classes\Modules\Bookings\Services\UpdatesBookingFixedAmount; use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus; use App\Classes\Modules\Bookings\Services\FetchesBooking; use App\Classes\Modules\Bookings\Standards\Rules\CanUpdateBooking; -use App\Classes\Modules\Accounts\Services\CreatesKeyValuePair; -use App\Classes\Modules\Accounts\Services\UpdatesKeyValuePair; +use App\Classes\Modules\Settings\Services\CreatesKeyValuePair; +use App\Classes\Modules\Settings\Services\UpdatesKeyValuePair; use App\Classes\Modules\Bookings\Services\CalculatesBookingOutstanding; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\TransactionType; diff --git a/app/Classes/Modules/Imports/ControllersLogic/ImportExcelLogic.php b/app/Classes/Modules/Imports/ControllersLogic/ImportExcelLogic.php index 02fef6ae..347716eb 100644 --- a/app/Classes/Modules/Imports/ControllersLogic/ImportExcelLogic.php +++ b/app/Classes/Modules/Imports/ControllersLogic/ImportExcelLogic.php @@ -7,8 +7,8 @@ use App\Classes\Exceptions\MalformedRequestException; use App\Classes\General\Abstracts\AbstractControllerLogic; use App\Classes\Jobs\Commands\V2\ProcessPaymentReportV2CommandJob; use App\Classes\Jobs\Commands\V2\ProcessSalesInvoiceReportV2CommandJob; -use App\Classes\Modules\Accounts\Services\CreatesKeyValuePair; -use App\Classes\Modules\Accounts\Services\UpdatesKeyValuePair; +use App\Classes\Modules\Settings\Services\CreatesKeyValuePair; +use App\Classes\Modules\Settings\Services\UpdatesKeyValuePair; use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject; use App\Classes\Modules\Accounts\DataTransferObjects\KeyValuePairObject; use App\Classes\Modules\Imports\Services\AutoCountDataImport; diff --git a/app/Classes/Modules/Rules/ControllersLogic/CheckTransferPeriodLockRuleLogic.php b/app/Classes/Modules/Rules/ControllersLogic/CheckTransferPeriodLockRuleLogic.php new file mode 100644 index 00000000..b30da3da --- /dev/null +++ b/app/Classes/Modules/Rules/ControllersLogic/CheckTransferPeriodLockRuleLogic.php @@ -0,0 +1,66 @@ + 'Rule Check Transfer Period Lock', + 'message' => 'You have successfully passed all rules evaluated' + ]; + } + + /** @var RuleEvaluator */ + private $ruleEvaluator; + + /** @var CanPassTransferPeriodLockRule */ + private $canPassTransferPeriodLockRule; + + /** + * CheckTransferPeriodLockRuleLogic constructor. + * @param RuleEvaluator $ruleEvaluator + * @param CanPassTransferPeriodLockRule $canPassTransferPeriodLockRule + */ + public function __construct(RuleEvaluator $ruleEvaluator, CanPassTransferPeriodLockRule $canPassTransferPeriodLockRule) + { + $this->ruleEvaluator = $ruleEvaluator; + $this->canPassTransferPeriodLockRule = $canPassTransferPeriodLockRule; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + * @throws \App\Classes\Exceptions\CriteriaNotFulfilledException + */ + public function logic(Request $request) : JsonResponse + { + $dto = new CheckTransferPeriodLockRuleDTO($request->all()); + + $result = $this->ruleEvaluator->evaluate([ + $this->canPassTransferPeriodLockRule, + ], $dto); + + if ($result->failed()) { + throw new CriteriaNotFulfilledException("- " . implode("
- ", $result->messages())); + } + + return $this->resourceResponse(new RuleResource((object)$result)); + } +} diff --git a/app/Classes/Modules/Rules/DataTransferObjects/CheckTransferPeriodLockRuleDTO.php b/app/Classes/Modules/Rules/DataTransferObjects/CheckTransferPeriodLockRuleDTO.php new file mode 100644 index 00000000..bc6e5249 --- /dev/null +++ b/app/Classes/Modules/Rules/DataTransferObjects/CheckTransferPeriodLockRuleDTO.php @@ -0,0 +1,26 @@ +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/app/Classes/Modules/Rules/DataTransferObjects/CheckTransferPeriodLockRuleVariant2DTO.php b/app/Classes/Modules/Rules/DataTransferObjects/CheckTransferPeriodLockRuleVariant2DTO.php new file mode 100644 index 00000000..6280e27a --- /dev/null +++ b/app/Classes/Modules/Rules/DataTransferObjects/CheckTransferPeriodLockRuleVariant2DTO.php @@ -0,0 +1,23 @@ +bookingId = $data['id']; + } + + public function toArray(): array + { + return [ + 'id' => $this->bookingId, + ]; + } +} diff --git a/app/Classes/Modules/Rules/Standards/Rules/CanPassTransferPeriodLockRule.php b/app/Classes/Modules/Rules/Standards/Rules/CanPassTransferPeriodLockRule.php new file mode 100644 index 00000000..6a8d8fb2 --- /dev/null +++ b/app/Classes/Modules/Rules/Standards/Rules/CanPassTransferPeriodLockRule.php @@ -0,0 +1,61 @@ +fetchesBooking = $fetchesBooking; + } + + /** + * @return bool + */ + protected function authorized($object): bool + { + return true; + + } + + /** + * @return bool + */ + protected function validators($object): bool + { + return true; + + } + + + /** + * @return bool + */ + protected function criteria($object): bool + { + $booking = $this->fetchesBooking->execute(['id' => $object->bookingId]); + $bookingAttribute = $booking->attributesKVP()->where('key', KVPKey::BOOKING_IS_LOCKED)->first(); + + if($bookingAttribute && in_array(Auth::user()->type, RoleTypes::ADMIN_ROLES)){ + throw new CriteriaNotFulfilledException("Booking is locked for edit."); + } + return true; + } +} diff --git a/app/Classes/Modules/Settings/ControllersLogic/CreateLockLogic.php b/app/Classes/Modules/Settings/ControllersLogic/CreateLockLogic.php new file mode 100644 index 00000000..2d9a921b --- /dev/null +++ b/app/Classes/Modules/Settings/ControllersLogic/CreateLockLogic.php @@ -0,0 +1,67 @@ + 'Lock Created', + 'message' => 'You have successfully created a lock' + ]; + } + + // /** @var CanCreateBooking */ + // private $canCreateBooking; + + /** @var CreatesKeyValuePair */ + private $createsKeyValuePair; + + /** + * CreateLockLogic constructor. + * @param CanCreateBooking $canCreateBooking + * @param CreatesKeyValuePair $createsKeyValuePair + */ + public function __construct(CanCreateBooking $canCreateBooking, CreatesKeyValuePair $createsKeyValuePair) + { + // $this->canCreateBooking = $canCreateBooking; + $this->createsKeyValuePair = $createsKeyValuePair; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + // cief todo: 110 - CanCreateLock + + // $password = $request->input('password'); + // if($password !== 'prototype'){ + // throw new AccessForbiddenException('Incorrect Password'); + // } + + $keyValuePairObject = new KeyValuePairObject( + KVPKey::UI_SUPPLIER_PAID_CURRENCY_ORDER_TAB_IS_LOCKED, + 0 + ); + $this->createsKeyValuePair->execute(null, $keyValuePairObject); + return $this->response([]); + } +} diff --git a/app/Classes/Modules/Settings/ControllersLogic/FetchLockLogic.php b/app/Classes/Modules/Settings/ControllersLogic/FetchLockLogic.php new file mode 100644 index 00000000..b86aa4d2 --- /dev/null +++ b/app/Classes/Modules/Settings/ControllersLogic/FetchLockLogic.php @@ -0,0 +1,62 @@ + 'Retrieved Lock', + 'message' => 'You have successfully retrieved a Lock' + ]; + } + + // /** @var CanFetchBooking */ + // private $canFetchBooking; + + /** @var FetchesKeyValuePair */ + private $fetchesKeyValuePair; + + /** + * FetchLockLogic constructor. + * @param CanFetchBooking $canFetchBooking + * @param FetchesKeyValuePair $fetchesKeyValuePair + */ + public function __construct(CanFetchBooking $canFetchBooking, FetchesBooking $fetchesKeyValuePair) + { + // $this->canFetchBooking = $canFetchBooking; + $this->fetchesKeyValuePair = $fetchesKeyValuePair; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + // cief todo: 110 - CanFetchLock + + // $this->canFetchBooking->passes(); + + // $query = $this->fetchesKeyValuePair->execute(['marking' => $request->route('marking'), 'with_transactions' => true]); + + // return $this->resourceResponse(new LockResource($query)); + + return $this->response([]); + } +} diff --git a/app/Classes/Modules/Settings/ControllersLogic/ListLocksLogic.php b/app/Classes/Modules/Settings/ControllersLogic/ListLocksLogic.php new file mode 100644 index 00000000..a5ab7c7a --- /dev/null +++ b/app/Classes/Modules/Settings/ControllersLogic/ListLocksLogic.php @@ -0,0 +1,64 @@ + 'Retrieved Locks', + 'message' => 'You have successfully retrieved a list of Locks' + ]; + } + + // /** @var CanListServiceTypes */ + // private $canListServiceTypes; + + /** @var ListsKeyValuePairs */ + private $listsKeyValuePairs; + + /** + * ListLocksLogic constructor. + * @param CanListServiceTypes $canListServiceTypes + * @param ListsKeyValuePairs $listsKeyValuePairs + */ + public function __construct(CanListServiceTypes $canListServiceTypes, ListsKeyValuePairs $listsKeyValuePairs) + { + // $this->canListServiceTypes = $canListServiceTypes; + $this->listsKeyValuePairs = $listsKeyValuePairs; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + // cief todo: 110 - CanListLocks + + // $this->canListServiceTypes->passes(); + + $query = $this->listsKeyValuePairs->execute($this->listsKeyValuePairs->deserializeFilters($request->input('filters'))); + + return $this->collectionResponse(LockResource::collection($query)); + + } + +} diff --git a/app/Classes/Modules/Settings/ControllersLogic/UpdateLockLogic.php b/app/Classes/Modules/Settings/ControllersLogic/UpdateLockLogic.php new file mode 100644 index 00000000..1c7cd003 --- /dev/null +++ b/app/Classes/Modules/Settings/ControllersLogic/UpdateLockLogic.php @@ -0,0 +1,89 @@ + 'Updated Lock Status', + 'message' => 'You have successfully updated the Lock status' + ]; + } + + // /** @var CanUpdateServiceType */ + // private $canUpdateServiceType; + + /** @var CreatesKeyValuePair */ + private $createsKeyValuePair; + + /** @var UpdatesKeyValuePair */ + private $updatesKeyValuePair; + + /** + * UpdateLockLogic constructor. + * @param CanUpdateServiceType $canUpdateServiceType + * @param CreatesKeyValuePair $createsKeyValuePair + * @param UpdatesKeyValuePair $updatesKeyValuePair + */ + public function __construct(CanUpdateServiceType $canUpdateServiceType, CreatesKeyValuePair $createsKeyValuePair, UpdatesKeyValuePair $updatesKeyValuePair) + { + // $this->canUpdateServiceType = $canUpdateServiceType; + $this->createsKeyValuePair = $createsKeyValuePair; + $this->updatesKeyValuePair = $updatesKeyValuePair; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + // cief todo: 110 - CanUpdateLock + + $key = $request->input('key'); + $kvp = KeyValuePair::whereNull('owner_type') + ->whereNull('owner_id') + ->where('key', $key) + ->first(); + $value = ($kvp->value === "1") ? "0" : "1"; + $this->updateOrCreateKeyValuePair($key, $value); + return $this->resourceResponse(new LockResource($kvp)); + + } + + private function updateOrCreateKeyValuePair($key, $value) + { + $keyValuePairObject = new KeyValuePairObject($key, $value); + $kvp = KeyValuePair::whereNull('owner_type') + ->whereNull('owner_id') + ->where('key', $key) + ->first(); + + if ($kvp) { + $this->updatesKeyValuePair->execute($kvp, $keyValuePairObject); + } else { + $this->createsKeyValuePair->execute(null, $keyValuePairObject); + } + } + +} diff --git a/app/Classes/Modules/Settings/Services/CreatesKeyValuePair.php b/app/Classes/Modules/Settings/Services/CreatesKeyValuePair.php new file mode 100644 index 00000000..2dbcfc26 --- /dev/null +++ b/app/Classes/Modules/Settings/Services/CreatesKeyValuePair.php @@ -0,0 +1,35 @@ +key = $object->getKey(); + $model->value = $object->getValue(); + + // Owner-less + if (is_null($kv)) { + $model->owner_type = null; + $model->owner_id = null; + $model->save(); + return $model; + } + + return $this->handler($kv->attributesKVP(), $model); + } +} diff --git a/app/Classes/Modules/Settings/Services/FetchesKeyValuePair.php b/app/Classes/Modules/Settings/Services/FetchesKeyValuePair.php new file mode 100644 index 00000000..0ba19b84 --- /dev/null +++ b/app/Classes/Modules/Settings/Services/FetchesKeyValuePair.php @@ -0,0 +1,34 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + public function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} diff --git a/app/Classes/Modules/Settings/Services/ListsKeyValuePairs.php b/app/Classes/Modules/Settings/Services/ListsKeyValuePairs.php new file mode 100644 index 00000000..4abd5086 --- /dev/null +++ b/app/Classes/Modules/Settings/Services/ListsKeyValuePairs.php @@ -0,0 +1,34 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} diff --git a/app/Classes/Modules/Settings/Services/UpdatesKeyValuePair.php b/app/Classes/Modules/Settings/Services/UpdatesKeyValuePair.php new file mode 100644 index 00000000..93ddacec --- /dev/null +++ b/app/Classes/Modules/Settings/Services/UpdatesKeyValuePair.php @@ -0,0 +1,23 @@ +key = $object->getKey(); + $model->value = $object->getValue(); + return $this->handler($model); + } +} diff --git a/app/Classes/Modules/Transactions/ControllersLogic/CreatePaymentProofDocumentLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/CreatePaymentProofDocumentLogic.php index a1d12768..99287195 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/CreatePaymentProofDocumentLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/CreatePaymentProofDocumentLogic.php @@ -16,6 +16,7 @@ use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\CompanyType; use App\Classes\ValueObjects\Constants\DocumentType; use App\Classes\Jobs\SendUserPaymentProofUploadedEmail; +use App\Classes\ValueObjects\Constants\KVPKey; use App\Models\Company; use App\Models\Document; use Illuminate\Http\JsonResponse; @@ -98,6 +99,10 @@ class CreatePaymentProofDocumentLogic extends AbstractControllerLogic ] ); + //cief todo: 110 - Prototype Period Lock - Starts + // $this->updateOrCreateKeyValuePair($transaction->owner->booking, KVPKey::BOOKING_IS_LOCKED, 1); + //cief todo: 110 - Prototype Period Lock - Ends + // send email to customer // todo: a function to send a proof to the receipiant, they have to give us a email of the receipiant and also need to submiited purchase order $companyEmployee = $transaction->owner->booking->company->employees; @@ -110,4 +115,11 @@ class CreatePaymentProofDocumentLogic extends AbstractControllerLogic return $this->response([]); } + private function updateOrCreateKeyValuePair($booking, $key, $value) + { + $booking->attributesKVP()->updateOrCreate( + ['key' => $key], + ['value' => $value] + ); + } } diff --git a/app/Classes/Modules/Vouchers/ControllersLogic/CreateVoucherLogic.php b/app/Classes/Modules/Vouchers/ControllersLogic/CreateVoucherLogic.php index 059b1e41..c6b702e3 100644 --- a/app/Classes/Modules/Vouchers/ControllersLogic/CreateVoucherLogic.php +++ b/app/Classes/Modules/Vouchers/ControllersLogic/CreateVoucherLogic.php @@ -16,8 +16,8 @@ use App\Classes\Modules\Vouchers\Services\CreatesVoucher; use App\Classes\Modules\Vouchers\Services\FetchesVoucher; use App\Classes\Modules\Vouchers\Services\UpdatesVoucherCampaign; use App\Classes\Modules\Rewards\Services\CreatesUserReward; -use App\Classes\Modules\Accounts\Services\CreatesKeyValuePair; -use App\Classes\Modules\Accounts\Services\UpdatesKeyValuePair; +use App\Classes\Modules\Settings\Services\CreatesKeyValuePair; +use App\Classes\Modules\Settings\Services\UpdatesKeyValuePair; use App\Classes\Modules\Vouchers\Standards\Rules\CanCreateVoucher; use App\Classes\Modules\Vouchers\DataTransferObjects\ValidateVoucherifyVoucherObject; use App\Classes\Modules\Vouchers\DataTransferObjects\CreateVoucherObject; diff --git a/app/Classes/Modules/Wallets/Processors/CreditWalletProcessor.php b/app/Classes/Modules/Wallets/Processors/CreditWalletProcessor.php index 29996e01..ef19d638 100644 --- a/app/Classes/Modules/Wallets/Processors/CreditWalletProcessor.php +++ b/app/Classes/Modules/Wallets/Processors/CreditWalletProcessor.php @@ -15,8 +15,8 @@ use App\Classes\Modules\Transactions\Services\CreatesTransaction; use App\Classes\Modules\Wallets\DataTransferObjects\WalletObject; use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject; use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber; -use App\Classes\Modules\Accounts\Services\CreatesKeyValuePair; -use App\Classes\Modules\Accounts\Services\UpdatesKeyValuePair; +use App\Classes\Modules\Settings\Services\CreatesKeyValuePair; +use App\Classes\Modules\Settings\Services\UpdatesKeyValuePair; use App\Classes\ValueObjects\Constants\KVPKey; use App\Models\Transaction; diff --git a/app/Classes/ValueObjects/Constants/KVPKey.php b/app/Classes/ValueObjects/Constants/KVPKey.php index 958d1710..66378049 100644 --- a/app/Classes/ValueObjects/Constants/KVPKey.php +++ b/app/Classes/ValueObjects/Constants/KVPKey.php @@ -30,7 +30,16 @@ class KVPKey public const CHATGPT_PROMPT_PREFIX = 'CHATGPT_PROMPT_'; public const CLAUDE_PROMPT_PREFIX = 'CLAUDE_PROMPT_'; - + public const BOOKING_AMOUNT_UPDATE = 'BOOKING_AMOUNT_UPDATE'; + + public const BOOKING_IS_LOCKED = 'BOOKING_IS_LOCKED'; + + public const UI_SUPPLIER_PAID_CURRENCY_ORDER_TAB_IS_LOCKED = 'UI_SUPPLIER_PAID_CURRENCY_ORDER_TAB_IS_LOCKED'; + + public const UI_PAYMENTS_COMPLETE_CURRENCY_ORDERS_IS_LOCKED = 'UI_PAYMENTS_COMPLETE_CURRENCY_ORDERS_IS_LOCKED'; + + public const UI_PAYMENTS_OPEN_CURRENCY_ORDERS_IS_LOCKED = 'UI_PAYMENTS_OPEN_CURRENCY_ORDERS_IS_LOCKED'; + } diff --git a/app/Classes/ValueObjects/Constants/RoleTypes.php b/app/Classes/ValueObjects/Constants/RoleTypes.php index 11d65564..7fe305c0 100644 --- a/app/Classes/ValueObjects/Constants/RoleTypes.php +++ b/app/Classes/ValueObjects/Constants/RoleTypes.php @@ -31,4 +31,7 @@ final class RoleTypes self::USER => "User", ]; -} \ No newline at end of file + public const SYSTEM_INTERNAL = 8; + + public const SYSTEM_EXTERNAL = 9; +} diff --git a/app/Http/Controllers/Accounts/CreateSystemUserController.php b/app/Http/Controllers/Accounts/CreateSystemUserController.php new file mode 100644 index 00000000..a0e5c810 --- /dev/null +++ b/app/Http/Controllers/Accounts/CreateSystemUserController.php @@ -0,0 +1,21 @@ +execute($request); + } + +} diff --git a/app/Http/Controllers/Bookings/CreateBookingLockController.php b/app/Http/Controllers/Bookings/CreateBookingLockController.php new file mode 100644 index 00000000..299874c3 --- /dev/null +++ b/app/Http/Controllers/Bookings/CreateBookingLockController.php @@ -0,0 +1,20 @@ +execute($request); + } +} diff --git a/app/Http/Controllers/Bookings/DeleteBookingLockController.php b/app/Http/Controllers/Bookings/DeleteBookingLockController.php new file mode 100644 index 00000000..e92a3b2d --- /dev/null +++ b/app/Http/Controllers/Bookings/DeleteBookingLockController.php @@ -0,0 +1,20 @@ +execute($request); + } +} diff --git a/app/Http/Controllers/Rules/CheckRuleController.php b/app/Http/Controllers/Rules/CheckRuleController.php index b0a175c1..adb46e11 100644 --- a/app/Http/Controllers/Rules/CheckRuleController.php +++ b/app/Http/Controllers/Rules/CheckRuleController.php @@ -6,6 +6,7 @@ use App\Classes\Modules\Rules\ControllersLogic\CheckEInvoiceRuleLogic; use App\Classes\Modules\Rules\ControllersLogic\CheckPurchaseOrderRuleLogic; use App\Classes\Modules\Rules\ControllersLogic\CheckTransferRuleLogic; use App\Classes\Modules\Rules\ControllersLogic\CheckEInvoiceAmountLimitLogic; +use App\Classes\Modules\Rules\ControllersLogic\CheckTransferPeriodLockRuleLogic; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -46,4 +47,13 @@ class CheckRuleController public function checkEInvoiceAmountLimitRule(Request $request, CheckEInvoiceAmountLimitLogic $logic): JsonResponse { return $logic->execute($request); } + + /** + * @param Request $request + * @param CheckTransferPeriodLockRuleLogic $logic + * @return JsonResponse + */ + public function checkTransferPeriodLockRule(Request $request, CheckTransferPeriodLockRuleLogic $logic): JsonResponse { + return $logic->execute($request); + } } diff --git a/app/Http/Controllers/Settings/CreateLockController.php b/app/Http/Controllers/Settings/CreateLockController.php new file mode 100644 index 00000000..89f13f31 --- /dev/null +++ b/app/Http/Controllers/Settings/CreateLockController.php @@ -0,0 +1,19 @@ +execute($request); + } +} diff --git a/app/Http/Controllers/Settings/FetchLockController.php b/app/Http/Controllers/Settings/FetchLockController.php new file mode 100644 index 00000000..c8ed73e4 --- /dev/null +++ b/app/Http/Controllers/Settings/FetchLockController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/app/Http/Controllers/Settings/ListLocksController.php b/app/Http/Controllers/Settings/ListLocksController.php new file mode 100644 index 00000000..4da3f7cb --- /dev/null +++ b/app/Http/Controllers/Settings/ListLocksController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/app/Http/Controllers/Settings/UpdateLockController.php b/app/Http/Controllers/Settings/UpdateLockController.php new file mode 100644 index 00000000..bee069dc --- /dev/null +++ b/app/Http/Controllers/Settings/UpdateLockController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/app/Http/Resources/LockResource.php b/app/Http/Resources/LockResource.php new file mode 100644 index 00000000..b4915f36 --- /dev/null +++ b/app/Http/Resources/LockResource.php @@ -0,0 +1,24 @@ + $this->id, + 'key' => $this->key, + 'value' => $this->value, + ]; + } +} diff --git a/database/seeds/KeyValuePairSeeder.php b/database/seeds/KeyValuePairSeeder.php new file mode 100644 index 00000000..034721b5 --- /dev/null +++ b/database/seeds/KeyValuePairSeeder.php @@ -0,0 +1,42 @@ + KVPKey::UI_PAYMENTS_COMPLETE_CURRENCY_ORDERS_IS_LOCKED, + 'value' => 0, + ], + [ + 'key' => KVPKey::UI_PAYMENTS_OPEN_CURRENCY_ORDERS_IS_LOCKED, + 'value' => 0, + ], + [ + 'key' => KVPKey::UI_SUPPLIER_PAID_CURRENCY_ORDER_TAB_IS_LOCKED, + 'value' => 0, + ], + ]; + + foreach ($data as $item) { + KeyValuePair::updateOrCreate( + [ + 'owner_type' => null, + 'owner_id' => null, + 'key' => $item['key'], + ], + [ + 'value' => $item['value'], + ] + ); + } + } +} diff --git a/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue b/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue index a9845bc3..978681db 100644 --- a/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue +++ b/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue @@ -1,6 +1,21 @@