From 9aec13da7485ee97163cc002c1b3fc0ace146a5e Mon Sep 17 00:00:00 2001 From: glovetleong Date: Wed, 22 Sep 2021 18:14:36 +0800 Subject: [PATCH] reschedule container --- .../Containers/RescheduleContainerLogic.php | 82 +++++++++++++++++++ .../Services/UpdatesScheduleStatus.php | 23 ++++++ .../RescheduleContainerController.php | 19 +++++ routes/packing_list.php | 1 + 4 files changed, 125 insertions(+) create mode 100644 app/Classes/Modules/PackingLists/ControllersLogic/Containers/RescheduleContainerLogic.php create mode 100644 app/Classes/Modules/Schedules/Services/UpdatesScheduleStatus.php create mode 100644 app/Http/Controllers/PackingLists/Containers/RescheduleContainerController.php diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/RescheduleContainerLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/RescheduleContainerLogic.php new file mode 100644 index 00000000..e248281c --- /dev/null +++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/RescheduleContainerLogic.php @@ -0,0 +1,82 @@ + 'Reschedule Container', + 'message' => 'You have successfully Reschedule Container' + ]; + } + + /** @var FetchesContainer */ + private $fetchesContainer; + + /** @var UpdatesScheduleStatus */ + private $updatesScheduleStatus; + + /** @var CreatesSchedule */ + private $createsSchedule; + + /** + * DeleteContainerControllersLogic constructor. + * @param FetchesContainer $fetchesContainer + * @param CreatesSchedule $createsSchedule + */ + public function __construct(FetchesContainer $fetchesContainer, UpdatesScheduleStatus $updatesScheduleStatus, CreatesSchedule $createsSchedule) + { + $this->fetchesContainer = $fetchesContainer; + $this->updatesScheduleStatus = $updatesScheduleStatus; + $this->createsSchedule = $createsSchedule; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + $container = $this->fetchesContainer->execute(['id' => $request->route('id')]); + $transport = $container->transports()->first(); + + $old_sechedule = $transport->schedules()->first(); + + $this->updatesScheduleStatus->execute($old_sechedule, ApprovalStatus::REJECTED); + + $scheduleObject = new ScheduleObject( + Carbon::parse($request->input('eta')), + Carbon::parse($request->input('etd')), + ApprovalStatus::APPROVED + ); + $schedule = $this->createsSchedule->execute($transport, $scheduleObject); + + return $this->resourceResponse(new ContainerResource($container)); + + } catch (\Exception $exception){ + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + + } + +} diff --git a/app/Classes/Modules/Schedules/Services/UpdatesScheduleStatus.php b/app/Classes/Modules/Schedules/Services/UpdatesScheduleStatus.php new file mode 100644 index 00000000..578242ff --- /dev/null +++ b/app/Classes/Modules/Schedules/Services/UpdatesScheduleStatus.php @@ -0,0 +1,23 @@ +status = $status; + + return $this->handler($model); + } +} diff --git a/app/Http/Controllers/PackingLists/Containers/RescheduleContainerController.php b/app/Http/Controllers/PackingLists/Containers/RescheduleContainerController.php new file mode 100644 index 00000000..f85cf690 --- /dev/null +++ b/app/Http/Controllers/PackingLists/Containers/RescheduleContainerController.php @@ -0,0 +1,19 @@ +execute($request); + } +} diff --git a/routes/packing_list.php b/routes/packing_list.php index 78e23e45..43d00d92 100644 --- a/routes/packing_list.php +++ b/routes/packing_list.php @@ -18,6 +18,7 @@ Route::group(['namespace' => 'PackingLists', 'as' => 'packing_list.', 'prefix' = Route::put('/update/{id}', 'UpdateContainerController@update')->name('update'); Route::delete('/delete/{id}', 'DeleteContainerController@delete')->name('delete'); Route::put('/assign-packing_list/{id}', 'AssignPackingListContainerController@assign')->name('assign.packing_list'); + Route::put('/reschedule/{id}', 'RescheduleContainerController@reschedule')->name('reschedule'); }); Route::group(['namespace' => 'Packages', 'as' => 'package.', 'prefix' => 'package'], function () {