From 174992cc65d4178cff8d890a5902781794c76b5a Mon Sep 17 00:00:00 2001 From: glovetleong Date: Tue, 14 Sep 2021 17:02:42 +0800 Subject: [PATCH] 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