From 42d064d07f06da87786ef0ba4a80cffc9d8566c9 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Thu, 26 Aug 2021 15:09:32 +0800 Subject: [PATCH] add cancel order and restore order function --- .../ControllersLogic/CancelBookingLogic.php | 68 +++++++++++++++++++ .../ControllersLogic/RestoreBookingLogic.php | 68 +++++++++++++++++++ .../Bookings/Services/CancelsBooking.php | 24 +++++++ .../Bookings/Services/RestoresBooking.php | 24 +++++++ .../Standards/Rules/CanDeleteBooking.php | 2 +- .../Bookings/CancelBookingController.php | 19 ++++++ .../Bookings/RestoreBookingController.php | 19 ++++++ .../bookings/elements/BookingComponent.vue | 22 ++++-- .../forms/CancelBookingFormComponent.vue | 40 +++++++++++ .../forms/RestoreBookingFormComponent.vue | 40 +++++++++++ routes/booking.php | 2 + 11 files changed, 323 insertions(+), 5 deletions(-) create mode 100644 app/Classes/Modules/Bookings/ControllersLogic/CancelBookingLogic.php create mode 100644 app/Classes/Modules/Bookings/ControllersLogic/RestoreBookingLogic.php create mode 100644 app/Classes/Modules/Bookings/Services/CancelsBooking.php create mode 100644 app/Classes/Modules/Bookings/Services/RestoresBooking.php create mode 100644 app/Http/Controllers/Bookings/CancelBookingController.php create mode 100644 app/Http/Controllers/Bookings/RestoreBookingController.php create mode 100644 resources/assets/vue/components/bookings/forms/CancelBookingFormComponent.vue create mode 100644 resources/assets/vue/components/bookings/forms/RestoreBookingFormComponent.vue diff --git a/app/Classes/Modules/Bookings/ControllersLogic/CancelBookingLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/CancelBookingLogic.php new file mode 100644 index 00000000..29692a89 --- /dev/null +++ b/app/Classes/Modules/Bookings/ControllersLogic/CancelBookingLogic.php @@ -0,0 +1,68 @@ + 'Cancel Booking', + 'message' => 'You have successfully canceled the Booking' + ]; + } + + + /** @var FetchesBooking */ + private $fetchesBooking; + + /** @var CancelsBooking */ + private $cancelsBooking; + + /** + * CancelBookingLogic constructor. + * @param FetchesBooking $fetchesBooking + * @param CancelsBooking $cancelsBooking + */ + public function __construct(FetchesBooking $fetchesBooking, CancelsBooking $cancelsBooking) + { + $this->fetchesBooking = $fetchesBooking; + $this->cancelsBooking = $cancelsBooking; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws MalformedRequestException + */ + public function logic(Request $request) : JsonResponse + { + $booking = $this->fetchesBooking->execute(['id' => $request->route('id')]); + + $bookingActivePayments = $booking->transactions()->where('type', '=', TransactionType::PAYMENT)->where('status', '!=', ApprovalStatus::PENDING_SUBMISSION)->get(); + + if(count($bookingActivePayments)){ + throw new MalformedRequestException('You can\'t cancel an order with active payments'); + } + + $this->cancelsBooking->execute($booking); + + return $this->resourceResponse(new BookingResource($booking)); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Bookings/ControllersLogic/RestoreBookingLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/RestoreBookingLogic.php new file mode 100644 index 00000000..2ad8fa26 --- /dev/null +++ b/app/Classes/Modules/Bookings/ControllersLogic/RestoreBookingLogic.php @@ -0,0 +1,68 @@ + 'Restore Booking', + 'message' => 'You have successfully restored the Booking' + ]; + } + + /** @var CanDeleteBooking */ + private $canDeleteBooking; + + /** @var FetchesBooking */ + private $fetchesBooking; + + /** @var RestoresBooking */ + private $restoresBooking; + + /** + * RestoreBookingLogic constructor. + * @param CanDeleteBooking $canDeleteBooking + * @param FetchesBooking $fetchesBooking + * @param RestoresBooking $restoresBooking + */ + public function __construct(CanDeleteBooking $canDeleteBooking, FetchesBooking $fetchesBooking, RestoresBooking $restoresBooking) + { + $this->canDeleteBooking = $canDeleteBooking; + $this->fetchesBooking = $fetchesBooking; + $this->restoresBooking = $restoresBooking; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function logic(Request $request) : JsonResponse + { + $booking = $this->fetchesBooking->execute(['id' => $request->route('id')]); + + $this->restoresBooking->execute($booking); + + return $this->resourceResponse(new BookingResource($booking)); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Bookings/Services/CancelsBooking.php b/app/Classes/Modules/Bookings/Services/CancelsBooking.php new file mode 100644 index 00000000..dd9b12f3 --- /dev/null +++ b/app/Classes/Modules/Bookings/Services/CancelsBooking.php @@ -0,0 +1,24 @@ +status = ApprovalStatus::SUSPENDED; + + return $this->handler($model); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Bookings/Services/RestoresBooking.php b/app/Classes/Modules/Bookings/Services/RestoresBooking.php new file mode 100644 index 00000000..9efef208 --- /dev/null +++ b/app/Classes/Modules/Bookings/Services/RestoresBooking.php @@ -0,0 +1,24 @@ +status = ApprovalStatus::APPROVED; + + return $this->handler($model); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Bookings/Standards/Rules/CanDeleteBooking.php b/app/Classes/Modules/Bookings/Standards/Rules/CanDeleteBooking.php index 1b5acee4..dfd307bc 100644 --- a/app/Classes/Modules/Bookings/Standards/Rules/CanDeleteBooking.php +++ b/app/Classes/Modules/Bookings/Standards/Rules/CanDeleteBooking.php @@ -34,7 +34,7 @@ class CanDeleteBooking extends AbstractRule /** - * @param BookingObject $object + * @param $object * @return bool */ protected function criteria($object): bool diff --git a/app/Http/Controllers/Bookings/CancelBookingController.php b/app/Http/Controllers/Bookings/CancelBookingController.php new file mode 100644 index 00000000..f31a80a1 --- /dev/null +++ b/app/Http/Controllers/Bookings/CancelBookingController.php @@ -0,0 +1,19 @@ +execute($request); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Bookings/RestoreBookingController.php b/app/Http/Controllers/Bookings/RestoreBookingController.php new file mode 100644 index 00000000..5b4aa809 --- /dev/null +++ b/app/Http/Controllers/Bookings/RestoreBookingController.php @@ -0,0 +1,19 @@ +execute($request); + } +} \ No newline at end of file diff --git a/resources/assets/vue/components/bookings/elements/BookingComponent.vue b/resources/assets/vue/components/bookings/elements/BookingComponent.vue index febce6ba..509e9840 100644 --- a/resources/assets/vue/components/bookings/elements/BookingComponent.vue +++ b/resources/assets/vue/components/bookings/elements/BookingComponent.vue @@ -52,17 +52,26 @@ Pending... -
+
- +
+ +
+
+ +
+ + + + + +
@@ -70,6 +79,11 @@ \ No newline at end of file diff --git a/resources/assets/vue/components/bookings/forms/CancelBookingFormComponent.vue b/resources/assets/vue/components/bookings/forms/CancelBookingFormComponent.vue new file mode 100644 index 00000000..b32275f1 --- /dev/null +++ b/resources/assets/vue/components/bookings/forms/CancelBookingFormComponent.vue @@ -0,0 +1,40 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/bookings/forms/RestoreBookingFormComponent.vue b/resources/assets/vue/components/bookings/forms/RestoreBookingFormComponent.vue new file mode 100644 index 00000000..3cd2227d --- /dev/null +++ b/resources/assets/vue/components/bookings/forms/RestoreBookingFormComponent.vue @@ -0,0 +1,40 @@ + + \ No newline at end of file diff --git a/routes/booking.php b/routes/booking.php index 03f9bb3f..5fc970c4 100644 --- a/routes/booking.php +++ b/routes/booking.php @@ -7,6 +7,8 @@ Route::group(['prefix' => 'booking', 'as' => 'booking.', 'namespace' => 'Booking Route::get('/list', 'ListBookingsController@list')->name('list'); Route::post('/create', 'CreateBookingController@create')->name('create'); Route::put('/update/{id}', 'UpdateBookingController@update')->name('update'); + Route::put('/cancel/{id}', 'CancelBookingController@cancel')->name('cancel'); + Route::put('/restore/{id}', 'RestoreBookingController@restore')->name('restore'); Route::delete('/delete/{id}', 'DeleteBookingController@delete')->name('delete'); Route::group(['prefix' => '{id}/payment', 'as' => 'payment.'], function () {