From d3c670aeed6a9121e4b833e753fe6d3327065564 Mon Sep 17 00:00:00 2001 From: Fairuz Date: Thu, 6 May 2021 18:03:48 +0800 Subject: [PATCH] EXCHANGE-149 - Layout, components for merge bookings (abit on backend for filter booking list) --- .gitignore | 13 +- .../Filters/ConvertibleCurrencyId.php | 20 ++ .../Eloquent/Filters/FixedCurrencyId.php | 20 ++ app/Classes/General/Eloquent/Filters/IdIn.php | 20 ++ .../ControllersLogic/MergeBookingLogic.php | 98 +++++++++ .../BookingMergeObject.php | 30 +++ .../Standards/Rules/CanMergeBooking.php | 51 +++++ .../Validators/BookingMergeValidation.php | 39 ++++ .../Bookings/MergeBookingController.php | 19 ++ .../elements/BookingMergeableComponent.vue | 58 ++++++ .../sections/BookingMergeSectionComponent.vue | 189 ++++++++++++++++++ resources/views/pages/booking_merge.blade.php | 8 + routes/booking.php | 1 + routes/web.php | 4 +- 14 files changed, 568 insertions(+), 2 deletions(-) create mode 100644 app/Classes/General/Eloquent/Filters/ConvertibleCurrencyId.php create mode 100644 app/Classes/General/Eloquent/Filters/FixedCurrencyId.php create mode 100644 app/Classes/General/Eloquent/Filters/IdIn.php create mode 100644 app/Classes/Modules/Bookings/ControllersLogic/MergeBookingLogic.php create mode 100644 app/Classes/Modules/Bookings/DataTransferObjects/BookingMergeObject.php create mode 100644 app/Classes/Modules/Bookings/Standards/Rules/CanMergeBooking.php create mode 100644 app/Classes/Modules/Bookings/Standards/Validators/BookingMergeValidation.php create mode 100644 app/Http/Controllers/Bookings/MergeBookingController.php create mode 100644 resources/assets/vue/components/bookings/elements/BookingMergeableComponent.vue create mode 100644 resources/assets/vue/components/bookings/sections/BookingMergeSectionComponent.vue create mode 100644 resources/views/pages/booking_merge.blade.php diff --git a/.gitignore b/.gitignore index a4dfdd60..95d268cf 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,15 @@ npm-debug.log yarn-error.log /storage/file composer.lock -yarn.lock \ No newline at end of file +yarn.lock +.DS_Store +public/.DS_Store +public/images/.DS_Store +gox.iml +rebuild_docker.sh +docker/* +db/* +docker-compose.yml +package-lock.json +public/* +/public/* \ No newline at end of file diff --git a/app/Classes/General/Eloquent/Filters/ConvertibleCurrencyId.php b/app/Classes/General/Eloquent/Filters/ConvertibleCurrencyId.php new file mode 100644 index 00000000..3d5701f7 --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/ConvertibleCurrencyId.php @@ -0,0 +1,20 @@ +where('convertible_currency_id', $value); + } + +} \ No newline at end of file diff --git a/app/Classes/General/Eloquent/Filters/FixedCurrencyId.php b/app/Classes/General/Eloquent/Filters/FixedCurrencyId.php new file mode 100644 index 00000000..bd582f82 --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/FixedCurrencyId.php @@ -0,0 +1,20 @@ +where('fix_currency_id', $value); + } + +} \ No newline at end of file diff --git a/app/Classes/General/Eloquent/Filters/IdIn.php b/app/Classes/General/Eloquent/Filters/IdIn.php new file mode 100644 index 00000000..cfe9358e --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/IdIn.php @@ -0,0 +1,20 @@ +whereIn('id', $value); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Bookings/ControllersLogic/MergeBookingLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/MergeBookingLogic.php new file mode 100644 index 00000000..23cce87f --- /dev/null +++ b/app/Classes/Modules/Bookings/ControllersLogic/MergeBookingLogic.php @@ -0,0 +1,98 @@ + 'Merge Booking', + 'message' => 'You have successfully merged Booking' + ]; + } + + /** @var CanCreateBooking */ + private $canMergeBooking; + + /** @var CreatesBooking */ + private $createsBooking; + + /** @var GeneratesBookingMarking */ + private $generatesBookingMarking; + + /** @var FetchesCompany */ + private $fetchesCompany; + + /** @var FetchesCompany */ + private $fetchesBooking; + + /** + * CreateBookingLogic constructor. + * @param CanMergeBooking $canMergeBooking + * @param CreatesBooking $createsBooking + * @param GeneratesBookingMarking $generatesBookingMarking + * @param FetchesCompany $fetchesCompany + */ + public function __construct(CanMergeBooking $canMergeBooking, CreatesBooking $createsBooking, GeneratesBookingMarking $generatesBookingMarking, FetchesCompany $fetchesCompany, FetchesBooking $fetchesBooking) + { + $this->canMergeBooking = $canMergeBooking; + $this->createsBooking = $createsBooking; + $this->generatesBookingMarking = $generatesBookingMarking; + $this->fetchesCompany = $fetchesCompany; + $this->fetchesBooking = $fetchesBooking; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\RequestValidationException + * @throws \App\Classes\Exceptions\ResourceNotFoundException + */ + public function logic(Request $request) : JsonResponse + { + $object = new BookingMergeObject($request->get('booking_ids')); + + $this->canMergeBooking->passes($object); + + /* + $bookings = $this->fetchesBooking->execute([ + 'id_in'=> $object->getBookingIds(), + 'status' => ApprovalStatus::APPROVED, + ]); + */ + #TODO: Fetch transaction (+details) record, reassign transaction id & recalculate amount + + //dd($bookings); + + return $this->response(); + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Bookings/DataTransferObjects/BookingMergeObject.php b/app/Classes/Modules/Bookings/DataTransferObjects/BookingMergeObject.php new file mode 100644 index 00000000..5b590145 --- /dev/null +++ b/app/Classes/Modules/Bookings/DataTransferObjects/BookingMergeObject.php @@ -0,0 +1,30 @@ +bookingIds = $bookingIds; + } + + /** + * @return array + */ + public function getBookingIds(): array + { + return $this->bookingIds; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Bookings/Standards/Rules/CanMergeBooking.php b/app/Classes/Modules/Bookings/Standards/Rules/CanMergeBooking.php new file mode 100644 index 00000000..64e89127 --- /dev/null +++ b/app/Classes/Modules/Bookings/Standards/Rules/CanMergeBooking.php @@ -0,0 +1,51 @@ +bookingMergeValidation = $bookingMergeValidation; + } + + /** + * @return bool + */ + protected function authorized(): bool + { + return true; + } + + /** + * @param BookingObject $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->bookingMergeValidation->validate($object); + } + + /** + * @param BookingObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Bookings/Standards/Validators/BookingMergeValidation.php b/app/Classes/Modules/Bookings/Standards/Validators/BookingMergeValidation.php new file mode 100644 index 00000000..b7e77712 --- /dev/null +++ b/app/Classes/Modules/Bookings/Standards/Validators/BookingMergeValidation.php @@ -0,0 +1,39 @@ + $object->getBookingIds() + ]; + } + + /** + * @return array + */ + protected function rules(): array + { + return [ + 'booking_ids' => 'required|array|min:2', + ]; + } + + /** + * @return array + */ + protected function messages(): array + { + return []; + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Bookings/MergeBookingController.php b/app/Http/Controllers/Bookings/MergeBookingController.php new file mode 100644 index 00000000..40d733a9 --- /dev/null +++ b/app/Http/Controllers/Bookings/MergeBookingController.php @@ -0,0 +1,19 @@ +execute($request); + } +} \ No newline at end of file diff --git a/resources/assets/vue/components/bookings/elements/BookingMergeableComponent.vue b/resources/assets/vue/components/bookings/elements/BookingMergeableComponent.vue new file mode 100644 index 00000000..a8aea8a2 --- /dev/null +++ b/resources/assets/vue/components/bookings/elements/BookingMergeableComponent.vue @@ -0,0 +1,58 @@ + + + \ No newline at end of file diff --git a/resources/assets/vue/components/bookings/sections/BookingMergeSectionComponent.vue b/resources/assets/vue/components/bookings/sections/BookingMergeSectionComponent.vue new file mode 100644 index 00000000..b0f4b6c9 --- /dev/null +++ b/resources/assets/vue/components/bookings/sections/BookingMergeSectionComponent.vue @@ -0,0 +1,189 @@ + + \ No newline at end of file diff --git a/resources/views/pages/booking_merge.blade.php b/resources/views/pages/booking_merge.blade.php new file mode 100644 index 00000000..e23db5bd --- /dev/null +++ b/resources/views/pages/booking_merge.blade.php @@ -0,0 +1,8 @@ +@extends('layouts.base_portal') +@section('inner_content') +
+
+ +
+
+@endsection \ No newline at end of file diff --git a/routes/booking.php b/routes/booking.php index 8f60bfb2..8e89e4ff 100644 --- a/routes/booking.php +++ b/routes/booking.php @@ -6,6 +6,7 @@ Route::group(['prefix' => 'booking', 'as' => 'booking.', 'namespace' => 'Booking Route::get('/show/{marking}', 'FetchBookingController@fetch')->name('show'); Route::get('/list', 'ListBookingsController@list')->name('list'); Route::post('/create', 'CreateBookingController@create')->name('create'); + Route::post('/merge', 'MergeBookingController@merge')->name('merge'); Route::put('/update/{id}', 'UpdateBookingController@update')->name('update'); Route::delete('/delete/{id}', 'DeleteBookingController@delete')->name('delete'); diff --git a/routes/web.php b/routes/web.php index c3c0c925..eca220e9 100644 --- a/routes/web.php +++ b/routes/web.php @@ -37,4 +37,6 @@ Route::get('/transfer/{marking}', function ($marking) { return view('pages.booking_details', ['marking' => $marking]); })->name('booking.details'); - +Route::get('/transfer/merge/{marking}', function ($marking) { + return view('pages.booking_merge', ['marking' => $marking]); +})->name('booking.merge');