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'); + + });