From 64f108163a048ab572188b5d7ace0ec709adadce Mon Sep 17 00:00:00 2001 From: glovetleong Date: Sun, 12 Sep 2021 14:27:17 +0800 Subject: [PATCH 01/11] package ui --- .../Packages/CreatePackageLogic.php | 1 - .../forms/CreatePackageFormComponent.vue | 108 ++++++++++++++++++ .../sections/OrderProfileSectionComponent.vue | 8 +- .../validation/createPackageFormValidation.js | 37 ++++++ 4 files changed, 152 insertions(+), 2 deletions(-) create mode 100644 resources/assets/vue/components/orders/forms/CreatePackageFormComponent.vue create mode 100644 resources/assets/vue/general/mixins/orders/validation/createPackageFormValidation.js diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Packages/CreatePackageLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Packages/CreatePackageLogic.php index 80a5ee5d..0a3b091c 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/Packages/CreatePackageLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/Packages/CreatePackageLogic.php @@ -72,7 +72,6 @@ class CreatePackageLogic extends AbstractControllerLogic $request->input('height'), $request->input('length'), $request->input('weight'), - 0, $request->input('quantity'), ApprovalStatus::PENDING_VERIFICATION); diff --git a/resources/assets/vue/components/orders/forms/CreatePackageFormComponent.vue b/resources/assets/vue/components/orders/forms/CreatePackageFormComponent.vue new file mode 100644 index 00000000..a968fb9e --- /dev/null +++ b/resources/assets/vue/components/orders/forms/CreatePackageFormComponent.vue @@ -0,0 +1,108 @@ + + \ 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 22215504..8580e481 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue @@ -218,7 +218,7 @@
-
+
@@ -232,6 +232,12 @@ viewBox="0 0 172 172" style=" fill:#000000;">
+
+
Add
+ + + +
diff --git a/resources/assets/vue/general/mixins/orders/validation/createPackageFormValidation.js b/resources/assets/vue/general/mixins/orders/validation/createPackageFormValidation.js new file mode 100644 index 00000000..c59745b9 --- /dev/null +++ b/resources/assets/vue/general/mixins/orders/validation/createPackageFormValidation.js @@ -0,0 +1,37 @@ +import { required, numeric } from "vuelidate/lib/validators"; + +export default { + validations: { + parameters: { + type: { + required + }, + description: { + required + }, + width: { + required, + numeric + }, + height: { + required, + numeric + }, + length: { + required, + numeric + }, + weight: { + required, + numeric + }, + quantity: { + required, + numeric + }, + reference: { + required + } + } + }, +} \ No newline at end of file From 174992cc65d4178cff8d890a5902781794c76b5a Mon Sep 17 00:00:00 2001 From: glovetleong Date: Tue, 14 Sep 2021 17:02:42 +0800 Subject: [PATCH 02/11] create package list ui edit create package list api --- .../CreatePackingListLogic.php | 82 ++++++-- .../Processors/CreatePackingListProcessor.php | 2 +- ...ecksIfPackingListReferenceNumberExists.php | 21 ++ .../GeneratesPackageListReferenceNumber.php | 30 +++ package.json | 1 + .../assets/sass/modules/_form_elements.scss | 1 - .../general/forms/DatePickerComponent.vue | 37 ++++ .../forms/CreatePackageFormComponent.vue | 2 +- .../forms/CreatePackageListFormComponent.vue | 75 +++++++ .../orders/forms/PackageFormComponent.vue | 194 ++++++++++++++++++ .../sections/OrderProfileSectionComponent.vue | 6 +- .../createPackageListFormValidation.js | 14 ++ 12 files changed, 444 insertions(+), 21 deletions(-) create mode 100644 app/Classes/Modules/PackingLists/Services/ChecksIfPackingListReferenceNumberExists.php create mode 100644 app/Classes/Modules/PackingLists/Services/GeneratesPackageListReferenceNumber.php create mode 100644 resources/assets/vue/components/general/forms/DatePickerComponent.vue create mode 100644 resources/assets/vue/components/orders/forms/CreatePackageListFormComponent.vue create mode 100644 resources/assets/vue/components/orders/forms/PackageFormComponent.vue create mode 100644 resources/assets/vue/general/mixins/orders/validation/createPackageListFormValidation.js diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/CreatePackingListLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/CreatePackingListLogic.php index afd8f3d7..eee596b0 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/CreatePackingListLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/CreatePackingListLogic.php @@ -2,24 +2,26 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic; -use App\Classes\Modules\Companies\Services\FetchesCompany; -use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject; -use App\Classes\Modules\PackingLists\Processors\CreatePackingListProcessor; -use App\Classes\Modules\Orders\Services\FetchesOrder; -use App\Classes\Modules\PackingLists\Services\Packages\FetchesPackage; -use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\General\Abstracts\AbstractControllerLogic; -use App\Classes\Modules\PackingLists\Services\CreatesPackingList; -use App\Classes\Modules\PackingLists\Services\CreatesPackingListPackage; -use App\Classes\Modules\PackingLists\Standards\Rules\CanCreatePackingList; -use App\Classes\Modules\PackingLists\Standards\Rules\CanCreatePackingListPackage; +use App\Classes\Modules\PackingLists\Processors\CreatePackingListProcessor; +use App\Classes\Modules\PackingLists\Processors\CreatePackageProcessor; +use App\Classes\Modules\Orders\Services\FetchesOrder; +use App\Classes\Modules\Transports\Services\CreatesTransport; +use App\Classes\Modules\PackingLists\Services\GeneratesPackingListReferenceNumber; +use App\Classes\Modules\Schedules\Services\CreatesSchedule; use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject; +use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject; +use App\Classes\Modules\Transports\DataTransferObjects\TransportObject; +use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject; +use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\OrderRoleTypes; use App\Classes\ValueObjects\Constants\PackingListType; +use App\Classes\ValueObjects\Constants\TransportType; use App\Http\Resources\PackingListResource; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Carbon\Carbon; class CreatePackingListLogic extends AbstractControllerLogic { @@ -38,6 +40,18 @@ class CreatePackingListLogic extends AbstractControllerLogic /** @var CreatePackingListProcessor */ private $createPackingListProcessor; + /** @var GeneratesPackingListReferenceNumber */ + private $generatesPackingListReferenceNumber; + + /** @var CreatesTransport */ + private $createsTransport; + + /** @var CreatePackageProcessor */ + private $createPackageProcessor; + + /** @var CreatesSchedule */ + private $createsSchedule; + /** @var FetchesOrder */ private $fetchesOrder; @@ -46,9 +60,20 @@ class CreatePackingListLogic extends AbstractControllerLogic * @param CreatePackingListProcessor $createPackingListProcessor * @param FetchesOrder $fetchesOrder */ - public function __construct(CreatePackingListProcessor $createPackingListProcessor, FetchesOrder $fetchesOrder) + public function __construct( + CreatePackingListProcessor $createPackingListProcessor, + CreatesTransport $createsTransport, + CreatesSchedule $createsSchedule, + CreatePackageProcessor $createPackageProcessor, + GeneratesPackingListReferenceNumber $generatesPackingListReferenceNumber, + FetchesOrder $fetchesOrder + ) { $this->createPackingListProcessor = $createPackingListProcessor; + $this->createsTransport = $createsTransport; + $this->createsSchedule = $createsSchedule; + $this->createPackageProcessor = $createPackageProcessor; + $this->generatesPackingListReferenceNumber = $generatesPackingListReferenceNumber; $this->fetchesOrder = $fetchesOrder; } @@ -58,15 +83,42 @@ class CreatePackingListLogic extends AbstractControllerLogic */ public function logic(Request $request) : JsonResponse { + $order = $this->fetchesOrder->execute(['id' => $request->input('order_id')]); - $order = $this->fetchesOrder->execute(['reference' => $request->input('reference_number')]); - - $packingListObject = new PackingListObject($request->input('reference_number'), $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id, PackingListType::WAREHOUSE_RECEIVE_LIST, ApprovalStatus::PENDING_SUBMISSION); + $reference_number = $this->generatesPackingListReferenceNumber->execute(); + $packingListObject = new PackingListObject( + $reference_number, + $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id, + PackingListType::WAREHOUSE_RECEIVE_LIST, + ApprovalStatus::PENDING_SUBMISSION + ); $packingList = $this->createPackingListProcessor->execute($packingListObject, $order); - return $this->resourceResponse(new PackingListResource($packingList)); + $transportObject = new TransportObject(TransportType::LAND, null, $request->input('tracking'), Carbon::parse($request->input('receive_date')), Carbon::parse($request->input('receive_date')), ApprovalStatus::APPROVED); + $transport = $this->createsTransport->execute($transportObject, $packingList); + $scheduleObject = new ScheduleObject(Carbon::parse($request->input('receive_date')), Carbon::parse($request->input('receive_date')), ApprovalStatus::APPROVED); + $schedule = $this->createsSchedule->execute($transport, $scheduleObject); + + $packages = $request->input('packages'); + + foreach ($packages as $key => $row) { + $packageObject = new PackageObject( + $row['type'], + $row['description'], + $row['width'], + $row['height'], + $row['length'], + $row['weight'], + $row['quantity'], + ApprovalStatus::APPROVED, + $row['reference'], + ); + $this->createPackageProcessor->execute($packageObject, $packingList); + } + + return $this->resourceResponse(new PackingListResource($packingList)); } } diff --git a/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php b/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php index 7b5a86d1..982b7307 100644 --- a/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php @@ -20,7 +20,7 @@ class CreatePackingListProcessor /** - * CreatePackingListLogic constructor. + * CreatePackingListProcessor constructor. * @param CanCreatePackingList $canCreatePackingList * @param CreatesPackingList $createsPackingList */ diff --git a/app/Classes/Modules/PackingLists/Services/ChecksIfPackingListReferenceNumberExists.php b/app/Classes/Modules/PackingLists/Services/ChecksIfPackingListReferenceNumberExists.php new file mode 100644 index 00000000..6ff6d0e6 --- /dev/null +++ b/app/Classes/Modules/PackingLists/Services/ChecksIfPackingListReferenceNumberExists.php @@ -0,0 +1,21 @@ +repository = $repository; + } + + public function execute(string $reference_number): bool { + return $this->repository->where('reference', $reference_number)->exists(); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/PackingLists/Services/GeneratesPackageListReferenceNumber.php b/app/Classes/Modules/PackingLists/Services/GeneratesPackageListReferenceNumber.php new file mode 100644 index 00000000..7054facf --- /dev/null +++ b/app/Classes/Modules/PackingLists/Services/GeneratesPackageListReferenceNumber.php @@ -0,0 +1,30 @@ +checksIfPackingListReferenceNumberExists = $checksIfPackingListReferenceNumberExists; + } + + /** + * @return string + */ + public function execute(): string { + + $referenceNumber = mt_rand(10000000, 99999999); + + return !$this->checksIfPackingListReferenceNumberExists->execute($referenceNumber) ? $referenceNumber : self::execute(); + } +} \ No newline at end of file diff --git a/package.json b/package.json index 26b57108..d5b37663 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "v-money": "^0.8.1", "vue": "^2.6.10", "vue-avatar": "^2.1.8", + "vue-bootstrap-datetimepicker": "^5.0.1", "vue-debounce": "^2.6.0", "vue-template-compiler": "^2.6.10", "vue-the-mask": "^0.11.1", diff --git a/resources/assets/sass/modules/_form_elements.scss b/resources/assets/sass/modules/_form_elements.scss index e242894f..00b41ed2 100644 --- a/resources/assets/sass/modules/_form_elements.scss +++ b/resources/assets/sass/modules/_form_elements.scss @@ -560,7 +560,6 @@ input[type=checkbox]:checked + label{ padding-left: 12px; padding-right: 12px; padding-bottom: 4px; - overflow: hidden; width: 100%; @include transition(background-color .2s ease); &.required:after { diff --git a/resources/assets/vue/components/general/forms/DatePickerComponent.vue b/resources/assets/vue/components/general/forms/DatePickerComponent.vue new file mode 100644 index 00000000..c11eee85 --- /dev/null +++ b/resources/assets/vue/components/general/forms/DatePickerComponent.vue @@ -0,0 +1,37 @@ + + + \ No newline at end of file diff --git a/resources/assets/vue/components/orders/forms/CreatePackageFormComponent.vue b/resources/assets/vue/components/orders/forms/CreatePackageFormComponent.vue index a968fb9e..10954bed 100644 --- a/resources/assets/vue/components/orders/forms/CreatePackageFormComponent.vue +++ b/resources/assets/vue/components/orders/forms/CreatePackageFormComponent.vue @@ -11,7 +11,7 @@
- + diff --git a/resources/assets/vue/components/orders/forms/CreatePackageListFormComponent.vue b/resources/assets/vue/components/orders/forms/CreatePackageListFormComponent.vue new file mode 100644 index 00000000..40765f7d --- /dev/null +++ b/resources/assets/vue/components/orders/forms/CreatePackageListFormComponent.vue @@ -0,0 +1,75 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/orders/forms/PackageFormComponent.vue b/resources/assets/vue/components/orders/forms/PackageFormComponent.vue new file mode 100644 index 00000000..5f89af2e --- /dev/null +++ b/resources/assets/vue/components/orders/forms/PackageFormComponent.vue @@ -0,0 +1,194 @@ + + \ 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 8580e481..d59cf450 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue @@ -233,9 +233,9 @@ style=" fill:#000000;">
-
Add
- - +
Add
+ +
diff --git a/resources/assets/vue/general/mixins/orders/validation/createPackageListFormValidation.js b/resources/assets/vue/general/mixins/orders/validation/createPackageListFormValidation.js new file mode 100644 index 00000000..39b2c079 --- /dev/null +++ b/resources/assets/vue/general/mixins/orders/validation/createPackageListFormValidation.js @@ -0,0 +1,14 @@ +import { required } from "vuelidate/lib/validators"; + +export default { + validations: { + parameters: { + tracking: { + required + }, + receive_date: { + required + } + } + }, +} \ No newline at end of file From 05ee6b3e9848d452f6c89bbea6057bdbc5ed8d20 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Wed, 15 Sep 2021 21:30:49 +0800 Subject: [PATCH 03/11] create warehouse packing list create shipping packing list --- .../CreateShippingPackingListLogic.php | 118 +++++++++++++++++ .../CreateWarehousePackingListLogic.php | 124 ++++++++++++++++++ .../CreatePackingListLogic.php | 82 +++--------- .../CreateShippingPackingListController.php | 20 +++ .../CreateWarehousePackingListController.php | 20 +++ app/Http/Resources/OrderResource.php | 8 +- .../orders/elements/PackageComponent.vue | 4 +- ...CreateShippingPackageListFormComponent.vue | 60 +++++++++ ...eateWarehousePackageListFormComponent.vue} | 10 +- .../orders/forms/PackageFormComponent.vue | 2 +- .../sections/OrderProfileSectionComponent.vue | 16 ++- routes/order.php | 8 ++ 12 files changed, 385 insertions(+), 87 deletions(-) create mode 100644 app/Classes/Modules/Orders/ControllersLogic/CreateShippingPackingListLogic.php create mode 100644 app/Classes/Modules/Orders/ControllersLogic/CreateWarehousePackingListLogic.php create mode 100644 app/Http/Controllers/Orders/CreateShippingPackingListController.php create mode 100644 app/Http/Controllers/Orders/CreateWarehousePackingListController.php create mode 100644 resources/assets/vue/components/orders/forms/CreateShippingPackageListFormComponent.vue rename resources/assets/vue/components/orders/forms/{CreatePackageListFormComponent.vue => CreateWarehousePackageListFormComponent.vue} (89%) diff --git a/app/Classes/Modules/Orders/ControllersLogic/CreateShippingPackingListLogic.php b/app/Classes/Modules/Orders/ControllersLogic/CreateShippingPackingListLogic.php new file mode 100644 index 00000000..574200fe --- /dev/null +++ b/app/Classes/Modules/Orders/ControllersLogic/CreateShippingPackingListLogic.php @@ -0,0 +1,118 @@ + 'Created PackingList', + 'message' => 'You have successfully created a new PackingList' + ]; + } + + /** @var CreatePackingListProcessor */ + private $createPackingListProcessor; + + /** @var GeneratesPackingListReferenceNumber */ + private $generatesPackingListReferenceNumber; + + /** @var CreatesTransport */ + private $createsTransport; + + /** @var CreatePackageProcessor */ + private $createPackageProcessor; + + /** @var CreatesSchedule */ + private $createsSchedule; + + /** @var FetchesOrder */ + private $fetchesOrder; + + /** + * CreatePackingListLogic constructor. + * @param CreatePackingListProcessor $createPackingListProcessor + * @param FetchesOrder $fetchesOrder + */ + public function __construct( + CreatePackingListProcessor $createPackingListProcessor, + CreatesTransport $createsTransport, + CreatesSchedule $createsSchedule, + CreatePackageProcessor $createPackageProcessor, + GeneratesPackingListReferenceNumber $generatesPackingListReferenceNumber, + FetchesOrder $fetchesOrder + ) + { + $this->createPackingListProcessor = $createPackingListProcessor; + $this->createsTransport = $createsTransport; + $this->createsSchedule = $createsSchedule; + $this->createPackageProcessor = $createPackageProcessor; + $this->generatesPackingListReferenceNumber = $generatesPackingListReferenceNumber; + $this->fetchesOrder = $fetchesOrder; + } + + /** + * @param Request $request + * @return JsonResponse + */ + public function logic(Request $request) : JsonResponse + { + $order = $this->fetchesOrder->execute(['id' => $request->input('order_id')]); + + $reference_number = $this->generatesPackingListReferenceNumber->execute(); + + $packingListObject = new PackingListObject( + $reference_number, + $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id, + PackingListType::SHIPPING_PACKING_LIST, + ApprovalStatus::PENDING_SUBMISSION + ); + $packingList = $this->createPackingListProcessor->execute($packingListObject, $order); + + $packages = $request->input('packages'); + + foreach ($packages as $key => $row) { + $packageObject = new PackageObject( + $row['type'], + $row['description'], + $row['width'], + $row['height'], + $row['length'], + $row['weight'], + $row['quantity'], + ApprovalStatus::APPROVED, + $row['reference'], + ); + $this->createPackageProcessor->execute($packageObject, $packingList); + } + + return $this->resourceResponse(new PackingListResource($packingList)); + } + +} diff --git a/app/Classes/Modules/Orders/ControllersLogic/CreateWarehousePackingListLogic.php b/app/Classes/Modules/Orders/ControllersLogic/CreateWarehousePackingListLogic.php new file mode 100644 index 00000000..5572bbff --- /dev/null +++ b/app/Classes/Modules/Orders/ControllersLogic/CreateWarehousePackingListLogic.php @@ -0,0 +1,124 @@ + 'Created Warehouse PackingList', + 'message' => 'You have successfully created a new Warehouse PackingList' + ]; + } + + /** @var CreatePackingListProcessor */ + private $createPackingListProcessor; + + /** @var GeneratesPackingListReferenceNumber */ + private $generatesPackingListReferenceNumber; + + /** @var CreatesTransport */ + private $createsTransport; + + /** @var CreatePackageProcessor */ + private $createPackageProcessor; + + /** @var CreatesSchedule */ + private $createsSchedule; + + /** @var FetchesOrder */ + private $fetchesOrder; + + /** + * CreatePackingListLogic constructor. + * @param CreatePackingListProcessor $createPackingListProcessor + * @param FetchesOrder $fetchesOrder + */ + public function __construct( + CreatePackingListProcessor $createPackingListProcessor, + CreatesTransport $createsTransport, + CreatesSchedule $createsSchedule, + CreatePackageProcessor $createPackageProcessor, + GeneratesPackingListReferenceNumber $generatesPackingListReferenceNumber, + FetchesOrder $fetchesOrder + ) + { + $this->createPackingListProcessor = $createPackingListProcessor; + $this->createsTransport = $createsTransport; + $this->createsSchedule = $createsSchedule; + $this->createPackageProcessor = $createPackageProcessor; + $this->generatesPackingListReferenceNumber = $generatesPackingListReferenceNumber; + $this->fetchesOrder = $fetchesOrder; + } + + /** + * @param Request $request + * @return JsonResponse + */ + public function logic(Request $request) : JsonResponse + { + $order = $this->fetchesOrder->execute(['id' => $request->input('order_id')]); + + $reference_number = $this->generatesPackingListReferenceNumber->execute(); + + $packingListObject = new PackingListObject( + $reference_number, + $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id, + PackingListType::WAREHOUSE_RECEIVE_LIST, + ApprovalStatus::PENDING_SUBMISSION + ); + $packingList = $this->createPackingListProcessor->execute($packingListObject, $order); + + $transportObject = new TransportObject(TransportType::LAND, null, $request->input('tracking'), Carbon::parse($request->input('receive_date')), Carbon::parse($request->input('receive_date')), ApprovalStatus::APPROVED); + $transport = $this->createsTransport->execute($transportObject, $packingList); + + $scheduleObject = new ScheduleObject(Carbon::parse($request->input('receive_date')), Carbon::parse($request->input('receive_date')), ApprovalStatus::APPROVED); + $schedule = $this->createsSchedule->execute($transport, $scheduleObject); + + $packages = $request->input('packages'); + + foreach ($packages as $key => $row) { + $packageObject = new PackageObject( + $row['type'], + $row['description'], + $row['width'], + $row['height'], + $row['length'], + $row['weight'], + $row['quantity'], + ApprovalStatus::APPROVED, + $row['reference'], + ); + $this->createPackageProcessor->execute($packageObject, $packingList); + } + + return $this->resourceResponse(new PackingListResource($packingList)); + } + +} diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/CreatePackingListLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/CreatePackingListLogic.php index eee596b0..afd8f3d7 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/CreatePackingListLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/CreatePackingListLogic.php @@ -2,26 +2,24 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic; -use App\Classes\General\Abstracts\AbstractControllerLogic; -use App\Classes\Modules\PackingLists\Processors\CreatePackingListProcessor; -use App\Classes\Modules\PackingLists\Processors\CreatePackageProcessor; -use App\Classes\Modules\Orders\Services\FetchesOrder; -use App\Classes\Modules\Transports\Services\CreatesTransport; -use App\Classes\Modules\PackingLists\Services\GeneratesPackingListReferenceNumber; -use App\Classes\Modules\Schedules\Services\CreatesSchedule; -use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject; +use App\Classes\Modules\Companies\Services\FetchesCompany; use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject; -use App\Classes\Modules\Transports\DataTransferObjects\TransportObject; -use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject; +use App\Classes\Modules\PackingLists\Processors\CreatePackingListProcessor; +use App\Classes\Modules\Orders\Services\FetchesOrder; +use App\Classes\Modules\PackingLists\Services\Packages\FetchesPackage; use App\Classes\ValueObjects\Constants\ApprovalStatus; +use App\Classes\General\Abstracts\AbstractControllerLogic; +use App\Classes\Modules\PackingLists\Services\CreatesPackingList; +use App\Classes\Modules\PackingLists\Services\CreatesPackingListPackage; +use App\Classes\Modules\PackingLists\Standards\Rules\CanCreatePackingList; +use App\Classes\Modules\PackingLists\Standards\Rules\CanCreatePackingListPackage; +use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject; use App\Classes\ValueObjects\Constants\OrderRoleTypes; use App\Classes\ValueObjects\Constants\PackingListType; -use App\Classes\ValueObjects\Constants\TransportType; use App\Http\Resources\PackingListResource; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Carbon\Carbon; class CreatePackingListLogic extends AbstractControllerLogic { @@ -40,18 +38,6 @@ class CreatePackingListLogic extends AbstractControllerLogic /** @var CreatePackingListProcessor */ private $createPackingListProcessor; - /** @var GeneratesPackingListReferenceNumber */ - private $generatesPackingListReferenceNumber; - - /** @var CreatesTransport */ - private $createsTransport; - - /** @var CreatePackageProcessor */ - private $createPackageProcessor; - - /** @var CreatesSchedule */ - private $createsSchedule; - /** @var FetchesOrder */ private $fetchesOrder; @@ -60,20 +46,9 @@ class CreatePackingListLogic extends AbstractControllerLogic * @param CreatePackingListProcessor $createPackingListProcessor * @param FetchesOrder $fetchesOrder */ - public function __construct( - CreatePackingListProcessor $createPackingListProcessor, - CreatesTransport $createsTransport, - CreatesSchedule $createsSchedule, - CreatePackageProcessor $createPackageProcessor, - GeneratesPackingListReferenceNumber $generatesPackingListReferenceNumber, - FetchesOrder $fetchesOrder - ) + public function __construct(CreatePackingListProcessor $createPackingListProcessor, FetchesOrder $fetchesOrder) { $this->createPackingListProcessor = $createPackingListProcessor; - $this->createsTransport = $createsTransport; - $this->createsSchedule = $createsSchedule; - $this->createPackageProcessor = $createPackageProcessor; - $this->generatesPackingListReferenceNumber = $generatesPackingListReferenceNumber; $this->fetchesOrder = $fetchesOrder; } @@ -83,42 +58,15 @@ class CreatePackingListLogic extends AbstractControllerLogic */ public function logic(Request $request) : JsonResponse { - $order = $this->fetchesOrder->execute(['id' => $request->input('order_id')]); - $reference_number = $this->generatesPackingListReferenceNumber->execute(); + $order = $this->fetchesOrder->execute(['reference' => $request->input('reference_number')]); + + $packingListObject = new PackingListObject($request->input('reference_number'), $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id, PackingListType::WAREHOUSE_RECEIVE_LIST, ApprovalStatus::PENDING_SUBMISSION); - $packingListObject = new PackingListObject( - $reference_number, - $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id, - PackingListType::WAREHOUSE_RECEIVE_LIST, - ApprovalStatus::PENDING_SUBMISSION - ); $packingList = $this->createPackingListProcessor->execute($packingListObject, $order); - $transportObject = new TransportObject(TransportType::LAND, null, $request->input('tracking'), Carbon::parse($request->input('receive_date')), Carbon::parse($request->input('receive_date')), ApprovalStatus::APPROVED); - $transport = $this->createsTransport->execute($transportObject, $packingList); - - $scheduleObject = new ScheduleObject(Carbon::parse($request->input('receive_date')), Carbon::parse($request->input('receive_date')), ApprovalStatus::APPROVED); - $schedule = $this->createsSchedule->execute($transport, $scheduleObject); - - $packages = $request->input('packages'); - - foreach ($packages as $key => $row) { - $packageObject = new PackageObject( - $row['type'], - $row['description'], - $row['width'], - $row['height'], - $row['length'], - $row['weight'], - $row['quantity'], - ApprovalStatus::APPROVED, - $row['reference'], - ); - $this->createPackageProcessor->execute($packageObject, $packingList); - } - return $this->resourceResponse(new PackingListResource($packingList)); + } } diff --git a/app/Http/Controllers/Orders/CreateShippingPackingListController.php b/app/Http/Controllers/Orders/CreateShippingPackingListController.php new file mode 100644 index 00000000..01c28124 --- /dev/null +++ b/app/Http/Controllers/Orders/CreateShippingPackingListController.php @@ -0,0 +1,20 @@ +execute($request); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Orders/CreateWarehousePackingListController.php b/app/Http/Controllers/Orders/CreateWarehousePackingListController.php new file mode 100644 index 00000000..a986e328 --- /dev/null +++ b/app/Http/Controllers/Orders/CreateWarehousePackingListController.php @@ -0,0 +1,20 @@ +execute($request); + } +} \ No newline at end of file diff --git a/app/Http/Resources/OrderResource.php b/app/Http/Resources/OrderResource.php index e3a66981..297cb6dd 100644 --- a/app/Http/Resources/OrderResource.php +++ b/app/Http/Resources/OrderResource.php @@ -32,13 +32,7 @@ class OrderResource extends JsonResource 'address_change_request' => new AddressResource($this->addressesPendingVerification()->first()), $this->mergeWhen($this->relationLoaded('parcels'), [ 'origin_warehouse_packages' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){ - return $query->where('type', PackingListType::SHIPPING_PACKING_LIST)->whereDoesntHave('containers', function($query) { - return $query->whereHas('transports', function($query){ - return $query->whereHas('schedules', function($query){ - return $query->where('etd', '<', Carbon::now()); - }); - }); - }); + return $query->where('type', PackingListType::SHIPPING_PACKING_LIST); })->get()), 'in_transit_packages' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){ return $query->where('type', PackingListType::SHIPPING_PACKING_LIST)->whereHas('containers', function($query) { diff --git a/resources/assets/vue/components/orders/elements/PackageComponent.vue b/resources/assets/vue/components/orders/elements/PackageComponent.vue index 7fc433ce..74cf02ae 100644 --- a/resources/assets/vue/components/orders/elements/PackageComponent.vue +++ b/resources/assets/vue/components/orders/elements/PackageComponent.vue @@ -54,7 +54,7 @@
Container -

{{item.container.container_reference}}

+

{{item.container ? item.container.container_reference : '-'}}

@@ -69,7 +69,7 @@
-
+
diff --git a/resources/assets/vue/components/orders/forms/CreateShippingPackageListFormComponent.vue b/resources/assets/vue/components/orders/forms/CreateShippingPackageListFormComponent.vue new file mode 100644 index 00000000..0d835fe6 --- /dev/null +++ b/resources/assets/vue/components/orders/forms/CreateShippingPackageListFormComponent.vue @@ -0,0 +1,60 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/orders/forms/CreatePackageListFormComponent.vue b/resources/assets/vue/components/orders/forms/CreateWarehousePackageListFormComponent.vue similarity index 89% rename from resources/assets/vue/components/orders/forms/CreatePackageListFormComponent.vue rename to resources/assets/vue/components/orders/forms/CreateWarehousePackageListFormComponent.vue index 40765f7d..7193c928 100644 --- a/resources/assets/vue/components/orders/forms/CreatePackageListFormComponent.vue +++ b/resources/assets/vue/components/orders/forms/CreateWarehousePackageListFormComponent.vue @@ -3,7 +3,7 @@
-

Create Package List

+

Create Warehouse Packing List

@@ -52,11 +52,7 @@ tracking: this.tracking, receive_date: this.receive_date, packages: [] - }, - options: { - format: 'YYYY/MM/DD', - useCurrent: true, - } + } }; }, watch: { @@ -66,7 +62,7 @@ }, methods: { submitForm(){ - this.submit(this.route('api.packing_list.create'), 'post', this.section, true, true) + this.submit(this.route('api.order.create.warehouse.packing_list'), 'post', this.section, true, true) } }, mixins: [createPackageListFormValidation, componentHandler, modalFormHandler] diff --git a/resources/assets/vue/components/orders/forms/PackageFormComponent.vue b/resources/assets/vue/components/orders/forms/PackageFormComponent.vue index 5f89af2e..7a4e40aa 100644 --- a/resources/assets/vue/components/orders/forms/PackageFormComponent.vue +++ b/resources/assets/vue/components/orders/forms/PackageFormComponent.vue @@ -75,7 +75,7 @@
- +
diff --git a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue index d59cf450..8da23c4d 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue @@ -233,9 +233,9 @@ style=" fill:#000000;">
-
Add
- - +
Add
+ +
@@ -252,6 +252,16 @@
+ +
+
+ Add +
+ + + +
+
diff --git a/routes/order.php b/routes/order.php index 6a0c04d3..47b4b6f8 100644 --- a/routes/order.php +++ b/routes/order.php @@ -11,4 +11,12 @@ Route::group(['prefix' => 'order', 'as' => 'order.', 'namespace' => 'Orders'], f Route::put('/restore/{id}', 'RestoreOrderController@restore')->name('restore'); Route::post('/address/change/request', 'RequestChangeOrderAddressController@request')->name('address.change.request'); Route::put('/address/{id}/status/{status}', 'ApproveChangeOrderAddressController@approve')->name('address.status.update'); + + + Route::post('/create-warehouse-packing-list', 'CreateWarehousePackingListController@create')->name('create.warehouse.packing_list'); + Route::post('/create-shipping-packing-list', 'CreateShippingPackingListController@create')->name('create.shipping.packing_list'); + + // Route::post('/create', 'CreateOrderController@create')->name('create'); + + }); From d7e2366fedcef776ee51cd5cc1b4cc0d71281609 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Sat, 18 Sep 2021 09:56:41 +0800 Subject: [PATCH 04/11] container load --- .../Containers/CreateContainerLogic.php | 4 +- .../Containers/CreateLoadContainerLogic.php | 105 ++++++++++++++++++ .../CreateLoadContainerController.php | 20 ++++ .../CreateLoadContainerFormComponent.vue | 90 +++++++++++++++ .../forms/CreatePackageFormComponent.vue | 1 - .../sections/OrderProfileSectionComponent.vue | 17 +-- .../createContainerFormValidation.js | 32 ++++++ resources/views/layouts/base_portal.blade.php | 6 + routes/packing_list.php | 1 + 9 files changed, 265 insertions(+), 11 deletions(-) create mode 100644 app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php create mode 100644 app/Http/Controllers/PackingLists/Containers/CreateLoadContainerController.php create mode 100644 resources/assets/vue/components/containers/forms/CreateLoadContainerFormComponent.vue create mode 100644 resources/assets/vue/general/mixins/containers/validation/createContainerFormValidation.js diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerLogic.php index 40376b12..32ff0ae8 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerLogic.php @@ -23,8 +23,8 @@ class CreateContainerLogic extends AbstractControllerLogic */ protected function notification():array { return [ - 'title' => 'Created PackingList', - 'message' => 'You have successfully created a new PackingList' + 'title' => 'Created Container', + 'message' => 'You have successfully created a new Container' ]; } diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php new file mode 100644 index 00000000..ec9c5db1 --- /dev/null +++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php @@ -0,0 +1,105 @@ + 'Created Container', + 'message' => 'You have successfully created a new Container' + ]; + } + + /** @var CanCreateContainer */ + private $canCreateContainer; + + /** @var FetchesPackingList */ + private $fetchesPackingList; + + /** @var FetchesCompanyModule */ + private $fetchesCompanyModule; + + /** @var CreatesPackingList */ + private $createsContainer; + + /** @var CreatesTransport */ + private $createsTransport; + + /** @var CreatesSchedule */ + private $createsSchedule; + + public function __construct( + CanCreateContainer $canCreateContainer, + FetchesPackingList $fetchesPackingList, + FetchesCompanyModule $fetchesCompanyModule, + CreatesContainer $createsContainer, + CreatesTransport $createsTransport, + CreatesSchedule $createsSchedule + ) + { + $this->canCreateContainer = $canCreateContainer; + $this->fetchesPackingList = $fetchesPackingList; + $this->fetchesCompanyModule = $fetchesCompanyModule; + $this->createsContainer = $createsContainer; + $this->createsTransport = $createsTransport; + $this->createsSchedule = $createsSchedule; + } + + /** + * @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 + { + $object = new ContainerObject( + $request->input('container_reference'), + $request->input('container_number'), + $request->input('seal_reference'), + $request->input('container_type'), + $request->input('status') + ); + + $company = $this->fetchesCompanyModule->execute(['id' => 2]); + + $this->canCreateContainer->passes($object); + + $container = $this->createsContainer->execute($object, $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')])); + + $transportObject = new TransportObject(TransportType::LAND, null, $request->input('tracking'), Carbon::parse($request->input('receive_date')), Carbon::parse($request->input('receive_date')), ApprovalStatus::APPROVED); + $transport = $this->createsTransport->execute($transportObject, $container); + + $scheduleObject = new ScheduleObject(Carbon::parse($request->input('receive_date')), Carbon::parse($request->input('receive_date')), ApprovalStatus::APPROVED); + $schedule = $this->createsSchedule->execute($transport, $scheduleObject); + + return $this->resourceResponse(new ContainerResource($container)); + } + +} diff --git a/app/Http/Controllers/PackingLists/Containers/CreateLoadContainerController.php b/app/Http/Controllers/PackingLists/Containers/CreateLoadContainerController.php new file mode 100644 index 00000000..00373acc --- /dev/null +++ b/app/Http/Controllers/PackingLists/Containers/CreateLoadContainerController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/resources/assets/vue/components/containers/forms/CreateLoadContainerFormComponent.vue b/resources/assets/vue/components/containers/forms/CreateLoadContainerFormComponent.vue new file mode 100644 index 00000000..81c4147b --- /dev/null +++ b/resources/assets/vue/components/containers/forms/CreateLoadContainerFormComponent.vue @@ -0,0 +1,90 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/orders/forms/CreatePackageFormComponent.vue b/resources/assets/vue/components/orders/forms/CreatePackageFormComponent.vue index 10954bed..9ad0807e 100644 --- a/resources/assets/vue/components/orders/forms/CreatePackageFormComponent.vue +++ b/resources/assets/vue/components/orders/forms/CreatePackageFormComponent.vue @@ -12,7 +12,6 @@ - diff --git a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue index 8da23c4d..769f0d9e 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue @@ -249,18 +249,19 @@
+
+
+ Add +
+ + + +
-
-
- Add -
- - - -
+
diff --git a/resources/assets/vue/general/mixins/containers/validation/createContainerFormValidation.js b/resources/assets/vue/general/mixins/containers/validation/createContainerFormValidation.js new file mode 100644 index 00000000..6b664c73 --- /dev/null +++ b/resources/assets/vue/general/mixins/containers/validation/createContainerFormValidation.js @@ -0,0 +1,32 @@ +import { required } from "vuelidate/lib/validators"; + +export default { + validations: { + parameters: { + tracking: { + required + }, + receive_date: { + required + }, + company_module_id: { + required + }, + container_reference: { + required + }, + container_number: { + required + }, + seal_reference: { + required + }, + container_type: { + required + }, + status: { + required + } + } + }, +} \ No newline at end of file diff --git a/resources/views/layouts/base_portal.blade.php b/resources/views/layouts/base_portal.blade.php index 87144464..eef21b0e 100644 --- a/resources/views/layouts/base_portal.blade.php +++ b/resources/views/layouts/base_portal.blade.php @@ -23,6 +23,12 @@
Refresh Orders
+ +
Add
+ + + +
@yield('inner_content') diff --git a/routes/packing_list.php b/routes/packing_list.php index ea64c7e1..2b6957e6 100644 --- a/routes/packing_list.php +++ b/routes/packing_list.php @@ -14,6 +14,7 @@ Route::group(['namespace' => 'PackingLists', 'as' => 'packing_list.', 'prefix' = Route::get('/{id}/show', 'FetchContainerController@fetch')->name('show'); Route::get('/list', 'ListContainersController@list')->name('list'); Route::post('/create', 'CreateContainerController@create')->name('create'); + Route::post('/create/load', 'CreateLoadContainerController@create')->name('create.load'); Route::put('/update/{id}', 'UpdateContainerController@update')->name('update'); Route::delete('/delete/{id}', 'DeleteContainerController@delete')->name('delete'); }); From 06b1258b5540ec3a2f196f3d372d8ee76af301d3 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Mon, 20 Sep 2021 16:54:16 +0800 Subject: [PATCH 05/11] merge branch --- ...enceNumber.php => GeneratesPackingListReferenceNumber.php} | 0 routes/order.php | 4 ---- routes/packing_list.php | 1 - 3 files changed, 5 deletions(-) rename app/Classes/Modules/PackingLists/Services/{GeneratesPackageListReferenceNumber.php => GeneratesPackingListReferenceNumber.php} (100%) diff --git a/app/Classes/Modules/PackingLists/Services/GeneratesPackageListReferenceNumber.php b/app/Classes/Modules/PackingLists/Services/GeneratesPackingListReferenceNumber.php similarity index 100% rename from app/Classes/Modules/PackingLists/Services/GeneratesPackageListReferenceNumber.php rename to app/Classes/Modules/PackingLists/Services/GeneratesPackingListReferenceNumber.php diff --git a/routes/order.php b/routes/order.php index 47b4b6f8..bcefa2ed 100644 --- a/routes/order.php +++ b/routes/order.php @@ -12,11 +12,7 @@ Route::group(['prefix' => 'order', 'as' => 'order.', 'namespace' => 'Orders'], f Route::post('/address/change/request', 'RequestChangeOrderAddressController@request')->name('address.change.request'); Route::put('/address/{id}/status/{status}', 'ApproveChangeOrderAddressController@approve')->name('address.status.update'); - Route::post('/create-warehouse-packing-list', 'CreateWarehousePackingListController@create')->name('create.warehouse.packing_list'); Route::post('/create-shipping-packing-list', 'CreateShippingPackingListController@create')->name('create.shipping.packing_list'); - // Route::post('/create', 'CreateOrderController@create')->name('create'); - - }); diff --git a/routes/packing_list.php b/routes/packing_list.php index 1ea8cb8c..78e23e45 100644 --- a/routes/packing_list.php +++ b/routes/packing_list.php @@ -17,7 +17,6 @@ Route::group(['namespace' => 'PackingLists', 'as' => 'packing_list.', 'prefix' = Route::post('/create/load', 'CreateLoadContainerController@create')->name('create.load'); Route::put('/update/{id}', 'UpdateContainerController@update')->name('update'); Route::delete('/delete/{id}', 'DeleteContainerController@delete')->name('delete'); - Route::put('/assign-packing_list/{id}', 'AssignPackingListContainerController@assign')->name('assign.packing_list'); }); From 16573e9e0081a477bcfd19bcc23efb64a353aad1 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Wed, 22 Sep 2021 15:39:33 +0800 Subject: [PATCH 06/11] container create with n/a eta and etd --- .../Containers/CreateLoadContainerLogic.php | 14 ++++++++++++-- .../DataTransferObjects/ScheduleObject.php | 6 +++--- app/Http/Resources/ScheduleResource.php | 4 ++-- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php index ec9c5db1..2835ba59 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php @@ -93,10 +93,20 @@ class CreateLoadContainerLogic extends AbstractControllerLogic $container = $this->createsContainer->execute($object, $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')])); - $transportObject = new TransportObject(TransportType::LAND, null, $request->input('tracking'), Carbon::parse($request->input('receive_date')), Carbon::parse($request->input('receive_date')), ApprovalStatus::APPROVED); + $transportObject = new TransportObject( + TransportType::LAND, null, + $request->input('tracking'), + Carbon::parse($request->input('receive_date')), + Carbon::parse($request->input('receive_date')), + ApprovalStatus::APPROVED + ); $transport = $this->createsTransport->execute($transportObject, $container); - $scheduleObject = new ScheduleObject(Carbon::parse($request->input('receive_date')), Carbon::parse($request->input('receive_date')), ApprovalStatus::APPROVED); + $scheduleObject = new ScheduleObject( + null, + null, + ApprovalStatus::APPROVED + ); $schedule = $this->createsSchedule->execute($transport, $scheduleObject); return $this->resourceResponse(new ContainerResource($container)); diff --git a/app/Classes/Modules/Schedules/DataTransferObjects/ScheduleObject.php b/app/Classes/Modules/Schedules/DataTransferObjects/ScheduleObject.php index efca110a..904dcb43 100644 --- a/app/Classes/Modules/Schedules/DataTransferObjects/ScheduleObject.php +++ b/app/Classes/Modules/Schedules/DataTransferObjects/ScheduleObject.php @@ -23,7 +23,7 @@ class ScheduleObject implements DataTransferObject * @param Carbon $eta * @param int $status */ - public function __construct(Carbon $etd, Carbon $eta, int $status) + public function __construct(?Carbon $etd, ?Carbon $eta, int $status) { $this->etd = $etd; $this->eta = $eta; @@ -33,7 +33,7 @@ class ScheduleObject implements DataTransferObject /** * @return Carbon */ - public function getEtd(): Carbon + public function getEtd(): ?Carbon { return $this->etd; } @@ -41,7 +41,7 @@ class ScheduleObject implements DataTransferObject /** * @return Carbon */ - public function getEta(): Carbon + public function getEta(): ?Carbon { return $this->eta; } diff --git a/app/Http/Resources/ScheduleResource.php b/app/Http/Resources/ScheduleResource.php index 6f7209d6..64532420 100644 --- a/app/Http/Resources/ScheduleResource.php +++ b/app/Http/Resources/ScheduleResource.php @@ -16,8 +16,8 @@ class ScheduleResource extends JsonResource { return [ 'id' => $this->id, - 'etd' => $this->etd->format('d-m-Y'), - 'eta' => $this->eta->format('d-m-Y'), + 'etd' => $this->etd ? $this->etd->format('d-m-Y') : 'n/a', + 'eta' => $this->eta ? $this->eta->format('d-m-Y') : 'n/a', 'status' => $this->status, ]; } From 9aec13da7485ee97163cc002c1b3fc0ace146a5e Mon Sep 17 00:00:00 2001 From: glovetleong Date: Wed, 22 Sep 2021 18:14:36 +0800 Subject: [PATCH 07/11] reschedule container --- .../Containers/RescheduleContainerLogic.php | 82 +++++++++++++++++++ .../Services/UpdatesScheduleStatus.php | 23 ++++++ .../RescheduleContainerController.php | 19 +++++ routes/packing_list.php | 1 + 4 files changed, 125 insertions(+) create mode 100644 app/Classes/Modules/PackingLists/ControllersLogic/Containers/RescheduleContainerLogic.php create mode 100644 app/Classes/Modules/Schedules/Services/UpdatesScheduleStatus.php create mode 100644 app/Http/Controllers/PackingLists/Containers/RescheduleContainerController.php diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/RescheduleContainerLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/RescheduleContainerLogic.php new file mode 100644 index 00000000..e248281c --- /dev/null +++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/RescheduleContainerLogic.php @@ -0,0 +1,82 @@ + 'Reschedule Container', + 'message' => 'You have successfully Reschedule Container' + ]; + } + + /** @var FetchesContainer */ + private $fetchesContainer; + + /** @var UpdatesScheduleStatus */ + private $updatesScheduleStatus; + + /** @var CreatesSchedule */ + private $createsSchedule; + + /** + * DeleteContainerControllersLogic constructor. + * @param FetchesContainer $fetchesContainer + * @param CreatesSchedule $createsSchedule + */ + public function __construct(FetchesContainer $fetchesContainer, UpdatesScheduleStatus $updatesScheduleStatus, CreatesSchedule $createsSchedule) + { + $this->fetchesContainer = $fetchesContainer; + $this->updatesScheduleStatus = $updatesScheduleStatus; + $this->createsSchedule = $createsSchedule; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + $container = $this->fetchesContainer->execute(['id' => $request->route('id')]); + $transport = $container->transports()->first(); + + $old_sechedule = $transport->schedules()->first(); + + $this->updatesScheduleStatus->execute($old_sechedule, ApprovalStatus::REJECTED); + + $scheduleObject = new ScheduleObject( + Carbon::parse($request->input('eta')), + Carbon::parse($request->input('etd')), + ApprovalStatus::APPROVED + ); + $schedule = $this->createsSchedule->execute($transport, $scheduleObject); + + return $this->resourceResponse(new ContainerResource($container)); + + } catch (\Exception $exception){ + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + + } + +} diff --git a/app/Classes/Modules/Schedules/Services/UpdatesScheduleStatus.php b/app/Classes/Modules/Schedules/Services/UpdatesScheduleStatus.php new file mode 100644 index 00000000..578242ff --- /dev/null +++ b/app/Classes/Modules/Schedules/Services/UpdatesScheduleStatus.php @@ -0,0 +1,23 @@ +status = $status; + + return $this->handler($model); + } +} diff --git a/app/Http/Controllers/PackingLists/Containers/RescheduleContainerController.php b/app/Http/Controllers/PackingLists/Containers/RescheduleContainerController.php new file mode 100644 index 00000000..f85cf690 --- /dev/null +++ b/app/Http/Controllers/PackingLists/Containers/RescheduleContainerController.php @@ -0,0 +1,19 @@ +execute($request); + } +} diff --git a/routes/packing_list.php b/routes/packing_list.php index 78e23e45..43d00d92 100644 --- a/routes/packing_list.php +++ b/routes/packing_list.php @@ -18,6 +18,7 @@ Route::group(['namespace' => 'PackingLists', 'as' => 'packing_list.', 'prefix' = Route::put('/update/{id}', 'UpdateContainerController@update')->name('update'); Route::delete('/delete/{id}', 'DeleteContainerController@delete')->name('delete'); Route::put('/assign-packing_list/{id}', 'AssignPackingListContainerController@assign')->name('assign.packing_list'); + Route::put('/reschedule/{id}', 'RescheduleContainerController@reschedule')->name('reschedule'); }); Route::group(['namespace' => 'Packages', 'as' => 'package.', 'prefix' => 'package'], function () { From 7d332f01e56796a281f1e1aa813f4a2323bbc77f Mon Sep 17 00:00:00 2001 From: glovetleong Date: Thu, 23 Sep 2021 14:40:12 +0800 Subject: [PATCH 08/11] update drop date update dispatch date --- .../Containers/CreateLoadContainerLogic.php | 2 - .../UpdateDispatchDateContainerLogic.php | 60 +++++++++++++++++++ .../UpdateDropDateContainerLogic.php | 60 +++++++++++++++++++ .../Services/UpdatesDispatchDateTransport.php | 22 +++++++ .../Services/UpdatesDropDateTransport.php | 22 +++++++ .../UpdateDispatchDateContainerController.php | 20 +++++++ .../UpdateDropDateContainerController.php | 20 +++++++ routes/packing_list.php | 3 + 8 files changed, 207 insertions(+), 2 deletions(-) create mode 100644 app/Classes/Modules/PackingLists/ControllersLogic/Containers/UpdateDispatchDateContainerLogic.php create mode 100644 app/Classes/Modules/PackingLists/ControllersLogic/Containers/UpdateDropDateContainerLogic.php create mode 100644 app/Classes/Modules/Transports/Services/UpdatesDispatchDateTransport.php create mode 100644 app/Classes/Modules/Transports/Services/UpdatesDropDateTransport.php create mode 100644 app/Http/Controllers/PackingLists/Containers/UpdateDispatchDateContainerController.php create mode 100644 app/Http/Controllers/PackingLists/Containers/UpdateDropDateContainerController.php diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php index 2835ba59..92330cea 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php @@ -87,8 +87,6 @@ class CreateLoadContainerLogic extends AbstractControllerLogic $request->input('status') ); - $company = $this->fetchesCompanyModule->execute(['id' => 2]); - $this->canCreateContainer->passes($object); $container = $this->createsContainer->execute($object, $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')])); diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/UpdateDispatchDateContainerLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/UpdateDispatchDateContainerLogic.php new file mode 100644 index 00000000..7b091fb6 --- /dev/null +++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/UpdateDispatchDateContainerLogic.php @@ -0,0 +1,60 @@ + 'Updated Dispatch Date Container', + 'message' => 'You have successfully updated the Dispatch Date Container' + ]; + } + + + /** @var UpdatesDispatchDateTransport */ + private $updatesDispatchDateTransport; + + /** @var FetchesContainer */ + private $fetchesContainer; + + /** + * UpdateDispatchDateContainerLogic constructor. + * @param CanUpdateContainer $canUpdateContainer + * @param UpdatesDispatchDateTransport $updatesDispatchDateTransport + * @param FetchesContainer $fetchesContainer + */ + public function __construct(UpdatesDispatchDateTransport $updatesDispatchDateTransport, FetchesContainer $fetchesContainer) + { + $this->updatesDispatchDateTransport = $updatesDispatchDateTransport; + $this->fetchesContainer = $fetchesContainer; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + $container = $this->fetchesContainer->execute(['id' => $request->route('id')]); + $transport = $container->transports()->first(); + $query = $this->updatesDispatchDateTransport->execute($transport, Carbon::parse($request->input('dispatch_date'))); + return $this->resourceResponse(new ContainerResource($container)); + } + +} diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/UpdateDropDateContainerLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/UpdateDropDateContainerLogic.php new file mode 100644 index 00000000..56d4d9b5 --- /dev/null +++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/UpdateDropDateContainerLogic.php @@ -0,0 +1,60 @@ + 'Updated Drop Date Container', + 'message' => 'You have successfully updated the Drop Date Container' + ]; + } + + + /** @var UpdatesDropDateTransport */ + private $updatesDropDateTransport; + + /** @var FetchesContainer */ + private $fetchesContainer; + + /** + * UpdateDropDateContainerLogic constructor. + * @param CanUpdateContainer $canUpdateContainer + * @param UpdatesDropDateTransport $updatesDropDateTransport + * @param FetchesContainer $fetchesContainer + */ + public function __construct(UpdatesDropDateTransport $updatesDropDateTransport, FetchesContainer $fetchesContainer) + { + $this->updatesDropDateTransport = $updatesDropDateTransport; + $this->fetchesContainer = $fetchesContainer; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + $container = $this->fetchesContainer->execute(['id' => $request->route('id')]); + $transport = $container->transports()->first(); + $query = $this->updatesDropDateTransport->execute($transport, Carbon::parse($request->input('drop_date'))); + return $this->resourceResponse(new ContainerResource($container)); + } + +} diff --git a/app/Classes/Modules/Transports/Services/UpdatesDispatchDateTransport.php b/app/Classes/Modules/Transports/Services/UpdatesDispatchDateTransport.php new file mode 100644 index 00000000..fb8876dd --- /dev/null +++ b/app/Classes/Modules/Transports/Services/UpdatesDispatchDateTransport.php @@ -0,0 +1,22 @@ +dispatch_date = $date; + return $this->handler($model); + } +} diff --git a/app/Classes/Modules/Transports/Services/UpdatesDropDateTransport.php b/app/Classes/Modules/Transports/Services/UpdatesDropDateTransport.php new file mode 100644 index 00000000..6f23c65b --- /dev/null +++ b/app/Classes/Modules/Transports/Services/UpdatesDropDateTransport.php @@ -0,0 +1,22 @@ +drop_date = $date; + return $this->handler($model); + } +} diff --git a/app/Http/Controllers/PackingLists/Containers/UpdateDispatchDateContainerController.php b/app/Http/Controllers/PackingLists/Containers/UpdateDispatchDateContainerController.php new file mode 100644 index 00000000..17757383 --- /dev/null +++ b/app/Http/Controllers/PackingLists/Containers/UpdateDispatchDateContainerController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/app/Http/Controllers/PackingLists/Containers/UpdateDropDateContainerController.php b/app/Http/Controllers/PackingLists/Containers/UpdateDropDateContainerController.php new file mode 100644 index 00000000..f4bb133f --- /dev/null +++ b/app/Http/Controllers/PackingLists/Containers/UpdateDropDateContainerController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/routes/packing_list.php b/routes/packing_list.php index 43d00d92..ab4d4c27 100644 --- a/routes/packing_list.php +++ b/routes/packing_list.php @@ -19,6 +19,9 @@ Route::group(['namespace' => 'PackingLists', 'as' => 'packing_list.', 'prefix' = Route::delete('/delete/{id}', 'DeleteContainerController@delete')->name('delete'); Route::put('/assign-packing_list/{id}', 'AssignPackingListContainerController@assign')->name('assign.packing_list'); Route::put('/reschedule/{id}', 'RescheduleContainerController@reschedule')->name('reschedule'); + + Route::put('/update-dispatch-date/{id}', 'UpdateDispatchDateContainerController@update')->name('update_dispatch_date'); + Route::put('/update-drop-date/{id}', 'UpdateDropDateContainerController@update')->name('update_drop_date'); }); Route::group(['namespace' => 'Packages', 'as' => 'package.', 'prefix' => 'package'], function () { From 0c63a9e7ca174034789a180014846e41240d0b13 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Thu, 23 Sep 2021 15:04:04 +0800 Subject: [PATCH 09/11] complete container --- .../Containers/CompleteContainerLogic.php | 61 +++++++++++++++++++ .../Containers/CreateContainerLogic.php | 2 - .../Containers/UpdatesContainerStatus.php | 24 ++++++++ .../CompleteContainerController.php | 20 ++++++ routes/packing_list.php | 2 +- 5 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 app/Classes/Modules/PackingLists/ControllersLogic/Containers/CompleteContainerLogic.php create mode 100644 app/Classes/Modules/PackingLists/Services/Containers/UpdatesContainerStatus.php create mode 100644 app/Http/Controllers/PackingLists/Containers/CompleteContainerController.php diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CompleteContainerLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CompleteContainerLogic.php new file mode 100644 index 00000000..7720fc27 --- /dev/null +++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CompleteContainerLogic.php @@ -0,0 +1,61 @@ + 'Updated Container', + 'message' => 'You have successfully updated the Container' + ]; + } + + + /** @var UpdatesContainerStatus */ + private $updatesContainerStatus; + + /** @var FetchesContainer */ + private $fetchesContainer; + + /** + * CompleteContainerLogic constructor. + * @param CanUpdateContainer $canUpdateContainer + * @param UpdatesContainerStatus $updatesContainerStatus + * @param FetchesContainer $fetchesContainer + */ + public function __construct(UpdatesContainerStatus $updatesContainerStatus, FetchesContainer $fetchesContainer) + { + $this->updatesContainerStatus = $updatesContainerStatus; + $this->fetchesContainer = $fetchesContainer; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + $container = $this->fetchesContainer->execute(['id' => $request->route('id')]); + $query = $this->updatesContainerStatus->execute($container, ApprovalStatus::COMPLETED); + return $this->resourceResponse(new ContainerResource($container)); + } + +} diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerLogic.php index 32ff0ae8..26253f41 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerLogic.php @@ -65,8 +65,6 @@ class CreateContainerLogic extends AbstractControllerLogic $request->input('status') ); - $company = $this->fetchesCompanyModule->execute(['id' => 2]); - $this->canCreateContainer->passes($object); $query = $this->createsContainer->execute($object, $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')])); diff --git a/app/Classes/Modules/PackingLists/Services/Containers/UpdatesContainerStatus.php b/app/Classes/Modules/PackingLists/Services/Containers/UpdatesContainerStatus.php new file mode 100644 index 00000000..1072f45f --- /dev/null +++ b/app/Classes/Modules/PackingLists/Services/Containers/UpdatesContainerStatus.php @@ -0,0 +1,24 @@ +status = $status; + + return $this->handler($model); + + } +} diff --git a/app/Http/Controllers/PackingLists/Containers/CompleteContainerController.php b/app/Http/Controllers/PackingLists/Containers/CompleteContainerController.php new file mode 100644 index 00000000..97030d8a --- /dev/null +++ b/app/Http/Controllers/PackingLists/Containers/CompleteContainerController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/routes/packing_list.php b/routes/packing_list.php index ab4d4c27..3abe6253 100644 --- a/routes/packing_list.php +++ b/routes/packing_list.php @@ -19,9 +19,9 @@ Route::group(['namespace' => 'PackingLists', 'as' => 'packing_list.', 'prefix' = Route::delete('/delete/{id}', 'DeleteContainerController@delete')->name('delete'); Route::put('/assign-packing_list/{id}', 'AssignPackingListContainerController@assign')->name('assign.packing_list'); Route::put('/reschedule/{id}', 'RescheduleContainerController@reschedule')->name('reschedule'); - Route::put('/update-dispatch-date/{id}', 'UpdateDispatchDateContainerController@update')->name('update_dispatch_date'); Route::put('/update-drop-date/{id}', 'UpdateDropDateContainerController@update')->name('update_drop_date'); + Route::put('/complete/{id}', 'CompleteContainerController@complete')->name('complete'); }); Route::group(['namespace' => 'Packages', 'as' => 'package.', 'prefix' => 'package'], function () { From b98ab2749a69ea0d596b0299e8937c51f6cd0147 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Fri, 24 Sep 2021 21:54:06 +0800 Subject: [PATCH 10/11] eta and etd in create container --- .../Containers/CreateLoadContainerLogic.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php index 92330cea..75eded41 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php @@ -94,15 +94,15 @@ class CreateLoadContainerLogic extends AbstractControllerLogic $transportObject = new TransportObject( TransportType::LAND, null, $request->input('tracking'), - Carbon::parse($request->input('receive_date')), - Carbon::parse($request->input('receive_date')), + Carbon::parse($request->input('eta')), + Carbon::parse($request->input('etd')), ApprovalStatus::APPROVED ); $transport = $this->createsTransport->execute($transportObject, $container); $scheduleObject = new ScheduleObject( - null, - null, + Carbon::parse($request->input('eta')), + Carbon::parse($request->input('etd')), ApprovalStatus::APPROVED ); $schedule = $this->createsSchedule->execute($transport, $scheduleObject); From ce20a941cd4023ba1fc18859798bad235ba7020a Mon Sep 17 00:00:00 2001 From: glovetleong Date: Fri, 24 Sep 2021 21:56:50 +0800 Subject: [PATCH 11/11] tidy --- .../Containers/CreateLoadContainerLogic.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php index 75eded41..d388a10d 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateLoadContainerLogic.php @@ -84,7 +84,7 @@ class CreateLoadContainerLogic extends AbstractControllerLogic $request->input('container_number'), $request->input('seal_reference'), $request->input('container_type'), - $request->input('status') + ApprovalStatus::APPROVED ); $this->canCreateContainer->passes($object); @@ -111,3 +111,11 @@ class CreateLoadContainerLogic extends AbstractControllerLogic } } + +{ + "container_reference": "", + "container_number": "", + "seal_reference": "", + "container_type": "", + +} \ No newline at end of file