From 61a75a4ee12afd55325dd1a434ebcc53832f4958 Mon Sep 17 00:00:00 2001 From: Haziq Danial Date: Tue, 28 Sep 2021 18:51:43 +0800 Subject: [PATCH 001/223] update order reference id --- .../ControllersLogic/UpdateOrderLogic.php | 46 +++++++++++++++++++ .../Orders/Services/UpdateOrderReference.php | 17 +++++++ .../Orders/UpdateOrderController.php | 15 ++++++ routes/order.php | 1 + 4 files changed, 79 insertions(+) create mode 100644 app/Classes/Modules/Orders/ControllersLogic/UpdateOrderLogic.php create mode 100644 app/Classes/Modules/Orders/Services/UpdateOrderReference.php create mode 100644 app/Http/Controllers/Orders/UpdateOrderController.php diff --git a/app/Classes/Modules/Orders/ControllersLogic/UpdateOrderLogic.php b/app/Classes/Modules/Orders/ControllersLogic/UpdateOrderLogic.php new file mode 100644 index 00000000..06c00de3 --- /dev/null +++ b/app/Classes/Modules/Orders/ControllersLogic/UpdateOrderLogic.php @@ -0,0 +1,46 @@ + 'Update Order', + 'message' => 'You have successfully update the order' + ]; + } + + private $updateOrderReference; + private $fetchesOrder; + + public function __construct(UpdateOrderReference $updateOrderReference, FetchesOrder $fetchesOrder) + { + $this->updateOrderReference = $updateOrderReference; + $this->fetchesOrder = $fetchesOrder; + } + + protected function logic(Request $request): JsonResponse + { + $reference_id = $request->input('reference_id'); + + $order = $this->fetchesOrder->execute(['id' => $request->route('id')]); + + $order = $this->updateOrderReference->execute($order, $reference_id); + + return $this->resourceResponse(new OrderResource($order)); + + } +} diff --git a/app/Classes/Modules/Orders/Services/UpdateOrderReference.php b/app/Classes/Modules/Orders/Services/UpdateOrderReference.php new file mode 100644 index 00000000..0768c4c9 --- /dev/null +++ b/app/Classes/Modules/Orders/Services/UpdateOrderReference.php @@ -0,0 +1,17 @@ +reference = $reference; + + return $this->handler($model); + } +} diff --git a/app/Http/Controllers/Orders/UpdateOrderController.php b/app/Http/Controllers/Orders/UpdateOrderController.php new file mode 100644 index 00000000..c8321284 --- /dev/null +++ b/app/Http/Controllers/Orders/UpdateOrderController.php @@ -0,0 +1,15 @@ +execute($request); + } +} diff --git a/routes/order.php b/routes/order.php index 6a0c04d3..eda518af 100644 --- a/routes/order.php +++ b/routes/order.php @@ -10,5 +10,6 @@ Route::group(['prefix' => 'order', 'as' => 'order.', 'namespace' => 'Orders'], f Route::put('/cancel/{id}', 'CancelOrderController@cancel')->name('cancel'); Route::put('/restore/{id}', 'RestoreOrderController@restore')->name('restore'); Route::post('/address/change/request', 'RequestChangeOrderAddressController@request')->name('address.change.request'); + Route::post('/update/{id}','UpdateOrderController@update')->name('reference.update'); Route::put('/address/{id}/status/{status}', 'ApproveChangeOrderAddressController@approve')->name('address.status.update'); }); From 8c23d178e8da4fa1262351b137d742e06aa5a57a Mon Sep 17 00:00:00 2001 From: Obenny Date: Sun, 17 Oct 2021 21:33:40 +0800 Subject: [PATCH 002/223] copied migrations, model, controllers, routes --- .../AssignAnnouncementToSegmentLogic.php | 61 ++++++++++++++ .../CreateAnnouncementLogic.php | 82 ++++++++++++++++++ .../DeleteAnnouncementLogic.php | 71 ++++++++++++++++ .../ListAnnouncementsLogic.php | 60 ++++++++++++++ .../RemoveSegmentFromAnnouncementLogic.php | 68 +++++++++++++++ .../UpdateAnnouncementLogic.php | 83 +++++++++++++++++++ .../AnnouncementObject.php | 70 ++++++++++++++++ .../AssignAnnouncementToSegmentProcessor.php | 56 +++++++++++++ .../Services/AssignsAnnouncementToSegment.php | 33 ++++++++ .../Services/CreatesAnnouncement.php | 26 ++++++ .../Services/DeletesAnnouncement.php | 19 +++++ .../Services/FetchesAnnouncement.php | 34 ++++++++ .../Services/ListsAnnouncements.php | 32 +++++++ .../RemovesAnnouncementFromSegment.php | 33 ++++++++ .../Services/UpdatesAnnouncement.php | 27 ++++++ .../Standards/Rules/CanAssignSegment.php | 40 +++++++++ .../Standards/Rules/CanCreateAnnouncement.php | 50 +++++++++++ .../Standards/Rules/CanDeleteAnnouncement.php | 40 +++++++++ .../Standards/Rules/CanListAnnouncements.php | 36 ++++++++ .../Standards/Rules/CanUpdateAnnouncement.php | 54 ++++++++++++ .../Validators/AnnouncementValidation.php | 44 ++++++++++ routes/announcement.php | 15 ++++ 22 files changed, 1034 insertions(+) create mode 100644 app/Classes/Modules/Announcements/ControllersLogic/AssignAnnouncementToSegmentLogic.php create mode 100644 app/Classes/Modules/Announcements/ControllersLogic/CreateAnnouncementLogic.php create mode 100644 app/Classes/Modules/Announcements/ControllersLogic/DeleteAnnouncementLogic.php create mode 100644 app/Classes/Modules/Announcements/ControllersLogic/ListAnnouncementsLogic.php create mode 100644 app/Classes/Modules/Announcements/ControllersLogic/RemoveSegmentFromAnnouncementLogic.php create mode 100644 app/Classes/Modules/Announcements/ControllersLogic/UpdateAnnouncementLogic.php create mode 100644 app/Classes/Modules/Announcements/DataTransferObjects/AnnouncementObject.php create mode 100644 app/Classes/Modules/Announcements/Processors/AssignAnnouncementToSegmentProcessor.php create mode 100644 app/Classes/Modules/Announcements/Services/AssignsAnnouncementToSegment.php create mode 100644 app/Classes/Modules/Announcements/Services/CreatesAnnouncement.php create mode 100644 app/Classes/Modules/Announcements/Services/DeletesAnnouncement.php create mode 100644 app/Classes/Modules/Announcements/Services/FetchesAnnouncement.php create mode 100644 app/Classes/Modules/Announcements/Services/ListsAnnouncements.php create mode 100644 app/Classes/Modules/Announcements/Services/RemovesAnnouncementFromSegment.php create mode 100644 app/Classes/Modules/Announcements/Services/UpdatesAnnouncement.php create mode 100644 app/Classes/Modules/Announcements/Standards/Rules/CanAssignSegment.php create mode 100644 app/Classes/Modules/Announcements/Standards/Rules/CanCreateAnnouncement.php create mode 100644 app/Classes/Modules/Announcements/Standards/Rules/CanDeleteAnnouncement.php create mode 100644 app/Classes/Modules/Announcements/Standards/Rules/CanListAnnouncements.php create mode 100644 app/Classes/Modules/Announcements/Standards/Rules/CanUpdateAnnouncement.php create mode 100644 app/Classes/Modules/Announcements/Standards/Validators/AnnouncementValidation.php create mode 100644 routes/announcement.php diff --git a/app/Classes/Modules/Announcements/ControllersLogic/AssignAnnouncementToSegmentLogic.php b/app/Classes/Modules/Announcements/ControllersLogic/AssignAnnouncementToSegmentLogic.php new file mode 100644 index 00000000..18552989 --- /dev/null +++ b/app/Classes/Modules/Announcements/ControllersLogic/AssignAnnouncementToSegmentLogic.php @@ -0,0 +1,61 @@ + 'Assign Announcement To Segment', + 'message' => 'You have successfully assigned Announcement to segment' + ]; + } + + /** @var FetchesAnnouncement */ + private $fetchesAnnouncement; + + /** @var AssignAnnouncementToSegmentProcessor */ + private $assignAnnouncementToSegmentProcessor; + + /** + * AssignAnnouncementToSegmentLogic constructor. + * @param FetchesAnnouncement $fetchesAnnouncement + * @param AssignAnnouncementToSegmentProcessor $assignAnnouncementToSegmentProcessor + */ + public function __construct(FetchesAnnouncement $fetchesAnnouncement, AssignAnnouncementToSegmentProcessor $assignAnnouncementToSegmentProcessor) + { + $this->fetchesAnnouncement = $fetchesAnnouncement; + $this->assignAnnouncementToSegmentProcessor = $assignAnnouncementToSegmentProcessor; + } + + /** + * @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 + { + $announcement = $this->fetchesAnnouncement->execute(['id' => $request->route('id')]); + + $this->assignAnnouncementToSegmentProcessor->execute($announcement, $request->input('segment_id')); + + return $this->resourceResponse(new AnnouncementResource($announcement)); + } +} diff --git a/app/Classes/Modules/Announcements/ControllersLogic/CreateAnnouncementLogic.php b/app/Classes/Modules/Announcements/ControllersLogic/CreateAnnouncementLogic.php new file mode 100644 index 00000000..9c740601 --- /dev/null +++ b/app/Classes/Modules/Announcements/ControllersLogic/CreateAnnouncementLogic.php @@ -0,0 +1,82 @@ + 'Created Annoucement', + 'message' => 'You have successfully created a new Annoucements' + ]; + } + + /** @var CanCreateAnnouncement */ + private $canCreateAnnouncement; + + /** @var CreatesAnnoucement */ + private $createsAnnoucement; + + /** @var AssignAnnouncementToSegmentProcessor */ + private $assignAnnouncementToSegmentProcessor; + + + /** + * CreateAnnouncementLogic constructor. + * @param CanCreateAnnoucement $canCreateAnnoucement + * @param CreatesAnnoucement $createsAnnoucement + * @param AssignAnnouncementToSegmentProcessor $assignAnnouncementToSegmentProcessor + */ + public function __construct( + CanCreateAnnouncement $canCreateAnnouncement, + CreatesAnnouncement $createsAnnoucement, + AssignAnnouncementToSegmentProcessor $assignAnnouncementToSegmentProcessor + ) { + $this->canCreateAnnouncement = $canCreateAnnouncement; + $this->createsAnnoucement = $createsAnnoucement; + $this->assignAnnouncementToSegmentProcessor = $assignAnnouncementToSegmentProcessor; + } + + /** + * @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 + { + $annoucement_object = new AnnouncementObject( + $request->input('title'), + $request->input('description'), + $request->input('starting_on'), + $request->input('ending_on') + ); + + $this->canCreateAnnouncement->passes($annoucement_object); + + $announcement = $this->createsAnnoucement->execute($annoucement_object); + + $this->assignAnnouncementToSegmentProcessor->execute($announcement); + + return $this->resourceResponse(new AnnouncementResource($announcement)); + } +} diff --git a/app/Classes/Modules/Announcements/ControllersLogic/DeleteAnnouncementLogic.php b/app/Classes/Modules/Announcements/ControllersLogic/DeleteAnnouncementLogic.php new file mode 100644 index 00000000..55dc710c --- /dev/null +++ b/app/Classes/Modules/Announcements/ControllersLogic/DeleteAnnouncementLogic.php @@ -0,0 +1,71 @@ + 'Delete Announcement', + 'message' => 'You have successfully deleted the Announcement' + ]; + } + + /** @var CanDeleteAnnouncement */ + private $canDeleteAnnouncement; + + /** @var FetchesAnnouncement */ + private $fetchesAnnouncement; + + /** @var DeletesAnnouncement */ + private $deletesAnnouncement; + + /** + * DeleteAnnouncementLogic constructor. + * @param CanDeleteAnnouncement $canDeleteAnnouncement + * @param FetchesAnnouncement $fetchesAnnouncement + * @param DeletesAnnouncement $deletesAnnouncement + */ + public function __construct( + CanDeleteAnnouncement $canDeleteAnnoucement, + FetchesAnnouncement $fetchesAnnoucement, + DeletesAnnouncement $deletesAnnoucement + ) { + $this->canDeleteAnnoucement = $canDeleteAnnoucement; + $this->fetchesAnnoucement = $fetchesAnnoucement; + $this->deletesAnnoucement = $deletesAnnoucement; + } + + /** + * @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 + { + + $this->canDeleteAnnoucement->passes(); + + $annoucement = $this->fetchesAnnoucement->execute(['id' => $request->route('id')]); + + $this->deletesAnnoucement->execute($annoucement); + + return $this->response([]); + } +} diff --git a/app/Classes/Modules/Announcements/ControllersLogic/ListAnnouncementsLogic.php b/app/Classes/Modules/Announcements/ControllersLogic/ListAnnouncementsLogic.php new file mode 100644 index 00000000..0055ebeb --- /dev/null +++ b/app/Classes/Modules/Announcements/ControllersLogic/ListAnnouncementsLogic.php @@ -0,0 +1,60 @@ + 'Retrieve Announcements', + 'message' => 'You have successfully retrieved a list of Announcements' + ]; + } + + /** @var CanListAnnouncements */ + private $canListAnnouncements; + + /** @var ListsAnnouncements */ + private $listsAnnouncements; + + /** + * ListAnnouncementsLogic constructor. + * @param CanListAnnouncements $canListAnnouncements + * @param ListsAnnouncements $listsAnnouncements + */ + public function __construct(CanListAnnouncements $canListAnnouncements, ListsAnnouncements $listsAnnouncements) + { + $this->canListAnnouncements = $canListAnnouncements; + $this->listsAnnouncements = $listsAnnouncements; + } + + + /** + * @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 + { + + $this->canListAnnouncements->passes(); + + $annoucements = $this->listsAnnouncements->execute($this->listsAnnouncements->deserializeFilters($request->input('filters'))); + + return $this->collectionResponse(AnnouncementResource::collection($annoucements)); + } +} diff --git a/app/Classes/Modules/Announcements/ControllersLogic/RemoveSegmentFromAnnouncementLogic.php b/app/Classes/Modules/Announcements/ControllersLogic/RemoveSegmentFromAnnouncementLogic.php new file mode 100644 index 00000000..284d20b9 --- /dev/null +++ b/app/Classes/Modules/Announcements/ControllersLogic/RemoveSegmentFromAnnouncementLogic.php @@ -0,0 +1,68 @@ + 'Detach Announcement From Segment', + 'message' => 'You have successfully detached Announcement from segment' + ]; + } + + /** @var FetchesAnnouncement */ + private $fetchesAnnnouncement; + + /** @var FetchesSegment */ + private $fetchesSegment; + + /** @var RemovesAnnouncementFromSegment */ + private $removesAnnouncementFromSegment; + + /** + * RemoveSegmentFromAnnouncementLogic constructor. + * @param FetchesAnnouncement $fetchesAnnnouncement + * @param FetchesSegment $fetchesSegment + * @param RemovesAnnouncementFromSegment $removesAnnouncementFromSegment + */ + public function __construct(FetchesAnnouncement $fetchesAnnnouncement, FetchesSegment $fetchesSegment, RemovesAnnouncementFromSegment $removesAnnouncementFromSegment) + { + $this->fetchesAnnnouncement = $fetchesAnnnouncement; + $this->fetchesSegment = $fetchesSegment; + $this->removesAnnouncementFromSegment = $removesAnnouncementFromSegment; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function logic(Request $request): JsonResponse + { + + $announcement = $this->fetchesAnnnouncement->execute(['id' => $request->route('id')]); + + $segment = $this->fetchesSegment->execute(['id' => $request->route('segment_id')]); + + $this->removesAnnouncementFromSegment->execute($announcement, $segment); + + return $this->resourceResponse(new AnnouncementResource($announcement)); + } +} diff --git a/app/Classes/Modules/Announcements/ControllersLogic/UpdateAnnouncementLogic.php b/app/Classes/Modules/Announcements/ControllersLogic/UpdateAnnouncementLogic.php new file mode 100644 index 00000000..4fac4144 --- /dev/null +++ b/app/Classes/Modules/Announcements/ControllersLogic/UpdateAnnouncementLogic.php @@ -0,0 +1,83 @@ + 'Update Announcement', + 'message' => 'You have successfully updated the Announcement' + ]; + } + + /** @var CanUpdateAnnouncement */ + private $canUpdateAnnouncement; + + /** @var FetchesAnnouncement */ + private $fetchesAnnouncement; + + /** @var UpdatesAnnouncement */ + private $updatesAnnouncement; + + /** + * UpdateAnnouncementLogic constructor. + * @param CanUpdateAnnouncement $canUpdateAnnouncement + * @param FetchesAnnouncement $fetchesAnnouncement + * @param UpdatesAnnouncement $updatesAnnouncement + */ + public function __construct( + CanUpdateAnnouncement $canUpdateAnnouncement, + FetchesAnnouncement $fetchesAnnouncement, + UpdatesAnnouncement $updatesAnnouncement + ) { + $this->canUpdateAnnouncement = $canUpdateAnnouncement; + $this->fetchesAnnouncement = $fetchesAnnouncement; + $this->updatesAnnouncement = $updatesAnnouncement; + } + + /** + * @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 + { + $annoucement_object = new AnnouncementObject( + $request->input('title'), + $request->input('description'), + $request->input('starting_on'), + $request->input('ending_on') + ); + + $this->canUpdateAnnouncement->passes($annoucement_object); + + $annoucement = $this->fetchesAnnouncement->execute(['id' => $request->route('id')]); + + $announcement_query = $this->updatesAnnouncement->execute($annoucement, $annoucement_object); + + //$announcement_query->segments()->sync($request->input('segment_id')); + + return $this->resourceResponse(new AnnouncementResource($announcement_query)); + } +} diff --git a/app/Classes/Modules/Announcements/DataTransferObjects/AnnouncementObject.php b/app/Classes/Modules/Announcements/DataTransferObjects/AnnouncementObject.php new file mode 100644 index 00000000..98d75e8b --- /dev/null +++ b/app/Classes/Modules/Announcements/DataTransferObjects/AnnouncementObject.php @@ -0,0 +1,70 @@ +title = $title; + $this->description = $description; + $this->starting_on = $starting_on; + $this->ending_on = $ending_on; + } + + /** + * @return string + */ + public function getTitle(): string + { + return $this->title; + } + + /** + * @return string + */ + public function getDescription(): string + { + return $this->description; + } + + /** + * @return string + */ + public function getStartingOn(): string + { + return $this->starting_on; + } + + /** + * @return string + */ + public function getEndingOn(): string + { + return $this->ending_on; + } +} diff --git a/app/Classes/Modules/Announcements/Processors/AssignAnnouncementToSegmentProcessor.php b/app/Classes/Modules/Announcements/Processors/AssignAnnouncementToSegmentProcessor.php new file mode 100644 index 00000000..f5468a80 --- /dev/null +++ b/app/Classes/Modules/Announcements/Processors/AssignAnnouncementToSegmentProcessor.php @@ -0,0 +1,56 @@ +canAssignSegment = $canAssignSegment; + $this->assignsAnnouncementToSegment = $assignsAnnouncementToSegment; + $this->fetchesSegment = $fetchesSegment; + } + + + /** + * @param Announcement $announcement + * @param int|null $segmentId + * @return Model + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function execute(Announcement $announcement, ?int $segmentId = SegmentConstants::STANDARD_SEGMENT): Model + { + $this->canAssignSegment->passes(); + + $segment = $this->fetchesSegment->execute(['id' => $segmentId]); + + return $this->assignsAnnouncementToSegment->execute($announcement, $segment); + } +} diff --git a/app/Classes/Modules/Announcements/Services/AssignsAnnouncementToSegment.php b/app/Classes/Modules/Announcements/Services/AssignsAnnouncementToSegment.php new file mode 100644 index 00000000..5cc459b1 --- /dev/null +++ b/app/Classes/Modules/Announcements/Services/AssignsAnnouncementToSegment.php @@ -0,0 +1,33 @@ +segments()->attach($segment); + + return $announcement; + + } catch (QueryException $exception){ + throw new MalformedRequestException($exception); + } + + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Announcements/Services/CreatesAnnouncement.php b/app/Classes/Modules/Announcements/Services/CreatesAnnouncement.php new file mode 100644 index 00000000..4a43bac8 --- /dev/null +++ b/app/Classes/Modules/Announcements/Services/CreatesAnnouncement.php @@ -0,0 +1,26 @@ +title = $object->getTitle(); + $model->description = $object->getDescription(); + $model->starting_on = $object->getStartingOn(); + $model->ending_on = $object->getEndingOn(); + + return $this->handler($model); + } +} diff --git a/app/Classes/Modules/Announcements/Services/DeletesAnnouncement.php b/app/Classes/Modules/Announcements/Services/DeletesAnnouncement.php new file mode 100644 index 00000000..82e312cc --- /dev/null +++ b/app/Classes/Modules/Announcements/Services/DeletesAnnouncement.php @@ -0,0 +1,19 @@ +handler($model); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Announcements/Services/FetchesAnnouncement.php b/app/Classes/Modules/Announcements/Services/FetchesAnnouncement.php new file mode 100644 index 00000000..f43b9e46 --- /dev/null +++ b/app/Classes/Modules/Announcements/Services/FetchesAnnouncement.php @@ -0,0 +1,34 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + public function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Announcements/Services/ListsAnnouncements.php b/app/Classes/Modules/Announcements/Services/ListsAnnouncements.php new file mode 100644 index 00000000..b821819a --- /dev/null +++ b/app/Classes/Modules/Announcements/Services/ListsAnnouncements.php @@ -0,0 +1,32 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} diff --git a/app/Classes/Modules/Announcements/Services/RemovesAnnouncementFromSegment.php b/app/Classes/Modules/Announcements/Services/RemovesAnnouncementFromSegment.php new file mode 100644 index 00000000..bd34d52f --- /dev/null +++ b/app/Classes/Modules/Announcements/Services/RemovesAnnouncementFromSegment.php @@ -0,0 +1,33 @@ +segments()->detach($segment); + + return $announcement; + + } catch (QueryException $exception){ + throw new MalformedRequestException($exception); + } + + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Announcements/Services/UpdatesAnnouncement.php b/app/Classes/Modules/Announcements/Services/UpdatesAnnouncement.php new file mode 100644 index 00000000..98d5da7a --- /dev/null +++ b/app/Classes/Modules/Announcements/Services/UpdatesAnnouncement.php @@ -0,0 +1,27 @@ +title = $object->getTitle(); + $model->description = $object->getDescription(); + $model->starting_on = $object->getStartingOn(); + $model->ending_on = $object->getEndingOn(); + + return $this->handler($model); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Announcements/Standards/Rules/CanAssignSegment.php b/app/Classes/Modules/Announcements/Standards/Rules/CanAssignSegment.php new file mode 100644 index 00000000..625a07a1 --- /dev/null +++ b/app/Classes/Modules/Announcements/Standards/Rules/CanAssignSegment.php @@ -0,0 +1,40 @@ +AnnouncementValidation = $AnnouncementValidation; + } + + /** + * @return bool + */ + protected function authorized(): bool + { + return true; + } + + /** + * @param AnnouncementObject $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->AnnouncementValidation->validate($object); + } + + /** + * @param AnnouncementObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Announcements/Standards/Rules/CanDeleteAnnouncement.php b/app/Classes/Modules/Announcements/Standards/Rules/CanDeleteAnnouncement.php new file mode 100644 index 00000000..8a41deab --- /dev/null +++ b/app/Classes/Modules/Announcements/Standards/Rules/CanDeleteAnnouncement.php @@ -0,0 +1,40 @@ +AnnouncementValidation = $AnnouncementValidation; + } + + /** + * @return bool + */ + protected function authorized(): bool + { + // TODO Set Authorization rules + return true; + } + + /** + * @param AnnouncementObject $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->AnnouncementValidation->validate($object); + } + + /** + * @param AnnouncementObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Announcements/Standards/Validators/AnnouncementValidation.php b/app/Classes/Modules/Announcements/Standards/Validators/AnnouncementValidation.php new file mode 100644 index 00000000..f094b8aa --- /dev/null +++ b/app/Classes/Modules/Announcements/Standards/Validators/AnnouncementValidation.php @@ -0,0 +1,44 @@ + $object->getTitle(), + 'description' => $object->getDescription(), + 'starting_on' => $object->getStartingOn(), + 'ending_on' => $object->getEndingOn() + ]; + } + + /** + * @return array + */ + protected function rules(): array + { + return [ + 'title' => 'required', + 'description' => 'required', + 'starting_on' => 'required', + 'ending_on' => 'required' + ]; + } + + /** + * @return array + */ + protected function messages(): array + { + return []; + } +} \ No newline at end of file diff --git a/routes/announcement.php b/routes/announcement.php new file mode 100644 index 00000000..7ead50e3 --- /dev/null +++ b/routes/announcement.php @@ -0,0 +1,15 @@ + 'announcement', 'as' => 'announcement.', 'namespace' => 'Announcements'], function () { + Route::get('/list', 'ListAnnouncementsController@list')->name('list'); + Route::post('/create', 'CreateAnnouncementController@create')->name('create'); + Route::put('/update/{id}', 'UpdateAnnouncementController@update')->name('update'); + Route::delete('/delete/{id}', 'DeleteAnnouncementController@delete')->name('delete'); + + Route::group(['prefix' => '{id}/segment', 'as' => 'segment.'], function () { + Route::post('/assign', 'AssignAnnouncementToSegmentController@assign')->name('assign'); + Route::delete('/detach/{segment_id}', 'RemoveSegmentFromAnnouncementController@detach')->name('detach'); + }); +}); \ No newline at end of file From ea6711f06b628c7ef3dcaf51fa4dcfc606ce4d39 Mon Sep 17 00:00:00 2001 From: Obenny Date: Sun, 17 Oct 2021 21:43:25 +0800 Subject: [PATCH 003/223] copied controllers, models, migrations --- .../AssignAnnouncementToSegmentController.php | 20 ++++++++++ .../CreateAnnouncementController.php | 20 ++++++++++ .../DeleteAnnouncementController.php | 20 ++++++++++ .../ListAnnouncementsController.php | 20 ++++++++++ ...emoveSegmentFromAnnouncementController.php | 20 ++++++++++ .../UpdateAnnouncementController.php | 21 ++++++++++ app/Models/Announcement.php | 26 ++++++++++++ ...0_17_201021_create_announcements_table.php | 40 +++++++++++++++++++ ...1244_create_announcement_segment_table.php | 40 +++++++++++++++++++ 9 files changed, 227 insertions(+) create mode 100644 app/Http/Controllers/Announcements/AssignAnnouncementToSegmentController.php create mode 100644 app/Http/Controllers/Announcements/CreateAnnouncementController.php create mode 100644 app/Http/Controllers/Announcements/DeleteAnnouncementController.php create mode 100644 app/Http/Controllers/Announcements/ListAnnouncementsController.php create mode 100644 app/Http/Controllers/Announcements/RemoveSegmentFromAnnouncementController.php create mode 100644 app/Http/Controllers/Announcements/UpdateAnnouncementController.php create mode 100644 app/Models/Announcement.php create mode 100644 database/migrations/2021_10_17_201021_create_announcements_table.php create mode 100644 database/migrations/2021_10_17_201244_create_announcement_segment_table.php diff --git a/app/Http/Controllers/Announcements/AssignAnnouncementToSegmentController.php b/app/Http/Controllers/Announcements/AssignAnnouncementToSegmentController.php new file mode 100644 index 00000000..508d929f --- /dev/null +++ b/app/Http/Controllers/Announcements/AssignAnnouncementToSegmentController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/app/Http/Controllers/Announcements/CreateAnnouncementController.php b/app/Http/Controllers/Announcements/CreateAnnouncementController.php new file mode 100644 index 00000000..84da07cf --- /dev/null +++ b/app/Http/Controllers/Announcements/CreateAnnouncementController.php @@ -0,0 +1,20 @@ +execute($request); + } +} diff --git a/app/Http/Controllers/Announcements/DeleteAnnouncementController.php b/app/Http/Controllers/Announcements/DeleteAnnouncementController.php new file mode 100644 index 00000000..257640d3 --- /dev/null +++ b/app/Http/Controllers/Announcements/DeleteAnnouncementController.php @@ -0,0 +1,20 @@ +execute($request); + } +} diff --git a/app/Http/Controllers/Announcements/ListAnnouncementsController.php b/app/Http/Controllers/Announcements/ListAnnouncementsController.php new file mode 100644 index 00000000..a69dff50 --- /dev/null +++ b/app/Http/Controllers/Announcements/ListAnnouncementsController.php @@ -0,0 +1,20 @@ +execute($request); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Announcements/RemoveSegmentFromAnnouncementController.php b/app/Http/Controllers/Announcements/RemoveSegmentFromAnnouncementController.php new file mode 100644 index 00000000..86e15877 --- /dev/null +++ b/app/Http/Controllers/Announcements/RemoveSegmentFromAnnouncementController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/app/Http/Controllers/Announcements/UpdateAnnouncementController.php b/app/Http/Controllers/Announcements/UpdateAnnouncementController.php new file mode 100644 index 00000000..72431980 --- /dev/null +++ b/app/Http/Controllers/Announcements/UpdateAnnouncementController.php @@ -0,0 +1,21 @@ +execute($request); + } +} + diff --git a/app/Models/Announcement.php b/app/Models/Announcement.php new file mode 100644 index 00000000..b0094a6c --- /dev/null +++ b/app/Models/Announcement.php @@ -0,0 +1,26 @@ +BelongsToMany(Segment::class); + } +} diff --git a/database/migrations/2021_10_17_201021_create_announcements_table.php b/database/migrations/2021_10_17_201021_create_announcements_table.php new file mode 100644 index 00000000..35508479 --- /dev/null +++ b/database/migrations/2021_10_17_201021_create_announcements_table.php @@ -0,0 +1,40 @@ +id(); + $table->string('title', 50); + $table->longText('description'); + $table->timestamp('starting_on')->nullable(); + $table->timestamp('ending_on')->nullable(); + $table->boolean('is_all_day')->default(false); + $table->integer('duration')->default(0); + $table->boolean('is_recurring')->default(false); + $table->string('recurrence_pattern')->nullable(); + $table->softDeletes(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('announcements'); + } +} diff --git a/database/migrations/2021_10_17_201244_create_announcement_segment_table.php b/database/migrations/2021_10_17_201244_create_announcement_segment_table.php new file mode 100644 index 00000000..c2777abf --- /dev/null +++ b/database/migrations/2021_10_17_201244_create_announcement_segment_table.php @@ -0,0 +1,40 @@ +primary(['announcement_id', 'segment_id']); + $table->bigInteger('announcement_id')->unsigned(); + $table->bigInteger('segment_id')->unsigned(); + $table->timestamps(); + $table->foreign('announcement_id') + ->references('id') + ->on('announcements')->onDelete('cascade'); + $table->foreign('segment_id') + ->references('id') + ->on('segments')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('announcement_segment'); + } +} From 624df67ca535b4b5affd1758107a476b011a730b Mon Sep 17 00:00:00 2001 From: Obenny Date: Mon, 18 Oct 2021 19:38:56 +0800 Subject: [PATCH 004/223] copied modules, resources, and updated route files --- .../AnnouncementObject.php | 15 ++++++---- app/Http/Resources/AnnouncementResource.php | 28 +++++++++++++++++++ routes/announcement.php | 3 +- routes/api.php | 2 ++ 4 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 app/Http/Resources/AnnouncementResource.php diff --git a/app/Classes/Modules/Announcements/DataTransferObjects/AnnouncementObject.php b/app/Classes/Modules/Announcements/DataTransferObjects/AnnouncementObject.php index 98d75e8b..6493811d 100644 --- a/app/Classes/Modules/Announcements/DataTransferObjects/AnnouncementObject.php +++ b/app/Classes/Modules/Announcements/DataTransferObjects/AnnouncementObject.php @@ -3,6 +3,7 @@ namespace App\Classes\Modules\Announcements\DataTransferObjects; use App\Classes\General\Interfaces\DataTransferObject; +use Carbon\Carbon; class AnnouncementObject implements DataTransferObject { @@ -53,18 +54,20 @@ class AnnouncementObject implements DataTransferObject } /** - * @return string + * @return Carbon */ - public function getStartingOn(): string + public function getStartingOn(): Carbon { - return $this->starting_on; +// return $this->starting_on; + return Carbon::parse($this->starting_on); } /** - * @return string + * @return Carbon */ - public function getEndingOn(): string + public function getEndingOn(): Carbon { - return $this->ending_on; +// return $this->ending_on; + return Carbon::parse($this->ending_on); } } diff --git a/app/Http/Resources/AnnouncementResource.php b/app/Http/Resources/AnnouncementResource.php new file mode 100644 index 00000000..26e1c2f9 --- /dev/null +++ b/app/Http/Resources/AnnouncementResource.php @@ -0,0 +1,28 @@ + $this->id, + 'title' => $this->title, + 'description' => $this->description, + 'segments' => $this->segments, + 'starting_on' => Carbon::parse($this->starting_on)->format('Y-m-d'), + 'ending_on' => Carbon::parse($this->ending_on)->format('Y-m-d'), + 'created_at' => Carbon::parse($this->created_at)->format('d-m-Y'), + ]; + } +} diff --git a/routes/announcement.php b/routes/announcement.php index 7ead50e3..6b460a01 100644 --- a/routes/announcement.php +++ b/routes/announcement.php @@ -8,8 +8,9 @@ Route::group(['prefix' => 'announcement', 'as' => 'announcement.', 'namespace' = Route::put('/update/{id}', 'UpdateAnnouncementController@update')->name('update'); Route::delete('/delete/{id}', 'DeleteAnnouncementController@delete')->name('delete'); - Route::group(['prefix' => '{id}/segment', 'as' => 'segment.'], function () { + Route::group(['prefix' => '/{id}/segment', 'as' => 'segment.'], function () { Route::post('/assign', 'AssignAnnouncementToSegmentController@assign')->name('assign'); Route::delete('/detach/{segment_id}', 'RemoveSegmentFromAnnouncementController@detach')->name('detach'); }); + }); \ No newline at end of file diff --git a/routes/api.php b/routes/api.php index 1ebe1740..b681ce82 100644 --- a/routes/api.php +++ b/routes/api.php @@ -56,4 +56,6 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function Route::get('/report/service', 'Reports\MonthlyReportController@serviceReport')->name('report.service'); }); + + require __DIR__ . '/announcement.php'; }); From ba0dbf80a1e8e897a18f8405d43673bbf6d00d5a Mon Sep 17 00:00:00 2001 From: edmondlang Date: Thu, 21 Oct 2021 00:38:16 +0800 Subject: [PATCH 005/223] update order no --- .../forms/ChangeOrderNumberFormComponent.vue | 49 +++++++++++++++++++ .../sections/OrderProfileSectionComponent.vue | 8 ++- 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 resources/assets/vue/components/orders/forms/ChangeOrderNumberFormComponent.vue diff --git a/resources/assets/vue/components/orders/forms/ChangeOrderNumberFormComponent.vue b/resources/assets/vue/components/orders/forms/ChangeOrderNumberFormComponent.vue new file mode 100644 index 00000000..ea9cb2e3 --- /dev/null +++ b/resources/assets/vue/components/orders/forms/ChangeOrderNumberFormComponent.vue @@ -0,0 +1,49 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue index 26903e73..cd99ba43 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue @@ -17,9 +17,15 @@
-
+

Order No. {{order.reference}}

+
+
Change Order Number
+ + + +
From 25c36d085f064f21ff9d9b34725c390b56ab9a54 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Thu, 21 Oct 2021 15:50:31 +0800 Subject: [PATCH 006/223] code review update id number, min length --- .../forms/ChangeOrderNumberFormComponent.vue | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/resources/assets/vue/components/orders/forms/ChangeOrderNumberFormComponent.vue b/resources/assets/vue/components/orders/forms/ChangeOrderNumberFormComponent.vue index ea9cb2e3..0d5d8882 100644 --- a/resources/assets/vue/components/orders/forms/ChangeOrderNumberFormComponent.vue +++ b/resources/assets/vue/components/orders/forms/ChangeOrderNumberFormComponent.vue @@ -8,9 +8,9 @@
- + - +
@@ -27,20 +27,28 @@ \ No newline at end of file diff --git a/resources/views/pages/orders/index.blade.php b/resources/views/pages/orders/index.blade.php index 3bb3fed0..a4465718 100644 --- a/resources/views/pages/orders/index.blade.php +++ b/resources/views/pages/orders/index.blade.php @@ -1,30 +1,5 @@ @extends('layouts.base_portal') @section('inner_content') -
-
-
-
-
- - - -
-
-
-
- -
+ - - - - @endsection \ No newline at end of file From a846028919037114173d4f9afe57bc201a5d17f4 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Mon, 25 Oct 2021 22:49:42 +0800 Subject: [PATCH 009/223] wip --- .../CreateOrderRemarkLogic.php | 67 +++++++++++++++++++ .../Containers/CreateContainerRemarkLogic.php | 1 + .../Orders/CreateOrderRemarkController.php | 14 ++++ app/Models/Order.php | 11 ++- routes/web.php | 10 +++ 5 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php create mode 100644 app/Http/Controllers/Orders/CreateOrderRemarkController.php diff --git a/app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php b/app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php new file mode 100644 index 00000000..97c91a96 --- /dev/null +++ b/app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php @@ -0,0 +1,67 @@ + 'Created Order', + 'message' => 'You have successfully created a new Order' + ]; + } + + /** @var CreatesRemark */ + private $createsRemark; + + /** + * CreateContainerRemarkLogic constructor. + * @param CreatesRemark $createsRemark + */ + public function __construct(CreatesRemark $createsRemark) + { + $this->createsRemark = $createsRemark; + } + /** + * @param Request $request + * @return JsonResponse + */ + public function logic(Request $request) : JsonResponse + { + // get the order + // $order = Order::findOrFail($request->input('order_id')); + + // $object = new RemarkObject( + // $request->input('content'), + // // commenter_id is hardcoded + // 1 + // ); + + // $this->createsRemark->passes($object); + + // $remark = $this->createsRemark->execute($order, $object); + // return $remark; + + // $query = $this->createsRemark->execute($order, $object); + return $this->response(['nihao']); + + // return $query; + + // return $this->resourceResponse(new RemarkResource($query)); + + + + + } +} diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerRemarkLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerRemarkLogic.php index 8186a034..847704ea 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerRemarkLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerRemarkLogic.php @@ -46,6 +46,7 @@ class CreateContainerRemarkLogic extends AbstractControllerLogic { // get the container + $container = Container::findOrFail($request->input('container_id')); $object = new RemarkObject($request->input('content'), 1); diff --git a/app/Http/Controllers/Orders/CreateOrderRemarkController.php b/app/Http/Controllers/Orders/CreateOrderRemarkController.php new file mode 100644 index 00000000..12cfbf8a --- /dev/null +++ b/app/Http/Controllers/Orders/CreateOrderRemarkController.php @@ -0,0 +1,14 @@ +execute($request); + } +} \ No newline at end of file diff --git a/app/Models/Order.php b/app/Models/Order.php index 9d3099a5..999c04cf 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -5,6 +5,7 @@ namespace App\Models; use App\Classes\General\Interfaces\Addressable; use App\Classes\General\Interfaces\Contactable; use App\Classes\General\Interfaces\Packable; +use App\Classes\General\Interfaces\Remarkable; use App\Classes\ValueObjects\Constants\RoleTypes; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Scopes\CustomerOrdersScope; @@ -14,7 +15,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\MorphMany; -class Order extends AbstractModel implements Addressable, Packable +class Order extends AbstractModel implements Addressable, Packable, Remarkable { use SoftDeletes; @@ -88,4 +89,12 @@ class Order extends AbstractModel implements Addressable, Packable { return $this->addresses()->where('status','=',ApprovalStatus::APPROVED); } + + /** + * @return MorphMany + */ + public function remarks(): morphMany + { + return $this->morphMany(Remark::class, 'owner'); + } } diff --git a/routes/web.php b/routes/web.php index 6c3097e4..9f5b61a3 100644 --- a/routes/web.php +++ b/routes/web.php @@ -150,3 +150,13 @@ Route::get('/debug', function (){ dd($issues); }); + +// http://localhost/cief/shipping-portal/public/order/remark/create +Route::post('/order/remark/create', 'orders\CreateOrderRemarkController@create')->name('orderRemarks.create'); +Route::get('/order/remark/update', 'remarks\UpdateRemarkController@update')->name('orderRemarks.update'); +// http://localhost/cief/shipping-portal/public/order/remark/list +Route::get('/order/remark/list', 'remarks\ListRemarksController@list')->name('orderRemarks.list'); +// http://localhost/cief/shipping-portal/public/order/remark/4/show +Route::get('/order/remark/{id}/show', 'remarks\FetchRemarkController@fetch')->name('orderRemarks.fetch'); +// http://localhost/cief/shipping-portal/public/order/remark/4/delete +Route::get('/order/remark/{id}/delete', 'remarks\DeleteRemarkController@delete')->name('orderRemarks.delete'); From 5e7cfd4da0bbcb83bde8922008d5f1300fe2a554 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sun, 31 Oct 2021 15:43:57 +0800 Subject: [PATCH 010/223] tidy up the order remark backend api --- .../CreateOrderRemarkLogic.php | 51 ++++++++----------- .../Orders/CreateOrderRemarkController.php | 2 +- app/Http/Resources/OrderResource.php | 1 + app/Models/Order.php | 8 +++ routes/order.php | 2 + routes/web.php | 10 ---- 6 files changed, 34 insertions(+), 40 deletions(-) diff --git a/app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php b/app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php index 97c91a96..e134bcc7 100644 --- a/app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php +++ b/app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php @@ -3,10 +3,10 @@ namespace App\Classes\Modules\Orders\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; +use App\Classes\Modules\Orders\Services\FetchesOrder; use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject; -use App\Classes\Modules\Remarks\Services\CreatesRemark; -use App\Models\Order; -use App\Models\Remark; +use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor; +use App\Http\Resources\OrderResource; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -22,46 +22,39 @@ class CreateOrderRemarkLogic extends AbstractControllerLogic ]; } - /** @var CreatesRemark */ - private $createsRemark; + /** @var FetchesOrder */ + private $fetchesOrder; + + /** @var CreateRemarkProcessor */ + private $createRemarkProcessor; /** - * CreateContainerRemarkLogic constructor. - * @param CreatesRemark $createsRemark + * CreateOrderRemarkLogic constructor. + * @param FetchesOrder $fetchesOrder + * @param CreateRemarkProcessor $createRemarkProcessor */ - public function __construct(CreatesRemark $createsRemark) + public function __construct(FetchesOrder $fetchesOrder, CreateRemarkProcessor $createRemarkProcessor) { - $this->createsRemark = $createsRemark; + $this->fetchesOrder = $fetchesOrder; + $this->createRemarkProcessor = $createRemarkProcessor; } + /** * @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 { - // get the order - // $order = Order::findOrFail($request->input('order_id')); - - // $object = new RemarkObject( - // $request->input('content'), - // // commenter_id is hardcoded - // 1 - // ); - - // $this->createsRemark->passes($object); - - // $remark = $this->createsRemark->execute($order, $object); - // return $remark; - - // $query = $this->createsRemark->execute($order, $object); - return $this->response(['nihao']); - - // return $query; - - // return $this->resourceResponse(new RemarkResource($query)); + $order = $this->fetchesOrder->execute(['id' => $request->route('id')]); + $object = new RemarkObject($request->input('content'), auth()->user()->id); + $this->createRemarkProcessor->execute($order, $object); + return $this->resourceResponse(new OrderResource($order)); } } diff --git a/app/Http/Controllers/Orders/CreateOrderRemarkController.php b/app/Http/Controllers/Orders/CreateOrderRemarkController.php index 12cfbf8a..3464566a 100644 --- a/app/Http/Controllers/Orders/CreateOrderRemarkController.php +++ b/app/Http/Controllers/Orders/CreateOrderRemarkController.php @@ -6,7 +6,7 @@ use App\Classes\Modules\Orders\ControllersLogic\CreateOrderRemarkLogic; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -class OrderRemarksController +class CreateOrderRemarkController { public function create(Request $request, CreateOrderRemarkLogic $logic): JsonResponse{ return $logic->execute($request); diff --git a/app/Http/Resources/OrderResource.php b/app/Http/Resources/OrderResource.php index 06e31b6f..0c30bb62 100644 --- a/app/Http/Resources/OrderResource.php +++ b/app/Http/Resources/OrderResource.php @@ -46,6 +46,7 @@ class OrderResource extends JsonResource 'received_packages' => PackageResource::collection($this->parcels()->warehouseReceiveList()->get()), ]; }), + 'remarks' => RemarkResource::collection($this->remarks), 'created_at' => $this->created_at->format('d-m-Y') ]; diff --git a/app/Models/Order.php b/app/Models/Order.php index 3d7bdcab..3923d913 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -148,4 +148,12 @@ class Order extends AbstractModel implements Addressable, Packable, Remarkable { return $this->morphMany(Transaction::class, 'owner'); } + + /** + * @return MorphMany + */ + public function remarks(): morphMany + { + return $this->morphMany(Remark::class, 'owner'); + } } diff --git a/routes/order.php b/routes/order.php index 2da8880f..ea7bc389 100644 --- a/routes/order.php +++ b/routes/order.php @@ -17,4 +17,6 @@ Route::group(['prefix' => 'order', 'as' => 'order.', 'namespace' => 'Orders'], f // Route::post('/create', 'CreateOrderController@create')->name('create'); Route::get('/{id}/shipping-cost', 'ShippingCostController@calculate')->name('shipping.cost'); + + Route::post('/{id}/remark/create', 'CreateOrderRemarkController@create')->name('remark.create'); }); diff --git a/routes/web.php b/routes/web.php index 9f5b61a3..6c3097e4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -150,13 +150,3 @@ Route::get('/debug', function (){ dd($issues); }); - -// http://localhost/cief/shipping-portal/public/order/remark/create -Route::post('/order/remark/create', 'orders\CreateOrderRemarkController@create')->name('orderRemarks.create'); -Route::get('/order/remark/update', 'remarks\UpdateRemarkController@update')->name('orderRemarks.update'); -// http://localhost/cief/shipping-portal/public/order/remark/list -Route::get('/order/remark/list', 'remarks\ListRemarksController@list')->name('orderRemarks.list'); -// http://localhost/cief/shipping-portal/public/order/remark/4/show -Route::get('/order/remark/{id}/show', 'remarks\FetchRemarkController@fetch')->name('orderRemarks.fetch'); -// http://localhost/cief/shipping-portal/public/order/remark/4/delete -Route::get('/order/remark/{id}/delete', 'remarks\DeleteRemarkController@delete')->name('orderRemarks.delete'); From 6fcf952967d845093bbd9e74ab3c78699a276d38 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Tue, 2 Nov 2021 00:00:31 +0800 Subject: [PATCH 011/223] update order remark ui --- .../ControllersLogic/UpdateRemarkLogic.php | 2 +- .../orders/elements/OrderComponent.vue | 15 +++++- .../forms/DeleteOrderRemarkFormComponent.vue | 32 ++++++++++++ .../orders/forms/OrderRemarkFormComponent.vue | 49 +++++++++++++++++++ .../sections/OrderProfileSectionComponent.vue | 45 ++++++++++++++++- 5 files changed, 139 insertions(+), 4 deletions(-) create mode 100644 resources/assets/vue/components/orders/forms/DeleteOrderRemarkFormComponent.vue create mode 100644 resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue diff --git a/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php b/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php index e9c0738f..5b3af8f8 100644 --- a/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php +++ b/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php @@ -55,7 +55,7 @@ class UpdateRemarkLogic extends AbstractControllerLogic */ public function logic(Request $request) : JsonResponse { - $object = new RemarkObject($request->input('content'), $request->input('commenter_id')); + $object = new RemarkObject($request->input('content'), auth()->user()->id); $this->canUpdateRemark->passes($object); diff --git a/resources/assets/vue/components/orders/elements/OrderComponent.vue b/resources/assets/vue/components/orders/elements/OrderComponent.vue index 31cc56af..e1f1db48 100644 --- a/resources/assets/vue/components/orders/elements/OrderComponent.vue +++ b/resources/assets/vue/components/orders/elements/OrderComponent.vue @@ -16,8 +16,19 @@
- Order No. -
{{item.reference}}
+
+
+ Order No +
+
+
+
+
{{item.reference}}
+
+
+ +
+
diff --git a/resources/assets/vue/components/orders/forms/DeleteOrderRemarkFormComponent.vue b/resources/assets/vue/components/orders/forms/DeleteOrderRemarkFormComponent.vue new file mode 100644 index 00000000..a23d077f --- /dev/null +++ b/resources/assets/vue/components/orders/forms/DeleteOrderRemarkFormComponent.vue @@ -0,0 +1,32 @@ + + diff --git a/resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue b/resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue new file mode 100644 index 00000000..79273650 --- /dev/null +++ b/resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue @@ -0,0 +1,49 @@ + + diff --git a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue index 5e4a5732..2ebb27ce 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue @@ -21,6 +21,47 @@

Order No. {{order.reference}}

+
+
+
+
+
Remark:
+
+
+
Add a Remark
+
+
+
{{order.remarks[0].content}}
+ + + + + + + + + +
+
+
+
+ +
+
+
+
+ Cancel +
+
+
+
+
+
+ +
+
+
+
Order Date: {{order.created_at}}
@@ -412,7 +453,9 @@ return { section: 'orderProfileSection', isLoading: true, - order: null + order: null, + isEditRemark: false, + addComment: false, } }, computed: { From 92c086a5bcc4081f46924d411add08fd99101cde Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 27 Nov 2021 17:24:30 +0800 Subject: [PATCH 012/223] clear merge bug dupplicated code --- app/Models/Order.php | 8 -------- 1 file changed, 8 deletions(-) diff --git a/app/Models/Order.php b/app/Models/Order.php index ee8a7b5f..ffa0550a 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -156,12 +156,4 @@ class Order extends AbstractModel implements Addressable, Packable, Remarkable { return $this->morphMany(Transaction::class, 'owner'); } - - /** - * @return MorphMany - */ - public function remarks(): morphMany - { - return $this->morphMany(Remark::class, 'owner'); - } } From 327c2958c4332720768fd5a6a126ca2e27a62ffa Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 27 Nov 2021 21:37:40 +0800 Subject: [PATCH 013/223] adjust alignment for order remarks --- .../orders/sections/OrderProfileSectionComponent.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue index 80bd2cd0..4cab0ccb 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue @@ -20,8 +20,8 @@

Order No. {{order.reference}}

-
-
Change Order Number
+
+
Change Order Number
@@ -33,7 +33,7 @@
Remark:
-
+
Add a Remark
From fd686d9ca5da4037b1551b5e62c7707e916e2bd6 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sun, 28 Nov 2021 13:55:13 +0800 Subject: [PATCH 014/223] fix contact processor and remarks database --- .../Contacts/Processors/CreateContactProcessor.php | 12 +++++++----- app/Classes/ValueObjects/Constants/RemarkTypes.php | 13 +++++++++++++ .../2021_07_21_110310_create_remarks_table.php | 2 ++ 3 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 app/Classes/ValueObjects/Constants/RemarkTypes.php diff --git a/app/Classes/Modules/Contacts/Processors/CreateContactProcessor.php b/app/Classes/Modules/Contacts/Processors/CreateContactProcessor.php index 9e04a134..060e4ad5 100644 --- a/app/Classes/Modules/Contacts/Processors/CreateContactProcessor.php +++ b/app/Classes/Modules/Contacts/Processors/CreateContactProcessor.php @@ -2,11 +2,10 @@ namespace App\Classes\Modules\Contacts\Processors; +use App\Classes\General\Interfaces\Contactable; use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject; use App\Classes\Modules\Contacts\Services\CreatesContact; use App\Classes\Modules\Contacts\Standards\Rules\CanCreateContact; -use App\Models\Company; -use Illuminate\Http\Request; use Illuminate\Database\Eloquent\Model; class CreateContactProcessor @@ -15,6 +14,9 @@ class CreateContactProcessor /** @var CanCreateContact */ private $canCreateContact; + /** @var CreatesContact */ + private $createsContact; + /** * CreateContactProcessor constructor. * @param CanCreateContact $canCreateContact @@ -28,17 +30,17 @@ class CreateContactProcessor /** * @param ContactObject $object - * @param Company $company + * @param Contactable $contactable * @return Model * @throws \App\Classes\Exceptions\AccessForbiddenException * @throws \App\Classes\Exceptions\MalformedRequestException * @throws \App\Classes\Exceptions\RequestValidationException */ - public function execute(ContactObject $object, Company $company): Model + public function execute(ContactObject $object, Contactable $contactable): Model { $this->canCreateContact->passes($object); - return $this->createsContact->execute($company,$object); + return $this->createsContact->execute($contactable,$object); } } diff --git a/app/Classes/ValueObjects/Constants/RemarkTypes.php b/app/Classes/ValueObjects/Constants/RemarkTypes.php new file mode 100644 index 00000000..9629e89a --- /dev/null +++ b/app/Classes/ValueObjects/Constants/RemarkTypes.php @@ -0,0 +1,13 @@ +morphs('owner'); $table->bigInteger('commenter_id')->unsigned()->index(); $table->string('content',200); + $table->integer('type')->default(RemarkTypes::INTERNAL); $table->softDeletes(); $table->timestamps(); }); From bb2e6f0c6750c20c9c9a13b03f89431c30870c54 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sun, 28 Nov 2021 14:21:36 +0800 Subject: [PATCH 015/223] package tracking page --- .../views/pages/orders/packages.blade.php | 172 ++++++++++++++++++ routes/web.php | 4 + 2 files changed, 176 insertions(+) create mode 100644 resources/views/pages/orders/packages.blade.php diff --git a/resources/views/pages/orders/packages.blade.php b/resources/views/pages/orders/packages.blade.php new file mode 100644 index 00000000..31a6173b --- /dev/null +++ b/resources/views/pages/orders/packages.blade.php @@ -0,0 +1,172 @@ +@extends('layouts.base_portal') +@section('inner_content') +
+
+
+
+

Packages

+

You can trace and track all packages associated with this order number.

+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
Warehouse (China)
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
In Transit
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
Warehouse (Malaysia)
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
Delivered
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Received Parcels
+

Parcels received at our warehouse

+
+
+ +
+
+ // arrived parcels +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 6c3097e4..2efe01b4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -60,6 +60,10 @@ Route::get('/orders', function () { return view('pages.orders.index'); })->name('orders'); +Route::get('/packages', function () { + return view('pages.orders.packages'); +})->name('packages'); + Route::get('/order/show/{order_number}', function ($orderNumber) { return view('pages.orders.profile', ['id' => $orderNumber]); })->name('order.show'); From 13fa34960596f84acfbac264704f114cdfd97d4f Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sun, 28 Nov 2021 14:28:17 +0800 Subject: [PATCH 016/223] package tracking page --- resources/views/pages/orders/packages.blade.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/resources/views/pages/orders/packages.blade.php b/resources/views/pages/orders/packages.blade.php index 31a6173b..552189b8 100644 --- a/resources/views/pages/orders/packages.blade.php +++ b/resources/views/pages/orders/packages.blade.php @@ -5,7 +5,7 @@

Packages

-

You can trace and track all packages associated with this order number.

+

You can trace and track all your packages.

@@ -140,7 +140,11 @@ style=" fill:#000000;">
- // arrived parcels + + +
@@ -160,7 +164,7 @@
- +
From 4601d5191b3b7e7119e6fa1e1fb81ff8dc7a6c5f Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sun, 28 Nov 2021 14:31:05 +0800 Subject: [PATCH 017/223] package tracking page --- app/Http/Resources/PackageResource.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Http/Resources/PackageResource.php b/app/Http/Resources/PackageResource.php index 75f5589f..aba71697 100644 --- a/app/Http/Resources/PackageResource.php +++ b/app/Http/Resources/PackageResource.php @@ -14,6 +14,7 @@ class PackageResource extends JsonResource */ public function toArray($request) { + dd($this->transport); return [ 'id' => $this->id, 'type' => $this->type, From d626c0bb515179ee9741a5fa4cd7f5564df7efa7 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sun, 28 Nov 2021 16:49:40 +0800 Subject: [PATCH 018/223] package tracking page --- app/Http/Resources/PackageResource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Resources/PackageResource.php b/app/Http/Resources/PackageResource.php index aba71697..6e45f91f 100644 --- a/app/Http/Resources/PackageResource.php +++ b/app/Http/Resources/PackageResource.php @@ -14,7 +14,7 @@ class PackageResource extends JsonResource */ public function toArray($request) { - dd($this->transport); + return [ 'id' => $this->id, 'type' => $this->type, From 2cc046516552a4c5aa165b25c7f30afc51379f18 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sun, 28 Nov 2021 19:19:18 +0800 Subject: [PATCH 019/223] package tracking page --- .../Eloquent/Filters/InOriginWarehouse.php | 29 +++++++++++++++++++ .../General/Eloquent/Filters/InTransit.php | 29 +++++++++++++++++++ .../Eloquent/Filters/WarehouseParcels.php | 24 +++++++++++++++ .../Packages/ListPackagesLogic.php | 16 ++++------ app/Models/Package.php | 10 +++++++ app/Scopes/CustomerPackagesScope.php | 29 +++++++++++++++++++ .../orders/elements/ParcelComponent.vue | 4 +-- .../views/pages/orders/packages.blade.php | 14 +++++++-- 8 files changed, 140 insertions(+), 15 deletions(-) create mode 100644 app/Classes/General/Eloquent/Filters/InOriginWarehouse.php create mode 100644 app/Classes/General/Eloquent/Filters/InTransit.php create mode 100644 app/Classes/General/Eloquent/Filters/WarehouseParcels.php create mode 100644 app/Scopes/CustomerPackagesScope.php diff --git a/app/Classes/General/Eloquent/Filters/InOriginWarehouse.php b/app/Classes/General/Eloquent/Filters/InOriginWarehouse.php new file mode 100644 index 00000000..80bac25a --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/InOriginWarehouse.php @@ -0,0 +1,29 @@ +whereHas('packingList', function($packingList){ + return $packingList->where('type', PackingListType::SHIPPING_PACKING_LIST)->where('status', ApprovalStatus::APPROVED); + })->whereDoesntHave('shippingSchedules', + function($schedule) { + return $schedule->where('etd', '<', Carbon::now()) + ->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); + } + ); + } +} \ No newline at end of file diff --git a/app/Classes/General/Eloquent/Filters/InTransit.php b/app/Classes/General/Eloquent/Filters/InTransit.php new file mode 100644 index 00000000..258d7e5c --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/InTransit.php @@ -0,0 +1,29 @@ +whereHas('packingList', function($packingList){ + return $packingList->where('type', PackingListType::SHIPPING_PACKING_LIST)->where('status', ApprovalStatus::APPROVED); + })->whereHas('shippingSchedules', + function($schedule) { + return $schedule->where('etd', '<', Carbon::now()) + ->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); + } + ); + } +} \ No newline at end of file diff --git a/app/Classes/General/Eloquent/Filters/WarehouseParcels.php b/app/Classes/General/Eloquent/Filters/WarehouseParcels.php new file mode 100644 index 00000000..a342a964 --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/WarehouseParcels.php @@ -0,0 +1,24 @@ +whereHas('packingList', function ($query){ + return $query->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->where('status', ApprovalStatus::APPROVED); + }); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Packages/ListPackagesLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Packages/ListPackagesLogic.php index 80d73e5b..73b05ddb 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/Packages/ListPackagesLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/Packages/ListPackagesLogic.php @@ -45,21 +45,17 @@ class ListPackagesLogic extends AbstractControllerLogic /** * @param Request $request * @return JsonResponse - * @throws ErrorException + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException */ public function logic(Request $request) : JsonResponse { - try { + $this->canListPackages->passes(); - $this->canListPackages->passes(); + $query = $this->listsPackages->execute($this->listsPackages->deserializeFilters($request->input('filters'))); - $query = $this->listsPackages->execute($this->listsPackages->deserializeFilters($request->input('filters'))); - - return $this->collectionResponse(PackageResource::collection($query)); - - } catch (\Exception $exception){ - throw new ErrorException($exception->getMessage(), $exception->getCode()); - } + return $this->collectionResponse(PackageResource::collection($query)); } diff --git a/app/Models/Package.php b/app/Models/Package.php index e78402f2..cfc50f2f 100644 --- a/app/Models/Package.php +++ b/app/Models/Package.php @@ -4,6 +4,9 @@ namespace App\Models; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\PackingListType; +use App\Classes\ValueObjects\Constants\RoleTypes; +use App\Scopes\CustomerOrdersScope; +use App\Scopes\CustomerPackagesScope; use Carbon\Carbon; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasManyThrough; @@ -137,4 +140,11 @@ class Package extends AbstractModel }); } + protected static function booted() + { + if (auth()->user()->type === RoleTypes::USER) { + static::addGlobalScope(new CustomerPackagesScope()); + } + } + } diff --git a/app/Scopes/CustomerPackagesScope.php b/app/Scopes/CustomerPackagesScope.php new file mode 100644 index 00000000..dd8a50d1 --- /dev/null +++ b/app/Scopes/CustomerPackagesScope.php @@ -0,0 +1,29 @@ +whereHas('order', function ($query) { + $query->whereHas('companyModule', function($query){ + return $query->whereHas('employees', function($query){ + return $query->where('user_id', Auth()->user()->id); + }); + }); + }); + } + +} \ No newline at end of file diff --git a/resources/assets/vue/components/orders/elements/ParcelComponent.vue b/resources/assets/vue/components/orders/elements/ParcelComponent.vue index 44303afb..41900336 100644 --- a/resources/assets/vue/components/orders/elements/ParcelComponent.vue +++ b/resources/assets/vue/components/orders/elements/ParcelComponent.vue @@ -20,7 +20,7 @@

Arrival Date

-

{{item.transport.drop_date}}

+

{{item.transport ? item.transport.drop_date : 'n/a'}}

-
+

Order Number

diff --git a/resources/views/pages/orders/packages.blade.php b/resources/views/pages/orders/packages.blade.php index 552189b8..a85544f4 100644 --- a/resources/views/pages/orders/packages.blade.php +++ b/resources/views/pages/orders/packages.blade.php @@ -140,7 +140,7 @@ style=" fill:#000000;">
- + @@ -149,12 +149,20 @@
- + + +
- + + +
From 95daebb8f16cf1190dd636cd43555917744665f1 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sun, 28 Nov 2021 19:21:27 +0800 Subject: [PATCH 020/223] package tracking page --- resources/views/pages/orders/packages.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/pages/orders/packages.blade.php b/resources/views/pages/orders/packages.blade.php index a85544f4..e5c2921a 100644 --- a/resources/views/pages/orders/packages.blade.php +++ b/resources/views/pages/orders/packages.blade.php @@ -151,7 +151,7 @@
@@ -160,7 +160,7 @@
From 4302b42ad8873089abe784a2a2350e6bb73f4455 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sun, 28 Nov 2021 19:22:28 +0800 Subject: [PATCH 021/223] package tracking page --- resources/views/pages/orders/packages.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/pages/orders/packages.blade.php b/resources/views/pages/orders/packages.blade.php index e5c2921a..2d3e3cb9 100644 --- a/resources/views/pages/orders/packages.blade.php +++ b/resources/views/pages/orders/packages.blade.php @@ -149,7 +149,7 @@
- + @@ -158,7 +158,7 @@
- + From 0dc1a3c28974deaa5a3a266131f2171b6f9601d5 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sun, 28 Nov 2021 19:24:18 +0800 Subject: [PATCH 022/223] package tracking page --- .../assets/vue/components/orders/elements/PackageComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/orders/elements/PackageComponent.vue b/resources/assets/vue/components/orders/elements/PackageComponent.vue index 781fe424..16d8f5c0 100644 --- a/resources/assets/vue/components/orders/elements/PackageComponent.vue +++ b/resources/assets/vue/components/orders/elements/PackageComponent.vue @@ -46,7 +46,7 @@
Order Number -

{{item.order.reference}}

+

{{item.order.reference}}

Status From 3de95f70193b07e204293ddf318bec97a3abeac0 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sun, 28 Nov 2021 19:27:02 +0800 Subject: [PATCH 023/223] package tracking page --- app/Classes/General/Eloquent/Filters/InTransit.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/General/Eloquent/Filters/InTransit.php b/app/Classes/General/Eloquent/Filters/InTransit.php index 258d7e5c..d7295cb0 100644 --- a/app/Classes/General/Eloquent/Filters/InTransit.php +++ b/app/Classes/General/Eloquent/Filters/InTransit.php @@ -7,7 +7,7 @@ use App\Classes\ValueObjects\Constants\PackingListType; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Carbon; -class InOriginWarehouse implements Filter +class InTransit implements Filter { /** From 036f38930851f5d13de69af720252dbe2054fbd9 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sun, 28 Nov 2021 19:29:06 +0800 Subject: [PATCH 024/223] package tracking page --- app/Classes/General/Eloquent/Filters/InTransit.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/General/Eloquent/Filters/InTransit.php b/app/Classes/General/Eloquent/Filters/InTransit.php index d7295cb0..e7ce4fea 100644 --- a/app/Classes/General/Eloquent/Filters/InTransit.php +++ b/app/Classes/General/Eloquent/Filters/InTransit.php @@ -21,7 +21,7 @@ class InTransit implements Filter return $packingList->where('type', PackingListType::SHIPPING_PACKING_LIST)->where('status', ApprovalStatus::APPROVED); })->whereHas('shippingSchedules', function($schedule) { - return $schedule->where('etd', '<', Carbon::now()) + return $schedule->where('etd', '<', Carbon::now())->where('eta', '>', Carbon::now()) ->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); } ); From 5d9782d1c951691ee6577c49f60383bd196b00a3 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sun, 28 Nov 2021 20:19:09 +0800 Subject: [PATCH 025/223] package tracking page --- .../General/Eloquent/Filters/Delivered.php | 32 +++++++++++++++++++ .../Filters/InDestinationWarehouse.php | 32 +++++++++++++++++++ .../General/Eloquent/Filters/InTransit.php | 8 +++-- app/Models/Package.php | 2 +- .../views/pages/orders/packages.blade.php | 14 ++++++-- 5 files changed, 82 insertions(+), 6 deletions(-) create mode 100644 app/Classes/General/Eloquent/Filters/Delivered.php create mode 100644 app/Classes/General/Eloquent/Filters/InDestinationWarehouse.php diff --git a/app/Classes/General/Eloquent/Filters/Delivered.php b/app/Classes/General/Eloquent/Filters/Delivered.php new file mode 100644 index 00000000..f6c09b98 --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/Delivered.php @@ -0,0 +1,32 @@ +whereHas('packingList', function($packingList){ + return $packingList->where('type', PackingListType::SHIPPING_PACKING_LIST)->where('status', ApprovalStatus::APPROVED); + })->whereHas('container', + function($container) { + return $container->where('containers.status', ApprovalStatus::COMPLETED); + } + )->whereHas('deliverySchedules', + function($schedule) { + return $schedule->where('eta', '<', Carbon::now())->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); + } + ); + } +} \ No newline at end of file diff --git a/app/Classes/General/Eloquent/Filters/InDestinationWarehouse.php b/app/Classes/General/Eloquent/Filters/InDestinationWarehouse.php new file mode 100644 index 00000000..b4a56b23 --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/InDestinationWarehouse.php @@ -0,0 +1,32 @@ +whereHas('packingList', function($packingList){ + return $packingList->where('type', PackingListType::SHIPPING_PACKING_LIST)->where('status', ApprovalStatus::APPROVED); + })->whereHas('container', + function($container) { + return $container->where('containers.status', ApprovalStatus::COMPLETED); + } + )->whereDoesntHave('deliverySchedules', + function($schedule) { + return $schedule->where('etd', '<', Carbon::now())->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); + } + ); + } +} \ No newline at end of file diff --git a/app/Classes/General/Eloquent/Filters/InTransit.php b/app/Classes/General/Eloquent/Filters/InTransit.php index e7ce4fea..db453486 100644 --- a/app/Classes/General/Eloquent/Filters/InTransit.php +++ b/app/Classes/General/Eloquent/Filters/InTransit.php @@ -19,9 +19,13 @@ class InTransit implements Filter { return $builder->whereHas('packingList', function($packingList){ return $packingList->where('type', PackingListType::SHIPPING_PACKING_LIST)->where('status', ApprovalStatus::APPROVED); - })->whereHas('shippingSchedules', + })->whereHas('container', + function($container) { + return $container->where('containers.status', ApprovalStatus::PENDING_VERIFICATION); + } + )->whereHas('shippingSchedules', function($schedule) { - return $schedule->where('etd', '<', Carbon::now())->where('eta', '>', Carbon::now()) + return $schedule->where('etd', '<', Carbon::now()) ->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); } ); diff --git a/app/Models/Package.php b/app/Models/Package.php index cfc50f2f..89ef8328 100644 --- a/app/Models/Package.php +++ b/app/Models/Package.php @@ -143,7 +143,7 @@ class Package extends AbstractModel protected static function booted() { if (auth()->user()->type === RoleTypes::USER) { - static::addGlobalScope(new CustomerPackagesScope()); +// static::addGlobalScope(new CustomerPackagesScope()); } } diff --git a/resources/views/pages/orders/packages.blade.php b/resources/views/pages/orders/packages.blade.php index 2d3e3cb9..2629c58b 100644 --- a/resources/views/pages/orders/packages.blade.php +++ b/resources/views/pages/orders/packages.blade.php @@ -160,19 +160,27 @@
- + + +
- + + +
From 32465e21705e1e5d41c5161aba0a636b08928856 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sun, 28 Nov 2021 21:03:04 +0800 Subject: [PATCH 026/223] add contact and remark to address --- .../ControllersLogic/CreateAddressLogic.php | 31 +++++++++++- .../ControllersLogic/UpdateAddressLogic.php | 33 ++++++++++++- app/Http/Resources/AddressResource.php | 2 + app/Models/Address.php | 21 +++++++- .../addresses/forms/AddressFormComponent.vue | 49 ++++++++++++++++--- .../validation/addressFormValidation.js | 5 +- 6 files changed, 130 insertions(+), 11 deletions(-) diff --git a/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php index f0240e5c..855d552b 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php @@ -4,12 +4,18 @@ namespace App\Classes\Modules\Addresses\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; +use App\Classes\General\Interfaces\Contactable; use App\Classes\Modules\Addresses\Services\CreatesAddress; use App\Classes\Modules\Addresses\Services\FetchesDistrict; use App\Classes\Modules\Addresses\Standards\Rules\CanCreateAddress; use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject; use App\Classes\Modules\Companies\Services\FetchesCompanyModule; +use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject; +use App\Classes\Modules\Contacts\Processors\CreateContactProcessor; +use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject; +use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor; use App\Http\Resources\AddressResource; +use App\Models\Address; use ErrorException; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -39,19 +45,29 @@ class CreateAddressLogic extends AbstractControllerLogic /** @var CreatesAddress */ private $createsAddress; + /** @var CreateContactProcessor */ + private $createContactProcessor; + + /** @var CreateRemarkProcessor */ + private $createRemarkProcessor; + /** * CreateAddressLogic constructor. * @param CanCreateAddress $canCreateAddress * @param FetchesDistrict $fetchesDistrict * @param FetchesCompanyModule $fetchesCompanyModule * @param CreatesAddress $createsAddress + * @param CreateContactProcessor $createContactProcessor + * @param CreateRemarkProcessor $createRemarkProcessor */ - public function __construct(CanCreateAddress $canCreateAddress, FetchesDistrict $fetchesDistrict, FetchesCompanyModule $fetchesCompanyModule, CreatesAddress $createsAddress) + public function __construct(CanCreateAddress $canCreateAddress, FetchesDistrict $fetchesDistrict, FetchesCompanyModule $fetchesCompanyModule, CreatesAddress $createsAddress, CreateContactProcessor $createContactProcessor, CreateRemarkProcessor $createRemarkProcessor) { $this->canCreateAddress = $canCreateAddress; $this->fetchesDistrict = $fetchesDistrict; $this->fetchesCompanyModule = $fetchesCompanyModule; $this->createsAddress = $createsAddress; + $this->createContactProcessor = $createContactProcessor; + $this->createRemarkProcessor = $createRemarkProcessor; } /** @@ -70,8 +86,21 @@ class CreateAddressLogic extends AbstractControllerLogic $this->canCreateAddress->passes($object); + /** @var Address $address */ $address = $this->createsAddress->execute($this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]), $object); + $contactObject = new ContactObject($request->input('pic'), $request->input('phone'), '', ''); + + if($contactObject->getPhone()){ + $this->createContactProcessor->execute($contactObject, $address); + } + + $remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id); + + if($remarkObject->getContent()){ + $this->createRemarkProcessor->execute($address, $remarkObject); + } + return $this->resourceResponse(new AddressResource($address)); } diff --git a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php index 9d8f0600..345dd777 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php @@ -9,7 +9,12 @@ use App\Classes\Modules\Addresses\Services\FetchesAddress; use App\Classes\Modules\Addresses\Services\FetchesDistrict; use App\Classes\Modules\Addresses\Standards\Rules\CanUpdateAddress; use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject; +use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject; +use App\Classes\Modules\Contacts\Processors\CreateContactProcessor; +use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject; +use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor; use App\Http\Resources\AddressResource; +use App\Models\Address; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -38,22 +43,31 @@ class UpdateAddressLogic extends AbstractControllerLogic /** @var FetchesDistrict */ private $fetchesDistrict; + /** @var CreateContactProcessor */ + private $createContactProcessor; + + /** @var CreateRemarkProcessor */ + private $createRemarkProcessor; + /** * UpdateAddressLogic constructor. * @param CanUpdateAddress $canUpdateAddress * @param UpdatesAddress $updatesAddress * @param FetchesAddress $fetchesAddress * @param FetchesDistrict $fetchesDistrict + * @param CreateContactProcessor $createContactProcessor + * @param CreateRemarkProcessor $createRemarkProcessor */ - public function __construct(CanUpdateAddress $canUpdateAddress, UpdatesAddress $updatesAddress, FetchesAddress $fetchesAddress, FetchesDistrict $fetchesDistrict) + public function __construct(CanUpdateAddress $canUpdateAddress, UpdatesAddress $updatesAddress, FetchesAddress $fetchesAddress, FetchesDistrict $fetchesDistrict, CreateContactProcessor $createContactProcessor, CreateRemarkProcessor $createRemarkProcessor) { $this->canUpdateAddress = $canUpdateAddress; $this->updatesAddress = $updatesAddress; $this->fetchesAddress = $fetchesAddress; $this->fetchesDistrict = $fetchesDistrict; + $this->createContactProcessor = $createContactProcessor; + $this->createRemarkProcessor = $createRemarkProcessor; } - /** * @param Request $request * @return JsonResponse @@ -71,8 +85,23 @@ class UpdateAddressLogic extends AbstractControllerLogic $address = $this->fetchesAddress->execute(['id' => $request->route('id')]); + /** @var Address $address */ $address = $this->updatesAddress->execute($address, $object); + $address->contacts()->delete(); $address->remarks()->delete(); + + $contactObject = new ContactObject($request->input('pic'), $request->input('phone'), '', ''); + + if($contactObject->getPhone()){ + $this->createContactProcessor->execute($contactObject, $address); + } + + $remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id); + + if($remarkObject->getContent()){ + $this->createRemarkProcessor->execute($address, $remarkObject); + } + return $this->resourceResponse(new AddressResource($address)); } diff --git a/app/Http/Resources/AddressResource.php b/app/Http/Resources/AddressResource.php index 6f6a6237..95a60b9f 100644 --- a/app/Http/Resources/AddressResource.php +++ b/app/Http/Resources/AddressResource.php @@ -28,6 +28,8 @@ class AddressResource extends JsonResource 'country' => $this->country, 'default' => (int) $this->default, 'status' => (int) $this->status, + 'contact' => new ContactResource($this->contacts->first()), + 'remark' => new RemarkResource($this->remarks->first()), $this->mergeWhen($this->relationLoaded('owner'), [ 'owner' => $this->when($this->owner instanceof Order, [ 'reference' => $this->owner->reference, diff --git a/app/Models/Address.php b/app/Models/Address.php index bbd60d70..8357940f 100644 --- a/app/Models/Address.php +++ b/app/Models/Address.php @@ -2,9 +2,12 @@ namespace App\Models; +use App\Classes\General\Interfaces\Contactable; +use App\Classes\General\Interfaces\Remarkable; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasOne; +use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\Relations\MorphTo; /** @@ -20,7 +23,7 @@ use Illuminate\Database\Eloquent\Relations\MorphTo; * @property string street_two * @property integer billing_type */ -class Address extends AbstractModel +class Address extends AbstractModel implements Contactable, Remarkable { use SoftDeletes; @@ -70,4 +73,20 @@ class Address extends AbstractModel { return $query->where('default', true); } + + /** + * @return MorphMany + */ + public function contacts(): morphMany + { + return $this->morphMany(Contact::class, 'owner'); + } + + /** + * @return MorphMany + */ + public function remarks(): morphMany + { + return $this->morphMany(Remark::class, 'owner'); + } } diff --git a/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue b/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue index 3a0b4ac8..98d405e9 100644 --- a/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue +++ b/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue @@ -3,6 +3,14 @@
+
+
+ + + + +
+
@@ -33,12 +41,34 @@
-
+
- - - - +
+
+
+
+ + + + +
+
+ + + + +
+
+
+
+ + + + +
+
+
+
@@ -46,7 +76,8 @@
-
+
+
@@ -73,6 +104,9 @@ street_two: '', district_id: '', post_code: '', + remark: '', + phone: '', + pic: '', } } @@ -84,6 +118,9 @@ this.parameters.street_two = this.data.street_two; this.parameters.district_id = this.data.district.id; this.parameters.post_code = this.data.post_code; + this.parameters.phone = this.data.contact.phone; + this.parameters.pic = this.data.contact.reference; + this.parameters.remark = this.data.remark.content; } }, watch: { diff --git a/resources/assets/vue/general/mixins/addresses/validation/addressFormValidation.js b/resources/assets/vue/general/mixins/addresses/validation/addressFormValidation.js index 4180331f..6a59841c 100644 --- a/resources/assets/vue/general/mixins/addresses/validation/addressFormValidation.js +++ b/resources/assets/vue/general/mixins/addresses/validation/addressFormValidation.js @@ -1,4 +1,4 @@ -import { required } from "vuelidate/lib/validators"; +import { required, numeric } from "vuelidate/lib/validators"; import addressFormHandler from '../addressFormHandler' export default { validations: { @@ -8,6 +8,9 @@ export default { street_two: {}, district_id: { required }, post_code: { required }, + remark: {}, + phone: {numeric}, + pic: {}, } }, mixins: [addressFormHandler] From 4440f229d9f617a1652a4d76dec4439dea25320c Mon Sep 17 00:00:00 2001 From: omair saleh Date: Mon, 29 Nov 2021 11:33:26 +0800 Subject: [PATCH 027/223] add contact and remark to address --- .../vue/components/containers/elements/ContainerComponent.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/assets/vue/components/containers/elements/ContainerComponent.vue b/resources/assets/vue/components/containers/elements/ContainerComponent.vue index 62a75f36..4c6f3045 100644 --- a/resources/assets/vue/components/containers/elements/ContainerComponent.vue +++ b/resources/assets/vue/components/containers/elements/ContainerComponent.vue @@ -58,7 +58,7 @@
Quantity
CBM
status
-
Delivery Address
+
Delivery Details
Delivery Date
@@ -72,7 +72,7 @@
{{packingList.packages.reduce((total, obj) => obj.quantity + total, 0)}}
{{ (Math.ceil((packingList.packages.reduce((total, obj) => obj.cbm + total, 0)) * 1000) / 1000).toFixed(3)}}
{{packingList.transport ? 'Delivery' : packingList.status === 5 ? 'On Hold' : 'Release'}}
-
{{packingList.order.address.street_one+' '+(packingList.order.address.street_two ? packingList.order.address.street_two : '')+', '+ packingList.order.address.district.name+', '+packingList.order.address.post_code+' '+packingList.order.address.state.name+', '+packingList.order.address.country.name}}
+
{{packingList.order.address.contact.reference+' '+packingList.order.address.contact.phone}}
{{packingList.order.address.street_one+' '+(packingList.order.address.street_two ? packingList.order.address.street_two : '')+', '+ packingList.order.address.district.name+', '+packingList.order.address.post_code+' '+packingList.order.address.state.name+', '+packingList.order.address.country.name}}
{{packingList.order.address.remark.content}}

{{packingList.transport ? packingList.transport.current_schedule.eta : 'n/a'}}

From 098297188d0669c1efb39e2438c7294b504cfefa Mon Sep 17 00:00:00 2001 From: omair saleh Date: Mon, 29 Nov 2021 11:44:02 +0800 Subject: [PATCH 028/223] add contact and remark to address --- .../vue/components/containers/elements/ContainerComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/containers/elements/ContainerComponent.vue b/resources/assets/vue/components/containers/elements/ContainerComponent.vue index 4c6f3045..34341c48 100644 --- a/resources/assets/vue/components/containers/elements/ContainerComponent.vue +++ b/resources/assets/vue/components/containers/elements/ContainerComponent.vue @@ -72,7 +72,7 @@
{{packingList.packages.reduce((total, obj) => obj.quantity + total, 0)}}
{{ (Math.ceil((packingList.packages.reduce((total, obj) => obj.cbm + total, 0)) * 1000) / 1000).toFixed(3)}}
{{packingList.transport ? 'Delivery' : packingList.status === 5 ? 'On Hold' : 'Release'}}
-
{{packingList.order.address.contact.reference+' '+packingList.order.address.contact.phone}}
{{packingList.order.address.street_one+' '+(packingList.order.address.street_two ? packingList.order.address.street_two : '')+', '+ packingList.order.address.district.name+', '+packingList.order.address.post_code+' '+packingList.order.address.state.name+', '+packingList.order.address.country.name}}
{{packingList.order.address.remark.content}}
+
{{packingList.order.address.contact ? packingList.order.address.contact.reference+' '+packingList.order.address.contact.phone : ''}}{{
packingList.order.address.street_one+' '+(packingList.order.address.street_two ? packingList.order.address.street_two : '')+', '+ packingList.order.address.district.name+', '+packingList.order.address.post_code+' '+packingList.order.address.state.name+', '+packingList.order.address.country.name}}
{{packingList.order.address.remark ? packingList.order.address.remark.content: ''}}

{{packingList.transport ? packingList.transport.current_schedule.eta : 'n/a'}}

From 3a74fa5e1270350a0f7cae41c1291e487b6807b5 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Mon, 29 Nov 2021 11:46:43 +0800 Subject: [PATCH 029/223] add contact and remark to address --- .../vue/components/containers/elements/ContainerComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/containers/elements/ContainerComponent.vue b/resources/assets/vue/components/containers/elements/ContainerComponent.vue index 34341c48..f894385c 100644 --- a/resources/assets/vue/components/containers/elements/ContainerComponent.vue +++ b/resources/assets/vue/components/containers/elements/ContainerComponent.vue @@ -72,7 +72,7 @@
{{packingList.packages.reduce((total, obj) => obj.quantity + total, 0)}}
{{ (Math.ceil((packingList.packages.reduce((total, obj) => obj.cbm + total, 0)) * 1000) / 1000).toFixed(3)}}
{{packingList.transport ? 'Delivery' : packingList.status === 5 ? 'On Hold' : 'Release'}}
-
{{packingList.order.address.contact ? packingList.order.address.contact.reference+' '+packingList.order.address.contact.phone : ''}}{{
packingList.order.address.street_one+' '+(packingList.order.address.street_two ? packingList.order.address.street_two : '')+', '+ packingList.order.address.district.name+', '+packingList.order.address.post_code+' '+packingList.order.address.state.name+', '+packingList.order.address.country.name}}
{{packingList.order.address.remark ? packingList.order.address.remark.content: ''}}
+
{{packingList.order.address.contact ? packingList.order.address.contact.reference+' '+packingList.order.address.contact.phone : ''}}
{{packingList.order.address.street_one+' '+(packingList.order.address.street_two ? packingList.order.address.street_two : '')+', '+ packingList.order.address.district.name+', '+packingList.order.address.post_code+' '+packingList.order.address.state.name+', '+packingList.order.address.country.name}}
{{packingList.order.address.remark ? packingList.order.address.remark.content: ''}}

{{packingList.transport ? packingList.transport.current_schedule.eta : 'n/a'}}

From 13c4b173d38a0b4ec706571b52f821f9ee5e55cf Mon Sep 17 00:00:00 2001 From: omair saleh Date: Fri, 3 Dec 2021 13:44:08 +0800 Subject: [PATCH 030/223] list yiwu to sabah or srawak orders --- routes/web.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/routes/web.php b/routes/web.php index 2efe01b4..9fef0fc2 100644 --- a/routes/web.php +++ b/routes/web.php @@ -136,6 +136,19 @@ Route::group(['prefix' => 'template', 'as' => 'template.'], function () { })->name('shipping-queue'); }); +Route::get('/yiwu', function () { + $orders = \App\Models\Order::whereHas('OrderRoles', function($query){ + return $query->where('role_id', \App\Classes\ValueObjects\Constants\OrderRoleTypes::ORIGIN_WAREHOUSE)->where('company_module_id', 4); + })->whereHas('OrderRoles', function($query){ + return $query->where('role_id', \App\Classes\ValueObjects\Constants\OrderRoleTypes::DESTINATION_WAREHOUSE)->where(function ($query){ + $query->where('company_module_id', 6)->orWhere('company_module_id', 6); + }); + })->get(); + + dd($orders); + +}); + Route::get('/debug', function (){ $orders = \App\Models\Order::all(); From 3d89a25f5c06f513815d4083aa5671403414a36b Mon Sep 17 00:00:00 2001 From: omair saleh Date: Fri, 3 Dec 2021 13:44:42 +0800 Subject: [PATCH 031/223] remove list yiwu to sabah or srawak orders --- routes/web.php | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/routes/web.php b/routes/web.php index 9fef0fc2..0f1cf198 100644 --- a/routes/web.php +++ b/routes/web.php @@ -136,18 +136,6 @@ Route::group(['prefix' => 'template', 'as' => 'template.'], function () { })->name('shipping-queue'); }); -Route::get('/yiwu', function () { - $orders = \App\Models\Order::whereHas('OrderRoles', function($query){ - return $query->where('role_id', \App\Classes\ValueObjects\Constants\OrderRoleTypes::ORIGIN_WAREHOUSE)->where('company_module_id', 4); - })->whereHas('OrderRoles', function($query){ - return $query->where('role_id', \App\Classes\ValueObjects\Constants\OrderRoleTypes::DESTINATION_WAREHOUSE)->where(function ($query){ - $query->where('company_module_id', 6)->orWhere('company_module_id', 6); - }); - })->get(); - - dd($orders); - -}); Route::get('/debug', function (){ $orders = \App\Models\Order::all(); From 3aec23525cf29e36757ce6acd528547bde41c4e2 Mon Sep 17 00:00:00 2001 From: Fairuz Date: Mon, 13 Dec 2021 11:45:48 +0800 Subject: [PATCH 032/223] Duplicate packing list for admin CIEF reference --- .../FetchLoadedContainersFromVTPortalProcessor.php | 7 ++++++- app/Models/PackingList.php | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php index bb9986c0..32c17cd1 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php @@ -21,6 +21,7 @@ use App\Classes\Modules\Unity\Services\CreatesContract; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\ContainerTypes; use App\Classes\ValueObjects\Constants\OrderRoleTypes; +use App\Classes\ValueObjects\Constants\RoleTypes; use App\Classes\ValueObjects\Constants\PackingListType; use App\Models\Order; use App\Models\PackingList; @@ -194,7 +195,7 @@ class FetchLoadedContainersFromVTPortalProcessor $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->update(['entity_hash_id' => $supervisorContractEntity->hash_id, 'entity_signature' => $supervisorContractEntity->entity_signature_hash_id]); $importerContractEntity = $this->unityCreateContractEntity->execute($contractReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->appointee->unity_hash_id); - $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->update(['entity_hash_id' => $importerContractEntity->hash_id, 'entity_signature' => $importerContractEntity->entity_signature_hash_id]); + $order->orderRoles()->where('role_id', '=', RoleT::IMPORTER)->first()->update(['entity_hash_id' => $importerContractEntity->hash_id, 'entity_signature' => $importerContractEntity->entity_signature_hash_id]); $this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations); @@ -207,6 +208,10 @@ class FetchLoadedContainersFromVTPortalProcessor $packingList = $this->createPackingListProcessor->execute($packingListObject, $order); $container->packingLists()->attach($packingList); + //Duplicate a copy for internal reference + $packingListObject = new PackingListObject($packingListReference, RoleTypes::SUPER_ADMIN, PackingListType::SHIPPING_PACKING_LIST, (int) filter_var($marking, FILTER_SANITIZE_NUMBER_INT) <= 1000 ? ApprovalStatus::PENDING_VERIFICATION : ApprovalStatus::SUSPENDED, $contractReference); + $packingList = $this->createPackingListProcessor->execute($packingListObject, $packingList); + foreach($contractObligations as $obligation) { $stepObject = new StepsObject($order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, $obligation->reference, $obligation->sequence, $obligation->hash_id); $this->createsStep->execute($packingList, $stepObject); diff --git a/app/Models/PackingList.php b/app/Models/PackingList.php index fc775ba2..24565d9c 100644 --- a/app/Models/PackingList.php +++ b/app/Models/PackingList.php @@ -4,6 +4,7 @@ namespace App\Models; use App\Classes\General\Interfaces\Steppable; use App\Classes\General\Interfaces\Transportable; +use App\Classes\General\Interfaces\Packable; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; @@ -11,7 +12,7 @@ use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\Relations\MorphTo; use Illuminate\Database\Eloquent\SoftDeletes; -class PackingList extends AbstractModel implements Transportable, Steppable +class PackingList extends AbstractModel implements Transportable, Steppable, Packable { use SoftDeletes; From 926cb61ca371c3f4d09cc37c8afc45965d4d6d24 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Mon, 13 Dec 2021 21:23:04 +0800 Subject: [PATCH 033/223] Vt sync update --- .../ApproveChangeOrderAddressProcessor.php | 9 +- .../RequestChangeOrderAddressProcessor.php | 40 +++- .../UpdateDoFromVTPortalProcessor.php | 202 ++++++++++++++++++ .../UpdatePackingListStatusLogic.php | 14 +- 4 files changed, 256 insertions(+), 9 deletions(-) create mode 100644 app/Classes/Modules/Orders/Processors/UpdateDoFromVTPortalProcessor.php diff --git a/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php b/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php index fbd84f90..40112301 100644 --- a/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php +++ b/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php @@ -6,6 +6,7 @@ use App\Classes\Modules\Addresses\Services\FetchesAddress; use App\Classes\Modules\Orders\Standards\Rules\CanApproveChangeOrderAddress; use App\Classes\Modules\Orders\Services\UpdatesOrdersAddress; use App\Classes\ValueObjects\Constants\ApprovalStatus; +use App\Classes\Modules\Orders\Processors\UpdateDoFromVTPortalProcessor; use Illuminate\Http\Request; @@ -26,11 +27,12 @@ class ApproveChangeOrderAddressProcessor * @param FetchesAddress $fetchesAddress * @param UpdatesOrdersAddress $updatesOrdersAddress */ - public function __construct(CanApproveChangeOrderAddress $canApproveChangeOrderAddress, FetchesAddress $fetchesAddress, UpdatesOrdersAddress $updatesOrdersAddress) + public function __construct(CanApproveChangeOrderAddress $canApproveChangeOrderAddress, FetchesAddress $fetchesAddress, UpdatesOrdersAddress $updatesOrdersAddress, UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor) { $this->canApproveChangeOrderAddress = $canApproveChangeOrderAddress; $this->fetchesAddress = $fetchesAddress; $this->updatesOrdersAddress = $updatesOrdersAddress; + $this->updateDoFromVTPortalProcessor = $updateDoFromVTPortalProcessor; } @@ -43,7 +45,6 @@ class ApproveChangeOrderAddressProcessor */ public function execute(Request $request) { - $status = (int) $request->route('status'); $this->canApproveChangeOrderAddress->passes(); @@ -54,7 +55,9 @@ class ApproveChangeOrderAddressProcessor $address->owner->addresses()->update(['status' => ApprovalStatus::EXPIRED]); } - $this->updatesOrdersAddress->execute($address, $status); + $address = $this->updatesOrdersAddress->execute($address, $status); + + $vt_do_update = $this->updateDoFromVTPortalProcessor->execute($address); return $address; } diff --git a/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php b/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php index 7f01726b..994803e3 100644 --- a/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php +++ b/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php @@ -9,6 +9,10 @@ use App\Classes\Modules\Addresses\Services\FetchesAddress; use App\Classes\Modules\Addresses\Services\DeletesAddress; use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject; use App\Classes\ValueObjects\Constants\ApprovalStatus; +use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject; +use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject; +use App\Classes\Modules\Contacts\Processors\CreateContactProcessor; +use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor; use Illuminate\Http\Request; @@ -29,6 +33,12 @@ class RequestChangeOrderAddressProcessor /** @var DeletesAddress */ private $deletesAddress; + /** @var CreateContactProcessor */ + private $createContactProcessor; + + /** @var CreateRemarkProcessor */ + private $createRemarkProcessor; + /** * ChangeOrderAddressProcessor constructor. * @param FetchesOrder $fetchesOrder @@ -36,7 +46,7 @@ class RequestChangeOrderAddressProcessor * @param FetchesAddress $fetchesAddress * @param DeletesAddress $deletesAddress */ - public function __construct(CanChangeOrderAddress $canChangeOrderAddress, FetchesOrder $fetchesOrder, CreatesAddress $createsAddress, FetchesAddress $fetchesAddress, DeletesAddress $deletesAddress) + public function __construct(CanChangeOrderAddress $canChangeOrderAddress, FetchesOrder $fetchesOrder, CreatesAddress $createsAddress, FetchesAddress $fetchesAddress, DeletesAddress $deletesAddress, CreateContactProcessor $createContactProcessor, CreateRemarkProcessor $createRemarkProcessor) { $this->canChangeOrderAddress = $canChangeOrderAddress; @@ -44,12 +54,13 @@ class RequestChangeOrderAddressProcessor $this->createsAddress = $createsAddress; $this->fetchesAddress = $fetchesAddress; $this->deletesAddress = $deletesAddress; + $this->createContactProcessor = $createContactProcessor; + $this->createRemarkProcessor = $createRemarkProcessor; } public function execute(Request $request) { - $this->canChangeOrderAddress->passes(); $order = $this->fetchesOrder->execute(['id' => $request->get('order_id')]); @@ -59,7 +70,30 @@ class RequestChangeOrderAddressProcessor $address = $this->fetchesAddress->execute(['id' => $request->get('address_id')]); $addressObject = new AddressObject($address->street_one, $address->street_two, $address->country_id, $address->state_id, $address->district_id, $address->postcode, $address->reference, ApprovalStatus::PENDING_VERIFICATION); - $this->createsAddress->execute($order, $addressObject); + $order_address = $this->createsAddress->execute($order, $addressObject); + + $contact = $address->contacts()->first(); + $contactObject = new ContactObject( + $contact->reference, + $contact->phone, + '', + '' + ); + + if($contactObject->getPhone()){ + $order_remark = $this->createContactProcessor->execute($contactObject, $order_address); + } + + $remark = $address->remarks()->first(); + + $remarkObject = new RemarkObject( + $remark->content, + Auth()->user()->id + ); + + if($remarkObject->getContent()){ + $this->createRemarkProcessor->execute($order_address, $remarkObject); + } return $order; } diff --git a/app/Classes/Modules/Orders/Processors/UpdateDoFromVTPortalProcessor.php b/app/Classes/Modules/Orders/Processors/UpdateDoFromVTPortalProcessor.php new file mode 100644 index 00000000..8b3faeb2 --- /dev/null +++ b/app/Classes/Modules/Orders/Processors/UpdateDoFromVTPortalProcessor.php @@ -0,0 +1,202 @@ +fetchesDataFRomVTPortal = $fetchesDataFRomVTPortal; + $this->fetchesAddress = $fetchesAddress; + } + + /** + * @return array + */ + public function execute($address) { + + try { + $order = $address->owner()->orderBy('id', 'desc')->first(); + $packing_list = $order->packingLists()->orderBy('id', 'desc')->first(); + + if ($packing_list) { + $contact = $address->contacts()->first(); + $remark = $address->remarks()->first(); + + $status = 'Release'; + + if ($packing_list->status == ApprovalStatus::PENDING_VERIFICATION) { + $status = 'Release'; + } + else if($packing_list->status == ApprovalStatus::SUSPENDED) { + $status = 'On Hold'; + + } + + $vt_do = $this->fetchesDataFRomVTPortal->clientRequest( + 'http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', + 'POST', + json_decode('{ + "controller": "Do", + "view": "grid1", + "request": { + "PageIndex": -2, + "PageSize": 10, + "PageOffset": 0, + "SortExpression": "", + "GroupExpression": "", + "Filter": [ + "FullMarking:$contains$%js%\"' . $order->reference . '\"\u0000" + ], + "ContextKey": "view2", + "FilterIsExternal": true, + "LookupContextFieldName": null, + "LookupContextController": null, + "LookupContextView": null, + "LookupContext": null, + "Inserting": false, + "LastCommandName": null, + + "DoesNotRequireData": false, + "LastView": "grid1", + "Tag": null, + "RequiresFirstLetters": false, + "ViewType": "Grid", + "SupportsCaching": true, + "SystemFilter": null, + "RequiresRowCount": true, + "QuickFindHint": null, + "RequiresPivot": false, + "PivotDefinitions": null, + "RequiresMetaData": true + } + }' + ), ''); + + $vt_do = $this->fetchesDataFRomVTPortal->getResponseBody($vt_do); + + if ($vt_do) { + foreach ($vt_do->Rows as $key => $row) { + + $vt_do_update = $this->fetchesDataFRomVTPortal->clientRequest( + 'http://portal.vtnation.com.my/Services/DataControllerService.asmx/Execute', + 'POST', + json_decode('{ + "controller": "Do", + "view": "editForm1", + "args": { + "CommandName": "Update", + "CommandArgument": "Save", + "Path": "ag2/a4", + "LastCommandName": "Edit", + "Values": [ + { + "Name": "ShippingAddress", + "NewValue": "' . $address->street_one . ' ' . $address->street_two . '", + "Modified": true, + "ReadOnly": false, + "Error": null + }, + { + "Name": "Attn", + "NewValue": "' . $contact->reference . '", + "Modified": true, + "ReadOnly": false, + "Error": null + }, + { + "Name": "Tel", + "NewValue": "' . $contact->phone . '", + "Modified": true, + "ReadOnly": false, + "Error": null + }, + { + "Name": "Status", + "NewValue": "' . $status . '", + "Modified": true, + "ReadOnly": false, + "Error": null + }, + { + "Name": "Doremarks", + "NewValue": "' . $remark->content . '", + "Modified": true, + "ReadOnly": false, + "Error": null + }, + { + "Name": "ModifiedBy", + "OldValue": "CIEF", + "NewValue": "CIEF", + "Modified": false, + "ReadOnly": false, + "Error": null + }, + { + "Name": "DoID", + "OldValue": 1471, + "NewValue": ' . $row[0] . ', + "Modified": false, + "ReadOnly": true, + "Error": null + } + ], + "ContextKey": "do", + "Controller": "Do", + "View": "editForm1", + "LastView": "grid1", + "Tag": null, + "Filter": [ + "DoID:=%js%' . $row[0] . '", + "ContainerID:=%js%' . $row[1] . '" + ], + "SortExpression": "", + "GroupExpression": "", + "SelectedValues": [] + } + }'), ''); + } + } + } + + } catch (\Exception $exception){ + Log::error($exception); + } + + return []; + } +} diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php index 67a1733c..c4266dc1 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php @@ -9,6 +9,7 @@ use App\Classes\Modules\PackingLists\Services\FetchesPackingList; use App\Classes\Modules\PackingLists\Services\UpdatesPackingListStatus; use App\Classes\Modules\PackingLists\Standards\Rules\CanUpdatePackingList; use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject; +use App\Classes\Modules\Orders\Processors\UpdateDoFromVTPortalProcessor; use App\Http\Resources\PackingListResource; use ErrorException; use Illuminate\Http\JsonResponse; @@ -34,15 +35,19 @@ class UpdatePackingListStatusLogic extends AbstractControllerLogic /** @var UpdatesPackingListStatus */ private $updatesPackingListStatus; + /** @var UpdateDoFromVTPortalProcessor */ + private $updateDoFromVTPortalProcessor; + /** * UpdatePackingListStatusLogic constructor. * @param FetchesPackingList $fetchesPackingList * @param UpdatesPackingListStatus $updatesPackingListStatus */ - public function __construct(FetchesPackingList $fetchesPackingList, UpdatesPackingListStatus $updatesPackingListStatus) + public function __construct(FetchesPackingList $fetchesPackingList, UpdatesPackingListStatus $updatesPackingListStatus, UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor) { $this->fetchesPackingList = $fetchesPackingList; $this->updatesPackingListStatus = $updatesPackingListStatus; + $this->updateDoFromVTPortalProcessor = $updateDoFromVTPortalProcessor; } /** @@ -54,9 +59,12 @@ class UpdatePackingListStatusLogic extends AbstractControllerLogic { $packingList = $this->fetchesPackingList->execute(['id' => $request->route('id')]); - $query = $this->updatesPackingListStatus->execute($packingList, $request->route('status')); + $packing_list = $this->updatesPackingListStatus->execute($packingList, $request->route('status')); + $address = $packing_list->owner()->first()->addresses()->first(); - return $this->resourceResponse(new PackingListResource($query)); + $vt_do_update = $this->updateDoFromVTPortalProcessor->execute($address); + + return $this->resourceResponse(new PackingListResource($packing_list)); } } From 280f5f497476bb64c77bb20af244a0464dc51672 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Thu, 16 Dec 2021 13:50:04 +0800 Subject: [PATCH 034/223] update order profile section - only admins can edit the order reference number --- .../components/orders/sections/OrderProfileSectionComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue index 4cab0ccb..4724d723 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue @@ -21,7 +21,7 @@

Order No. {{order.reference}}

-
Change Order Number
+
Change Order Number
From 4a158b8dacce24eb5e3caa83a7bf3f9aea5c5ec6 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Thu, 16 Dec 2021 18:17:27 +0800 Subject: [PATCH 035/223] update order profile section - only super admin can edit the order reference number --- .../components/orders/sections/OrderProfileSectionComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue index 4724d723..1332bfe6 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue @@ -21,7 +21,7 @@

Order No. {{order.reference}}

-
Change Order Number
+
Change Order Number
From 5e11b8ebdfe495d3dd9d33d00c56295ff122d9c4 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Thu, 16 Dec 2021 21:46:33 +0800 Subject: [PATCH 036/223] job connect YD portal --- .../Services/FetchesDataFromYDPortal.php | 32 +++++++++++++ .../FetchOrderListsFromYdPortalProcessor.php | 40 ++++++++++++++++ .../Commands/CurlYdOrderListCommand.php | 48 +++++++++++++++++++ app/Job/CurlYdOrderListJob.php | 37 ++++++++++++++ 4 files changed, 157 insertions(+) create mode 100644 app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php create mode 100644 app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php create mode 100644 app/Console/Commands/CurlYdOrderListCommand.php create mode 100644 app/Job/CurlYdOrderListJob.php diff --git a/app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php b/app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php new file mode 100644 index 00000000..37b1c295 --- /dev/null +++ b/app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php @@ -0,0 +1,32 @@ +requestAsync($method, $url, ['query' => $body]); + + return $request->wait(); + } + + public function getResponseBody(ResponseInterface $request){ + $content = $request->getBody()->getContents(); + $content = str_replace("\r",'', $content); + return json_decode($content); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php new file mode 100644 index 00000000..c65b8ee9 --- /dev/null +++ b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php @@ -0,0 +1,40 @@ +fetchesDataFRomYDPortal = $fetchesDataFRomYDPortal; + } + + /** + * @param Carbon|null $start + * @param Carbon|null $end + * @return array + * @throws GuzzleException + */ + public function execute(?Carbon $start = null, ?Carbon $end = null) { + + + $orderRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/GetOrderList.ashx', 'GET', [ + 'apicode' => '393b1cb4b8b37d09', + 'begintime' => '1633968000', + 'endtime' => '1639308222', + ]); + + $order = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest); + + dd($order); + } +} diff --git a/app/Console/Commands/CurlYdOrderListCommand.php b/app/Console/Commands/CurlYdOrderListCommand.php new file mode 100644 index 00000000..b68f6cd1 --- /dev/null +++ b/app/Console/Commands/CurlYdOrderListCommand.php @@ -0,0 +1,48 @@ +make(FetchOrderListsFromYdPortalProcessor::class))->execute(); + } +} From 1d3ab4ab2ad65f1c684bff30dc174eb2a844ae65 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Thu, 16 Dec 2021 21:48:59 +0800 Subject: [PATCH 037/223] yd-job connect --- app/Classes/Jobs/CurlYdOrderListJob.php | 37 ++++++++++++++ .../Services/FetchesDataFromYDPortal.php | 32 +++++++++++++ .../FetchOrderListsFromYdPortalProcessor.php | 40 ++++++++++++++++ .../Commands/CurlYdOrderListCommand.php | 48 +++++++++++++++++++ 4 files changed, 157 insertions(+) create mode 100644 app/Classes/Jobs/CurlYdOrderListJob.php create mode 100644 app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php create mode 100644 app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php create mode 100644 app/Console/Commands/CurlYdOrderListCommand.php diff --git a/app/Classes/Jobs/CurlYdOrderListJob.php b/app/Classes/Jobs/CurlYdOrderListJob.php new file mode 100644 index 00000000..462f2b3f --- /dev/null +++ b/app/Classes/Jobs/CurlYdOrderListJob.php @@ -0,0 +1,37 @@ +make(FetchOrderListsFromYdPortalProcessor::class))->execute(); + } +} diff --git a/app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php b/app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php new file mode 100644 index 00000000..37b1c295 --- /dev/null +++ b/app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php @@ -0,0 +1,32 @@ +requestAsync($method, $url, ['query' => $body]); + + return $request->wait(); + } + + public function getResponseBody(ResponseInterface $request){ + $content = $request->getBody()->getContents(); + $content = str_replace("\r",'', $content); + return json_decode($content); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php new file mode 100644 index 00000000..c65b8ee9 --- /dev/null +++ b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php @@ -0,0 +1,40 @@ +fetchesDataFRomYDPortal = $fetchesDataFRomYDPortal; + } + + /** + * @param Carbon|null $start + * @param Carbon|null $end + * @return array + * @throws GuzzleException + */ + public function execute(?Carbon $start = null, ?Carbon $end = null) { + + + $orderRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/GetOrderList.ashx', 'GET', [ + 'apicode' => '393b1cb4b8b37d09', + 'begintime' => '1633968000', + 'endtime' => '1639308222', + ]); + + $order = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest); + + dd($order); + } +} diff --git a/app/Console/Commands/CurlYdOrderListCommand.php b/app/Console/Commands/CurlYdOrderListCommand.php new file mode 100644 index 00000000..46fa4206 --- /dev/null +++ b/app/Console/Commands/CurlYdOrderListCommand.php @@ -0,0 +1,48 @@ + Date: Fri, 17 Dec 2021 12:02:01 +0800 Subject: [PATCH 038/223] add packing list relationship in packing list model --- app/Models/PackingList.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/Models/PackingList.php b/app/Models/PackingList.php index 24565d9c..21b0d692 100644 --- a/app/Models/PackingList.php +++ b/app/Models/PackingList.php @@ -72,4 +72,12 @@ class PackingList extends AbstractModel implements Transportable, Steppable, Pac { return $this->BelongsToMany(PackingList::class, 'packing_list_owner', 'owner_packing_list_id', 'packing_list_id'); } + + /** + * @return MorphMany + */ + public function packingLists(): morphMany + { + return $this->morphMany(PackingList::class, 'owner'); + } } From ce1a2556b706bcd4c6e054644ac96f956019bf55 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Fri, 17 Dec 2021 12:12:34 +0800 Subject: [PATCH 039/223] debug address contact --- .../Modules/Addresses/ControllersLogic/UpdateAddressLogic.php | 2 +- .../vue/components/addresses/forms/AddressFormComponent.vue | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php index 345dd777..25fb6054 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php @@ -90,7 +90,7 @@ class UpdateAddressLogic extends AbstractControllerLogic $address->contacts()->delete(); $address->remarks()->delete(); - $contactObject = new ContactObject($request->input('pic'), $request->input('phone'), '', ''); + $contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', ''); if($contactObject->getPhone()){ $this->createContactProcessor->execute($contactObject, $address); diff --git a/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue b/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue index 98d405e9..5a9d22c6 100644 --- a/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue +++ b/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue @@ -106,7 +106,7 @@ post_code: '', remark: '', phone: '', - pic: '', + person_in_charge: '', } } @@ -119,7 +119,7 @@ this.parameters.district_id = this.data.district.id; this.parameters.post_code = this.data.post_code; this.parameters.phone = this.data.contact.phone; - this.parameters.pic = this.data.contact.reference; + this.parameters.person_in_charge = this.data.contact.reference; this.parameters.remark = this.data.remark.content; } }, From 7b1df816490299ad839276a48817cd45bbc6113e Mon Sep 17 00:00:00 2001 From: omair saleh Date: Fri, 17 Dec 2021 12:14:17 +0800 Subject: [PATCH 040/223] debug address contact --- .../Modules/Addresses/ControllersLogic/UpdateAddressLogic.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php index 25fb6054..f2b2c7c0 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php @@ -89,7 +89,7 @@ class UpdateAddressLogic extends AbstractControllerLogic $address = $this->updatesAddress->execute($address, $object); $address->contacts()->delete(); $address->remarks()->delete(); - +dd($request->all()); $contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', ''); if($contactObject->getPhone()){ From 71eb8db3f347f06405a9ed95ce3c632b0c8337cf Mon Sep 17 00:00:00 2001 From: omair saleh Date: Fri, 17 Dec 2021 12:15:23 +0800 Subject: [PATCH 041/223] debug address contact --- .../Modules/Addresses/ControllersLogic/UpdateAddressLogic.php | 2 +- .../vue/components/addresses/forms/AddressFormComponent.vue | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php index f2b2c7c0..25fb6054 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php @@ -89,7 +89,7 @@ class UpdateAddressLogic extends AbstractControllerLogic $address = $this->updatesAddress->execute($address, $object); $address->contacts()->delete(); $address->remarks()->delete(); -dd($request->all()); + $contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', ''); if($contactObject->getPhone()){ diff --git a/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue b/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue index 5a9d22c6..8debbb82 100644 --- a/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue +++ b/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue @@ -47,9 +47,9 @@
- + - +
From d29ead2144e92db0f564c70493cb8380abe3da30 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Fri, 17 Dec 2021 12:16:48 +0800 Subject: [PATCH 042/223] debug address contact --- .../Modules/Addresses/ControllersLogic/UpdateAddressLogic.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php index 25fb6054..baf5588c 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php @@ -89,7 +89,7 @@ class UpdateAddressLogic extends AbstractControllerLogic $address = $this->updatesAddress->execute($address, $object); $address->contacts()->delete(); $address->remarks()->delete(); - +dd($request->input('person_in_charge')); $contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', ''); if($contactObject->getPhone()){ From b057cd91c3f2a07e39b653efca4fa85e35eb2bd7 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Fri, 17 Dec 2021 12:17:53 +0800 Subject: [PATCH 043/223] debug address contact --- .../Modules/Addresses/ControllersLogic/UpdateAddressLogic.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php index baf5588c..f2b2c7c0 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php @@ -89,7 +89,7 @@ class UpdateAddressLogic extends AbstractControllerLogic $address = $this->updatesAddress->execute($address, $object); $address->contacts()->delete(); $address->remarks()->delete(); -dd($request->input('person_in_charge')); +dd($request->all()); $contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', ''); if($contactObject->getPhone()){ From c972bc87a35a1f3337b333d93a1126751638a2ad Mon Sep 17 00:00:00 2001 From: omair saleh Date: Fri, 17 Dec 2021 12:19:43 +0800 Subject: [PATCH 044/223] debug address contact --- .../mixins/addresses/validation/addressFormValidation.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/general/mixins/addresses/validation/addressFormValidation.js b/resources/assets/vue/general/mixins/addresses/validation/addressFormValidation.js index 6a59841c..98d57e59 100644 --- a/resources/assets/vue/general/mixins/addresses/validation/addressFormValidation.js +++ b/resources/assets/vue/general/mixins/addresses/validation/addressFormValidation.js @@ -10,7 +10,7 @@ export default { post_code: { required }, remark: {}, phone: {numeric}, - pic: {}, + person_in_charge: {}, } }, mixins: [addressFormHandler] From 3f9874a0bd4cc37fa5cb53367afc469802a4dae0 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Fri, 17 Dec 2021 12:21:44 +0800 Subject: [PATCH 045/223] debug address contact --- .../vue/components/addresses/forms/AddressFormComponent.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue b/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue index 8debbb82..0b6edc6b 100644 --- a/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue +++ b/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue @@ -118,9 +118,9 @@ this.parameters.street_two = this.data.street_two; this.parameters.district_id = this.data.district.id; this.parameters.post_code = this.data.post_code; - this.parameters.phone = this.data.contact.phone; - this.parameters.person_in_charge = this.data.contact.reference; - this.parameters.remark = this.data.remark.content; + this.parameters.phone = this.data.contact ? this.data.contact.phone : ''; + this.parameters.person_in_charge = this.data.contact ? this.data.contact.reference : ''; + this.parameters.remark = this.data.remark ? this.data.remark.content : ''; } }, watch: { From 4a7c4f51a57b433616fc98e8c6764269d4f06fc8 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Fri, 17 Dec 2021 12:23:09 +0800 Subject: [PATCH 046/223] debug address contact --- .../Modules/Addresses/ControllersLogic/UpdateAddressLogic.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php index f2b2c7c0..25fb6054 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php @@ -89,7 +89,7 @@ class UpdateAddressLogic extends AbstractControllerLogic $address = $this->updatesAddress->execute($address, $object); $address->contacts()->delete(); $address->remarks()->delete(); -dd($request->all()); + $contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', ''); if($contactObject->getPhone()){ From 565fd5eae343ca88f2d7ecad2be8016c0e3734a1 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Mon, 20 Dec 2021 14:47:52 +0800 Subject: [PATCH 047/223] fix create address logic --- .../Modules/Addresses/ControllersLogic/CreateAddressLogic.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php index 855d552b..8b7a6fb8 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php @@ -89,7 +89,7 @@ class CreateAddressLogic extends AbstractControllerLogic /** @var Address $address */ $address = $this->createsAddress->execute($this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]), $object); - $contactObject = new ContactObject($request->input('pic'), $request->input('phone'), '', ''); + $contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', ''); if($contactObject->getPhone()){ $this->createContactProcessor->execute($contactObject, $address); From 22a2d7d7a16bb2def8c1105c6ec027a73a2d564b Mon Sep 17 00:00:00 2001 From: omair saleh Date: Tue, 21 Dec 2021 19:10:03 +0800 Subject: [PATCH 048/223] sync vt do with shipping portal --- .env.example | 2 + app/Classes/Jobs/CurlYdOrderListJob.php | 1 + .../ControllersLogic/CreateAddressLogic.php | 10 +- .../ControllersLogic/UpdateAddressLogic.php | 10 +- .../ApproveChangeOrderAddressProcessor.php | 5 +- .../RequestChangeOrderAddressProcessor.php | 37 ++-- .../UpdateDoFromVTPortalProcessor.php | 179 ++++++------------ .../Services/FetchesDataFromYDPortal.php | 4 +- .../UpdatePackingListStatusLogic.php | 4 +- .../FetchOrderListsFromYdPortalProcessor.php | 44 ++++- routes/web.php | 5 + 11 files changed, 142 insertions(+), 159 deletions(-) diff --git a/.env.example b/.env.example index a75778c8..5ae78676 100644 --- a/.env.example +++ b/.env.example @@ -53,3 +53,5 @@ MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" UNITY_APP_URL="https://unity.izyim.com" EXCHANGE_URL=https://dev.exchange.cief-malaysia.com/ MIX_EXCHANGE_URL="${EXCHANGE_URL}" + +YD_API_CODE='' diff --git a/app/Classes/Jobs/CurlYdOrderListJob.php b/app/Classes/Jobs/CurlYdOrderListJob.php index 462f2b3f..ee5fba54 100644 --- a/app/Classes/Jobs/CurlYdOrderListJob.php +++ b/app/Classes/Jobs/CurlYdOrderListJob.php @@ -29,6 +29,7 @@ class CurlYdOrderListJob implements ShouldQueue * Execute the job. * * @return void + * @throws \Illuminate\Contracts\Container\BindingResolutionException */ public function handle() { diff --git a/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php index 8b7a6fb8..91f5c42e 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php @@ -89,15 +89,13 @@ class CreateAddressLogic extends AbstractControllerLogic /** @var Address $address */ $address = $this->createsAddress->execute($this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]), $object); - $contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', ''); - - if($contactObject->getPhone()){ + if($request->input('phone')){ + $contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', ''); $this->createContactProcessor->execute($contactObject, $address); } - $remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id); - - if($remarkObject->getContent()){ + if($request->input('remark')){ + $remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id); $this->createRemarkProcessor->execute($address, $remarkObject); } diff --git a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php index 25fb6054..95b8bf64 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php @@ -90,15 +90,13 @@ class UpdateAddressLogic extends AbstractControllerLogic $address->contacts()->delete(); $address->remarks()->delete(); - $contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', ''); - - if($contactObject->getPhone()){ + if($request->input('phone')){ + $contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', ''); $this->createContactProcessor->execute($contactObject, $address); } - $remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id); - - if($remarkObject->getContent()){ + if($request->input('remark')){ + $remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id); $this->createRemarkProcessor->execute($address, $remarkObject); } diff --git a/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php b/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php index 40112301..c7d17487 100644 --- a/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php +++ b/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php @@ -40,8 +40,10 @@ class ApproveChangeOrderAddressProcessor * @param Request $request * @return mixed * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\InternalServerErrorException * @throws \App\Classes\Exceptions\MalformedRequestException * @throws \App\Classes\Exceptions\RequestValidationException + * @throws \GuzzleHttp\Exception\GuzzleException */ public function execute(Request $request) { @@ -53,12 +55,11 @@ class ApproveChangeOrderAddressProcessor if($status === ApprovalStatus::APPROVED){ $address->owner->addresses()->update(['status' => ApprovalStatus::EXPIRED]); + $this->updateDoFromVTPortalProcessor->execute($address); } $address = $this->updatesOrdersAddress->execute($address, $status); - $vt_do_update = $this->updateDoFromVTPortalProcessor->execute($address); - return $address; } } diff --git a/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php b/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php index 994803e3..81b31026 100644 --- a/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php +++ b/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php @@ -59,6 +59,13 @@ class RequestChangeOrderAddressProcessor } + /** + * @param Request $request + * @return mixed + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ public function execute(Request $request) { $this->canChangeOrderAddress->passes(); @@ -70,31 +77,33 @@ class RequestChangeOrderAddressProcessor $address = $this->fetchesAddress->execute(['id' => $request->get('address_id')]); $addressObject = new AddressObject($address->street_one, $address->street_two, $address->country_id, $address->state_id, $address->district_id, $address->postcode, $address->reference, ApprovalStatus::PENDING_VERIFICATION); - $order_address = $this->createsAddress->execute($order, $addressObject); + $order_address = $this->createsAddress->execute($order, $addressObject); $contact = $address->contacts()->first(); - $contactObject = new ContactObject( - $contact->reference, - $contact->phone, - '', - '' - ); + if($contact){ + $contactObject = new ContactObject( + $contact->reference, + $contact->phone, + '', + '' + ); + + $this->createContactProcessor->execute($contactObject, $order_address); - if($contactObject->getPhone()){ - $order_remark = $this->createContactProcessor->execute($contactObject, $order_address); } $remark = $address->remarks()->first(); - $remarkObject = new RemarkObject( - $remark->content, - Auth()->user()->id - ); + if($remark){ + $remarkObject = new RemarkObject( + $remark->content, + Auth()->user()->id + ); - if($remarkObject->getContent()){ $this->createRemarkProcessor->execute($order_address, $remarkObject); } + return $order; } } diff --git a/app/Classes/Modules/Orders/Processors/UpdateDoFromVTPortalProcessor.php b/app/Classes/Modules/Orders/Processors/UpdateDoFromVTPortalProcessor.php index 8b3faeb2..55eae21a 100644 --- a/app/Classes/Modules/Orders/Processors/UpdateDoFromVTPortalProcessor.php +++ b/app/Classes/Modules/Orders/Processors/UpdateDoFromVTPortalProcessor.php @@ -2,6 +2,7 @@ namespace App\Classes\Modules\Orders\Processors; +use App\Classes\Exceptions\InternalServerErrorException; use App\Classes\Modules\Orders\Services\FetchesDataFromVTPortal; use App\Classes\Modules\Addresses\Services\FetchesAddress; @@ -33,9 +34,7 @@ class UpdateDoFromVTPortalProcessor /** * FetchDeliveryListFromVTPortalProcessor constructor. * @param FetchesDataFromVTPortal $fetchesDataFRomVTPortal - * @param CreatesTransport $createsTransport - * @param CreatesSchedule $createsSchedule - * @param UpdatesContractObligation $updatesContractObligations + * @param FetchesAddress $fetchesAddress */ public function __construct(FetchesDataFromVTPortal $fetchesDataFRomVTPortal, FetchesAddress $fetchesAddress) { @@ -44,7 +43,10 @@ class UpdateDoFromVTPortalProcessor } /** + * @param $address * @return array + * @throws GuzzleException + * @throws InternalServerErrorException */ public function execute($address) { @@ -56,147 +58,88 @@ class UpdateDoFromVTPortalProcessor $contact = $address->contacts()->first(); $remark = $address->remarks()->first(); - $status = 'Release'; + $remark = $remark ? $remark->content : 'URGENT!!! PLEASE CALL BEFORE ONE DAY DELIVERY.'; + $phone = $contact ? $contact->phone : null; + $reference = $contact ? $contact->reference : null; - if ($packing_list->status == ApprovalStatus::PENDING_VERIFICATION) { + $status = 'On Hold'; + + if (in_array($packing_list->status, [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])) { $status = 'Release'; } - else if($packing_list->status == ApprovalStatus::SUSPENDED) { - $status = 'On Hold'; - } - - $vt_do = $this->fetchesDataFRomVTPortal->clientRequest( - 'http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', - 'POST', - json_decode('{ - "controller": "Do", - "view": "grid1", - "request": { - "PageIndex": -2, - "PageSize": 10, - "PageOffset": 0, - "SortExpression": "", - "GroupExpression": "", - "Filter": [ - "FullMarking:$contains$%js%\"' . $order->reference . '\"\u0000" - ], - "ContextKey": "view2", - "FilterIsExternal": true, - "LookupContextFieldName": null, - "LookupContextController": null, - "LookupContextView": null, - "LookupContext": null, - "Inserting": false, - "LastCommandName": null, - - "DoesNotRequireData": false, - "LastView": "grid1", - "Tag": null, - "RequiresFirstLetters": false, - "ViewType": "Grid", - "SupportsCaching": true, - "SystemFilter": null, - "RequiresRowCount": true, - "QuickFindHint": null, - "RequiresPivot": false, - "PivotDefinitions": null, - "RequiresMetaData": true - } - }' - ), ''); + $vt_do = $this->fetchesDataFRomVTPortal->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"Do","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"Filter": ["FullMarking:$contains$%js%\"' . $order->reference . '\"\u0000"]}}'), ''); $vt_do = $this->fetchesDataFRomVTPortal->getResponseBody($vt_do); if ($vt_do) { foreach ($vt_do->Rows as $key => $row) { - $vt_do_update = $this->fetchesDataFRomVTPortal->clientRequest( 'http://portal.vtnation.com.my/Services/DataControllerService.asmx/Execute', 'POST', json_decode('{ - "controller": "Do", - "view": "editForm1", - "args": { + "controller": "Do", + "view": "editForm1", + "args": { "CommandName": "Update", "CommandArgument": "Save", "Path": "ag2/a4", "LastCommandName": "Edit", "Values": [ - { - "Name": "ShippingAddress", - "NewValue": "' . $address->street_one . ' ' . $address->street_two . '", - "Modified": true, - "ReadOnly": false, - "Error": null - }, - { - "Name": "Attn", - "NewValue": "' . $contact->reference . '", - "Modified": true, - "ReadOnly": false, - "Error": null - }, - { - "Name": "Tel", - "NewValue": "' . $contact->phone . '", - "Modified": true, - "ReadOnly": false, - "Error": null - }, - { - "Name": "Status", - "NewValue": "' . $status . '", - "Modified": true, - "ReadOnly": false, - "Error": null - }, - { - "Name": "Doremarks", - "NewValue": "' . $remark->content . '", - "Modified": true, - "ReadOnly": false, - "Error": null - }, - { - "Name": "ModifiedBy", - "OldValue": "CIEF", - "NewValue": "CIEF", - "Modified": false, - "ReadOnly": false, - "Error": null - }, - { - "Name": "DoID", - "OldValue": 1471, - "NewValue": ' . $row[0] . ', - "Modified": false, - "ReadOnly": true, - "Error": null - } + { + "Name": "ShippingAddress", + "NewValue": "' . $address->street_one . ' ' . $address->street_two . ' '. $address->district->name.' '. $address->post_code.' '.$address->state->name.' '.$address->country->name.'", + "Modified": true, + "ReadOnly": false, + "Error": null + }, + { + "Name": "Attn", + "NewValue": "'.$reference.'", + "Modified": true, + "ReadOnly": false, + "Error": null + }, + { + "Name": "Tel", + "NewValue": "'.$phone.'", + "Modified": true, + "ReadOnly": false, + "Error": null + }, + { + "Name": "Status", + "NewValue": "' . $status . '", + "Modified": true, + "ReadOnly": false, + "Error": null + }, + { + "Name": "Doremarks", + "NewValue": "'. $remark .'", + "Modified": true, + "ReadOnly": false, + "Error": null + }, + { + "Name": "DoID", + "OldValue": '.$row[0].', + "NewValue": '.$row[0].', + "Modified": false, + "ReadOnly": true, + "Error": null + } ], - "ContextKey": "do", - "Controller": "Do", - "View": "editForm1", - "LastView": "grid1", - "Tag": null, - "Filter": [ - "DoID:=%js%' . $row[0] . '", - "ContainerID:=%js%' . $row[1] . '" - ], - "SortExpression": "", - "GroupExpression": "", - "SelectedValues": [] - } + "Controller": "Do" + } }'), ''); } } } } catch (\Exception $exception){ - Log::error($exception); + throw new InternalServerErrorException('failed to approve address due to an error related to VT portal'); } - return []; } } diff --git a/app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php b/app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php index 37b1c295..387a2b24 100644 --- a/app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php +++ b/app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php @@ -11,14 +11,14 @@ class FetchesDataFromYDPortal * @param string $url * @param string $method * @param $body - * @param bool $requiresAuthentication * @return \Psr\Http\Message\ResponseInterface - * @throws \GuzzleHttp\Exception\GuzzleException */ public function clientRequest(string $url, string $method, $body){ $client = new \GuzzleHttp\Client(); + $body['apicode'] = env('YD_API_CODE'); + $request = $client->requestAsync($method, $url, ['query' => $body]); return $request->wait(); diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php index c4266dc1..9bf1735a 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php @@ -53,7 +53,9 @@ class UpdatePackingListStatusLogic extends AbstractControllerLogic /** * @param Request $request * @return JsonResponse + * @throws \App\Classes\Exceptions\InternalServerErrorException * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \GuzzleHttp\Exception\GuzzleException */ public function logic(Request $request) : JsonResponse { @@ -62,7 +64,7 @@ class UpdatePackingListStatusLogic extends AbstractControllerLogic $packing_list = $this->updatesPackingListStatus->execute($packingList, $request->route('status')); $address = $packing_list->owner()->first()->addresses()->first(); - $vt_do_update = $this->updateDoFromVTPortalProcessor->execute($address); + $this->updateDoFromVTPortalProcessor->execute($address); return $this->resourceResponse(new PackingListResource($packing_list)); } diff --git a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php index c65b8ee9..4718a874 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php @@ -4,6 +4,8 @@ namespace App\Classes\Modules\PackingLists\Processors; use App\Classes\Modules\Orders\Services\FetchesDataFromYDPortal; +use App\Models\Order; +use Carbon\Carbon; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; @@ -21,20 +23,42 @@ class FetchOrderListsFromYdPortalProcessor /** * @param Carbon|null $start * @param Carbon|null $end - * @return array - * @throws GuzzleException + * @return void */ - public function execute(?Carbon $start = null, ?Carbon $end = null) { + public function execute(?Carbon $start = null, ?Carbon $end = null) + { + $start = $start ? $start : Carbon::now()->subMonths(2); + $startLimit = Carbon::parse('01-12-2021'); - $orderRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/GetOrderList.ashx', 'GET', [ - 'apicode' => '393b1cb4b8b37d09', - 'begintime' => '1633968000', - 'endtime' => '1639308222', - ]); + if($start->isBefore($startLimit)){ + $start = $startLimit; + } - $order = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest); + $end = $end ? $end : Carbon::now(); + + $orderRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/GetOrderList.ashx', 'GET', [ + 'begintime' => $start->timestamp, + 'endtime' => $end->timestamp, + ]); + + $rows = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest); + + foreach($rows->data as $row){ + if (strpos($row->customerno, '/') !== false) { $customerno = explode('/', explode('CIEF/', $row->customerno)[1]); } + if(strpos($row->customerno, '-') !== false){ $customerno = explode('-', explode('CIEF-', $row->customerno)[1]); } + + $marking = $customerno[0]; + $orderNumber = $customerno[1]; + + $order = Order::where('reference', $orderNumber)->first(); + + if(!$order){ + continue; + } + + dump($order); + } - dd($order); } } diff --git a/routes/web.php b/routes/web.php index 73f7841b..8234457f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -5,6 +5,7 @@ use App\Classes\Jobs\FetchDeliveryListFromVTPortalJob; use App\Classes\Jobs\FetchLoadedContainersFromVTPortalJob; use App\Classes\Jobs\FetchPackingListFromVTPortalJob; use App\Classes\Jobs\FetchWarehouseReceiveListFromVTPortalJob; +use App\Classes\Modules\PackingLists\Processors\FetchOrderListsFromYdPortalProcessor; use App\Models\CompanyConnection; use Illuminate\Support\Facades\Crypt; use App\Models\Container; @@ -177,3 +178,7 @@ Route::get('/debug', function (){ dd($issues); }); + +Route::get('/yd', function (){ + (App()->make(FetchOrderListsFromYdPortalProcessor::class))->execute();; +}); From 47eb9262ad2923b7a6920a22e5b2a626307a10f4 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Tue, 28 Dec 2021 01:19:26 +0800 Subject: [PATCH 049/223] add packing list replica --- ...inersStatusUpdateFromVTPortalProcessor.php | 3 ++ ...hLoadedContainersFromVTPortalProcessor.php | 10 ++--- .../FetchPackingListFromVTPortalProcessor.php | 9 ++++ ...ehouseReceiveListFromVTPortalProcessor.php | 15 +++++++ .../Constants/PackingListType.php | 5 +++ app/Http/Resources/OrderResource.php | 4 +- app/Http/Resources/PackageResource.php | 7 +-- app/Http/Resources/PackingListResource.php | 11 ++++- app/Models/Order.php | 13 +++--- app/Models/Package.php | 4 +- app/Models/PackingList.php | 43 +++++++++++++++++++ .../sections/OrderProfileSectionComponent.vue | 28 ++++++------ resources/views/pages/orders/index.blade.php | 2 +- 13 files changed, 119 insertions(+), 35 deletions(-) diff --git a/app/Classes/Modules/PackingLists/Processors/FetchContainersStatusUpdateFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchContainersStatusUpdateFromVTPortalProcessor.php index 955d68d0..d1e69706 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchContainersStatusUpdateFromVTPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchContainersStatusUpdateFromVTPortalProcessor.php @@ -80,6 +80,9 @@ class FetchContainersStatusUpdateFromVTPortalProcessor $containerDetails = $this->fetchesDataFRomVTPortal->getResponseBody($containerDetailsRequest); + if(!$containerDetails->Rows){ + continue; + } $containerDetails = $containerDetails->Rows[0]; if(!$eta = $containerDetails[3]){ diff --git a/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php index 32c17cd1..330c3200 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php @@ -195,7 +195,7 @@ class FetchLoadedContainersFromVTPortalProcessor $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->update(['entity_hash_id' => $supervisorContractEntity->hash_id, 'entity_signature' => $supervisorContractEntity->entity_signature_hash_id]); $importerContractEntity = $this->unityCreateContractEntity->execute($contractReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->appointee->unity_hash_id); - $order->orderRoles()->where('role_id', '=', RoleT::IMPORTER)->first()->update(['entity_hash_id' => $importerContractEntity->hash_id, 'entity_signature' => $importerContractEntity->entity_signature_hash_id]); + $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->update(['entity_hash_id' => $importerContractEntity->hash_id, 'entity_signature' => $importerContractEntity->entity_signature_hash_id]); $this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations); @@ -208,15 +208,15 @@ class FetchLoadedContainersFromVTPortalProcessor $packingList = $this->createPackingListProcessor->execute($packingListObject, $order); $container->packingLists()->attach($packingList); - //Duplicate a copy for internal reference - $packingListObject = new PackingListObject($packingListReference, RoleTypes::SUPER_ADMIN, PackingListType::SHIPPING_PACKING_LIST, (int) filter_var($marking, FILTER_SANITIZE_NUMBER_INT) <= 1000 ? ApprovalStatus::PENDING_VERIFICATION : ApprovalStatus::SUSPENDED, $contractReference); - $packingList = $this->createPackingListProcessor->execute($packingListObject, $packingList); - foreach($contractObligations as $obligation) { $stepObject = new StepsObject($order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, $obligation->reference, $obligation->sequence, $obligation->hash_id); $this->createsStep->execute($packingList, $stepObject); } + //Duplicate a copy for internal reference + $packingListObject = new PackingListObject($packingListReference.'_01', $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, PackingListType::SHIPPING_PACKING_LIST_REPLICA, ApprovalStatus::PENDING_SUBMISSION); + $this->createPackingListProcessor->execute($packingListObject, $packingList); + } diff --git a/app/Classes/Modules/PackingLists/Processors/FetchPackingListFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchPackingListFromVTPortalProcessor.php index 00c3e112..9a47ed50 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchPackingListFromVTPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchPackingListFromVTPortalProcessor.php @@ -63,6 +63,9 @@ class FetchPackingListFromVTPortalProcessor $packingList->packages()->delete(); + $replica = $packingList->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST_REPLICA)->first(); + if($replica) $replica->packages()->delete(); + foreach($shippingPackingLists->Rows as $shippingPackingList){ if(!$shippingPackingList[22]) { continue; @@ -70,6 +73,12 @@ class FetchPackingListFromVTPortalProcessor $packageObject = new PackageObject(PackageType::CARTON, $shippingPackingList[19], $shippingPackingList[31], $shippingPackingList[30], $shippingPackingList[29], 0, $shippingPackingList[22], ApprovalStatus::APPROVED); $this->createPackageProcessor->execute($packageObject, $packingList); + + if($replica) { + $modificationValue = 1; + $packageObject = new PackageObject(PackageType::CARTON, $shippingPackingList[19], $shippingPackingList[31] + $modificationValue, $shippingPackingList[30] + $modificationValue, $shippingPackingList[29] + $modificationValue, 0, $shippingPackingList[22], ApprovalStatus::APPROVED); + $this->createPackageProcessor->execute($packageObject, $replica); + } } DB::commit(); diff --git a/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php index d1eb8516..397dacce 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php @@ -207,6 +207,9 @@ class FetchWarehouseReceiveListFromVTPortalProcessor if(!$packingList) { $packingList = $this->createPackingListProcessor->execute($packingListObject, $order); + $packingListObject = new PackingListObject($packingListReference.'_01', $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, PackingListType::WAREHOUSE_RECEIVE_LIST_REPLICA, ApprovalStatus::APPROVED); + $this->createPackingListProcessor->execute($packingListObject, $packingList); + $transportObject = new TransportObject(TransportType::LAND, null, $tracking, Carbon::parse($receiveDate), Carbon::parse($receiveDate), ApprovalStatus::APPROVED); @@ -220,15 +223,27 @@ class FetchWarehouseReceiveListFromVTPortalProcessor $this->createsSchedule->execute($transport, new ScheduleObject(Carbon::parse($receiveDate), Carbon::parse($receiveDate), ApprovalStatus::APPROVED)); + /** @var PackingList $replica */ + $replica = $packingList->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST_REPLICA)->first(); $packingList->packages()->delete(); + $packageObject = new PackageObject(PackageType::CARTON, $description, $measurement, $measurement, $measurement, 0, $quantity, ApprovalStatus::APPROVED); $this->createPackageProcessor->execute($packageObject, $packingList); + if($replica){ + $replica->packages()->delete(); + $modificationValue = 1; + $packageObject = new PackageObject(PackageType::CARTON, $description, $measurement + $modificationValue, $measurement + $modificationValue, $measurement + $modificationValue, 0, $quantity, ApprovalStatus::APPROVED); + $this->createPackageProcessor->execute($packageObject, $replica); + + } + } } catch (\Exception $exception){ + dd($exception); Log::error($exception->getMessage()); } diff --git a/app/Classes/ValueObjects/Constants/PackingListType.php b/app/Classes/ValueObjects/Constants/PackingListType.php index 56f29244..bd83c6ba 100644 --- a/app/Classes/ValueObjects/Constants/PackingListType.php +++ b/app/Classes/ValueObjects/Constants/PackingListType.php @@ -14,5 +14,10 @@ final class PackingListType { public const DELIVERY_PACKING_LIST = 4; + public const WAREHOUSE_RECEIVE_LIST_REPLICA = 5; + + public const SHIPPING_PACKING_LIST_REPLICA = 6; + + } diff --git a/app/Http/Resources/OrderResource.php b/app/Http/Resources/OrderResource.php index 0c30bb62..b5bdf0ab 100644 --- a/app/Http/Resources/OrderResource.php +++ b/app/Http/Resources/OrderResource.php @@ -31,7 +31,7 @@ class OrderResource extends JsonResource 'address_change_request' => new AddressResource($this->addressesPendingVerification()->first()), 'parcels' => $this->whenLoaded('packingLists', function() { return [ - 'origin_warehouse_packages' => PackageResource::collection( + 'origin_warehouse_packages' => PackingListResource::collection( $this->originWarehousePackages()->get() ), 'in_transit_packages' => PackageResource::collection( @@ -43,7 +43,7 @@ class OrderResource extends JsonResource 'delivered_packages' => PackageResource::collection( $this->deliveredPackages()->get() ), - 'received_packages' => PackageResource::collection($this->parcels()->warehouseReceiveList()->get()), + 'received_packages' => PackingListResource::collection($this->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->get()), ]; }), 'remarks' => RemarkResource::collection($this->remarks), diff --git a/app/Http/Resources/PackageResource.php b/app/Http/Resources/PackageResource.php index 6e45f91f..2cd76a1b 100644 --- a/app/Http/Resources/PackageResource.php +++ b/app/Http/Resources/PackageResource.php @@ -2,6 +2,7 @@ namespace App\Http\Resources; +use App\Models\Order; use Illuminate\Http\Resources\Json\JsonResource; class PackageResource extends JsonResource @@ -26,9 +27,9 @@ class PackageResource extends JsonResource 'quantity' => $this->quantity, 'cbm' => (($this->width / 100) * ($this->height / 100) * ($this->length / 100)) * $this->quantity, 'status' => $this->status, - 'order' => new OrderResource($this->packingList->owner), - 'container' => new ContainerResource($this->container), - 'transport' => new TransportResource($this->transport) + 'order' => New OrderResource($this->packingList->owner instanceof Order ? $this->packingList->owner : $this->packingList->owner->owner), + 'container' => new ContainerResource($this->packingList->owner instanceof Order ? $this->container : $this->packingList->owner->containers()->first()), + 'transport' => new TransportResource($this->packingList->owner instanceof Order ? $this->transport : $this->packingList->owner->transports()->first()) ]; } } diff --git a/app/Http/Resources/PackingListResource.php b/app/Http/Resources/PackingListResource.php index 4024833d..67667ddf 100644 --- a/app/Http/Resources/PackingListResource.php +++ b/app/Http/Resources/PackingListResource.php @@ -2,6 +2,8 @@ namespace App\Http\Resources; +use App\Classes\ValueObjects\Constants\RoleTypes; +use App\Models\Order; use Illuminate\Http\Resources\Json\JsonResource; class PackingListResource extends JsonResource @@ -14,14 +16,19 @@ class PackingListResource extends JsonResource */ public function toArray($request) { + $replica = $this->packingLists()->first(); return [ 'id' => $this->id, 'claimant_id' => $this->claimant_id, 'reference' => $this->reference, 'status' => $this->status, 'transport' => new TransportResource($this->transports()->first()), - 'packages' => PackageResource::collection($this->packages), - 'order' => New OrderResource($this->owner) + 'type' => $this->type, + 'packages' => PackageResource::collection(Auth()->user()->role === RoleTypes::SUPER_ADMIN ? $this->packages : $replica ? $replica->packages : $this->packages), + 'packing_list' => new PackingListResource($replica), + $this->mergeWhen($this->owner instanceof Order, [ + 'order' => New OrderResource($this->owner) + ]) ]; } } diff --git a/app/Models/Order.php b/app/Models/Order.php index ffa0550a..763e064e 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -6,6 +6,7 @@ use App\Classes\General\Interfaces\Addressable; use App\Classes\General\Interfaces\Contactable; use App\Classes\General\Interfaces\Packable; use App\Classes\General\Interfaces\Remarkable; +use App\Classes\ValueObjects\Constants\PackingListType; use App\Classes\ValueObjects\Constants\RoleTypes; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Scopes\CustomerOrdersScope; @@ -100,7 +101,7 @@ class Order extends AbstractModel implements Addressable, Packable, Remarkable public function originWarehousePackages() { - return $this->parcels()->shippingList() + return $this->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST) ->whereDoesntHave('shippingSchedules', function($schedule) { return $schedule->dispatched() @@ -111,14 +112,14 @@ class Order extends AbstractModel implements Addressable, Packable, Remarkable public function inTransitPackages() { - return $this->parcels()->shippingList()->Shipping() + return $this->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST)->Shipping() ->whereHas('shippingSchedules', function($schedule) { return $schedule->dispatched() ->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); } ) - ->whereDoesntHave('container', function($container) { + ->whereDoesntHave('containers', function($container) { return $container->where('containers.status', ApprovalStatus::COMPLETED); } ); @@ -126,8 +127,8 @@ class Order extends AbstractModel implements Addressable, Packable, Remarkable public function destinationWarehousePackages() { - return $this->parcels()->shippingList() - ->whereHas('container', + return $this->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST) + ->whereHas('containers', function($container) { return $container->where('containers.status', ApprovalStatus::COMPLETED); } @@ -141,7 +142,7 @@ class Order extends AbstractModel implements Addressable, Packable, Remarkable public function deliveredPackages() { - return $this->parcels()->shippingList() + return $this->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST) ->whereHas('deliverySchedules', function($schedule) { return $schedule->dispatched()->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); diff --git a/app/Models/Package.php b/app/Models/Package.php index 89ef8328..cb2bf35f 100644 --- a/app/Models/Package.php +++ b/app/Models/Package.php @@ -142,9 +142,9 @@ class Package extends AbstractModel protected static function booted() { - if (auth()->user()->type === RoleTypes::USER) { +// if (auth()->user()->type === RoleTypes::USER) { // static::addGlobalScope(new CustomerPackagesScope()); - } +// } } } diff --git a/app/Models/PackingList.php b/app/Models/PackingList.php index 21b0d692..d2594210 100644 --- a/app/Models/PackingList.php +++ b/app/Models/PackingList.php @@ -5,15 +5,21 @@ namespace App\Models; use App\Classes\General\Interfaces\Steppable; use App\Classes\General\Interfaces\Transportable; use App\Classes\General\Interfaces\Packable; +use App\Classes\ValueObjects\Constants\ApprovalStatus; +use Carbon\Carbon; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; +use Illuminate\Database\Eloquent\Relations\HasManyThrough; use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\Relations\MorphTo; use Illuminate\Database\Eloquent\SoftDeletes; +use Staudenmeir\EloquentHasManyDeep\HasManyDeep; +use Staudenmeir\EloquentHasManyDeep\HasRelationships; class PackingList extends AbstractModel implements Transportable, Steppable, Packable { + use HasRelationships; use SoftDeletes; protected $table = 'packing_lists'; @@ -80,4 +86,41 @@ class PackingList extends AbstractModel implements Transportable, Steppable, Pac { return $this->morphMany(PackingList::class, 'owner'); } + + /** + * @return hasManyDeep + */ + public function shippingTransports(): hasManyDeep + { + return $this->hasManyDeep(Transport::class, [ContainerPackingList::class, Container::class], ['packing_list_id', 'id', ['owner_type', 'owner_id']], ['id', 'container_id', null]); + } + + /** + * @return hasManyDeep + */ + public function shippingSchedules(): hasManyDeep + { + return $this->hasManyDeep(Schedule::class, [ContainerPackingList::class, Container::class, Transport::class], ['packing_list_id', 'id', ['owner_type', 'owner_id'], ['owner_type', 'owner_id']], ['id', 'container_id', null, null]); + } + + + /** + * @return hasManyDeep + */ + public function deliverySchedules(): hasManyDeep + { + return $this->hasManyDeep(Schedule::class, [Transport::class], [['owner_type', 'owner_id'], ['owner_type', 'owner_id']], [null, null]); + } + + /** + * @param $query + * @return mixed + */ + public function scopeShipping($query){ + return $query->whereHas('shippingSchedules', function($schedule){ + return $schedule->where('etd', '<', Carbon::now())->where('schedules.status', ApprovalStatus::APPROVED); + })->whereDoesntHave('shippingTransports', function($transport){ + return $transport->where('transport_arrangements.status', ApprovalStatus::COMPLETED); + }); + } } diff --git a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue index 1332bfe6..33a69cb6 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue @@ -293,7 +293,7 @@
- +
@@ -310,10 +310,10 @@
-
+
-
-
+
+
@@ -343,10 +343,10 @@
-
+
-
-
+
+
@@ -376,10 +376,10 @@
-
+
-
-
+
+
@@ -409,16 +409,16 @@
-
+
-
-
+
+
-
+
diff --git a/resources/views/pages/orders/index.blade.php b/resources/views/pages/orders/index.blade.php index 056d5fbd..d4633a81 100644 --- a/resources/views/pages/orders/index.blade.php +++ b/resources/views/pages/orders/index.blade.php @@ -1,6 +1,6 @@ @extends('layouts.base_portal') @section('inner_content') -
+
Refresh Orders
From 9774f4b823d0b52d57382b346940f616de9a628b Mon Sep 17 00:00:00 2001 From: omair saleh Date: Tue, 28 Dec 2021 15:42:42 +0800 Subject: [PATCH 050/223] add packing list replica --- app/Http/Resources/PackingListResource.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/Http/Resources/PackingListResource.php b/app/Http/Resources/PackingListResource.php index 67667ddf..b1355331 100644 --- a/app/Http/Resources/PackingListResource.php +++ b/app/Http/Resources/PackingListResource.php @@ -17,6 +17,13 @@ class PackingListResource extends JsonResource public function toArray($request) { $replica = $this->packingLists()->first(); + + $packages = $replica ? $replica->packages : $this->packages; + + if(Auth()->user()->type === RoleTypes::SHADOW_ADMIN) { + $packages = $this->packages; + } + return [ 'id' => $this->id, 'claimant_id' => $this->claimant_id, @@ -24,7 +31,7 @@ class PackingListResource extends JsonResource 'status' => $this->status, 'transport' => new TransportResource($this->transports()->first()), 'type' => $this->type, - 'packages' => PackageResource::collection(Auth()->user()->role === RoleTypes::SUPER_ADMIN ? $this->packages : $replica ? $replica->packages : $this->packages), + 'packages' => PackageResource::collection($packages), 'packing_list' => new PackingListResource($replica), $this->mergeWhen($this->owner instanceof Order, [ 'order' => New OrderResource($this->owner) From 64a4e4b45ff76a1fda69706220535b024a8585af Mon Sep 17 00:00:00 2001 From: glovetleong Date: Tue, 28 Dec 2021 17:35:16 +0800 Subject: [PATCH 051/223] customer order latest date export --- .../ExportsCustomersOrderLatestDate.php | 60 +++++++++++++++++++ .../ExportCustomersToExcelController.php | 19 ++++++ routes/web.php | 2 + 3 files changed, 81 insertions(+) create mode 100644 app/Classes/Modules/Exports/Services/ExportsCustomersOrderLatestDate.php create mode 100644 app/Http/Controllers/Exports/ExportCustomersToExcelController.php diff --git a/app/Classes/Modules/Exports/Services/ExportsCustomersOrderLatestDate.php b/app/Classes/Modules/Exports/Services/ExportsCustomersOrderLatestDate.php new file mode 100644 index 00000000..3d57991e --- /dev/null +++ b/app/Classes/Modules/Exports/Services/ExportsCustomersOrderLatestDate.php @@ -0,0 +1,60 @@ +inviters()->withPivot('invitee_reference')->first(); + $marking = $connection ? $connection->pivot->invitee_reference:''; + + $employees = $company->employees()->first(); + + $order = $company->orders() + ->join('packing_lists', 'packing_lists.owner_id', '=', 'orders.id') + ->join('transport_arrangements', 'transport_arrangements.owner_id', '=', 'packing_lists.id') + ->orderBy('drop_date', 'desc') + ->first(); + + return [ + $marking, + $employees ? $employees->name : '', + $employees ? $employees->email : '', + $order ? $order->drop_date : '' + ]; + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Exports/ExportCustomersToExcelController.php b/app/Http/Controllers/Exports/ExportCustomersToExcelController.php new file mode 100644 index 00000000..80701563 --- /dev/null +++ b/app/Http/Controllers/Exports/ExportCustomersToExcelController.php @@ -0,0 +1,19 @@ +headers->set('Authorization', 'Bearer '.$token); + return $exportsCustomers->download('customer-latest-order-date.csv', Excel::CSV, ['Content-Type' => 'text/csv']); + } +} \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 8234457f..0eca4f51 100644 --- a/routes/web.php +++ b/routes/web.php @@ -182,3 +182,5 @@ Route::get('/debug', function (){ Route::get('/yd', function (){ (App()->make(FetchOrderListsFromYdPortalProcessor::class))->execute();; }); + +Route::get('/export/customer-latest-order-date/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@export'); \ No newline at end of file From 0671e24916a7b09a87eb1c34d6852a56babe7992 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Tue, 28 Dec 2021 21:45:16 +0800 Subject: [PATCH 052/223] add packing list replica --- .../Processors/CreateOrderProcessor.php | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/app/Classes/Modules/Orders/Processors/CreateOrderProcessor.php b/app/Classes/Modules/Orders/Processors/CreateOrderProcessor.php index 9d3561ce..5a7c22eb 100644 --- a/app/Classes/Modules/Orders/Processors/CreateOrderProcessor.php +++ b/app/Classes/Modules/Orders/Processors/CreateOrderProcessor.php @@ -86,31 +86,38 @@ class CreateOrderProcessor $addressObject = new AddressObject($address->street_one, $address->street_two, $address->country_id, $address->state_id, $address->district_id, $address->postcode,$address->reference); + /** @var Address $order_address */ $order_address = $this->createAddress->execute($order, $addressObject); $contact = $address->contacts()->first(); - $contactObject = new ContactObject( - $contact->reference, - $contact->phone, - '', - '' - ); - if($contactObject->getPhone()){ - $order_remark = $this->createContactProcessor->execute($contactObject, $order_address); + if ($contact) { + $contactObject = new ContactObject( + $contact->reference, + $contact->phone, + '', + '' + ); + + if($contactObject->getPhone()){ + $order_remark = $this->createContactProcessor->execute($contactObject, $order_address); + } } $remark = $address->remarks()->first(); - $remarkObject = new RemarkObject( - $remark->content, - Auth()->user()->id - ); + if ($remark){ + $remarkObject = new RemarkObject( + $remark->content, + Auth()->user()->id + ); - if($remarkObject->getContent()){ - $this->createRemarkProcessor->execute($order_address, $remarkObject); + if($remarkObject->getContent()){ + $this->createRemarkProcessor->execute($order_address, $remarkObject); + } } + $this->createOrderRolesProcessor->execute($originWarehouse, $order); return $order; From 78fcb6c111c340ec1af159c366a583a56156bd88 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Tue, 28 Dec 2021 21:50:30 +0800 Subject: [PATCH 053/223] add packing list replica --- .../Processors/CreatePackageProcessor.php | 14 +++++++++++-- .../Processors/CreatePackingListProcessor.php | 13 +++++++++++- ...hLoadedContainersFromVTPortalProcessor.php | 5 ----- .../FetchPackingListFromVTPortalProcessor.php | 6 ------ ...ehouseReceiveListFromVTPortalProcessor.php | 20 +------------------ 5 files changed, 25 insertions(+), 33 deletions(-) diff --git a/app/Classes/Modules/PackingLists/Processors/CreatePackageProcessor.php b/app/Classes/Modules/PackingLists/Processors/CreatePackageProcessor.php index 500a4550..fcd9bf52 100644 --- a/app/Classes/Modules/PackingLists/Processors/CreatePackageProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/CreatePackageProcessor.php @@ -33,7 +33,7 @@ class CreatePackageProcessor /** * @param PackageObject $object * @param PackingList $packingList - * @return \Illuminate\Database\Eloquent\Model + * @return void * @throws \App\Classes\Exceptions\AccessForbiddenException * @throws \App\Classes\Exceptions\RequestValidationException */ @@ -41,7 +41,17 @@ class CreatePackageProcessor $this->canCreatePackage->passes($object); - return $this->createsPackage->execute($object, $packingList); + $this->createsPackage->execute($object, $packingList); + + $replica = $packingList->packingList()->first(); + + if($replica) { + $modificationValue = 1; + $packageObject = new PackageObject($object->getType(), $object->getDescription(), $object->getWidth() + $modificationValue, $object->getHeight() + $modificationValue, $object->getLength() + $modificationValue, $object->getWeight(), $object->getQuantity(), $object->getStatus()); + $this->createsPackage->execute($packageObject, $replica); + } + + return ; } diff --git a/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php b/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php index 982b7307..0a546546 100644 --- a/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php @@ -7,6 +7,10 @@ use App\Classes\General\Interfaces\Packable; use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject; use App\Classes\Modules\PackingLists\Services\CreatesPackingList; use App\Classes\Modules\PackingLists\Standards\Rules\CanCreatePackingList; +use App\Classes\ValueObjects\Constants\ApprovalStatus; +use App\Classes\ValueObjects\Constants\OrderRoleTypes; +use App\Classes\ValueObjects\Constants\PackingListType; +use App\Models\PackingList; class CreatePackingListProcessor { @@ -41,7 +45,14 @@ class CreatePackingListProcessor public function execute(PackingListObject $object, Packable $packable){ $this->canCreatePackingList->passes($object); - return $this->createsPackingList->execute($object, $packable); + /** @var PackingList $packingList */ + $packingList = $this->createsPackingList->execute($object, $packable); + + /** create packing list replica */ + $object = new PackingListObject($object->getReference().'_01', $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, $object->getType() === PackingListType::SHIPPING_PACKING_LIST ? $object->getType() === PackingListType::SHIPPING_PACKING_LIST_REPLICA : $object->getType() === PackingListType::WAREHOUSE_RECEIVE_LIST_REPLICA, ApprovalStatus::PENDING_SUBMISSION); + $this->createsPackingList->execute($object, $packingList); + + return $packingList; } } \ No newline at end of file diff --git a/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php index 330c3200..f77c9fe2 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php @@ -213,11 +213,6 @@ class FetchLoadedContainersFromVTPortalProcessor $this->createsStep->execute($packingList, $stepObject); } - //Duplicate a copy for internal reference - $packingListObject = new PackingListObject($packingListReference.'_01', $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, PackingListType::SHIPPING_PACKING_LIST_REPLICA, ApprovalStatus::PENDING_SUBMISSION); - $this->createPackingListProcessor->execute($packingListObject, $packingList); - - } } diff --git a/app/Classes/Modules/PackingLists/Processors/FetchPackingListFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchPackingListFromVTPortalProcessor.php index 9a47ed50..53dbbab1 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchPackingListFromVTPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchPackingListFromVTPortalProcessor.php @@ -73,12 +73,6 @@ class FetchPackingListFromVTPortalProcessor $packageObject = new PackageObject(PackageType::CARTON, $shippingPackingList[19], $shippingPackingList[31], $shippingPackingList[30], $shippingPackingList[29], 0, $shippingPackingList[22], ApprovalStatus::APPROVED); $this->createPackageProcessor->execute($packageObject, $packingList); - - if($replica) { - $modificationValue = 1; - $packageObject = new PackageObject(PackageType::CARTON, $shippingPackingList[19], $shippingPackingList[31] + $modificationValue, $shippingPackingList[30] + $modificationValue, $shippingPackingList[29] + $modificationValue, 0, $shippingPackingList[22], ApprovalStatus::APPROVED); - $this->createPackageProcessor->execute($packageObject, $replica); - } } DB::commit(); diff --git a/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php index 397dacce..a4b846cf 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php @@ -206,13 +206,7 @@ class FetchWarehouseReceiveListFromVTPortalProcessor if(!$packingList) { $packingList = $this->createPackingListProcessor->execute($packingListObject, $order); - - $packingListObject = new PackingListObject($packingListReference.'_01', $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, PackingListType::WAREHOUSE_RECEIVE_LIST_REPLICA, ApprovalStatus::APPROVED); - $this->createPackingListProcessor->execute($packingListObject, $packingList); - $transportObject = new TransportObject(TransportType::LAND, null, $tracking, Carbon::parse($receiveDate), Carbon::parse($receiveDate), ApprovalStatus::APPROVED); - - $this->createsTransport->execute($transportObject, $packingList); } @@ -226,24 +220,12 @@ class FetchWarehouseReceiveListFromVTPortalProcessor /** @var PackingList $replica */ $replica = $packingList->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST_REPLICA)->first(); $packingList->packages()->delete(); - + if($replica) $replica->packages()->delete(); $packageObject = new PackageObject(PackageType::CARTON, $description, $measurement, $measurement, $measurement, 0, $quantity, ApprovalStatus::APPROVED); $this->createPackageProcessor->execute($packageObject, $packingList); - - if($replica){ - $replica->packages()->delete(); - $modificationValue = 1; - $packageObject = new PackageObject(PackageType::CARTON, $description, $measurement + $modificationValue, $measurement + $modificationValue, $measurement + $modificationValue, 0, $quantity, ApprovalStatus::APPROVED); - $this->createPackageProcessor->execute($packageObject, $replica); - - } - } - - } catch (\Exception $exception){ - dd($exception); Log::error($exception->getMessage()); } From e11e0307af53c48ad1ce9c8f7a353240face0cde Mon Sep 17 00:00:00 2001 From: omair saleh Date: Tue, 28 Dec 2021 22:03:11 +0800 Subject: [PATCH 054/223] add packing list replica --- .../Modules/PackingLists/Processors/CreatePackageProcessor.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Classes/Modules/PackingLists/Processors/CreatePackageProcessor.php b/app/Classes/Modules/PackingLists/Processors/CreatePackageProcessor.php index fcd9bf52..13e4a83b 100644 --- a/app/Classes/Modules/PackingLists/Processors/CreatePackageProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/CreatePackageProcessor.php @@ -43,7 +43,8 @@ class CreatePackageProcessor $this->createsPackage->execute($object, $packingList); - $replica = $packingList->packingList()->first(); + /** @var PackingList $replica */ + $replica = $packingList->packingLists()->first(); if($replica) { $modificationValue = 1; From 87c60dc488766c2ad9f4cb52af8a2713a200ab5d Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 00:29:38 +0800 Subject: [PATCH 055/223] YD curl request --- app/Classes/Jobs/CurlContainerListJob.php | 94 ------ ...Job.php => FetchOrdersFromYDPortalJob.php} | 14 +- .../Processors/CreatePackingListProcessor.php | 3 +- .../FetchOrderListsFromYdPortalProcessor.php | 286 +++++++++++++++++- .../Commands/CurlContainerListCommand.php | 48 --- app/Console/Commands/CurlVTCommand.php | 2 +- .../Commands/CurlWarehouseListCommand.php | 48 --- .../Commands/CurlYdOrderListCommand.php | 3 +- app/Console/Kernel.php | 15 + app/Http/Resources/OrderResource.php | 6 +- app/Job/CurlYdOrderListJob.php | 1 + routes/web.php | 3 + 12 files changed, 303 insertions(+), 220 deletions(-) delete mode 100644 app/Classes/Jobs/CurlContainerListJob.php rename app/Classes/Jobs/{CurlYdOrderListJob.php => FetchOrdersFromYDPortalJob.php} (78%) delete mode 100644 app/Console/Commands/CurlContainerListCommand.php delete mode 100644 app/Console/Commands/CurlWarehouseListCommand.php diff --git a/app/Classes/Jobs/CurlContainerListJob.php b/app/Classes/Jobs/CurlContainerListJob.php deleted file mode 100644 index e65a1a18..00000000 --- a/app/Classes/Jobs/CurlContainerListJob.php +++ /dev/null @@ -1,94 +0,0 @@ -page = $page; - } - - /** - * Execute the job. - * - * @return void - * @throws \GuzzleHttp\Exception\GuzzleException - */ - public function handle() - { - $cookies = $this->getCookie(); - - $headers = [ - 'Content-Type' => 'application/json', - 'Cookie' => $cookies, - ]; - - $last_two_month = Carbon::now()->subMonth(2)->format('Y-m-d'); - - $client = new \GuzzleHttp\Client(['headers' => $headers]); - $res = $client->post('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', [\GuzzleHttp\RequestOptions::JSON => json_decode('{"controller":"VCustomercontainer","view":"grid1","request":{"PageIndex":' . $this->page . ',"PageSize":10,"PageOffset":0,"SortExpression":"CreatedOn DESC","GroupExpression":"","Filter":["LoadedTime:<=%js%\"' . $last_two_month . 'T00:00:00.000\"\u0000"],"ContextKey":"view1","FilterIsExternal":false,"LookupContextFieldName":null,"LookupContextController":null,"LookupContextView":null,"LookupContext":null,"Inserting":false,"LastCommandName":null,"ExternalFilter":[],"DoesNotRequireData":false,"LastView":"grid1","Tag":null,"RequiresFirstLetters":false,"ViewType":"Grid","SupportsCaching":true,"SystemFilter":null,"RequiresRowCount":true,"QuickFindHint":null,"RequiresPivot":false,"PivotDefinitions":null,"RequiresMetaData":true}}')]); - - $data = json_decode($res->getBody()->getContents()); - - if (!empty($data->d->Rows)) { - // insert data here - - // next page - $this->page = $this->page > 0 ? $this->page + 1 : 1; - CurlContainerListJob::dispatch($this->page + 1) - ->delay(Carbon::now()->addSeconds(10)); - } - } - - public function getCookie() - { - // get latest cookies - $client = new \GuzzleHttp\Client(['cookies' => true]); - $r = $client->request('GET', 'http://portal.vtnation.com.my'); - $call_cookie = $client->getConfig('cookies'); - $call_cookie = $call_cookie->toArray(); - $latest_cookie = []; - - foreach ($call_cookie as $key => $row) { - $latest_cookie[] = $row['Name'] . '=' . $row['Value']; - } - $latest_cookie = implode(';', $latest_cookie); - - // get access token - $headers = [ - 'Content-Type' => 'application/json', - 'Cookie' => $latest_cookie, - ]; - $client = new \GuzzleHttp\Client(['headers' => $headers]); - $res = $client->post('http://portal.vtnation.com.my/Services/DataControllerService.asmx/Login', [\GuzzleHttp\RequestOptions::JSON => [ - "username" => "CIEF", - "password" => "0122120880", - "createPersistentCookie" => true, - ]]); - - $token = json_decode($res->getBody()->getContents()); - $token = $token->d->AccessToken; - - $latest_cookie = $latest_cookie . ';AppVTCC=' . $token; - return $latest_cookie; - } -} diff --git a/app/Classes/Jobs/CurlYdOrderListJob.php b/app/Classes/Jobs/FetchOrdersFromYDPortalJob.php similarity index 78% rename from app/Classes/Jobs/CurlYdOrderListJob.php rename to app/Classes/Jobs/FetchOrdersFromYDPortalJob.php index ee5fba54..b67130d3 100644 --- a/app/Classes/Jobs/CurlYdOrderListJob.php +++ b/app/Classes/Jobs/FetchOrdersFromYDPortalJob.php @@ -10,20 +10,12 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; -class CurlYdOrderListJob implements ShouldQueue +class FetchOrdersFromYDPortalJob implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; - /** - * Create a new job instance. - * - * @return void - */ - public function __construct() - { - - } + public $timeout = 900; /** * Execute the job. @@ -33,6 +25,8 @@ class CurlYdOrderListJob implements ShouldQueue */ public function handle() { + (App()->make(FetchOrderListsFromYdPortalProcessor::class))->execute(); } + } diff --git a/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php b/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php index 0a546546..3e2a861d 100644 --- a/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php @@ -48,8 +48,9 @@ class CreatePackingListProcessor /** @var PackingList $packingList */ $packingList = $this->createsPackingList->execute($object, $packable); + $type = $object->getType() === PackingListType::SHIPPING_PACKING_LIST ? PackingListType::SHIPPING_PACKING_LIST_REPLICA : PackingListType::WAREHOUSE_RECEIVE_LIST_REPLICA; /** create packing list replica */ - $object = new PackingListObject($object->getReference().'_01', $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, $object->getType() === PackingListType::SHIPPING_PACKING_LIST ? $object->getType() === PackingListType::SHIPPING_PACKING_LIST_REPLICA : $object->getType() === PackingListType::WAREHOUSE_RECEIVE_LIST_REPLICA, ApprovalStatus::PENDING_SUBMISSION); + $object = new PackingListObject($object->getReference().'_01', $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, $type, ApprovalStatus::PENDING_SUBMISSION); $this->createsPackingList->execute($object, $packingList); return $packingList; diff --git a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php index c65b8ee9..4821d4a7 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php @@ -2,39 +2,299 @@ namespace App\Classes\Modules\PackingLists\Processors; +use App\Classes\Exceptions\ResourceNotFoundException; +use App\Classes\Modules\Companies\Services\FetchesCompanyModule; use App\Classes\Modules\Orders\Services\FetchesDataFromYDPortal; +use App\Classes\Modules\Orders\Services\FetchesOrder; +use App\Classes\Modules\PackingLists\DataTransferObjects\ContainerObject; +use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject; +use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject; +use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer; +use App\Classes\Modules\PackingLists\Services\FetchesPackingList; +use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject; +use App\Classes\Modules\Schedules\Services\CreatesSchedule; +use App\Classes\Modules\Steps\DataTransferObjects\StepsObject; +use App\Classes\Modules\Steps\Services\CreatesStep; +use App\Classes\Modules\Transports\DataTransferObjects\TransportObject; +use App\Classes\Modules\Transports\Services\CreatesTransport; +use App\Classes\Modules\Unity\Processors\ActivateContractProcessor; +use App\Classes\Modules\Unity\Processors\AssignContractEntityProcessor; +use App\Classes\Modules\Unity\Processors\CreateContractEntityProcessor; +use App\Classes\Modules\Unity\Services\CreatesContract; +use App\Classes\Modules\Unity\Services\UpdatesContractObligation; +use App\Classes\ValueObjects\Constants\ApprovalStatus; +use App\Classes\ValueObjects\Constants\ContainerTypes; +use App\Classes\ValueObjects\Constants\OrderRoleTypes; +use App\Classes\ValueObjects\Constants\PackageType; +use App\Classes\ValueObjects\Constants\PackingListType; +use App\Classes\ValueObjects\Constants\TransportType; +use App\Models\Container; +use App\Models\Order; +use App\Models\PackingList; +use App\Models\Transport; +use Carbon\Carbon; use Illuminate\Support\Facades\DB; -use Illuminate\Support\Facades\Log; class FetchOrderListsFromYdPortalProcessor { - /** - /** @var FetchesDataFromVTPortal */ + /** @var FetchesDataFromYDPortal */ private $fetchesDataFRomYDPortal; - public function __construct(FetchesDataFromYDPortal $fetchesDataFRomYDPortal) + /** @var FetchesOrder */ + private $fetchesOrder; + + /** @var UpdatesContractObligation */ + private $updatesContractObligations; + + /** @var CreatePackingListProcessor */ + private $createPackingListProcessor; + + /** @var CreatePackageProcessor */ + private $createPackageProcessor; + + /** @var CreatesTransport */ + private $createsTransport; + + /** @var CreatesSchedule */ + private $createsSchedule; + + /** @var FetchesContainer */ + private $fetchesContainer; + + /** @var FetchesPackingList */ + private $fetchesPackingList; + + /** @var FetchesCompanyModule */ + private $fetchesCompanyModule; + + /** @var CreateContainerProcessor */ + private $createContainerProcessor; + + /** @var CreatesContract */ + private $unityCreateContract; + + /** @var AssignContractEntityProcessor */ + private $unityAssignContractEntity; + + /** @var CreateContractEntityProcessor */ + private $unityCreateContractEntity; + + /** @var CreatesStep */ + private $createsStep; + + /** @var ActivateContractProcessor */ + private $unityActivateContract; + + /** + * FetchOrderListsFromYdPortalProcessor constructor. + * @param FetchesDataFromYDPortal $fetchesDataFRomYDPortal + * @param FetchesOrder $fetchesOrder + * @param UpdatesContractObligation $updatesContractObligations + * @param CreatePackingListProcessor $createPackingListProcessor + * @param CreatePackageProcessor $createPackageProcessor + * @param CreatesTransport $createsTransport + * @param CreatesSchedule $createsSchedule + * @param FetchesContainer $fetchesContainer + * @param FetchesPackingList $fetchesPackingList + * @param FetchesCompanyModule $fetchesCompanyModule + * @param CreateContainerProcessor $createContainerProcessor + * @param CreatesContract $unityCreateContract + * @param AssignContractEntityProcessor $unityAssignContractEntity + * @param CreateContractEntityProcessor $unityCreateContractEntity + * @param CreatesStep $createsStep + * @param ActivateContractProcessor $unityActivateContract + */ + public function __construct(FetchesDataFromYDPortal $fetchesDataFRomYDPortal, FetchesOrder $fetchesOrder, UpdatesContractObligation $updatesContractObligations, CreatePackingListProcessor $createPackingListProcessor, CreatePackageProcessor $createPackageProcessor, CreatesTransport $createsTransport, CreatesSchedule $createsSchedule, FetchesContainer $fetchesContainer, FetchesPackingList $fetchesPackingList, FetchesCompanyModule $fetchesCompanyModule, CreateContainerProcessor $createContainerProcessor, CreatesContract $unityCreateContract, AssignContractEntityProcessor $unityAssignContractEntity, CreateContractEntityProcessor $unityCreateContractEntity, CreatesStep $createsStep, ActivateContractProcessor $unityActivateContract) { $this->fetchesDataFRomYDPortal = $fetchesDataFRomYDPortal; + $this->fetchesOrder = $fetchesOrder; + $this->updatesContractObligations = $updatesContractObligations; + $this->createPackingListProcessor = $createPackingListProcessor; + $this->createPackageProcessor = $createPackageProcessor; + $this->createsTransport = $createsTransport; + $this->createsSchedule = $createsSchedule; + $this->fetchesContainer = $fetchesContainer; + $this->fetchesPackingList = $fetchesPackingList; + $this->fetchesCompanyModule = $fetchesCompanyModule; + $this->createContainerProcessor = $createContainerProcessor; + $this->unityCreateContract = $unityCreateContract; + $this->unityAssignContractEntity = $unityAssignContractEntity; + $this->unityCreateContractEntity = $unityCreateContractEntity; + $this->createsStep = $createsStep; + $this->unityActivateContract = $unityActivateContract; } + /** * @param Carbon|null $start * @param Carbon|null $end - * @return array - * @throws GuzzleException + * @return void + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + * @throws \GuzzleHttp\Exception\GuzzleException */ - public function execute(?Carbon $start = null, ?Carbon $end = null) { + public function execute(?Carbon $start = null, ?Carbon $end = null) + { + db::beginTransaction(); + $start = $start ? $start : Carbon::now()->subMonths(2); - $orderRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/GetOrderList.ashx', 'GET', [ - 'apicode' => '393b1cb4b8b37d09', - 'begintime' => '1633968000', - 'endtime' => '1639308222', + $startLimit = Carbon::parse('01-12-2021'); + + if($start->isBefore($startLimit)){ + $start = $startLimit; + } + + $end = $end ? $end : Carbon::now(); + + $orderRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/GetOrderList.ashx', 'GET', [ + 'begintime' => $start->timestamp, + 'endtime' => $end->timestamp, + ]); + + $rows = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest); + + foreach($rows->data as $row){ + $containerReference = null; + $loadingDate = null; + $unstuffingDate = null; + $etd = null; + $eta = null; + + $trackingRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/ApiTracking.ashx', 'GET', [ + 'trakingno' => $row->expressno ]); + $rows = $this->fetchesDataFRomYDPortal->getResponseBody($trackingRequest); + foreach ($rows->data as $trackingRow) { + if($trackingRow->tracking === '货物已送达仓库准备入库中'){ + $receiveDate = Carbon::parse($trackingRow->trackingtime); + } - $order = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest); + if (strpos($trackingRow->tracking, '货物装柜完成。') !== false) { + $tracking = explode(':', $trackingRow->tracking); + $containerReference = explode('预计到港时间', $tracking[1])[0]; + $loadingDate = Carbon::parse($trackingRow->trackingtime); + $etd = Carbon::parse($tracking[2])->subDays(5); + $eta = Carbon::parse($tracking[2]); + } + + if($trackingRow->tracking === '货物已进目的港仓库'){ + $unstuffingDate = Carbon::parse($trackingRow->trackingtime); + } + } + + $customerno = preg_split('/(-|\/)/', $row->customerno); + + if (!array_key_exists(2, $customerno)){ + if (!array_key_exists(1, $customerno)){ + continue; + } + $customerno[2] = substr($customerno[1], -9); + } + + + $orderNumber = $customerno[2]; + + try { + $order = $this->fetchesOrder->execute(['reference' => $orderNumber]); + } catch (ResourceNotFoundException $exception) { + continue; + } + + $packingListReference = $row->expressno; + + try{ + $packingList = $this->fetchesPackingList->execute(['reference' => $row->expressno]); + } catch (ResourceNotFoundException $exception){ + + $warehouseReceiveObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::WAREHOUSE_RECEIVE_LIST, ApprovalStatus::APPROVED); + /** @var PackingList $warehouseReceiveList */ + $warehouseReceiveList = $this->createPackingListProcessor->execute($warehouseReceiveObject, $order); + $transportObject = new TransportObject(TransportType::LAND, null, $row->kuaidilist, Carbon::parse($receiveDate), Carbon::parse($receiveDate), ApprovalStatus::APPROVED); + $this->createsTransport->execute($transportObject, $warehouseReceiveList); + + $contract = $this->unityCreateContract->execute(); + $contractReference = $contract->hash_id; + $contractObligations = $contract->contract_obligation_list; + + $this->unityActivateContract->execute($contractReference); + + $supervisorHashId = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->unity_hash_id; + + $supervisorContractEntity = $this->unityCreateContractEntity->execute($contractReference, $supervisorHashId); + $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->update(['entity_hash_id' => $supervisorContractEntity->hash_id, 'entity_signature' => $supervisorContractEntity->entity_signature_hash_id]); + + $importerContractEntity = $this->unityCreateContractEntity->execute($contractReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->appointee->unity_hash_id); + $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->update(['entity_hash_id' => $importerContractEntity->hash_id, 'entity_signature' => $importerContractEntity->entity_signature_hash_id]); + + $this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations); + + $packingListObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::SHIPPING_PACKING_LIST, ApprovalStatus::PENDING_VERIFICATION , $contractReference); + + /** @var PackingList $packingList */ + $packingList = $this->createPackingListProcessor->execute($packingListObject, $order); + + foreach($contractObligations as $obligation) { + $stepObject = new StepsObject($order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, $obligation->reference, $obligation->sequence, $obligation->hash_id); + $this->createsStep->execute($packingList, $stepObject); + } + + foreach($row->deliverysize as $package) { + $packageObject = new PackageObject(PackageType::CARTON, $row->goodname, (float) $package->width, (float) $package->height, (float) $package->length, 0, (float) $package->num, ApprovalStatus::APPROVED); + $this->createPackageProcessor->execute($packageObject, $warehouseReceiveList); + $this->createPackageProcessor->execute($packageObject, $packingList); + } + } + + if($containerReference) { + try { + $container = $this->fetchesContainer->execute(['reference' => $containerReference]); + } catch (ResourceNotFoundException $exception){ + $originWarehouse = $this->fetchesCompanyModule->execute(['id' => $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id]); + $containerObject = new ContainerObject($containerReference, '', '', ContainerTypes::FORTY_FEET_DRY_CONTAINER, $loadingDate, ApprovalStatus::PENDING_VERIFICATION); + /** @var Container $container */ + $container = $this->createContainerProcessor->execute($containerObject, $originWarehouse); + + $container->packingLists()->attach($packingList); + + $transport = $container->transports()->first(); + + if(!$transport){ + $transportObject = new TransportObject(TransportType::SEA, null, null, $etd, null, ApprovalStatus::APPROVED); + /** @var Transport $transport */ + $transport = $this->createsTransport->execute($transportObject, $container); + $this->createsSchedule->execute($transport, new ScheduleObject($etd, $eta, ApprovalStatus::APPROVED)); + } + } + + if($unstuffingDate){ + $container->update(['status' => ApprovalStatus::COMPLETED]); + $container->transports()->first()->update(['drop_date' => $unstuffingDate, 'status' => ApprovalStatus::COMPLETED]); + + /** @var PackingList $packingList */ + foreach($container->packingLists as $packingList){ + + if($packingList->status === ApprovalStatus::PENDING_VERIFICATION){ + $packingList->status = ApprovalStatus::APPROVED; + $packingList->save(); + } + + $signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture; + foreach($packingList->steps()->where('reference', '!=', 'DELIVERY')->get() as $step){ + $this->updatesContractObligations->execute($signature, $step->obligation_hash_id); + $step->update(['status' => ApprovalStatus::COMPLETED]); + } + } + } + + + } + + + } + db::commit(); - dd($order); } } diff --git a/app/Console/Commands/CurlContainerListCommand.php b/app/Console/Commands/CurlContainerListCommand.php deleted file mode 100644 index e5964a40..00000000 --- a/app/Console/Commands/CurlContainerListCommand.php +++ /dev/null @@ -1,48 +0,0 @@ -withoutOverlapping() ->appendOutputTo (storage_path().'/logs/curlvt.log'); + $schedule->command('command:curlYdOrderListCommand') + ->dailyAt('11:00') + ->withoutOverlapping() + ->appendOutputTo (storage_path().'/logs/curlyd.log'); + $schedule->command('command:curlVTCommand') ->dailyAt('14:00') ->withoutOverlapping() ->appendOutputTo (storage_path().'/logs/curlvt.log'); + $schedule->command('command:curlYdOrderListCommand') + ->dailyAt('14:00') + ->withoutOverlapping() + ->appendOutputTo (storage_path().'/logs/curlyd.log'); + $schedule->command('command:curlVTCommand') ->dailyAt('17:00') ->withoutOverlapping() ->appendOutputTo (storage_path().'/logs/curlvt.log'); + + $schedule->command('command:curlYdOrderListCommand') + ->dailyAt('17:00') + ->withoutOverlapping() + ->appendOutputTo (storage_path().'/logs/curlyd.log'); } /** diff --git a/app/Http/Resources/OrderResource.php b/app/Http/Resources/OrderResource.php index b5bdf0ab..78b1b0a1 100644 --- a/app/Http/Resources/OrderResource.php +++ b/app/Http/Resources/OrderResource.php @@ -34,13 +34,13 @@ class OrderResource extends JsonResource 'origin_warehouse_packages' => PackingListResource::collection( $this->originWarehousePackages()->get() ), - 'in_transit_packages' => PackageResource::collection( + 'in_transit_packages' => PackingListResource::collection( $this->inTransitPackages()->get() ), - 'destination_warehouse_packages' => PackageResource::collection( + 'destination_warehouse_packages' => PackingListResource::collection( $this->destinationWarehousePackages()->get() ), - 'delivered_packages' => PackageResource::collection( + 'delivered_packages' => PackingListResource::collection( $this->deliveredPackages()->get() ), 'received_packages' => PackingListResource::collection($this->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->get()), diff --git a/app/Job/CurlYdOrderListJob.php b/app/Job/CurlYdOrderListJob.php index 713df1bc..378ada24 100644 --- a/app/Job/CurlYdOrderListJob.php +++ b/app/Job/CurlYdOrderListJob.php @@ -29,6 +29,7 @@ class CurlYdOrderListJob implements ShouldQueue * Execute the job. * * @return void + * @throws \Illuminate\Contracts\Container\BindingResolutionException */ public function handle() { diff --git a/routes/web.php b/routes/web.php index 0eca4f51..099c4368 100644 --- a/routes/web.php +++ b/routes/web.php @@ -3,6 +3,7 @@ use App\Classes\Jobs\FetchContainersStatusUpdateFromVTPortalJob; use App\Classes\Jobs\FetchDeliveryListFromVTPortalJob; use App\Classes\Jobs\FetchLoadedContainersFromVTPortalJob; +use App\Classes\Jobs\FetchOrdersFromYDPortalJob; use App\Classes\Jobs\FetchPackingListFromVTPortalJob; use App\Classes\Jobs\FetchWarehouseReceiveListFromVTPortalJob; use App\Classes\Modules\PackingLists\Processors\FetchOrderListsFromYdPortalProcessor; @@ -90,6 +91,8 @@ Route::get('/customer/{marking}', function ($marking) { Route::get('/orders/refresh', function(){ + FetchOrdersFromYDPortalJob::dispatch(); + FetchWarehouseReceiveListFromVTPortalJob::withChain([ new FetchLoadedContainersFromVTPortalJob, new FetchPackingListFromVTPortalJob, From f36bb9d09092976d0105cc1f8a7ce48761a460cf Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 00:43:20 +0800 Subject: [PATCH 056/223] YD curl request --- .../FetchOrderListsFromYdPortalProcessor.php | 269 +++++++++--------- 1 file changed, 137 insertions(+), 132 deletions(-) diff --git a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php index 4821d4a7..cb36c1d7 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php @@ -137,164 +137,169 @@ class FetchOrderListsFromYdPortalProcessor */ public function execute(?Carbon $start = null, ?Carbon $end = null) { - db::beginTransaction(); + try { + db::beginTransaction(); - $start = $start ? $start : Carbon::now()->subMonths(2); + $start = $start ? $start : Carbon::now()->subMonths(2); - $startLimit = Carbon::parse('01-12-2021'); + $startLimit = Carbon::parse('01-12-2021'); - if($start->isBefore($startLimit)){ - $start = $startLimit; - } - - $end = $end ? $end : Carbon::now(); - - $orderRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/GetOrderList.ashx', 'GET', [ - 'begintime' => $start->timestamp, - 'endtime' => $end->timestamp, - ]); - - $rows = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest); - - foreach($rows->data as $row){ - $containerReference = null; - $loadingDate = null; - $unstuffingDate = null; - $etd = null; - $eta = null; - - $trackingRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/ApiTracking.ashx', 'GET', [ - 'trakingno' => $row->expressno - ]); - $rows = $this->fetchesDataFRomYDPortal->getResponseBody($trackingRequest); - foreach ($rows->data as $trackingRow) { - if($trackingRow->tracking === '货物已送达仓库准备入库中'){ - $receiveDate = Carbon::parse($trackingRow->trackingtime); - } - - if (strpos($trackingRow->tracking, '货物装柜完成。') !== false) { - $tracking = explode(':', $trackingRow->tracking); - $containerReference = explode('预计到港时间', $tracking[1])[0]; - $loadingDate = Carbon::parse($trackingRow->trackingtime); - $etd = Carbon::parse($tracking[2])->subDays(5); - $eta = Carbon::parse($tracking[2]); - } - - if($trackingRow->tracking === '货物已进目的港仓库'){ - $unstuffingDate = Carbon::parse($trackingRow->trackingtime); - } + if($start->isBefore($startLimit)){ + $start = $startLimit; } - $customerno = preg_split('/(-|\/)/', $row->customerno); + $end = $end ? $end : Carbon::now(); - if (!array_key_exists(2, $customerno)){ - if (!array_key_exists(1, $customerno)){ + $orderRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/GetOrderList.ashx', 'GET', [ + 'begintime' => $start->timestamp, + 'endtime' => $end->timestamp, + ]); + + $rows = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest); + + foreach($rows->data as $row){ + $containerReference = null; + $loadingDate = null; + $unstuffingDate = null; + $etd = null; + $eta = null; + + $trackingRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/ApiTracking.ashx', 'GET', [ + 'trakingno' => $row->expressno + ]); + $rows = $this->fetchesDataFRomYDPortal->getResponseBody($trackingRequest); + foreach ($rows->data as $trackingRow) { + if($trackingRow->tracking === '货物已送达仓库准备入库中'){ + $receiveDate = Carbon::parse($trackingRow->trackingtime); + } + + if (strpos($trackingRow->tracking, '货物装柜完成。') !== false) { + $tracking = explode(':', $trackingRow->tracking); + $containerReference = explode('预计到港时间', $tracking[1])[0]; + $loadingDate = Carbon::parse($trackingRow->trackingtime); + $etd = Carbon::parse($tracking[2])->subDays(5); + $eta = Carbon::parse($tracking[2]); + } + + if($trackingRow->tracking === '货物已进目的港仓库'){ + $unstuffingDate = Carbon::parse($trackingRow->trackingtime); + } + } + + $customerno = preg_split('/(-|\/)/', $row->customerno); + + if (!array_key_exists(2, $customerno)){ + if (!array_key_exists(1, $customerno)){ + continue; + } + $customerno[2] = substr($customerno[1], -9); + } + + + $orderNumber = $customerno[2]; + + try { + $order = $this->fetchesOrder->execute(['reference' => $orderNumber]); + } catch (ResourceNotFoundException $exception) { continue; } - $customerno[2] = substr($customerno[1], -9); - } + $packingListReference = $row->expressno; - $orderNumber = $customerno[2]; - - try { - $order = $this->fetchesOrder->execute(['reference' => $orderNumber]); - } catch (ResourceNotFoundException $exception) { - continue; - } - - $packingListReference = $row->expressno; - - try{ - $packingList = $this->fetchesPackingList->execute(['reference' => $row->expressno]); - } catch (ResourceNotFoundException $exception){ - - $warehouseReceiveObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::WAREHOUSE_RECEIVE_LIST, ApprovalStatus::APPROVED); - /** @var PackingList $warehouseReceiveList */ - $warehouseReceiveList = $this->createPackingListProcessor->execute($warehouseReceiveObject, $order); - $transportObject = new TransportObject(TransportType::LAND, null, $row->kuaidilist, Carbon::parse($receiveDate), Carbon::parse($receiveDate), ApprovalStatus::APPROVED); - $this->createsTransport->execute($transportObject, $warehouseReceiveList); - - $contract = $this->unityCreateContract->execute(); - $contractReference = $contract->hash_id; - $contractObligations = $contract->contract_obligation_list; - - $this->unityActivateContract->execute($contractReference); - - $supervisorHashId = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->unity_hash_id; - - $supervisorContractEntity = $this->unityCreateContractEntity->execute($contractReference, $supervisorHashId); - $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->update(['entity_hash_id' => $supervisorContractEntity->hash_id, 'entity_signature' => $supervisorContractEntity->entity_signature_hash_id]); - - $importerContractEntity = $this->unityCreateContractEntity->execute($contractReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->appointee->unity_hash_id); - $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->update(['entity_hash_id' => $importerContractEntity->hash_id, 'entity_signature' => $importerContractEntity->entity_signature_hash_id]); - - $this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations); - - $packingListObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::SHIPPING_PACKING_LIST, ApprovalStatus::PENDING_VERIFICATION , $contractReference); - - /** @var PackingList $packingList */ - $packingList = $this->createPackingListProcessor->execute($packingListObject, $order); - - foreach($contractObligations as $obligation) { - $stepObject = new StepsObject($order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, $obligation->reference, $obligation->sequence, $obligation->hash_id); - $this->createsStep->execute($packingList, $stepObject); - } - - foreach($row->deliverysize as $package) { - $packageObject = new PackageObject(PackageType::CARTON, $row->goodname, (float) $package->width, (float) $package->height, (float) $package->length, 0, (float) $package->num, ApprovalStatus::APPROVED); - $this->createPackageProcessor->execute($packageObject, $warehouseReceiveList); - $this->createPackageProcessor->execute($packageObject, $packingList); - } - } - - if($containerReference) { - try { - $container = $this->fetchesContainer->execute(['reference' => $containerReference]); + try{ + $packingList = $this->fetchesPackingList->execute(['reference' => $row->expressno]); } catch (ResourceNotFoundException $exception){ - $originWarehouse = $this->fetchesCompanyModule->execute(['id' => $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id]); - $containerObject = new ContainerObject($containerReference, '', '', ContainerTypes::FORTY_FEET_DRY_CONTAINER, $loadingDate, ApprovalStatus::PENDING_VERIFICATION); - /** @var Container $container */ - $container = $this->createContainerProcessor->execute($containerObject, $originWarehouse); - $container->packingLists()->attach($packingList); + $warehouseReceiveObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::WAREHOUSE_RECEIVE_LIST, ApprovalStatus::APPROVED); + /** @var PackingList $warehouseReceiveList */ + $warehouseReceiveList = $this->createPackingListProcessor->execute($warehouseReceiveObject, $order); + $transportObject = new TransportObject(TransportType::LAND, null, $row->kuaidilist, Carbon::parse($receiveDate), Carbon::parse($receiveDate), ApprovalStatus::APPROVED); + $this->createsTransport->execute($transportObject, $warehouseReceiveList); - $transport = $container->transports()->first(); + $contract = $this->unityCreateContract->execute(); + $contractReference = $contract->hash_id; + $contractObligations = $contract->contract_obligation_list; - if(!$transport){ - $transportObject = new TransportObject(TransportType::SEA, null, null, $etd, null, ApprovalStatus::APPROVED); - /** @var Transport $transport */ - $transport = $this->createsTransport->execute($transportObject, $container); - $this->createsSchedule->execute($transport, new ScheduleObject($etd, $eta, ApprovalStatus::APPROVED)); - } - } + $this->unityActivateContract->execute($contractReference); - if($unstuffingDate){ - $container->update(['status' => ApprovalStatus::COMPLETED]); - $container->transports()->first()->update(['drop_date' => $unstuffingDate, 'status' => ApprovalStatus::COMPLETED]); + $supervisorHashId = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->unity_hash_id; + + $supervisorContractEntity = $this->unityCreateContractEntity->execute($contractReference, $supervisorHashId); + $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->update(['entity_hash_id' => $supervisorContractEntity->hash_id, 'entity_signature' => $supervisorContractEntity->entity_signature_hash_id]); + + $importerContractEntity = $this->unityCreateContractEntity->execute($contractReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->appointee->unity_hash_id); + $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->update(['entity_hash_id' => $importerContractEntity->hash_id, 'entity_signature' => $importerContractEntity->entity_signature_hash_id]); + + $this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations); + + $packingListObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::SHIPPING_PACKING_LIST, ApprovalStatus::PENDING_VERIFICATION , $contractReference); /** @var PackingList $packingList */ - foreach($container->packingLists as $packingList){ + $packingList = $this->createPackingListProcessor->execute($packingListObject, $order); - if($packingList->status === ApprovalStatus::PENDING_VERIFICATION){ - $packingList->status = ApprovalStatus::APPROVED; - $packingList->save(); - } + foreach($contractObligations as $obligation) { + $stepObject = new StepsObject($order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, $obligation->reference, $obligation->sequence, $obligation->hash_id); + $this->createsStep->execute($packingList, $stepObject); + } - $signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture; - foreach($packingList->steps()->where('reference', '!=', 'DELIVERY')->get() as $step){ - $this->updatesContractObligations->execute($signature, $step->obligation_hash_id); - $step->update(['status' => ApprovalStatus::COMPLETED]); + foreach($row->deliverysize as $package) { + $packageObject = new PackageObject(PackageType::CARTON, $row->goodname, (float) $package->width, (float) $package->height, (float) $package->length, 0, (float) $package->num, ApprovalStatus::APPROVED); + $this->createPackageProcessor->execute($packageObject, $warehouseReceiveList); + $this->createPackageProcessor->execute($packageObject, $packingList); + } + } + + if($containerReference) { + try { + $container = $this->fetchesContainer->execute(['reference' => $containerReference]); + } catch (ResourceNotFoundException $exception){ + $originWarehouse = $this->fetchesCompanyModule->execute(['id' => $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id]); + $containerObject = new ContainerObject($containerReference, '', '', ContainerTypes::FORTY_FEET_DRY_CONTAINER, $loadingDate, ApprovalStatus::PENDING_VERIFICATION); + /** @var Container $container */ + $container = $this->createContainerProcessor->execute($containerObject, $originWarehouse); + + $container->packingLists()->attach($packingList); + + $transport = $container->transports()->first(); + + if(!$transport){ + $transportObject = new TransportObject(TransportType::SEA, null, null, $etd, null, ApprovalStatus::APPROVED); + /** @var Transport $transport */ + $transport = $this->createsTransport->execute($transportObject, $container); + $this->createsSchedule->execute($transport, new ScheduleObject($etd, $eta, ApprovalStatus::APPROVED)); } } + + if($unstuffingDate){ + $container->update(['status' => ApprovalStatus::COMPLETED]); + $container->transports()->first()->update(['drop_date' => $unstuffingDate, 'status' => ApprovalStatus::COMPLETED]); + + /** @var PackingList $packingList */ + foreach($container->packingLists as $packingList){ + + if($packingList->status === ApprovalStatus::PENDING_VERIFICATION){ + $packingList->status = ApprovalStatus::APPROVED; + $packingList->save(); + } + + $signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture; + foreach($packingList->steps()->where('reference', '!=', 'DELIVERY')->get() as $step){ + $this->updatesContractObligations->execute($signature, $step->obligation_hash_id); + $step->update(['status' => ApprovalStatus::COMPLETED]); + } + } + } + + } } - - + db::commit(); + } catch (\Exception $exception) { + dd($exception); } - db::commit(); + } } From 8dafa7d6785ec35ff0baef00eac60c767a52c486 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 00:44:11 +0800 Subject: [PATCH 057/223] YD curl request --- .../Processors/FetchOrderListsFromYdPortalProcessor.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php index cb36c1d7..4025148e 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php @@ -154,6 +154,7 @@ class FetchOrderListsFromYdPortalProcessor 'begintime' => $start->timestamp, 'endtime' => $end->timestamp, ]); + dd($orderRequest); $rows = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest); From 8e3be2747f568fbf7a95d569818a2867e2ea3794 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 00:45:44 +0800 Subject: [PATCH 058/223] YD curl request --- .../FetchOrderListsFromYdPortalProcessor.php | 312 +++++++++--------- 1 file changed, 153 insertions(+), 159 deletions(-) diff --git a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php index 4025148e..12d05880 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php @@ -137,170 +137,164 @@ class FetchOrderListsFromYdPortalProcessor */ public function execute(?Carbon $start = null, ?Carbon $end = null) { - try { - db::beginTransaction(); + db::beginTransaction(); - $start = $start ? $start : Carbon::now()->subMonths(2); + $start = $start ? $start : Carbon::now()->subMonths(2); - $startLimit = Carbon::parse('01-12-2021'); + $startLimit = Carbon::parse('01-12-2021'); - if($start->isBefore($startLimit)){ - $start = $startLimit; - } - - $end = $end ? $end : Carbon::now(); - - $orderRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/GetOrderList.ashx', 'GET', [ - 'begintime' => $start->timestamp, - 'endtime' => $end->timestamp, - ]); - dd($orderRequest); - - $rows = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest); - - foreach($rows->data as $row){ - $containerReference = null; - $loadingDate = null; - $unstuffingDate = null; - $etd = null; - $eta = null; - - $trackingRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/ApiTracking.ashx', 'GET', [ - 'trakingno' => $row->expressno - ]); - $rows = $this->fetchesDataFRomYDPortal->getResponseBody($trackingRequest); - foreach ($rows->data as $trackingRow) { - if($trackingRow->tracking === '货物已送达仓库准备入库中'){ - $receiveDate = Carbon::parse($trackingRow->trackingtime); - } - - if (strpos($trackingRow->tracking, '货物装柜完成。') !== false) { - $tracking = explode(':', $trackingRow->tracking); - $containerReference = explode('预计到港时间', $tracking[1])[0]; - $loadingDate = Carbon::parse($trackingRow->trackingtime); - $etd = Carbon::parse($tracking[2])->subDays(5); - $eta = Carbon::parse($tracking[2]); - } - - if($trackingRow->tracking === '货物已进目的港仓库'){ - $unstuffingDate = Carbon::parse($trackingRow->trackingtime); - } - } - - $customerno = preg_split('/(-|\/)/', $row->customerno); - - if (!array_key_exists(2, $customerno)){ - if (!array_key_exists(1, $customerno)){ - continue; - } - $customerno[2] = substr($customerno[1], -9); - } - - - $orderNumber = $customerno[2]; - - try { - $order = $this->fetchesOrder->execute(['reference' => $orderNumber]); - } catch (ResourceNotFoundException $exception) { - continue; - } - - $packingListReference = $row->expressno; - - try{ - $packingList = $this->fetchesPackingList->execute(['reference' => $row->expressno]); - } catch (ResourceNotFoundException $exception){ - - $warehouseReceiveObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::WAREHOUSE_RECEIVE_LIST, ApprovalStatus::APPROVED); - /** @var PackingList $warehouseReceiveList */ - $warehouseReceiveList = $this->createPackingListProcessor->execute($warehouseReceiveObject, $order); - $transportObject = new TransportObject(TransportType::LAND, null, $row->kuaidilist, Carbon::parse($receiveDate), Carbon::parse($receiveDate), ApprovalStatus::APPROVED); - $this->createsTransport->execute($transportObject, $warehouseReceiveList); - - $contract = $this->unityCreateContract->execute(); - $contractReference = $contract->hash_id; - $contractObligations = $contract->contract_obligation_list; - - $this->unityActivateContract->execute($contractReference); - - $supervisorHashId = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->unity_hash_id; - - $supervisorContractEntity = $this->unityCreateContractEntity->execute($contractReference, $supervisorHashId); - $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->update(['entity_hash_id' => $supervisorContractEntity->hash_id, 'entity_signature' => $supervisorContractEntity->entity_signature_hash_id]); - - $importerContractEntity = $this->unityCreateContractEntity->execute($contractReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->appointee->unity_hash_id); - $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->update(['entity_hash_id' => $importerContractEntity->hash_id, 'entity_signature' => $importerContractEntity->entity_signature_hash_id]); - - $this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations); - - $packingListObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::SHIPPING_PACKING_LIST, ApprovalStatus::PENDING_VERIFICATION , $contractReference); - - /** @var PackingList $packingList */ - $packingList = $this->createPackingListProcessor->execute($packingListObject, $order); - - foreach($contractObligations as $obligation) { - $stepObject = new StepsObject($order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, $obligation->reference, $obligation->sequence, $obligation->hash_id); - $this->createsStep->execute($packingList, $stepObject); - } - - foreach($row->deliverysize as $package) { - $packageObject = new PackageObject(PackageType::CARTON, $row->goodname, (float) $package->width, (float) $package->height, (float) $package->length, 0, (float) $package->num, ApprovalStatus::APPROVED); - $this->createPackageProcessor->execute($packageObject, $warehouseReceiveList); - $this->createPackageProcessor->execute($packageObject, $packingList); - } - } - - if($containerReference) { - try { - $container = $this->fetchesContainer->execute(['reference' => $containerReference]); - } catch (ResourceNotFoundException $exception){ - $originWarehouse = $this->fetchesCompanyModule->execute(['id' => $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id]); - $containerObject = new ContainerObject($containerReference, '', '', ContainerTypes::FORTY_FEET_DRY_CONTAINER, $loadingDate, ApprovalStatus::PENDING_VERIFICATION); - /** @var Container $container */ - $container = $this->createContainerProcessor->execute($containerObject, $originWarehouse); - - $container->packingLists()->attach($packingList); - - $transport = $container->transports()->first(); - - if(!$transport){ - $transportObject = new TransportObject(TransportType::SEA, null, null, $etd, null, ApprovalStatus::APPROVED); - /** @var Transport $transport */ - $transport = $this->createsTransport->execute($transportObject, $container); - $this->createsSchedule->execute($transport, new ScheduleObject($etd, $eta, ApprovalStatus::APPROVED)); - } - } - - if($unstuffingDate){ - $container->update(['status' => ApprovalStatus::COMPLETED]); - $container->transports()->first()->update(['drop_date' => $unstuffingDate, 'status' => ApprovalStatus::COMPLETED]); - - /** @var PackingList $packingList */ - foreach($container->packingLists as $packingList){ - - if($packingList->status === ApprovalStatus::PENDING_VERIFICATION){ - $packingList->status = ApprovalStatus::APPROVED; - $packingList->save(); - } - - $signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture; - foreach($packingList->steps()->where('reference', '!=', 'DELIVERY')->get() as $step){ - $this->updatesContractObligations->execute($signature, $step->obligation_hash_id); - $step->update(['status' => ApprovalStatus::COMPLETED]); - } - } - } - - - } - - - } - db::commit(); - } catch (\Exception $exception) { - dd($exception); + if($start->isBefore($startLimit)){ + $start = $startLimit; } + $end = $end ? $end : Carbon::now(); + + $orderRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/GetOrderList.ashx', 'GET', [ + 'begintime' => $start->timestamp, + 'endtime' => $end->timestamp, + ]); + + $rows = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest); +dd($rows); + foreach($rows->data as $row){ + $containerReference = null; + $loadingDate = null; + $unstuffingDate = null; + $etd = null; + $eta = null; + + $trackingRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/ApiTracking.ashx', 'GET', [ + 'trakingno' => $row->expressno + ]); + $rows = $this->fetchesDataFRomYDPortal->getResponseBody($trackingRequest); + foreach ($rows->data as $trackingRow) { + if($trackingRow->tracking === '货物已送达仓库准备入库中'){ + $receiveDate = Carbon::parse($trackingRow->trackingtime); + } + + if (strpos($trackingRow->tracking, '货物装柜完成。') !== false) { + $tracking = explode(':', $trackingRow->tracking); + $containerReference = explode('预计到港时间', $tracking[1])[0]; + $loadingDate = Carbon::parse($trackingRow->trackingtime); + $etd = Carbon::parse($tracking[2])->subDays(5); + $eta = Carbon::parse($tracking[2]); + } + + if($trackingRow->tracking === '货物已进目的港仓库'){ + $unstuffingDate = Carbon::parse($trackingRow->trackingtime); + } + } + + $customerno = preg_split('/(-|\/)/', $row->customerno); + + if (!array_key_exists(2, $customerno)){ + if (!array_key_exists(1, $customerno)){ + continue; + } + $customerno[2] = substr($customerno[1], -9); + } + + + $orderNumber = $customerno[2]; + + try { + $order = $this->fetchesOrder->execute(['reference' => $orderNumber]); + } catch (ResourceNotFoundException $exception) { + continue; + } + + $packingListReference = $row->expressno; + + try{ + $packingList = $this->fetchesPackingList->execute(['reference' => $row->expressno]); + } catch (ResourceNotFoundException $exception){ + + $warehouseReceiveObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::WAREHOUSE_RECEIVE_LIST, ApprovalStatus::APPROVED); + /** @var PackingList $warehouseReceiveList */ + $warehouseReceiveList = $this->createPackingListProcessor->execute($warehouseReceiveObject, $order); + $transportObject = new TransportObject(TransportType::LAND, null, $row->kuaidilist, Carbon::parse($receiveDate), Carbon::parse($receiveDate), ApprovalStatus::APPROVED); + $this->createsTransport->execute($transportObject, $warehouseReceiveList); + + $contract = $this->unityCreateContract->execute(); + $contractReference = $contract->hash_id; + $contractObligations = $contract->contract_obligation_list; + + $this->unityActivateContract->execute($contractReference); + + $supervisorHashId = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->unity_hash_id; + + $supervisorContractEntity = $this->unityCreateContractEntity->execute($contractReference, $supervisorHashId); + $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->update(['entity_hash_id' => $supervisorContractEntity->hash_id, 'entity_signature' => $supervisorContractEntity->entity_signature_hash_id]); + + $importerContractEntity = $this->unityCreateContractEntity->execute($contractReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->appointee->unity_hash_id); + $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->update(['entity_hash_id' => $importerContractEntity->hash_id, 'entity_signature' => $importerContractEntity->entity_signature_hash_id]); + + $this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations); + + $packingListObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::SHIPPING_PACKING_LIST, ApprovalStatus::PENDING_VERIFICATION , $contractReference); + + /** @var PackingList $packingList */ + $packingList = $this->createPackingListProcessor->execute($packingListObject, $order); + + foreach($contractObligations as $obligation) { + $stepObject = new StepsObject($order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, $obligation->reference, $obligation->sequence, $obligation->hash_id); + $this->createsStep->execute($packingList, $stepObject); + } + + foreach($row->deliverysize as $package) { + $packageObject = new PackageObject(PackageType::CARTON, $row->goodname, (float) $package->width, (float) $package->height, (float) $package->length, 0, (float) $package->num, ApprovalStatus::APPROVED); + $this->createPackageProcessor->execute($packageObject, $warehouseReceiveList); + $this->createPackageProcessor->execute($packageObject, $packingList); + } + } + + if($containerReference) { + try { + $container = $this->fetchesContainer->execute(['reference' => $containerReference]); + } catch (ResourceNotFoundException $exception){ + $originWarehouse = $this->fetchesCompanyModule->execute(['id' => $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id]); + $containerObject = new ContainerObject($containerReference, '', '', ContainerTypes::FORTY_FEET_DRY_CONTAINER, $loadingDate, ApprovalStatus::PENDING_VERIFICATION); + /** @var Container $container */ + $container = $this->createContainerProcessor->execute($containerObject, $originWarehouse); + + $container->packingLists()->attach($packingList); + + $transport = $container->transports()->first(); + + if(!$transport){ + $transportObject = new TransportObject(TransportType::SEA, null, null, $etd, null, ApprovalStatus::APPROVED); + /** @var Transport $transport */ + $transport = $this->createsTransport->execute($transportObject, $container); + $this->createsSchedule->execute($transport, new ScheduleObject($etd, $eta, ApprovalStatus::APPROVED)); + } + } + + if($unstuffingDate){ + $container->update(['status' => ApprovalStatus::COMPLETED]); + $container->transports()->first()->update(['drop_date' => $unstuffingDate, 'status' => ApprovalStatus::COMPLETED]); + + /** @var PackingList $packingList */ + foreach($container->packingLists as $packingList){ + + if($packingList->status === ApprovalStatus::PENDING_VERIFICATION){ + $packingList->status = ApprovalStatus::APPROVED; + $packingList->save(); + } + + $signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture; + foreach($packingList->steps()->where('reference', '!=', 'DELIVERY')->get() as $step){ + $this->updatesContractObligations->execute($signature, $step->obligation_hash_id); + $step->update(['status' => ApprovalStatus::COMPLETED]); + } + } + } + + + } + + + } + db::commit(); } } From c698466b3d77c18170957363662b1e77bb9848a5 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 00:46:52 +0800 Subject: [PATCH 059/223] YD curl request --- app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php b/app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php index 37b1c295..4948ad4f 100644 --- a/app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php +++ b/app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php @@ -19,6 +19,8 @@ class FetchesDataFromYDPortal $client = new \GuzzleHttp\Client(); + $body['apicode'] = env('YD_API_CODE'); + $request = $client->requestAsync($method, $url, ['query' => $body]); return $request->wait(); From 81a7d79e0cfc5ecfef3b145082e2b3e24e88db20 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 00:47:07 +0800 Subject: [PATCH 060/223] YD curl request --- .../Processors/FetchOrderListsFromYdPortalProcessor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php index 12d05880..4821d4a7 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php @@ -155,7 +155,7 @@ class FetchOrderListsFromYdPortalProcessor ]); $rows = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest); -dd($rows); + foreach($rows->data as $row){ $containerReference = null; $loadingDate = null; From e18f49b5b7340d27e13d99c1169a333f9e147538 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 00:48:00 +0800 Subject: [PATCH 061/223] YD curl request --- .../Processors/FetchOrderListsFromYdPortalProcessor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php index 4821d4a7..b5574467 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php @@ -269,7 +269,7 @@ class FetchOrderListsFromYdPortalProcessor } } - if($unstuffingDate){ + if($unstuffingDate && $container->status !== ApprovalStatus::COMPLETED){ $container->update(['status' => ApprovalStatus::COMPLETED]); $container->transports()->first()->update(['drop_date' => $unstuffingDate, 'status' => ApprovalStatus::COMPLETED]); From 9ebacae701b0f9f660c5a55b21ccd9f42c0d5a7f Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 00:50:32 +0800 Subject: [PATCH 062/223] YD curl request --- .../Processors/FetchOrderListsFromYdPortalProcessor.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php index b5574467..1730fe53 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php @@ -216,6 +216,7 @@ class FetchOrderListsFromYdPortalProcessor $this->createsTransport->execute($transportObject, $warehouseReceiveList); $contract = $this->unityCreateContract->execute(); + dd($contract); $contractReference = $contract->hash_id; $contractObligations = $contract->contract_obligation_list; From 6b4d2736c5047ff632734fcc3f3781111fc0c00d Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 00:53:04 +0800 Subject: [PATCH 063/223] YD curl request --- app/Classes/Modules/Unity/Services/CreatesContract.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Classes/Modules/Unity/Services/CreatesContract.php b/app/Classes/Modules/Unity/Services/CreatesContract.php index 43451b1b..63ce6c85 100644 --- a/app/Classes/Modules/Unity/Services/CreatesContract.php +++ b/app/Classes/Modules/Unity/Services/CreatesContract.php @@ -2,7 +2,7 @@ namespace App\Classes\Modules\Unity\Services; -use Config; +use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Http; use App\Classes\Modules\Unity\Services\GetAccessToken; @@ -27,7 +27,7 @@ class CreatesContract $response = Http::withToken($accessToken)->post($this->createEntityEndpoint,['contract_template_id'=>[$this->contract_hash_id]])->object(); - return (isset($response->data)) ? $response->data : null; + return $response->data; } } From b7077174189a51d221127bd2fe6999014dccfd30 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 01:02:11 +0800 Subject: [PATCH 064/223] YD curl request --- routes/web.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/routes/web.php b/routes/web.php index 099c4368..5bfa2975 100644 --- a/routes/web.php +++ b/routes/web.php @@ -93,12 +93,12 @@ Route::get('/orders/refresh', function(){ FetchOrdersFromYDPortalJob::dispatch(); - FetchWarehouseReceiveListFromVTPortalJob::withChain([ - new FetchLoadedContainersFromVTPortalJob, - new FetchPackingListFromVTPortalJob, - new FetchContainersStatusUpdateFromVTPortalJob, - new FetchDeliveryListFromVTPortalJob - ])->dispatch(); +// FetchWarehouseReceiveListFromVTPortalJob::withChain([ +// new FetchLoadedContainersFromVTPortalJob, +// new FetchPackingListFromVTPortalJob, +// new FetchContainersStatusUpdateFromVTPortalJob, +// new FetchDeliveryListFromVTPortalJob +// ])->dispatch(); return redirect('orders'); From 28ad88900e5c6c73a846b26eb8e0627c4cc6a6a2 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 01:05:23 +0800 Subject: [PATCH 065/223] YD curl request --- app/Classes/Modules/Unity/Services/CreatesContract.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/Unity/Services/CreatesContract.php b/app/Classes/Modules/Unity/Services/CreatesContract.php index 63ce6c85..a0dd2aa8 100644 --- a/app/Classes/Modules/Unity/Services/CreatesContract.php +++ b/app/Classes/Modules/Unity/Services/CreatesContract.php @@ -26,7 +26,7 @@ class CreatesContract $accessToken=$this->getAccessToken->execute(); $response = Http::withToken($accessToken)->post($this->createEntityEndpoint,['contract_template_id'=>[$this->contract_hash_id]])->object(); - +dd($response); return $response->data; } From c07aa6c1f1d5d1f2bc68775284dcf50e4a931abd Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 01:13:51 +0800 Subject: [PATCH 066/223] YD curl request --- .../Unity/Services/CreatesContract.php | 21 +++++++++++++------ .../Modules/Unity/Services/GetAccessToken.php | 4 ++-- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/app/Classes/Modules/Unity/Services/CreatesContract.php b/app/Classes/Modules/Unity/Services/CreatesContract.php index a0dd2aa8..b9fb1ce8 100644 --- a/app/Classes/Modules/Unity/Services/CreatesContract.php +++ b/app/Classes/Modules/Unity/Services/CreatesContract.php @@ -4,28 +4,37 @@ namespace App\Classes\Modules\Unity\Services; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Http; -use App\Classes\Modules\Unity\Services\GetAccessToken; class CreatesContract { + /** @var GetAccessToken */ private $getAccessToken; - private $createEntityEndpoint; + /** @var string */ + private $createContract; + /** @var string */ private $contract_hash_id; - public function __construct(GetAccessToken $getAccessToken) + /** + * CreatesContract constructor. + * @param GetAccessToken $getAccessToken + * @param string $createContract + * @param string $contract_hash_id + */ + public function __construct(GetAccessToken $getAccessToken, string $createContract, string $contract_hash_id) { - $this->createEntityEndpoint = Config::get('unity.url').Config::get('unity.endpoint.create_contract'); $this->getAccessToken = $getAccessToken; - $this->contract_hash_id = Config::get('unity.contract_template_hash_id'); + $this->createContract = $createContract; + $this->contract_hash_id = $contract_hash_id; } + public function execute(){ $accessToken=$this->getAccessToken->execute(); - $response = Http::withToken($accessToken)->post($this->createEntityEndpoint,['contract_template_id'=>[$this->contract_hash_id]])->object(); + $response = Http::withToken($accessToken)->post($this->createContract,['contract_template_id'=>[$this->contract_hash_id]])->object(); dd($response); return $response->data; diff --git a/app/Classes/Modules/Unity/Services/GetAccessToken.php b/app/Classes/Modules/Unity/Services/GetAccessToken.php index 40cf5883..5f5e478b 100644 --- a/app/Classes/Modules/Unity/Services/GetAccessToken.php +++ b/app/Classes/Modules/Unity/Services/GetAccessToken.php @@ -2,8 +2,8 @@ namespace App\Classes\Modules\Unity\Services; -use Config; -use Cache; +use Illuminate\Support\Facades\Config; +use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Http; class GetAccessToken From 4ef90f7cf23ba8be6167e780df9aaf5969d11535 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 01:15:49 +0800 Subject: [PATCH 067/223] YD curl request --- .../Modules/Unity/Services/CreatesContract.php | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/app/Classes/Modules/Unity/Services/CreatesContract.php b/app/Classes/Modules/Unity/Services/CreatesContract.php index b9fb1ce8..45252a36 100644 --- a/app/Classes/Modules/Unity/Services/CreatesContract.php +++ b/app/Classes/Modules/Unity/Services/CreatesContract.php @@ -10,26 +10,17 @@ class CreatesContract /** @var GetAccessToken */ private $getAccessToken; - /** @var string */ private $createContract; - /** @var string */ private $contract_hash_id; - /** - * CreatesContract constructor. - * @param GetAccessToken $getAccessToken - * @param string $createContract - * @param string $contract_hash_id - */ - public function __construct(GetAccessToken $getAccessToken, string $createContract, string $contract_hash_id) + public function __construct(GetAccessToken $getAccessToken) { + $this->createContract = Config::get('unity.url').Config::get('unity.endpoint.create_contract'); $this->getAccessToken = $getAccessToken; - $this->createContract = $createContract; - $this->contract_hash_id = $contract_hash_id; + $this->contract_hash_id = Config::get('unity.contract_template_hash_id'); } - public function execute(){ $accessToken=$this->getAccessToken->execute(); From bfbe07dc8e8ed545dedb0c84d4deff4f93ab64b8 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 01:18:17 +0800 Subject: [PATCH 068/223] YD curl request --- app/Classes/Modules/Unity/Services/CreatesContract.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Classes/Modules/Unity/Services/CreatesContract.php b/app/Classes/Modules/Unity/Services/CreatesContract.php index 45252a36..1872b23a 100644 --- a/app/Classes/Modules/Unity/Services/CreatesContract.php +++ b/app/Classes/Modules/Unity/Services/CreatesContract.php @@ -16,6 +16,7 @@ class CreatesContract public function __construct(GetAccessToken $getAccessToken) { + dd(Config::get('unity.url')); $this->createContract = Config::get('unity.url').Config::get('unity.endpoint.create_contract'); $this->getAccessToken = $getAccessToken; $this->contract_hash_id = Config::get('unity.contract_template_hash_id'); @@ -23,7 +24,7 @@ class CreatesContract public function execute(){ - $accessToken=$this->getAccessToken->execute(); + $accessToken= $this->getAccessToken->execute(); $response = Http::withToken($accessToken)->post($this->createContract,['contract_template_id'=>[$this->contract_hash_id]])->object(); dd($response); From 65b49d4d613c68346115eec6a1e9c6280a562ad3 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 01:19:17 +0800 Subject: [PATCH 069/223] YD curl request --- app/Classes/Modules/Unity/Services/CreatesContract.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/Classes/Modules/Unity/Services/CreatesContract.php b/app/Classes/Modules/Unity/Services/CreatesContract.php index 1872b23a..a76c0a89 100644 --- a/app/Classes/Modules/Unity/Services/CreatesContract.php +++ b/app/Classes/Modules/Unity/Services/CreatesContract.php @@ -4,10 +4,10 @@ namespace App\Classes\Modules\Unity\Services; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Http; +use App\Classes\Modules\Unity\Services\GetAccessToken; class CreatesContract { - /** @var GetAccessToken */ private $getAccessToken; private $createContract; @@ -16,7 +16,6 @@ class CreatesContract public function __construct(GetAccessToken $getAccessToken) { - dd(Config::get('unity.url')); $this->createContract = Config::get('unity.url').Config::get('unity.endpoint.create_contract'); $this->getAccessToken = $getAccessToken; $this->contract_hash_id = Config::get('unity.contract_template_hash_id'); @@ -24,7 +23,7 @@ class CreatesContract public function execute(){ - $accessToken= $this->getAccessToken->execute(); + $accessToken=$this->getAccessToken->execute(); $response = Http::withToken($accessToken)->post($this->createContract,['contract_template_id'=>[$this->contract_hash_id]])->object(); dd($response); From dac4470f727c77b5cc8e3fdee25dc1b61a8c33f9 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 01:20:04 +0800 Subject: [PATCH 070/223] YD curl request --- .../Modules/Unity/Services/CreatesContract.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/app/Classes/Modules/Unity/Services/CreatesContract.php b/app/Classes/Modules/Unity/Services/CreatesContract.php index a76c0a89..6e8dbf8c 100644 --- a/app/Classes/Modules/Unity/Services/CreatesContract.php +++ b/app/Classes/Modules/Unity/Services/CreatesContract.php @@ -2,7 +2,7 @@ namespace App\Classes\Modules\Unity\Services; -use Illuminate\Support\Facades\Config; +use Config; use Illuminate\Support\Facades\Http; use App\Classes\Modules\Unity\Services\GetAccessToken; @@ -10,13 +10,14 @@ class CreatesContract { private $getAccessToken; - private $createContract; + private $createEntityEndpoint; private $contract_hash_id; public function __construct(GetAccessToken $getAccessToken) { - $this->createContract = Config::get('unity.url').Config::get('unity.endpoint.create_contract'); + dd(Config::get('unity.url')); + $this->createEntityEndpoint = Config::get('unity.url').Config::get('unity.endpoint.create_contract'); $this->getAccessToken = $getAccessToken; $this->contract_hash_id = Config::get('unity.contract_template_hash_id'); } @@ -25,9 +26,9 @@ class CreatesContract $accessToken=$this->getAccessToken->execute(); - $response = Http::withToken($accessToken)->post($this->createContract,['contract_template_id'=>[$this->contract_hash_id]])->object(); -dd($response); - return $response->data; + $response = Http::withToken($accessToken)->post($this->createEntityEndpoint,['contract_template_id'=>[$this->contract_hash_id]])->object(); + + return (isset($response->data)) ? $response->data : null; } } From 187411237d76541ac9e627ca059b2d3ae7ea073b Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 01:20:18 +0800 Subject: [PATCH 071/223] YD curl request --- app/Classes/Modules/Unity/Services/GetAccessToken.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Classes/Modules/Unity/Services/GetAccessToken.php b/app/Classes/Modules/Unity/Services/GetAccessToken.php index 5f5e478b..40cf5883 100644 --- a/app/Classes/Modules/Unity/Services/GetAccessToken.php +++ b/app/Classes/Modules/Unity/Services/GetAccessToken.php @@ -2,8 +2,8 @@ namespace App\Classes\Modules\Unity\Services; -use Illuminate\Support\Facades\Config; -use Illuminate\Support\Facades\Cache; +use Config; +use Cache; use Illuminate\Support\Facades\Http; class GetAccessToken From 1426d6f13c3b53d8a5164d400a13dafbcca5cb11 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 01:21:19 +0800 Subject: [PATCH 072/223] YD curl request --- app/Classes/Modules/Unity/Services/CreatesContract.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/Unity/Services/CreatesContract.php b/app/Classes/Modules/Unity/Services/CreatesContract.php index 6e8dbf8c..2718dc04 100644 --- a/app/Classes/Modules/Unity/Services/CreatesContract.php +++ b/app/Classes/Modules/Unity/Services/CreatesContract.php @@ -16,7 +16,6 @@ class CreatesContract public function __construct(GetAccessToken $getAccessToken) { - dd(Config::get('unity.url')); $this->createEntityEndpoint = Config::get('unity.url').Config::get('unity.endpoint.create_contract'); $this->getAccessToken = $getAccessToken; $this->contract_hash_id = Config::get('unity.contract_template_hash_id'); @@ -24,6 +23,7 @@ class CreatesContract public function execute(){ + dd($this->createEntityEndpoint); $accessToken=$this->getAccessToken->execute(); $response = Http::withToken($accessToken)->post($this->createEntityEndpoint,['contract_template_id'=>[$this->contract_hash_id]])->object(); From 1f0f5e8afd5b808025329128ab15f52d90721f68 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 01:22:47 +0800 Subject: [PATCH 073/223] YD curl request --- app/Classes/Modules/Unity/Services/CreatesContract.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Classes/Modules/Unity/Services/CreatesContract.php b/app/Classes/Modules/Unity/Services/CreatesContract.php index 2718dc04..a89e920c 100644 --- a/app/Classes/Modules/Unity/Services/CreatesContract.php +++ b/app/Classes/Modules/Unity/Services/CreatesContract.php @@ -23,11 +23,11 @@ class CreatesContract public function execute(){ - dd($this->createEntityEndpoint); + $accessToken=$this->getAccessToken->execute(); $response = Http::withToken($accessToken)->post($this->createEntityEndpoint,['contract_template_id'=>[$this->contract_hash_id]])->object(); - +dd($response); return (isset($response->data)) ? $response->data : null; } From 0220f876c45e57c28856983ea36f10d5376de2da Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 01:23:35 +0800 Subject: [PATCH 074/223] YD curl request --- app/Classes/Modules/Unity/Services/CreatesContract.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/Unity/Services/CreatesContract.php b/app/Classes/Modules/Unity/Services/CreatesContract.php index a89e920c..d7328796 100644 --- a/app/Classes/Modules/Unity/Services/CreatesContract.php +++ b/app/Classes/Modules/Unity/Services/CreatesContract.php @@ -26,7 +26,7 @@ class CreatesContract $accessToken=$this->getAccessToken->execute(); - $response = Http::withToken($accessToken)->post($this->createEntityEndpoint,['contract_template_id'=>[$this->contract_hash_id]])->object(); + $response = Http::withToken($accessToken)->post($this->createEntityEndpoint,['contract_template_id'=>[$this->contract_hash_id]]); dd($response); return (isset($response->data)) ? $response->data : null; From 5599c1ba71fced8da2c0a7caf50f9c04c643959f Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 02:54:49 +0800 Subject: [PATCH 075/223] YD curl request --- app/Classes/Modules/Unity/Services/CreatesContract.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/Unity/Services/CreatesContract.php b/app/Classes/Modules/Unity/Services/CreatesContract.php index d7328796..ae878e15 100644 --- a/app/Classes/Modules/Unity/Services/CreatesContract.php +++ b/app/Classes/Modules/Unity/Services/CreatesContract.php @@ -27,7 +27,7 @@ class CreatesContract $accessToken=$this->getAccessToken->execute(); $response = Http::withToken($accessToken)->post($this->createEntityEndpoint,['contract_template_id'=>[$this->contract_hash_id]]); -dd($response); + return (isset($response->data)) ? $response->data : null; } From eeaba20fb0fd04f82cc84dbcfeb79a64e4e655c7 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 03:16:06 +0800 Subject: [PATCH 076/223] YD curl request --- .../Processors/FetchOrderListsFromYdPortalProcessor.php | 2 +- app/Classes/Modules/Unity/Services/CreatesContract.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php index 1730fe53..a95afb3d 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php @@ -216,7 +216,7 @@ class FetchOrderListsFromYdPortalProcessor $this->createsTransport->execute($transportObject, $warehouseReceiveList); $contract = $this->unityCreateContract->execute(); - dd($contract); + $contractReference = $contract->hash_id; $contractObligations = $contract->contract_obligation_list; diff --git a/app/Classes/Modules/Unity/Services/CreatesContract.php b/app/Classes/Modules/Unity/Services/CreatesContract.php index ae878e15..a1c2443c 100644 --- a/app/Classes/Modules/Unity/Services/CreatesContract.php +++ b/app/Classes/Modules/Unity/Services/CreatesContract.php @@ -27,7 +27,7 @@ class CreatesContract $accessToken=$this->getAccessToken->execute(); $response = Http::withToken($accessToken)->post($this->createEntityEndpoint,['contract_template_id'=>[$this->contract_hash_id]]); - +dd($response->object()); return (isset($response->data)) ? $response->data : null; } From 6874d09ced038182a2c33b9f74686af78260d56a Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 03:17:44 +0800 Subject: [PATCH 077/223] YD curl request --- app/Classes/Modules/Unity/Services/CreatesContract.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/Unity/Services/CreatesContract.php b/app/Classes/Modules/Unity/Services/CreatesContract.php index a1c2443c..2b753924 100644 --- a/app/Classes/Modules/Unity/Services/CreatesContract.php +++ b/app/Classes/Modules/Unity/Services/CreatesContract.php @@ -27,7 +27,7 @@ class CreatesContract $accessToken=$this->getAccessToken->execute(); $response = Http::withToken($accessToken)->post($this->createEntityEndpoint,['contract_template_id'=>[$this->contract_hash_id]]); -dd($response->object()); +dd('test'); return (isset($response->data)) ? $response->data : null; } From 27f2367e886d683e8954f2cf9b83fc8b34841e6d Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 03:19:28 +0800 Subject: [PATCH 078/223] YD curl request --- app/Classes/Modules/Unity/Services/CreatesContract.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/Unity/Services/CreatesContract.php b/app/Classes/Modules/Unity/Services/CreatesContract.php index 2b753924..d7328796 100644 --- a/app/Classes/Modules/Unity/Services/CreatesContract.php +++ b/app/Classes/Modules/Unity/Services/CreatesContract.php @@ -27,7 +27,7 @@ class CreatesContract $accessToken=$this->getAccessToken->execute(); $response = Http::withToken($accessToken)->post($this->createEntityEndpoint,['contract_template_id'=>[$this->contract_hash_id]]); -dd('test'); +dd($response); return (isset($response->data)) ? $response->data : null; } From 7b791abf80631dab39ed737b971d1f142bd3d261 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 03:22:08 +0800 Subject: [PATCH 079/223] YD curl request --- app/Classes/Modules/Unity/Services/CreatesContract.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Classes/Modules/Unity/Services/CreatesContract.php b/app/Classes/Modules/Unity/Services/CreatesContract.php index d7328796..88ef138d 100644 --- a/app/Classes/Modules/Unity/Services/CreatesContract.php +++ b/app/Classes/Modules/Unity/Services/CreatesContract.php @@ -26,8 +26,8 @@ class CreatesContract $accessToken=$this->getAccessToken->execute(); - $response = Http::withToken($accessToken)->post($this->createEntityEndpoint,['contract_template_id'=>[$this->contract_hash_id]]); -dd($response); + $response = Http::withToken($accessToken)->post($this->createEntityEndpoint,['contract_template_id'=>[$this->contract_hash_id]])->object(); + return (isset($response->data)) ? $response->data : null; } From 898205ec9db0594cace1df6c5fefcd51834313b1 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 03:28:17 +0800 Subject: [PATCH 080/223] fix package component before loading to container --- .../assets/vue/components/orders/elements/PackageComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/orders/elements/PackageComponent.vue b/resources/assets/vue/components/orders/elements/PackageComponent.vue index fb804ad6..d0ae4ade 100644 --- a/resources/assets/vue/components/orders/elements/PackageComponent.vue +++ b/resources/assets/vue/components/orders/elements/PackageComponent.vue @@ -69,7 +69,7 @@
-
+
From 906623bad3313a6f8ee5eef05250e9f71ec92d4a Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 03:29:16 +0800 Subject: [PATCH 081/223] fix package component before loading to container --- .../assets/vue/components/orders/elements/PackageComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/orders/elements/PackageComponent.vue b/resources/assets/vue/components/orders/elements/PackageComponent.vue index d0ae4ade..3dac120e 100644 --- a/resources/assets/vue/components/orders/elements/PackageComponent.vue +++ b/resources/assets/vue/components/orders/elements/PackageComponent.vue @@ -142,7 +142,7 @@
-
+
From 41d9769d042a389acbbcc8a950e6b985b0bfce46 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 29 Dec 2021 03:30:42 +0800 Subject: [PATCH 082/223] fix package component before loading to container --- routes/web.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/routes/web.php b/routes/web.php index 5bfa2975..099c4368 100644 --- a/routes/web.php +++ b/routes/web.php @@ -93,12 +93,12 @@ Route::get('/orders/refresh', function(){ FetchOrdersFromYDPortalJob::dispatch(); -// FetchWarehouseReceiveListFromVTPortalJob::withChain([ -// new FetchLoadedContainersFromVTPortalJob, -// new FetchPackingListFromVTPortalJob, -// new FetchContainersStatusUpdateFromVTPortalJob, -// new FetchDeliveryListFromVTPortalJob -// ])->dispatch(); + FetchWarehouseReceiveListFromVTPortalJob::withChain([ + new FetchLoadedContainersFromVTPortalJob, + new FetchPackingListFromVTPortalJob, + new FetchContainersStatusUpdateFromVTPortalJob, + new FetchDeliveryListFromVTPortalJob + ])->dispatch(); return redirect('orders'); From 82517e3cb3d658cd075c8f524ac6b705073156a8 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Fri, 31 Dec 2021 17:02:49 +0800 Subject: [PATCH 083/223] sort customers orders by latest --- .../vue/components/orders/sections/OrderSectionComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/orders/sections/OrderSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderSectionComponent.vue index 5000ec6d..319ba7ca 100644 --- a/resources/assets/vue/components/orders/sections/OrderSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderSectionComponent.vue @@ -179,7 +179,7 @@
- + From 33086eb1a6caa7284aa50ff6d85b063705e73c72 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Fri, 31 Dec 2021 17:04:00 +0800 Subject: [PATCH 084/223] sort customers orders by latest --- .../vue/components/orders/sections/OrderSectionComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/orders/sections/OrderSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderSectionComponent.vue index f9660969..f222a238 100644 --- a/resources/assets/vue/components/orders/sections/OrderSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderSectionComponent.vue @@ -170,7 +170,7 @@
- + From 7bd24b65473409d9639c8b458087173c7d6c7a87 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Mon, 3 Jan 2022 08:36:41 +0800 Subject: [PATCH 085/223] clean up before production --- .../orders/forms/OrderRemarkFormComponent.vue | 4 ++-- resources/views/pages/orders/index.blade.php | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue b/resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue index 79273650..3e0f1fdc 100644 --- a/resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue +++ b/resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue @@ -5,8 +5,8 @@
-
- +
+
diff --git a/resources/views/pages/orders/index.blade.php b/resources/views/pages/orders/index.blade.php index d4633a81..11bce1f4 100644 --- a/resources/views/pages/orders/index.blade.php +++ b/resources/views/pages/orders/index.blade.php @@ -1,11 +1,11 @@ @extends('layouts.base_portal') @section('inner_content') -
-
- -
- - + {{--
--}} + {{--
--}} + {{--
--}} + {{--
Refresh Orders
--}} + {{--
--}} + {{--
--}} + {{----}} + @endsection \ No newline at end of file From d2fe2bfef47f157496c7e92d114b267b0ed87a59 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Mon, 3 Jan 2022 09:28:03 +0800 Subject: [PATCH 086/223] adjust column size for order remark input --- .../vue/components/orders/forms/OrderRemarkFormComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue b/resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue index 3e0f1fdc..b57e0115 100644 --- a/resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue +++ b/resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue @@ -1,6 +1,6 @@