diff --git a/app/Classes/Constants.php b/app/Classes/Constants.php index 3cc8b98..a5fc166 100644 --- a/app/Classes/Constants.php +++ b/app/Classes/Constants.php @@ -9,7 +9,8 @@ class Constants { 'supplier' => 1, 'warehouse' => 2, 'forwarder' => 3, - 'order' => 4 + 'order' => 4, + 'driver' => 5, ]; @@ -59,14 +60,14 @@ class Constants { 'sequence' => 0 ], Constants::ORDER_SHIPPING_STEP => [ - 'initial_name' => 'ready to ship', + 'initial_name' => 'shipping', 'final_name' => 'shipped out', 'description' => 'Order is Loaded to Container, waiting for Shipment', 'sequence' => 1 ], Constants::ORDER_DELIVERY_STEP => [ - 'initial_name' => 'ready to deliver', - 'final_name' => 'to receive', + 'initial_name' => 'delivery', + 'final_name' => 'Received', 'description' => 'Order out for delivery soon', 'sequence' => 2 ], diff --git a/app/Classes/Modules/Accounts/Services/ListsUserAccount.php b/app/Classes/Modules/Accounts/Services/ListsUserAccount.php index 4ecd5de..14384f6 100644 --- a/app/Classes/Modules/Accounts/Services/ListsUserAccount.php +++ b/app/Classes/Modules/Accounts/Services/ListsUserAccount.php @@ -1,10 +1,4 @@ repository->orderBy('created_at')->paginate(10); + $companies = $pagination ? $this->repository->orderBy('created_at')->paginate(10) : $this->repository->orderBy('created_at')->get(); return CompanyResource::collection($companies); diff --git a/app/Classes/Modules/Contacts/DataTransferObjects/ContactObject.php b/app/Classes/Modules/Contacts/DataTransferObjects/ContactObject.php index a5b997e..fee0272 100644 --- a/app/Classes/Modules/Contacts/DataTransferObjects/ContactObject.php +++ b/app/Classes/Modules/Contacts/DataTransferObjects/ContactObject.php @@ -14,32 +14,32 @@ class ContactObject /** @var string */ private $name; - /** @var string */ - private $designation; - - /** @var string */ + /** @var null|string */ private $contact; - /** @var string */ + /** @var null|string */ private $email; + /** @var null|string */ + private $designation; + /** * ContactObject constructor. * @param int $type * @param int $referenceId * @param string $name - * @param string $designation - * @param string $contact - * @param string $email + * @param null|string $contact + * @param null|string $email + * @param null|string $designation */ - public function __construct(int $type, int $referenceId, string $name, string $designation, string $contact, string $email) + public function __construct(int $type, int $referenceId, string $name, ?string $contact = null, ?string $email = null, ?string $designation = null) { $this->type = $type; $this->referenceId = $referenceId; $this->name = $name; - $this->designation = $designation; $this->contact = $contact; $this->email = $email; + $this->designation = $designation; } /** @@ -67,32 +67,28 @@ class ContactObject } /** - * @return string + * @return null|string */ - public function getDesignation(): string - { - return $this->designation; - } - - /** - * @return string - */ - public function getContact(): string + public function getContact(): ?string { return $this->contact; } /** - * @return string + * @return null|string */ - public function getEmail(): string + public function getEmail(): ?string { return $this->email; } - - - + /** + * @return null|string + */ + public function getDesignation(): ?string + { + return $this->designation; + } } \ No newline at end of file diff --git a/app/Classes/Modules/Contacts/Exceptions/CannotCreateContactException.php b/app/Classes/Modules/Contacts/Exceptions/CannotCreateContactException.php index 0ab4115..165f627 100644 --- a/app/Classes/Modules/Contacts/Exceptions/CannotCreateContactException.php +++ b/app/Classes/Modules/Contacts/Exceptions/CannotCreateContactException.php @@ -4,12 +4,6 @@ namespace App\Classes\Modules\Contacts\Exceptions; use App\Classes\Exceptions\Common\ErrorException; use App\Classes\ValueObjects\Constants\HttpStatus; -/** - * Created by PhpStorm. - * User: user - * Date: 07/03/2019 - * Time: 3:25 PM - */ final class CannotCreateContactException extends ErrorException { /** @param string $message */ diff --git a/app/Classes/Modules/Contacts/Services/CreatesContact.php b/app/Classes/Modules/Contacts/Services/CreatesContact.php index 2989493..6f49429 100644 --- a/app/Classes/Modules/Contacts/Services/CreatesContact.php +++ b/app/Classes/Modules/Contacts/Services/CreatesContact.php @@ -26,6 +26,7 @@ class CreatesContact * @param int $type * @param int $referenceId * @return Contact + * @throws CannotCreateContactException */ public function execute(ContactObject $contact, int $type, int $referenceId) { diff --git a/app/Classes/Modules/Contacts/Services/ListsContact.php b/app/Classes/Modules/Contacts/Services/ListsContact.php index 982ce8c..b17f5c9 100644 --- a/app/Classes/Modules/Contacts/Services/ListsContact.php +++ b/app/Classes/Modules/Contacts/Services/ListsContact.php @@ -1,10 +1,4 @@ ListCompany->execute(); + return $this->ListCompany->execute($pagination); } } \ No newline at end of file diff --git a/app/Classes/Modules/ControllersLogic/Contacts/CreateContactLogic.php b/app/Classes/Modules/ControllersLogic/Contacts/CreateContactLogic.php index 88cfdcf..a446dd0 100644 --- a/app/Classes/Modules/ControllersLogic/Contacts/CreateContactLogic.php +++ b/app/Classes/Modules/ControllersLogic/Contacts/CreateContactLogic.php @@ -27,7 +27,7 @@ class CreateContactLogic { try{ - $object = new ContactObject($type, $referenceId, $request->input('name'), $request->input('designation'), $request->input('contact'), $request->input('email')); + $object = new ContactObject($type, $referenceId, $request->input('name'), $request->input('contact'), $request->input('email'), $request->input('designation')); return $this->createContact->execute($object, $type, $referenceId); } diff --git a/app/Classes/Modules/ControllersLogic/Contacts/ListContactLogic.php b/app/Classes/Modules/ControllersLogic/Contacts/ListContactLogic.php index 3d08c8d..4eaadac 100644 --- a/app/Classes/Modules/ControllersLogic/Contacts/ListContactLogic.php +++ b/app/Classes/Modules/ControllersLogic/Contacts/ListContactLogic.php @@ -1,10 +1,4 @@ input('name'), $request->input('designation'), $request->input('contact'), $request->input('email')); + $object = new ContactObject($type, $referenceId, $request->input('name'), $request->input('contact'), $request->input('email'), $request->input('designation')); return $this->updateContact->execute($id, $object); } } \ No newline at end of file diff --git a/app/Classes/Modules/ControllersLogic/Orders/Attachments/UpdateDeliveryArrangementLogic.php b/app/Classes/Modules/ControllersLogic/Orders/Attachments/UpdateDeliveryArrangementLogic.php new file mode 100644 index 0000000..25253af --- /dev/null +++ b/app/Classes/Modules/ControllersLogic/Orders/Attachments/UpdateDeliveryArrangementLogic.php @@ -0,0 +1,93 @@ +updatesDeliveryArrangement = $updatesDeliveryArrangement; + $this->updatesSchedule = $updatesSchedule; + $this->createsContact = $createsContact; + $this->updatesTrackingNumber = $updatesTrackingNumber; + } + + + /** + * @param String $orderId + * @param Request $request + * @return JsonResponse + * @throws InternalServerErrorException + */ + public function execute(String $orderId, Request $request){ + + try { + + $orderObject = new OrderObject($orderId); + + $deliveryArrangementObject = new DeliveryArrangementObject($request->input('type'), $request->input('vehicle_no')); + $arrangementId = $this->updatesDeliveryArrangement->execute($orderObject, $deliveryArrangementObject); + + $scheduleObject = new ScheduleObject($request->input('schedule')['ETA'], $request->input('schedule')['ETD'], 1, $request->input('schedule')['remark']); + + $this->updatesSchedule->execute($arrangementId, $scheduleObject); + + if($deliveryArrangementObject->getType() === 0){ + $contactObject = new ContactObject(Constants::MODULE_TYPES['driver'], $arrangementId, $request->input('name'), $request->input('contact')); + Contact::updateOrCreate(['type' => $contactObject->getType(), 'reference_id' => $contactObject->getReferenceId()], + ['name' => $contactObject->getName(), 'contact' => $contactObject->getContact()]); + + $this->createsContact->execute($contactObject, Constants::MODULE_TYPES['driver'], $arrangementId); + } + + if($deliveryArrangementObject->getType() === 1){ + $trackingNumberObject = new TrackingNumberObject(1, $request->input('tracking_number'), $request->input('courier')); + $this->updatesTrackingNumber->execute($orderObject, $trackingNumberObject); + } + + return new JsonResponse(null, HttpStatus::RESOURCE_CREATED); + + } catch (\Exception $exception){ + throw new InternalServerErrorException("Failed to update order's shipping arrangement because {$exception->getMessage()}"); + } + + + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/ControllersLogic/Orders/PackingList/UpdatePackingListLogic.php b/app/Classes/Modules/ControllersLogic/Orders/Attachments/UpdatePackingListLogic.php similarity index 91% rename from app/Classes/Modules/ControllersLogic/Orders/PackingList/UpdatePackingListLogic.php rename to app/Classes/Modules/ControllersLogic/Orders/Attachments/UpdatePackingListLogic.php index 424f744..63e3fb7 100644 --- a/app/Classes/Modules/ControllersLogic/Orders/PackingList/UpdatePackingListLogic.php +++ b/app/Classes/Modules/ControllersLogic/Orders/Attachments/UpdatePackingListLogic.php @@ -1,11 +1,11 @@ input('reference_no'), $request->input('packages')); $confirmed = $this->checkPackingListIsComplete($packingListObject->getPackages()); - dd($confirmed); $this->updatesPackingList->execute($orderObject, $packingListObject, $confirmed); diff --git a/app/Classes/Modules/ControllersLogic/Orders/Attachments/UpdateShippingArrangementLogic.php b/app/Classes/Modules/ControllersLogic/Orders/Attachments/UpdateShippingArrangementLogic.php new file mode 100644 index 0000000..5199df7 --- /dev/null +++ b/app/Classes/Modules/ControllersLogic/Orders/Attachments/UpdateShippingArrangementLogic.php @@ -0,0 +1,67 @@ +updatesShippingArrangement = $updatesShippingArrangement; + $this->updatesSchedule = $updatesSchedule; + } + + + /** + * @param String $orderId + * @param Request $request + * @return JsonResponse + * @throws InternalServerErrorException + */ + public function execute(String $orderId, Request $request){ + + try { + + $orderObject = new OrderObject($orderId); + + $shippingArrangementObject = new ShippingArrangementObject($request->input('container_no'), $request->input('seal_no')); + $arrangementId = $this->updatesShippingArrangement->execute($orderObject, $shippingArrangementObject); + + $scheduleObject = new ScheduleObject($request->input('schedule')['ETA'], $request->input('schedule')['ETD'], 0, $request->input('schedule')['remark']); + + $this->updatesSchedule->execute($arrangementId, $scheduleObject); + + return new JsonResponse(null, HttpStatus::RESOURCE_CREATED); + + } catch (\Exception $exception){ + throw new InternalServerErrorException("Failed to update order's shipping arrangement because {$exception->getMessage()}"); + } + + + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/ControllersLogic/Orders/Attachments/UpdateTrackingNumberLogic.php b/app/Classes/Modules/ControllersLogic/Orders/Attachments/UpdateTrackingNumberLogic.php new file mode 100644 index 0000000..46cd950 --- /dev/null +++ b/app/Classes/Modules/ControllersLogic/Orders/Attachments/UpdateTrackingNumberLogic.php @@ -0,0 +1,51 @@ +updatesTrackingNumber = $updatesTrackingNumber; + } + + /** + * @param String $orderId + * @param Request $request + * @return JsonResponse + * @throws InternalServerErrorException + */ + public function execute(String $orderId, Request $request){ + + try { + + $orderObject = new OrderObject($orderId); + $trackingNumberObject = new TrackingNumberObject($request->input('type'), $request->input('tracking_number'), $request->input('courier')); + $this->updatesTrackingNumber->execute($orderObject, $trackingNumberObject); + + return new JsonResponse(null, HttpStatus::RESOURCE_CREATED); + + } catch (\Exception $exception){ + throw new InternalServerErrorException("Failed to update order's receive note tracking number because {$exception->getMessage()}"); + } + + + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/ControllersLogic/Orders/ConfirmOrderLogic.php b/app/Classes/Modules/ControllersLogic/Orders/ConfirmOrderLogic.php deleted file mode 100644 index 640a355..0000000 --- a/app/Classes/Modules/ControllersLogic/Orders/ConfirmOrderLogic.php +++ /dev/null @@ -1,73 +0,0 @@ -repository = $repository; - $this->setOrderWarehouse = $setOrderWarehouse; - $this->confirmOrder = $confirmOrder; - $this->updatesOrderSteps = $updatesOrderSteps; - } - - - /** - * @param int $orderId - * @param Request $request - * @return JsonResponse - * @throws InternalServerErrorException - * @throws \App\Classes\Modules\Accounts\Exceptions\CannotUpdateOrderWarehouseException - */ - public function execute(int $orderId, Request $request) { - - try { - - $order = $this->repository->findOrFail($orderId); - - $orderObject = new OrderObject($orderId, null, $request->input('warehouse_id')); - - if($orderObject->getWarehouseId()){ - $this->setOrderWarehouse->execute($orderObject); - } - - $this->confirmOrder->execute($orderObject); - - return new JsonResponse("Order has been confirmed", HttpStatus::OK); - - } catch (CannotListCompanyOrdersException $exception){ - throw new InternalServerErrorException("Failed to confirm order because {$exception->getMessage()}"); - } - } -} \ No newline at end of file diff --git a/app/Classes/Modules/ControllersLogic/Orders/UpdateOrderStepLogic.php b/app/Classes/Modules/ControllersLogic/Orders/UpdateOrderStepLogic.php index 3e05b37..e714530 100644 --- a/app/Classes/Modules/ControllersLogic/Orders/UpdateOrderStepLogic.php +++ b/app/Classes/Modules/ControllersLogic/Orders/UpdateOrderStepLogic.php @@ -11,20 +11,15 @@ use Illuminate\Http\Request; class UpdateOrderStepLogic { - /** @var Order */ - private $repository; - /** @var UpdatesOrderSteps */ private $updateOrderSteps; /** * UpdateOrderStepLogic constructor. - * @param Order $repository * @param UpdatesOrderSteps $updateOrderSteps */ - public function __construct(Order $repository, UpdatesOrderSteps $updateOrderSteps) + public function __construct(UpdatesOrderSteps $updateOrderSteps) { - $this->repository = $repository; $this->updateOrderSteps = $updateOrderSteps; } @@ -33,15 +28,10 @@ class UpdateOrderStepLogic * @param int $orderId * @param Request $request * @return \Illuminate\Http\JsonResponse - * @throws \ReflectionException */ public function execute(int $orderId, Request $request) { - $repository = $this->repository->findOrFail($orderId); - $orderObject = new OrderObject($orderId); - $stepObject = new StepObject($repository->current_step, $request->input('complete_date')); - - return $this->updateOrderSteps->execute($orderObject, $stepObject, $request); + return $this->updateOrderSteps->execute($orderId, $request); } } \ No newline at end of file diff --git a/app/Classes/Modules/ControllersLogic/Orders/UpdateWarehouseLogic.php b/app/Classes/Modules/ControllersLogic/Orders/UpdateWarehouseLogic.php new file mode 100644 index 0000000..64e3709 --- /dev/null +++ b/app/Classes/Modules/ControllersLogic/Orders/UpdateWarehouseLogic.php @@ -0,0 +1,52 @@ +setsOrderWarehouse = $setsOrderWarehouse; + } + + /** + * @param String $orderId + * @param Request $request + * @return JsonResponse + * @throws InternalServerErrorException + */ + public function execute(String $orderId, Request $request){ + + try { + + $order = new OrderObject($orderId); + + $order->setWarehouseId($request->input('warehouse_id')); + + $this->setsOrderWarehouse->execute($order); + + return new JsonResponse(null, HttpStatus::REQUEST_ACCEPTED); + + } catch (\Exception $exception){ + throw new InternalServerErrorException("Failed to update order's packing list because {$exception->getMessage()}"); + } + + + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/DataTransferObjects/DeliveryArrangementObject.php b/app/Classes/Modules/Orders/DataTransferObjects/DeliveryArrangementObject.php new file mode 100644 index 0000000..b6b9dc8 --- /dev/null +++ b/app/Classes/Modules/Orders/DataTransferObjects/DeliveryArrangementObject.php @@ -0,0 +1,45 @@ +type = $type; + $this->vehicleNumber = $vehicleNumber; + } + + /** + * @return int + */ + public function getType(): int + { + return $this->type; + } + + /** + * @return null|string + */ + public function getVehicleNumber(): ?string + { + return $this->vehicleNumber; + } + + + + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/DataTransferObjects/PackingListObject.php b/app/Classes/Modules/Orders/DataTransferObjects/PackingListObject.php index 83ede23..b9f6820 100644 --- a/app/Classes/Modules/Orders/DataTransferObjects/PackingListObject.php +++ b/app/Classes/Modules/Orders/DataTransferObjects/PackingListObject.php @@ -6,18 +6,18 @@ namespace App\Classes\Modules\Orders\DataTransferObjects; class PackingListObject { - /** @var string */ + /** @var null|string */ private $referenceId; - /** @var PackageObject[] */ + /** @var array */ private $packages; /** * PackingListObject constructor. - * @param string $referenceId - * @param PackageObject[] $packages + * @param null|string $referenceId + * @param array $packages */ - public function __construct(string $referenceId, array $packages) + public function __construct(?string $referenceId, array $packages) { $this->referenceId = $referenceId; $this->packages = $packages; @@ -25,9 +25,9 @@ class PackingListObject /** - * @return string + * @return null|string */ - public function getReferenceId(): string + public function getReferenceId(): ? string { return $this->referenceId; } diff --git a/app/Classes/Modules/Orders/DataTransferObjects/ReceiveNoteObject.php b/app/Classes/Modules/Orders/DataTransferObjects/ReceiveNoteObject.php deleted file mode 100644 index 8c1b181..0000000 --- a/app/Classes/Modules/Orders/DataTransferObjects/ReceiveNoteObject.php +++ /dev/null @@ -1,32 +0,0 @@ -trackingNumber = $trackingNumber; - } - - /** - * @return string - */ - public function getTrackingNumber(): string - { - return $this->trackingNumber; - } - - -} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/DataTransferObjects/ScheduleObject.php b/app/Classes/Modules/Orders/DataTransferObjects/ScheduleObject.php new file mode 100644 index 0000000..b1009fd --- /dev/null +++ b/app/Classes/Modules/Orders/DataTransferObjects/ScheduleObject.php @@ -0,0 +1,73 @@ +ETA = $ETA; + $this->ETD = $ETD; + $this->type = $type; + $this->issue = $issue; + } + + /** + * @return Carbon + */ + public function getETA(): Carbon + { + return Carbon::parse( $this->ETA); + } + + /** + * @return Carbon + */ + public function getETD(): Carbon + { + return Carbon::parse($this->ETD); + } + + /** + * @return int + */ + public function getType(): int + { + return $this->type; + } + + /** + * @return null|string + */ + public function getIssue(): ?string + { + return $this->issue; + } + + + + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/DataTransferObjects/ShippingArrangementObject.php b/app/Classes/Modules/Orders/DataTransferObjects/ShippingArrangementObject.php new file mode 100644 index 0000000..85b4c7f --- /dev/null +++ b/app/Classes/Modules/Orders/DataTransferObjects/ShippingArrangementObject.php @@ -0,0 +1,44 @@ +containerNumber = $containerNumber; + $this->sealNumber = $sealNumber; + } + + /** + * @return string + */ + public function getContainerNumber(): string + { + return $this->containerNumber; + } + + /** + * @return string + */ + public function getSealNumber(): string + { + return $this->sealNumber; + } + + + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/DataTransferObjects/TrackingNumberObject.php b/app/Classes/Modules/Orders/DataTransferObjects/TrackingNumberObject.php new file mode 100644 index 0000000..f9cfecf --- /dev/null +++ b/app/Classes/Modules/Orders/DataTransferObjects/TrackingNumberObject.php @@ -0,0 +1,54 @@ +type = $type; + $this->trackingNumber = $trackingNumber; + $this->courier = $courier; + } + + /** + * @return int + */ + public function getType(): int + { + return $this->type; + } + + /** + * @return string + */ + public function getTrackingNumber(): string + { + return $this->trackingNumber; + } + + /** + * @return null|string + */ + public function getCourier(): ?string + { + return $this->courier; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Processors/AbstractStepProcessor.php b/app/Classes/Modules/Orders/Processors/AbstractStepProcessor.php new file mode 100644 index 0000000..54f964c --- /dev/null +++ b/app/Classes/Modules/Orders/Processors/AbstractStepProcessor.php @@ -0,0 +1,46 @@ +validator()){ + return new JsonResponse(['message' => 'Updating step validation has failed due to missing requirements'], HttpStatus::VALIDATION_FAILED); + } + + (new CompletesOrderStep())->execute($order, $step); + + /** notification */ + + + return new JsonResponse(null, HttpStatus::REQUEST_ACCEPTED); + + } catch (\Exception $exception){ + + throw new InternalServerErrorException("Failed to update order step because {$exception->getMessage()}"); + + } + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Processors/ConfirmsOrder.php b/app/Classes/Modules/Orders/Processors/ConfirmsOrder.php index 759d76a..572053e 100644 --- a/app/Classes/Modules/Orders/Processors/ConfirmsOrder.php +++ b/app/Classes/Modules/Orders/Processors/ConfirmsOrder.php @@ -3,66 +3,55 @@ namespace App\Classes\Modules\Orders\Processors; +use App\Classes\Constants; use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException; use App\Classes\Modules\Orders\DataTransferObjects\OrderObject; use App\Classes\Modules\Orders\DataTransferObjects\StepObject; -use App\Classes\Modules\Orders\Services\Processors\updatesStep; -use App\Classes\Modules\Orders\Services\SetsOrderWarehouse; use App\Classes\Modules\Orders\Services\Steps\GenerateOrderSteps; -use App\Classes\ValueObjects\Constants\HttpStatus; use Illuminate\Http\JsonResponse; -class ConfirmsOrder +class ConfirmsOrder extends AbstractStepProcessor { - use updatesStep; + /** @var string */ + const STEP_REFERENCE = Constants::ORDER_PROCESSING_STEP; - /** @var GenerateOrderSteps */ - private $generateOrderSteps; - - /** @var SetsOrderWarehouse */ - private $setOrderWarehouse; + /** @var OrderObject */ + private $order; + /** @var StepObject */ + private $step; /** - * ConfirmsOrder constructor. + * WarehousePackOrder constructor. + * @param int $orderId + * @param string $completeDate */ - public function __construct() + public function __construct(int $orderId, string $completeDate = null) { - $this->setOrderWarehouse = new SetsOrderWarehouse(); - $this->generateOrderSteps = new GenerateOrderSteps(); + $this->order = new OrderObject($orderId); + $this->step = new StepObject(self::STEP_REFERENCE, $completeDate); + + } + + /** + * @return bool + */ + public function validator(): bool { + return true; } /** - * @param OrderObject $order - * @param StepObject $step - * @param int $warehouseId * @return JsonResponse * @throws InternalServerErrorException + * @throws \App\Classes\Modules\Accounts\Exceptions\CannotCreateOrderStepsException */ - public function execute(OrderObject $order, StepObject $step, ?int $warehouseId = null){ - - try { - - if($warehouseId){ - $order->setWarehouseId($warehouseId); - $this->setOrderWarehouse->execute($order); - } - - $this->generateOrderSteps->execute($order); - - $this->completeStep($order, $step); - - return new JsonResponse(null, HttpStatus::RESOURCE_CREATED); - - } catch (\Exception $exception){ - - throw new InternalServerErrorException("Failed to update order step because {$exception->getMessage()}"); - - } + public function execute(): JsonResponse { + (new generateOrderSteps())->execute($this->order); + return $this->handler($this->order, $this->step); } } \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Processors/DeliverOrder.php b/app/Classes/Modules/Orders/Processors/DeliverOrder.php index a78b9e4..fa21d6e 100644 --- a/app/Classes/Modules/Orders/Processors/DeliverOrder.php +++ b/app/Classes/Modules/Orders/Processors/DeliverOrder.php @@ -3,37 +3,56 @@ namespace App\Classes\Modules\Orders\Processors; +use App\Classes\Constants; use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException; use App\Classes\Modules\Orders\DataTransferObjects\OrderObject; use App\Classes\Modules\Orders\DataTransferObjects\StepObject; -use App\Classes\Modules\Orders\Services\Processors\updatesStep; -use App\Classes\ValueObjects\Constants\HttpStatus; +use App\Models\DeliveryArrangement; use Illuminate\Http\JsonResponse; -class DeliverOrder +class DeliverOrder extends AbstractStepProcessor { - use updatesStep; + /** @var string */ + const STEP_REFERENCE = Constants::ORDER_DELIVERY_STEP; + + /** @var OrderObject */ + private $order; + + /** @var StepObject */ + private $step; + /** - * @param OrderObject $order - * @param StepObject $step - * @return JsonResponse - * @throws InternalServerErrorException + * DeliverOrder constructor. + * @param int $orderId + * @param string $completeDate */ - public function execute(OrderObject $order, StepObject $step){ - - try { - - - $this->completeStep($order, $step); - return new JsonResponse(null, HttpStatus::REQUEST_ACCEPTED); - - } catch (\Exception $exception) { - throw new InternalServerErrorException("Failed to update order step because {$exception->getMessage()}"); - } + public function __construct(int $orderId, string $completeDate = null) + { + $this->order = new OrderObject($orderId); + $this->step = new StepObject(self::STEP_REFERENCE, $completeDate); } + /** + * @return bool + */ + public function validator(): bool { + if(!DeliveryArrangement::where('order_id', $this->order->getOrderId())->exists()) { + return false; + } + + return true; + } + + + /** + * @return JsonResponse + * @throws InternalServerErrorException + */ + public function execute(): JsonResponse { + return $this->handler($this->order, $this->step); + } } \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Processors/ShipOrder.php b/app/Classes/Modules/Orders/Processors/ShipOrder.php index 8d66ec1..6fa855a 100644 --- a/app/Classes/Modules/Orders/Processors/ShipOrder.php +++ b/app/Classes/Modules/Orders/Processors/ShipOrder.php @@ -3,35 +3,56 @@ namespace App\Classes\Modules\Orders\Processors; +use App\Classes\Constants; use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException; use App\Classes\Modules\Orders\DataTransferObjects\OrderObject; use App\Classes\Modules\Orders\DataTransferObjects\StepObject; -use App\Classes\Modules\Orders\Services\Processors\updatesStep; -use App\Classes\ValueObjects\Constants\HttpStatus; +use App\Models\ShippingArrangement; use Illuminate\Http\JsonResponse; -class ShipOrder +class ShipOrder extends AbstractStepProcessor { - use updatesStep; + /** @var string */ + const STEP_REFERENCE = Constants::ORDER_SHIPPING_STEP; + + /** @var OrderObject */ + private $order; + + /** @var StepObject */ + private $step; + + /** + * WarehousePackOrder constructor. + * @param int $orderId + * @param string $completeDate + */ + public function __construct(int $orderId, string $completeDate = null) + { + $this->order = new OrderObject($orderId); + $this->step = new StepObject(self::STEP_REFERENCE, $completeDate); + + } + + /** + * @return bool + */ + public function validator(): bool { + + if(!ShippingArrangement::where('order_id', $this->order->getOrderId())->exists()) { + return false; + } + + return true; + } + /** - * @param OrderObject $order - * @param StepObject $step * @return JsonResponse * @throws InternalServerErrorException */ - public function execute(OrderObject $order, StepObject $step){ - - try { - - $this->completeStep($order, $step); - return new JsonResponse(null, HttpStatus::REQUEST_ACCEPTED); - - } catch (\Exception $exception) { - throw new InternalServerErrorException("Failed to update order step because {$exception->getMessage()}"); - } - + public function execute(): JsonResponse { + return $this->handler($this->order, $this->step); } diff --git a/app/Classes/Modules/Orders/Processors/StepProcessMapper.php b/app/Classes/Modules/Orders/Processors/StepProcessMapper.php deleted file mode 100644 index 1db36ee..0000000 --- a/app/Classes/Modules/Orders/Processors/StepProcessMapper.php +++ /dev/null @@ -1,89 +0,0 @@ -getParameters(); - - foreach ($parameters as $parameter){ - - if(!$parameter->getClass()){ - $arguments[] = self::mapVariables($parameter->getType(), $valuesArray[Str::snake($parameter->getName())]?? null); - continue; - } - - $className = $parameter->getClass()->getName(); - - if(!in_array($className, [OrderObject::class, StepObject::class, Carbon::class])){ - $arguments[] = self::mapClassObjects($className, $valuesArray); - } - } - - return $arguments; - } - - /** - * @param string $type - * @param $value - * @return bool|float|int|string - */ - private function mapVariables(string $type, $value){ - - if($value === null){ - return null; - } - - switch ($type){ - case 'float': - return (float) $value; - break; - case 'int': - case 'integer': - return (int) $value; - break; - case 'bool': - case 'boolean': - return (bool) $value; - break; - default: - return (string) $value; - } - } - - - /** - * @param string $class - * @param array $valuesArray - * @return mixed - * @throws \ReflectionException - */ - private function mapClassObjects(string $class, array $valuesArray){ - - $reflection = new \ReflectionClass($class); - $properties = $reflection->getProperties(); - - return new $class(...array_map(function ($property) use ($valuesArray) { - return $valuesArray[Str::snake($property->getName())] ?? null; - }, $properties)); - - } - -} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Processors/WarehouseArrivalOrder.php b/app/Classes/Modules/Orders/Processors/WarehouseArrivalOrder.php index 3fa1ed7..38a4d7d 100644 --- a/app/Classes/Modules/Orders/Processors/WarehouseArrivalOrder.php +++ b/app/Classes/Modules/Orders/Processors/WarehouseArrivalOrder.php @@ -3,35 +3,50 @@ namespace App\Classes\Modules\Orders\Processors; +use App\Classes\Constants; use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException; use App\Classes\Modules\Orders\DataTransferObjects\OrderObject; use App\Classes\Modules\Orders\DataTransferObjects\StepObject; -use App\Classes\Modules\Orders\Services\Processors\updatesStep; -use App\Classes\ValueObjects\Constants\HttpStatus; use Illuminate\Http\JsonResponse; -class WarehouseArrivalOrder +class WarehouseArrivalOrder extends AbstractStepProcessor { - use updatesStep; + /** @var string */ + const STEP_REFERENCE = Constants::ORDER_WAREHOUSE_ARRIVAL_STEP; + + /** @var OrderObject */ + private $order; + + /** @var StepObject */ + private $step; + + /** + * WarehousePackOrder constructor. + * @param int $orderId + * @param string $completeDate + */ + public function __construct(int $orderId, string $completeDate = null) + { + $this->order = new OrderObject($orderId); + $this->step = new StepObject(self::STEP_REFERENCE, $completeDate); + + } + + /** + * @return bool + */ + public function validator(): bool { + return true; + } + /** - * @param OrderObject $order - * @param StepObject $step * @return JsonResponse * @throws InternalServerErrorException */ - public function execute(OrderObject $order, StepObject $step){ - - try { - - $this->completeStep($order, $step); - return new JsonResponse(null, HttpStatus::REQUEST_ACCEPTED); - - } catch (\Exception $exception) { - throw new InternalServerErrorException("Failed to update order step because {$exception->getMessage()}"); - } - + public function execute(): JsonResponse { + return $this->handler($this->order, $this->step); } diff --git a/app/Classes/Modules/Orders/Processors/WarehousePackOrder.php b/app/Classes/Modules/Orders/Processors/WarehousePackOrder.php index 689d4d5..8b22eb8 100644 --- a/app/Classes/Modules/Orders/Processors/WarehousePackOrder.php +++ b/app/Classes/Modules/Orders/Processors/WarehousePackOrder.php @@ -3,44 +3,59 @@ namespace App\Classes\Modules\Orders\Processors; +use App\Classes\Constants; use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException; use App\Classes\Modules\Orders\DataTransferObjects\OrderObject; use App\Classes\Modules\Orders\DataTransferObjects\StepObject; -use App\Classes\Modules\Orders\Services\Processors\updatesStep; -use App\Classes\ValueObjects\Constants\HttpStatus; use App\Models\PackingList; use Illuminate\Http\JsonResponse; -class WarehousePackOrder +class WarehousePackOrder extends AbstractStepProcessor { - use updatesStep; + /** @var string */ + const STEP_REFERENCE = Constants::ORDER_WAREHOUSE_PACKING_STEP; + + /** @var OrderObject */ + private $order; + + /** @var StepObject */ + private $step; /** - * @param OrderObject $order - * @param StepObject $step - * @return JsonResponse - * @throws InternalServerErrorException + * WarehousePackOrder constructor. + * @param int $orderId + * @param string $completeDate */ - public function execute(OrderObject $order, StepObject $step){ - - try { - $packingList = PackingList::where('order_id', $order->getOrderId())->firstOrFail(); - - if($packingList->confirmed) { - - $this->completeStep($order, $step); - - return new JsonResponse(null, HttpStatus::REQUEST_ACCEPTED); - } - - return new JsonResponse(['message' => 'Failed to update order step because packing list is in complete'], HttpStatus::VALIDATION_FAILED); - - } catch (\Exception $exception) { - throw new InternalServerErrorException("Failed to update order step because {$exception->getMessage()}"); - } + public function __construct(int $orderId, string $completeDate = null) + { + $this->order = new OrderObject($orderId); + $this->step = new StepObject(self::STEP_REFERENCE, $completeDate); } + /** + * @return bool + */ + public function validator(): bool { + + $packingList = PackingList::where('order_id', $this->order->getOrderId())->first(); + + if(!$packingList->confirmed) { + return false; + } + + return true; + } + + + /** + * @return JsonResponse + * @throws InternalServerErrorException + */ + public function execute(): JsonResponse { + + return $this->handler($this->order, $this->step); + } } \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Processors/WarehouseReceivesOrder.php b/app/Classes/Modules/Orders/Processors/WarehouseReceivesOrder.php index b68a464..754e2d1 100644 --- a/app/Classes/Modules/Orders/Processors/WarehouseReceivesOrder.php +++ b/app/Classes/Modules/Orders/Processors/WarehouseReceivesOrder.php @@ -3,52 +3,50 @@ namespace App\Classes\Modules\Orders\Processors; +use App\Classes\Constants; use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException; use App\Classes\Modules\Orders\DataTransferObjects\OrderObject; -use App\Classes\Modules\Orders\DataTransferObjects\ReceiveNoteObject; use App\Classes\Modules\Orders\DataTransferObjects\StepObject; -use App\Classes\Modules\Orders\Services\Processors\updatesStep; -use App\Classes\Modules\Orders\Services\ReceiveNote\CreatesReceiveNote; -use App\Classes\ValueObjects\Constants\HttpStatus; use Illuminate\Http\JsonResponse; -class WarehouseReceivesOrder +class WarehouseReceivesOrder extends AbstractStepProcessor { - use updatesStep; + /** @var string */ + const STEP_REFERENCE = Constants::ORDER_WAREHOUSE_RECEIVING_STEP; - /** @var CreatesReceiveNote */ - private $createsReceiveNote; + /** @var OrderObject */ + private $order; + + /** @var StepObject */ + private $step; /** - * WarehouseReceivesOrder constructor. + * WarehousePackOrder constructor. + * @param int $orderId + * @param string $completeDate */ - public function __construct() + public function __construct(int $orderId, string $completeDate = null) { - $this->createsReceiveNote = new CreatesReceiveNote(); + $this->order = new OrderObject($orderId); + $this->step = new StepObject(self::STEP_REFERENCE, $completeDate); + } /** - * @param OrderObject $order - * @param StepObject $step - * @param ReceiveNoteObject $object + * @return bool + */ + public function validator(): bool { + return true; + } + + + /** * @return JsonResponse * @throws InternalServerErrorException */ - public function execute(OrderObject $order, StepObject $step, ReceiveNoteObject $object){ - try { - - $this->createsReceiveNote->execute($order, $object); - - $this->completeStep($order, $step); - - return new JsonResponse(null, HttpStatus::RESOURCE_CREATED); - - } catch (\Exception $exception){ - throw new InternalServerErrorException("Failed to update order step because {$exception->getMessage()}"); - } - - + public function execute(): JsonResponse { + return $this->handler($this->order, $this->step); } } \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Processors/WarehouseUnpackingOrder.php b/app/Classes/Modules/Orders/Processors/WarehouseUnpackingOrder.php index 087db4a..03bc35f 100644 --- a/app/Classes/Modules/Orders/Processors/WarehouseUnpackingOrder.php +++ b/app/Classes/Modules/Orders/Processors/WarehouseUnpackingOrder.php @@ -3,36 +3,50 @@ namespace App\Classes\Modules\Orders\Processors; +use App\Classes\Constants; use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException; use App\Classes\Modules\Orders\DataTransferObjects\OrderObject; use App\Classes\Modules\Orders\DataTransferObjects\StepObject; -use App\Classes\Modules\Orders\Services\Processors\updatesStep; -use App\Classes\ValueObjects\Constants\HttpStatus; use Illuminate\Http\JsonResponse; -class WarehouseUnpackingOrder +class WarehouseUnpackingOrder extends AbstractStepProcessor { - use updatesStep; + /** @var string */ + const STEP_REFERENCE = Constants::ORDER_WAREHOUSE_UNPACKING_STEP; + + /** @var OrderObject */ + private $order; + + /** @var StepObject */ + private $step; /** - * @param OrderObject $order - * @param StepObject $step - * @return JsonResponse - * @throws InternalServerErrorException + * WarehousePackOrder constructor. + * @param int $orderId + * @param string $completeDate */ - public function execute(OrderObject $order, StepObject $step){ - - try { - - $this->completeStep($order, $step); - return new JsonResponse(null, HttpStatus::REQUEST_ACCEPTED); - - } catch (\Exception $exception) { - throw new InternalServerErrorException("Failed to update order step because {$exception->getMessage()}"); - } + public function __construct(int $orderId, string $completeDate = null) + { + $this->order = new OrderObject($orderId); + $this->step = new StepObject(self::STEP_REFERENCE, $completeDate); } + /** + * @return bool + */ + public function validator(): bool { + return true; + } + + + /** + * @return JsonResponse + * @throws InternalServerErrorException + */ + public function execute(): JsonResponse { + return $this->handler($this->order, $this->step); + } } \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/Attachments/UpdatesDeliveryArrangement.php b/app/Classes/Modules/Orders/Services/Attachments/UpdatesDeliveryArrangement.php new file mode 100644 index 0000000..903a554 --- /dev/null +++ b/app/Classes/Modules/Orders/Services/Attachments/UpdatesDeliveryArrangement.php @@ -0,0 +1,34 @@ +repository = $repository; + } + + + public function execute(OrderObject $order, DeliveryArrangementObject $arrangement){ + $arrangement = $this->repository->updateOrCreate(['order_id' => $order->getOrderId()], + ['type' => $arrangement->getType(), 'vehicle_no' => $arrangement->getVehicleNumber()]); + + return $arrangement->id; + } + + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/PackingList/UpdatesPackingList.php b/app/Classes/Modules/Orders/Services/Attachments/UpdatesPackingList.php similarity index 84% rename from app/Classes/Modules/Orders/Services/PackingList/UpdatesPackingList.php rename to app/Classes/Modules/Orders/Services/Attachments/UpdatesPackingList.php index 1397364..86333a6 100644 --- a/app/Classes/Modules/Orders/Services/PackingList/UpdatesPackingList.php +++ b/app/Classes/Modules/Orders/Services/Attachments/UpdatesPackingList.php @@ -1,6 +1,6 @@ repository->firstOrCreate(['order_id' => $orderObject->getOrderId()], + $packingList = $this->repository->updateOrCreate(['order_id' => $orderObject->getOrderId()], [ 'reference_no' => $packingListObject->getReferenceId(), 'confirmed' => $confirmed diff --git a/app/Classes/Modules/Orders/Services/Attachments/UpdatesSchedule.php b/app/Classes/Modules/Orders/Services/Attachments/UpdatesSchedule.php new file mode 100644 index 0000000..06801e4 --- /dev/null +++ b/app/Classes/Modules/Orders/Services/Attachments/UpdatesSchedule.php @@ -0,0 +1,40 @@ +repository = $repository; + } + + + public function execute(int $arrangementId, ScheduleObject $schedule){ + + $this->repository->where('arrangement_id', $arrangementId)->where('type', $schedule->getType())->where('status', 0) + ->update(['status' => 2, 'issue_remark' => $schedule->getIssue()]); + + $this->repository->arrangement_id = $arrangementId; + $this->repository->type = $schedule->getType(); + $this->repository->ETA = $schedule->getETA(); + $this->repository->ETD = $schedule->getETD(); + + $this->repository->save(); + + } + + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/Attachments/UpdatesShippingArrangement.php b/app/Classes/Modules/Orders/Services/Attachments/UpdatesShippingArrangement.php new file mode 100644 index 0000000..2bd0ec6 --- /dev/null +++ b/app/Classes/Modules/Orders/Services/Attachments/UpdatesShippingArrangement.php @@ -0,0 +1,33 @@ +repository = $repository; + } + + public function execute(OrderObject $order, ShippingArrangementObject $arrangement){ + $arrangement = $this->repository->updateOrCreate(['order_id' => $order->getOrderId()], + ['container_no' => $arrangement->getContainerNumber(), 'seal_no' => $arrangement->getSealNumber()]); + + return $arrangement->id; + } + + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/Attachments/UpdatesTrackingNumber.php b/app/Classes/Modules/Orders/Services/Attachments/UpdatesTrackingNumber.php new file mode 100644 index 0000000..9a0e11a --- /dev/null +++ b/app/Classes/Modules/Orders/Services/Attachments/UpdatesTrackingNumber.php @@ -0,0 +1,35 @@ +repository = $repository; + } + + + public function execute(OrderObject $orderObject, TrackingNumberObject $trackingNumberObject){ + + $this->repository->updateOrCreate(['order_id' => $orderObject->getOrderId(), 'type' => $trackingNumberObject->getType()], + [ + 'tracking_no' => $trackingNumberObject->getTrackingNumber(), + 'courier' => $trackingNumberObject->getCourier() + ]); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/CreatesOrder.php b/app/Classes/Modules/Orders/Services/CreatesOrder.php index 4f24759..ddfe089 100644 --- a/app/Classes/Modules/Orders/Services/CreatesOrder.php +++ b/app/Classes/Modules/Orders/Services/CreatesOrder.php @@ -35,6 +35,7 @@ class CreatesOrder $address = AddressBook::where('company_id', $order->getCompanyId()) ->where('default', true)->firstOrFail(); + $this->repository->company_id = $order->getCompanyId(); $this->repository->marking = $order->getOrderId(); $this->repository->address_id = $address->id; diff --git a/app/Classes/Modules/Orders/Services/ListsOrderHistory.php b/app/Classes/Modules/Orders/Services/ListsOrderHistory.php index 185177f..4ba4f2c 100644 --- a/app/Classes/Modules/Orders/Services/ListsOrderHistory.php +++ b/app/Classes/Modules/Orders/Services/ListsOrderHistory.php @@ -4,8 +4,8 @@ namespace App\Classes\Modules\Orders\Services; use App\Classes\Constants; -use App\Models\CustomIssues; use App\Models\Order; +use App\Models\Schedule; use App\Models\Warehouse; use Carbon\Carbon; use Illuminate\Support\Facades\DB; @@ -13,6 +13,16 @@ use Illuminate\Support\Collection; class ListsOrderHistory { + /** @var Collection */ + private $history; + + /** + * ListsOrderHistory constructor. + */ + public function __construct() + { + $this->history = new Collection(); + } public function execute(string $orderId, Carbon $createdAt, bool $complete, Carbon $lastUpdate){ @@ -21,9 +31,7 @@ class ListsOrderHistory $orderSteps = $order->orderSteps()->where('complete', true)->orderBy('sequence')->get(); - $history = new Collection(); - - $history->push(['date' => $createdAt->format('d-m-Y'), 'description' => 'Order number has been created']); + $this->history->push(['type' => 1, 'date' => $createdAt->format('d-m-Y'), 'description' => 'Order number has been created']); foreach ($orderSteps as $step){ @@ -31,78 +39,76 @@ class ListsOrderHistory switch ($step->reference_id){ case Constants::ORDER_PROCESSING_STEP: if($order->warehouse_id){ - $history->push(['date' => $completeDate, 'description' => Warehouse::find($order->warehouse_id)->first()->name.' confirmed as your order\'s warehouse']); + $this->history->push(['type' => 1, 'date' => $completeDate, 'description' => Warehouse::find($order->warehouse_id)->first()->name.' confirmed as your order\'s warehouse']); } break; case Constants::ORDER_NO_WAREHOUSE_PENDING_SUPPLIER: - $history->push(['date' => $completeDate, 'description' => 'Your Order has been loaded into container']); + $this->history->push(['type' => 1, 'date' => $completeDate, 'description' => 'Your Order has been loaded into container']); break; case Constants::ORDER_WAREHOUSE_RECEIVING_STEP: $warehouse = Warehouse::find($order->warehouse_id)->first(); - $history->push(['date' => $completeDate, 'description' => 'Arrived at '. $warehouse->name .' warehouse in china']); + $this->history->push(['type' => 1, 'date' => $completeDate, 'description' => 'Arrived at '. $warehouse->name .' warehouse in china']); break; case Constants::ORDER_WAREHOUSE_PACKING_STEP: $packages = $order->packingLists()->firstOrFail()->packages()->selectRaw(DB::raw('((width/100) * (height/100) * (length/100)) * quantity as cbm, quantity'))->get(); - $history->push(['date' => $completeDate, 'description' => '['.$packages->sum('quantity').' Packages, '.number_format((float)$packages->sum('cbm'), 2, '.', '').' CBM] Your order has been loaded into container']); - $history->push(['date' => $completeDate, 'description' => 'Invoice has been issued, waiting for shipping payment']); + $this->history->push(['type' => 1, 'date' => $completeDate, 'description' => '['.$packages->sum('quantity').' Packages, '.number_format((float)$packages->sum('cbm'), 2, '.', '').' CBM] Your order has been loaded into container']); + $this->history->push(['type' => 1, 'date' => $completeDate, 'description' => 'Invoice has been issued, waiting for shipping payment']); break; case Constants::ORDER_SHIPPING_STEP: - $shippingArrangement = $order->shippingArrangement()->first(); - if($shippingArrangement){ - $shippingSchedules = $shippingArrangement->shippingSchedule()->get(); - foreach ($shippingSchedules as $schedule){ - if($schedule->status === 2){ - $customIssue = CustomIssues::where('schedule_id', $schedule->id)->first(); - if($customIssue !== null){ - $history->push(['date' => $completeDate, 'description' => '[ETD: '.$schedule->ETD.', ETA: '.$schedule->ETA.'] Shipping Schedule failed due to: '.$customIssue->remark]); - } else { - $history->push(['date' => $completeDate, 'description' => '[ETD: '.$schedule->ETD.', ETA: '.$schedule->ETA.'] Shipping Schedule failed']); - } - } else { - $history->push(['date' => $completeDate, 'description' => '[ETD: '.$schedule->ETD.', ETA: '.$schedule->ETA.'] Your Order has been scheduled for shipping ']); - } - } - } - $history->push(['date' => $completeDate, 'description' => 'Arrived to Malaysian port']); - $history->push(['date' => $completeDate, 'description' => 'Custom clearance is successful']); + $this->shippingArrangment($order); + $this->history->push(['type' => 1, 'date' => $completeDate, 'description' => 'Arrived to Malaysian port']); + $this->history->push(['type' => 1, 'date' => $completeDate, 'description' => 'Custom clearance is successful']); break; case Constants::ORDER_WAREHOUSE_ARRIVAL_STEP: - $history->push(['date' => $completeDate, 'description' => 'Arrived at Malaysia\'s warehouse']); + $this->history->push(['type' => 1, 'date' => $completeDate, 'description' => 'Arrived at Malaysia\'s warehouse']); break; case Constants::ORDER_WAREHOUSE_UNPACKING_STEP: - $history->push(['date' => $completeDate, 'description' => 'Your Order has been unloaded and being prepared for delivery']); + $this->history->push(['type' => 1, 'date' => $completeDate, 'description' => 'Your Order has been unloaded and being prepared for delivery']); break; case Constants::ORDER_DELIVERY_STEP: - $history->push(['date' => $completeDate, 'description' => 'Out for delivery']); + $this->deliveryArrangment($order); + $this->history->push(['type' => 2, 'date' => $completeDate, 'description' => 'Your Order has successfully been delivered']); break; } } if($order->current_step === Constants::ORDER_SHIPPING_STEP){ - $shippingArrangement = $order->shippingArrangement()->first(); - if($shippingArrangement){ - $shippingSchedules = $shippingArrangement->shippingSchedule()->get(); - foreach ($shippingSchedules as $schedule){ - if($schedule->status === 2){ - $customIssue = CustomIssues::where('schedule_id', $schedule->id)->first(); - if($customIssue !== null){ - $history->push(['date' => $schedule->updated_at->format('d-m-Y'), 'description' => '[ETD: '.$schedule->ETD.', ETA: '.$schedule->ETA.'] Shipping Schedule failed due to: '.$customIssue->remark]); - } else { - $history->push(['date' => $schedule->updated_at->format('d-m-Y'), 'description' => '[ETD: '.$schedule->ETD.', ETA: '.$schedule->ETA.'] Shipping Schedule failed']); - } - } else { - $history->push(['date' => $schedule->updated_at->format('d-m-Y'), 'description' => '[ETD: '.$schedule->ETD.', ETA: '.$schedule->ETA.'] Your Order has been scheduled for shipping ']); - } + $this->shippingArrangment($order); + } + + if($order->current_step === Constants::ORDER_DELIVERY_STEP){ + $this->deliveryArrangment($order); + } + + return $this->history->reverse()->toArray(); + } + + private function shippingArrangment(Order $order){ + $shippingArrangement = $order->shippingArrangement()->first(); + if($shippingArrangement){ + $shippingSchedules = Schedule::where('arrangement_id', $shippingArrangement->id)->where('type', 0)->get(); + foreach ($shippingSchedules as $schedule){ + if((int)$schedule->status === 2){ + $this->history->push(['type' => 0, 'date' => carbon::parse($schedule->ETD)->format('d-m-Y'), 'description' => $schedule->issue_remark ? 'Scheduled Shipping has failed due to: '.$schedule->issue_remark : 'Scheduled Shipping has failed']); + } else { + $this->history->push(['type' => 1, 'date' => carbon::parse($schedule->ETD)->format('d-m-Y'), 'description' => '[ETD: '.carbon::parse($schedule->ETD)->format('d-m-Y').', ETA: '.carbon::parse($schedule->ETA)->format('d-m-Y').'] Your Order has been scheduled for shipping ']); } } - } + } - if($complete){ - $history->push(['date' => $lastUpdate->format('d-m-Y'), 'description' => 'Your Order has successfully been delivered']); + private function deliveryArrangment(Order $order){ + $deliveryArrangement = $order->deliveryArrangement()->first(); + if($deliveryArrangement){ + $deliverySchedules = Schedule::where('arrangement_id', $deliveryArrangement->id)->where('type', 1)->get(); + foreach ($deliverySchedules as $schedule){ + if((int)$schedule->status === 2){ + $this->history->push(['type' => 0, 'date' => carbon::parse($schedule->ETD)->format('d-m-Y'), 'description' => $schedule->issue_remark ? 'Scheduled delivery has failed due to: '.$schedule->issue_remark : 'Scheduled delivery has failed']); + } else { + $this->history->push(['type' => 1, 'date' => carbon::parse($schedule->ETD)->format('d-m-Y'), 'description' => '[ETD: '.carbon::parse($schedule->ETD)->format('d-m-Y').', ETA: '.carbon::parse($schedule->ETA)->format('d-m-Y').'] Your Order has been scheduled for delivery ']); + } + } } - - return $history->reverse()->toArray(); } } \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/ReceiveNote/CreatesReceiveNote.php b/app/Classes/Modules/Orders/Services/ReceiveNote/CreatesReceiveNote.php deleted file mode 100644 index be516af..0000000 --- a/app/Classes/Modules/Orders/Services/ReceiveNote/CreatesReceiveNote.php +++ /dev/null @@ -1,29 +0,0 @@ -repository = new ReceiveNote(); - } - - public function execute(OrderObject $order , ReceiveNoteObject $receiveNote){ - - $this->repository->order_id = $order->getOrderId(); - $this->repository->tracking_no = $receiveNote->getTrackingNumber(); - - $this->repository->save(); - - } -} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/SetsOrderWarehouse.php b/app/Classes/Modules/Orders/Services/SetsOrderWarehouse.php index c56c02b..30c38d8 100644 --- a/app/Classes/Modules/Orders/Services/SetsOrderWarehouse.php +++ b/app/Classes/Modules/Orders/Services/SetsOrderWarehouse.php @@ -15,10 +15,11 @@ class SetsOrderWarehouse /** * SetsOrderWarehouse constructor. + * @param Order $repository */ - public function __construct() + public function __construct(Order $repository) { - $this->repository = new Order(); + $this->repository = $repository; } diff --git a/app/Classes/Modules/Orders/Services/Steps/CompletesOrderStep.php b/app/Classes/Modules/Orders/Services/Steps/CompletesOrderStep.php index f4c6d22..3205f77 100644 --- a/app/Classes/Modules/Orders/Services/Steps/CompletesOrderStep.php +++ b/app/Classes/Modules/Orders/Services/Steps/CompletesOrderStep.php @@ -23,7 +23,9 @@ class CompletesOrderStep { $orderStep->complete = 1; $orderStep->complete_date = $step->getCompleteDate(); - $orderStep->save(); + if($orderStep->save()){ + (new updatesOrderCurrentStep())->execute($order,$step); + } } diff --git a/app/Classes/Modules/Orders/Services/Steps/GenerateOrderSteps.php b/app/Classes/Modules/Orders/Services/Steps/GenerateOrderSteps.php index 8263986..bffa9a7 100644 --- a/app/Classes/Modules/Orders/Services/Steps/GenerateOrderSteps.php +++ b/app/Classes/Modules/Orders/Services/Steps/GenerateOrderSteps.php @@ -41,10 +41,6 @@ class GenerateOrderSteps */ public function execute(OrderObject $order){ - $modules = new Collection(); - - $order->getWarehouseId() ? $modules->push(Constants::ORDER_MODULE_WAREHOUSE) : $modules->push(Constants::ORDER_MODULE_NO_WAREHOUSE); - $orderSteps = $this->getSteps([$this->repository->findOrFail($order->getOrderId())->pluck('warehouse_id') ? Constants::ORDER_MODULE_WAREHOUSE : Constants::ORDER_MODULE_NO_WAREHOUSE]); $this->createsOrderSteps->execute($order, $orderSteps->toArray()); diff --git a/app/Classes/Modules/Orders/Services/Steps/UpdatesOrderSteps.php b/app/Classes/Modules/Orders/Services/Steps/UpdatesOrderSteps.php index fbf7ed2..4892c1d 100644 --- a/app/Classes/Modules/Orders/Services/Steps/UpdatesOrderSteps.php +++ b/app/Classes/Modules/Orders/Services/Steps/UpdatesOrderSteps.php @@ -3,27 +3,38 @@ namespace App\Classes\Modules\Orders\Services\Steps; -use App\Classes\Modules\Orders\DataTransferObjects\OrderObject; -use App\Classes\Modules\Orders\DataTransferObjects\StepObject; -use App\Classes\Modules\Orders\Processors\StepProcessMapper; use App\Classes\ValueObjects\Constants\OrderSteps; +use App\Models\Order; use Illuminate\Http\Request; class UpdatesOrderSteps { + + /** @var Order */ + private $repository; + /** - * @param OrderObject $order - * @param StepObject $step + * UpdatesOrderSteps constructor. + * @param Order $repository + */ + public function __construct(Order $repository) + { + $this->repository = $repository; + } + + + /** + * @param int $orderId * @param Request $request * @return mixed - * @throws \ReflectionException */ - public function execute(OrderObject $order, StepObject $step, Request $request) { + public function execute(int $orderId, Request $request) { - $class = OrderSteps::STEP_PROCESSOR[$step->getReferenceId()]; - $arguments = (new StepProcessMapper())->map($class, $request->all()); + $repository = $this->repository->findOrFail($orderId); - return (new $class())->execute($order, $step,...$arguments); + $class = OrderSteps::STEP_PROCESSOR[$repository->current_step]; + + return (new $class($orderId, $request->input('complete_date')))->execute(); } diff --git a/app/Classes/Modules/Steps/StepAttachments.php b/app/Classes/Modules/Steps/StepAttachments.php index bdf1951..5e69a42 100644 --- a/app/Classes/Modules/Steps/StepAttachments.php +++ b/app/Classes/Modules/Steps/StepAttachments.php @@ -5,6 +5,8 @@ namespace App\Classes\Modules\Steps; use App\Classes\Constants; use App\Http\Resources\PackingList as PackingListResource; use App\Http\Resources\ShippingArrangement as ShippingArrangementResource; +use App\Http\Resources\DeliveryArrangement as DeliveryArrangementResource; +use App\Models\DeliveryArrangement; use App\Models\PackingList; use App\Models\ShippingArrangement; @@ -17,7 +19,7 @@ class StepAttachments case Constants::ORDER_SHIPPING_STEP: return new ShippingArrangementResource(ShippingArrangement::where('order_id', $order_id)->first()); case Constants::ORDER_DELIVERY_STEP: - return new ShippingArrangementResource(ShippingArrangement::where('order_id', $order_id)->first()); + return new DeliveryArrangementResource(DeliveryArrangement::where('order_id', $order_id)->first()); default: return null; } diff --git a/app/Http/Controllers/Companies/ListCompanyController.php b/app/Http/Controllers/Companies/ListCompanyController.php index f8b5e6c..9af2195 100644 --- a/app/Http/Controllers/Companies/ListCompanyController.php +++ b/app/Http/Controllers/Companies/ListCompanyController.php @@ -6,9 +6,9 @@ use App\Classes\Modules\ControllersLogic\Companies\ListCompanyLogic; class ListCompanyController { - public function list(ListCompanyLogic $logic){ + public function list(ListCompanyLogic $logic, bool $pagination = true ){ - return $logic->execute(); + return $logic->execute($pagination); } } \ No newline at end of file diff --git a/app/Http/Controllers/Contacts/ListContactController.php b/app/Http/Controllers/Contacts/ListContactController.php index d080a77..bdc6257 100644 --- a/app/Http/Controllers/Contacts/ListContactController.php +++ b/app/Http/Controllers/Contacts/ListContactController.php @@ -1,10 +1,4 @@ execute($orderId, $request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Orders/UpdatePackingListController.php b/app/Http/Controllers/Orders/Attachments/UpdatePackingListController.php similarity index 79% rename from app/Http/Controllers/Orders/UpdatePackingListController.php rename to app/Http/Controllers/Orders/Attachments/UpdatePackingListController.php index 88dbc9f..2c2c02c 100644 --- a/app/Http/Controllers/Orders/UpdatePackingListController.php +++ b/app/Http/Controllers/Orders/Attachments/UpdatePackingListController.php @@ -1,8 +1,8 @@ execute($orderId, $request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Orders/Attachments/UpdateTrackingNumberController.php b/app/Http/Controllers/Orders/Attachments/UpdateTrackingNumberController.php new file mode 100644 index 0000000..f8f1478 --- /dev/null +++ b/app/Http/Controllers/Orders/Attachments/UpdateTrackingNumberController.php @@ -0,0 +1,20 @@ +execute($orderId, $request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Orders/BulkReceiveNotesController.php b/app/Http/Controllers/Orders/BulkReceiveNotesController.php index b4a4088..e076120 100644 --- a/app/Http/Controllers/Orders/BulkReceiveNotesController.php +++ b/app/Http/Controllers/Orders/BulkReceiveNotesController.php @@ -2,7 +2,13 @@ namespace App\Http\Controllers\Orders; -use App\Classes\Modules\ControllersLogic\Orders\UpdateOrderStepLogic; +use App\Classes\Constants; +use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException; +use App\Classes\Modules\Orders\DataTransferObjects\OrderObject; +use App\Classes\Modules\Orders\DataTransferObjects\TrackingNumberObject; +use App\Classes\Modules\Orders\DataTransferObjects\StepObject; +use App\Classes\Modules\Orders\Processors\WarehouseReceivesOrder; +use App\Classes\Modules\Orders\Services\Attachments\UpdatesTrackingNumber; use Illuminate\Http\Request; class BulkReceiveNotesController @@ -10,16 +16,22 @@ class BulkReceiveNotesController /** * @param Request $request - * @param UpdateOrderStepLogic $logic - * @return void - * @throws \ReflectionException + * @param UpdatesTrackingNumber $updatesTrackingNumber + * @throws InternalServerErrorException */ - public function create(Request $request, UpdateOrderStepLogic $logic){ - $receiveDate = $request->input('receive_date'); - foreach ($request->input('orders') as $note){ - $requestObject = new Request(); - $requestObject->merge(['tracking_number' => $note['tracking_number'], 'receive_date' => $receiveDate]); - $logic->execute($note['id'], $requestObject); + public function create(Request $request, UpdatesTrackingNumber $updatesTrackingNumber) { + + try{ + foreach ($request->input('orders') as $note){ + $orderObject = new OrderObject($note['id']); + + $trackingNumberObject = new TrackingNumberObject(0, $note['tracking_number']); + $updatesTrackingNumber->execute($orderObject, $trackingNumberObject); + + (new WarehouseReceivesOrder($note['id'], $request->input('receive_date')))->execute(); + } + } catch (\Exception $exception){ + throw new InternalServerErrorException($exception->getMessage()); } } diff --git a/app/Http/Controllers/Orders/ConfirmOrderController.php b/app/Http/Controllers/Orders/ConfirmOrderController.php deleted file mode 100644 index ac0390c..0000000 --- a/app/Http/Controllers/Orders/ConfirmOrderController.php +++ /dev/null @@ -1,22 +0,0 @@ -execute($orderId, $request); - } -} \ No newline at end of file diff --git a/app/Http/Controllers/Orders/UpdateWarehouseController.php b/app/Http/Controllers/Orders/UpdateWarehouseController.php new file mode 100644 index 0000000..1a0ffd7 --- /dev/null +++ b/app/Http/Controllers/Orders/UpdateWarehouseController.php @@ -0,0 +1,20 @@ +execute($orderId, $request); + } + +} \ No newline at end of file diff --git a/app/Http/Resources/Contact.php b/app/Http/Resources/Contact.php index 1167f6a..08ee0df 100644 --- a/app/Http/Resources/Contact.php +++ b/app/Http/Resources/Contact.php @@ -14,7 +14,6 @@ class Contact extends JsonResource */ public function toArray($request) { - $comapny = \App\Models\Company::findOrFail($this->reference_id); return [ 'id' => $this->id, 'type' => $this->type, @@ -22,8 +21,7 @@ class Contact extends JsonResource 'name' => $this->name, 'designation' => $this->designation, 'contact' => $this->contact, - 'email' => $this->email, - 'company' => Company::make($comapny) + 'email' => $this->email ]; } } diff --git a/app/Http/Resources/DeliveryArrangement.php b/app/Http/Resources/DeliveryArrangement.php new file mode 100644 index 0000000..89503c2 --- /dev/null +++ b/app/Http/Resources/DeliveryArrangement.php @@ -0,0 +1,29 @@ + (int)$this->type, + 'vehicle_no' => $this->vehicle_no, + 'schedule' => Schedule::collection(ScheduleModel::where('arrangement_id', $this->id)->where('type', 1)->orderBy('created_at', 'desc')->get()), + 'tracking' => TrackingNumber::where('order_id', $this->order_id)->where('type', 1)->first(), + 'contact' => new Contact(ContactModel::where('type', Constants::MODULE_TYPES['driver'])->where('reference_id', $this->id)->first()) + ]; + } +} diff --git a/app/Http/Resources/Order.php b/app/Http/Resources/Order.php index 1641d31..78f2344 100644 --- a/app/Http/Resources/Order.php +++ b/app/Http/Resources/Order.php @@ -8,7 +8,10 @@ use App\Classes\Modules\Steps\StepAttachments; use App\Models\OrderStep; use App\Http\Resources\OrderStep as OrderStepResource; use Illuminate\Http\Resources\Json\JsonResource; -use App\Models\AddressBook; +use App\Models\AddressBook as AddressBookModel; +use App\Models\DeliveryArrangement as DeliveryArrangementModel; +use App\Models\PackingList as PackingListModel; +use App\Models\ShippingArrangement as ShippingArrangementModel; class Order extends JsonResource { @@ -20,23 +23,25 @@ class Order extends JsonResource */ public function toArray($request) { - $addressBook = AddressBook::find($this->address_id)->first(); + $addressBook = AddressBookModel::where('id', $this->address_id)->first(); return [ 'id' => $this->id, - 'company_id' => $this->company_id, 'marking' => $this->marking, 'forwarder_id' => $this->forwarder_id, 'supplier_id' => $this->supplier_id, 'warehouse_id' => $this->warehouse_id, - 'address' => new \App\Http\Resources\AddressBook($addressBook), - 'complete' => (float)$this->complete, + 'address' => new AddressBook($addressBook), + 'complete' => (int)$this->complete, 'date' => $this->created_at->format('d/m/Y'), 'current_step' => [ 'details' => (new GetStep())->execute($this->current_step), 'attachments' => (new StepAttachments())->execute($this->id, $this->current_step) ], 'steps' => OrderStepResource::collection(OrderStep::where('order_id', $this->id)->orderBy('sequence')->get()), - 'details' => (new ListsOrderHistory())->execute($this->id, $this->created_at, $this->complete, $this->updated_at) + 'details' => (new ListsOrderHistory())->execute($this->id, $this->created_at, $this->complete, $this->updated_at), + 'packing_list' => new PackingList(PackingListModel::where('order_id', $this->id)->first()), + 'shipping_arrangement' => new ShippingArrangement(ShippingArrangementModel::where('order_id', $this->id)->first()), + 'delivery_arrangement' => new DeliveryArrangement(DeliveryArrangementModel::where('order_id', $this->id)->first()) ]; } diff --git a/app/Http/Resources/Package.php b/app/Http/Resources/Package.php index d7bd2ae..5fdf594 100644 --- a/app/Http/Resources/Package.php +++ b/app/Http/Resources/Package.php @@ -16,10 +16,11 @@ class Package extends JsonResource { return [ 'description' => $this->description, - 'width' => $this->width, - 'length' => $this->length, - 'height' => $this->height, - 'quantity' => $this->quantity + 'type' => (int)$this->type, + 'width' => (float)$this->width, + 'length' => (float)$this->length, + 'height' => (float)$this->height, + 'quantity' => (int)$this->quantity ]; } } diff --git a/app/Http/Resources/PackingList.php b/app/Http/Resources/PackingList.php index b393c98..8327cda 100644 --- a/app/Http/Resources/PackingList.php +++ b/app/Http/Resources/PackingList.php @@ -17,7 +17,7 @@ class PackingList extends JsonResource { return [ 'reference_no' => $this->reference_no, - 'confirmed' => $this->confirmed, + 'confirmed' => (int)$this->confirmed, 'packages' => Package::collection(PackageModel::where('list_id', $this->id)->get()) ]; } diff --git a/app/Http/Resources/ShippingSchedule.php b/app/Http/Resources/Schedule.php similarity index 52% rename from app/Http/Resources/ShippingSchedule.php rename to app/Http/Resources/Schedule.php index 475be40..f343b2e 100644 --- a/app/Http/Resources/ShippingSchedule.php +++ b/app/Http/Resources/Schedule.php @@ -2,9 +2,10 @@ namespace App\Http\Resources; +use Carbon\Carbon; use Illuminate\Http\Resources\Json\JsonResource; -class ShippingSchedule extends JsonResource +class Schedule extends JsonResource { /** * Transform the resource into an array. @@ -15,9 +16,10 @@ class ShippingSchedule extends JsonResource public function toArray($request) { return [ - 'ETD' => $this->ETD, - 'ETA' => $this->ETA, - 'status' => $this->status + 'ETD' => carbon::parse($this->ETD)->format('d-m-Y'), + 'ETA' => carbon::parse($this->ETA)->format('d-m-Y'), + 'status' => (int)$this->status, + 'issue_remark' => $this->issue_remark ]; } } diff --git a/app/Http/Resources/ShippingArrangement.php b/app/Http/Resources/ShippingArrangement.php index 456fde1..df35a39 100644 --- a/app/Http/Resources/ShippingArrangement.php +++ b/app/Http/Resources/ShippingArrangement.php @@ -2,7 +2,7 @@ namespace App\Http\Resources; -use App\Models\ShippingSchedule as ShippingScheduleModel; +use App\Models\Schedule as ScheduleModel; use Illuminate\Http\Resources\Json\JsonResource; class ShippingArrangement extends JsonResource @@ -18,7 +18,7 @@ class ShippingArrangement extends JsonResource return [ 'container_no' => $this->container_no, 'seal_no' => $this->seal_no, - 'schedule' => ShippingSchedule::collection(ShippingScheduleModel::where('arrangement_id', $this->id)->where('status', 0)->get()) + 'schedule' => Schedule::collection(ScheduleModel::where('arrangement_id', $this->id)->where('type', 0)->orderBy('created_at', 'desc')->get()) ]; } } diff --git a/app/Models/CustomIssues.php b/app/Models/CustomIssues.php index cd521c8..82329d7 100644 --- a/app/Models/CustomIssues.php +++ b/app/Models/CustomIssues.php @@ -13,6 +13,6 @@ class CustomIssues extends AbstractModel public function shippingSchedule() { - return $this->belongsTo(ShippingSchedule::class, 'schedule_id'); + return $this->belongsTo(Schedule::class, 'schedule_id'); } } diff --git a/app/Models/ReceiveNote.php b/app/Models/DeliveryArrangement.php similarity index 62% rename from app/Models/ReceiveNote.php rename to app/Models/DeliveryArrangement.php index 7e6cb47..4ad1463 100644 --- a/app/Models/ReceiveNote.php +++ b/app/Models/DeliveryArrangement.php @@ -4,18 +4,16 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; -class ReceiveNote extends Model +class DeliveryArrangement extends Model { - - protected $table = 'receive_notes'; + protected $table = 'delivery_arrangements'; protected $fillable = [ - 'order_id', 'tracking_no', 'receive_date' + 'order_id', 'type', 'vehicle_no' ]; public function order() { return $this->belongsTo(Order::class, 'order_id'); } - } diff --git a/app/Models/Order.php b/app/Models/Order.php index f4a63fd..c1216c9 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -20,11 +20,6 @@ class Order extends AbstractModel return $this->hasMany(OrderStep::class, 'order_id'); } - public function receiveNotes() - { - return $this->hasOne(ReceiveNote::class, 'order_id'); - } - public function packingLists() { return $this->hasOne(PackingList::class, 'order_id'); @@ -34,4 +29,9 @@ class Order extends AbstractModel { return $this->hasOne(ShippingArrangement::class, 'order_id'); } + + public function deliveryArrangement() + { + return $this->hasOne(DeliveryArrangement::class, 'order_id'); + } } diff --git a/app/Models/Package.php b/app/Models/Package.php index 730b60b..0151cb2 100644 --- a/app/Models/Package.php +++ b/app/Models/Package.php @@ -8,7 +8,7 @@ class Package extends AbstractModel protected $table = 'packages'; protected $fillable = [ - 'list_id', 'description', 'width', 'length', 'height', 'quantity' + 'list_id', 'description', 'type', 'width', 'length', 'height', 'weight', 'quantity' ]; public function packingList() diff --git a/app/Models/ShippingSchedule.php b/app/Models/Schedule.php similarity index 68% rename from app/Models/ShippingSchedule.php rename to app/Models/Schedule.php index b4b11f6..8ade725 100644 --- a/app/Models/ShippingSchedule.php +++ b/app/Models/Schedule.php @@ -3,13 +3,13 @@ namespace App\Models; -class ShippingSchedule extends AbstractModel +class Schedule extends AbstractModel { - protected $table = 'shipping_schedules'; + protected $table = 'schedules'; protected $fillable = [ - 'arrangement_id', 'ETD', 'ETA', 'status' + 'arrangement_id', 'type', 'ETD', 'ETA', 'status', 'issue_remark' ]; public function shippingArrangement() diff --git a/app/Models/ShippingArrangement.php b/app/Models/ShippingArrangement.php index 587d6b5..5a96184 100644 --- a/app/Models/ShippingArrangement.php +++ b/app/Models/ShippingArrangement.php @@ -11,11 +11,6 @@ class ShippingArrangement extends AbstractModel 'order_id', 'container_no', 'seal_no' ]; - public function shippingSchedule() - { - return $this->hasMany(ShippingSchedule::class, 'arrangement_id'); - } - public function order() { return $this->belongsTo(Order::class, 'order_id'); diff --git a/app/Models/TrackingNumber.php b/app/Models/TrackingNumber.php new file mode 100644 index 0000000..7b272c3 --- /dev/null +++ b/app/Models/TrackingNumber.php @@ -0,0 +1,21 @@ +belongsTo(Order::class, 'order_id'); + } + +} diff --git a/app/Traits/updatesStep.php b/app/Traits/updatesStep.php deleted file mode 100644 index b1fa83f..0000000 --- a/app/Traits/updatesStep.php +++ /dev/null @@ -1,27 +0,0 @@ -CompleteOrderStep($order, $step); - $this->updatesOrderCurrentStep($order, $step); - } - - public function CompleteOrderStep(OrderObject $order, StepObject $step){ - (new CompletesOrderStep())->execute($order, $step); - } - - public function updatesOrderCurrentStep(OrderObject $order, StepObject $step){ - (new UpdatesOrderCurrentStep())->execute($order, $step); - } - - -} \ No newline at end of file diff --git a/database/migrations/2018_11_06_174400_create_contacts_table.php b/database/migrations/2018_11_06_174400_create_contacts_table.php index a627474..4a58fb7 100644 --- a/database/migrations/2018_11_06_174400_create_contacts_table.php +++ b/database/migrations/2018_11_06_174400_create_contacts_table.php @@ -15,12 +15,12 @@ class CreateContactsTable extends Migration { Schema::create('contacts', function (Blueprint $table) { $table->increments('id'); - $table->string('type'); + $table->integer('type'); $table->string('reference_id'); $table->string('name'); - $table->string('designation'); + $table->string('designation')->nullable(); $table->string('contact'); - $table->string('email'); + $table->string('email')->nullable(); $table->timestamps(); }); } diff --git a/database/migrations/2018_11_26_145701_create_orders_table.php b/database/migrations/2018_11_26_145701_create_orders_table.php index fb3f8d1..7525b70 100644 --- a/database/migrations/2018_11_26_145701_create_orders_table.php +++ b/database/migrations/2018_11_26_145701_create_orders_table.php @@ -22,7 +22,7 @@ class CreateOrdersTable extends Migration $table->string('warehouse_id')->nullable(); $table->string('address_id'); $table->string('current_step')->nullable(); - $table->integer('complete')->default(0); + $table->boolean('complete')->default(0); $table->softDeletes(); $table->timestamps(); diff --git a/database/migrations/2018_11_26_150411_create_order_steps_table.php b/database/migrations/2018_11_26_150411_create_order_steps_table.php index 48b7995..15e51f6 100644 --- a/database/migrations/2018_11_26_150411_create_order_steps_table.php +++ b/database/migrations/2018_11_26_150411_create_order_steps_table.php @@ -18,8 +18,8 @@ class CreateOrderStepsTable extends Migration $table->integer('order_id')->unsigned()->index(); $table->string('reference_id'); $table->integer('primary')->default(0); - $table->decimal('sequence'); - $table->integer('complete')->default(0); + $table->decimal('sequence', 4, 2); + $table->boolean('complete')->default(0); $table->date('complete_date')->nullable(); $table->timestamps(); diff --git a/database/migrations/2018_11_27_070848_create_receive_notes_table.php b/database/migrations/2018_11_27_070848_create_tracking_numbers_table.php similarity index 75% rename from database/migrations/2018_11_27_070848_create_receive_notes_table.php rename to database/migrations/2018_11_27_070848_create_tracking_numbers_table.php index de62c9c..738523e 100644 --- a/database/migrations/2018_11_27_070848_create_receive_notes_table.php +++ b/database/migrations/2018_11_27_070848_create_tracking_numbers_table.php @@ -4,7 +4,7 @@ use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; -class CreateReceiveNotesTable extends Migration +class CreateTrackingNumbersTable extends Migration { /** * Run the migrations. @@ -13,9 +13,11 @@ class CreateReceiveNotesTable extends Migration */ public function up() { - Schema::create('receive_notes', function (Blueprint $table) { + Schema::create('tracking_numbers', function (Blueprint $table) { $table->increments('id'); $table->integer('order_id')->unsigned()->index(); + $table->integer('type'); + $table->string('courier')->nullable(); $table->string('tracking_no'); $table->timestamps(); diff --git a/database/migrations/2018_11_30_085832_create_packages.php b/database/migrations/2018_11_30_085832_create_packages.php index 7eaf329..3137562 100644 --- a/database/migrations/2018_11_30_085832_create_packages.php +++ b/database/migrations/2018_11_30_085832_create_packages.php @@ -17,10 +17,11 @@ class CreatePackages extends Migration $table->increments('id'); $table->integer('list_id')->unsigned()->index(); $table->integer('type')->default(0); - $table->string('description'); - $table->integer('width'); - $table->integer('length'); - $table->integer('height'); + $table->string('description')->nullable(); + $table->decimal('width', 5, 3); + $table->decimal('length', 5, 3); + $table->decimal('height', 5, 3); + $table->integer('weight')->default(0); $table->integer('quantity'); $table->timestamps(); diff --git a/database/migrations/2018_11_30_194850_create_shipping_arrangements_table.php b/database/migrations/2018_11_30_194850_create_shipping_arrangements_table.php index 04c50cf..15a0176 100644 --- a/database/migrations/2018_11_30_194850_create_shipping_arrangements_table.php +++ b/database/migrations/2018_11_30_194850_create_shipping_arrangements_table.php @@ -16,6 +16,7 @@ class CreateShippingArrangementsTable extends Migration Schema::create('shipping_arrangements', function (Blueprint $table) { $table->increments('id'); $table->integer('order_id')->unsigned()->index(); + $table->integer('type')->default(0); $table->string('container_no'); $table->string('seal_no'); $table->timestamps(); diff --git a/database/migrations/2018_11_30_195330_create_shipping_schedules_table.php b/database/migrations/2018_11_30_195330_create_schedules_table.php similarity index 67% rename from database/migrations/2018_11_30_195330_create_shipping_schedules_table.php rename to database/migrations/2018_11_30_195330_create_schedules_table.php index b56d005..f0e1452 100644 --- a/database/migrations/2018_11_30_195330_create_shipping_schedules_table.php +++ b/database/migrations/2018_11_30_195330_create_schedules_table.php @@ -4,7 +4,7 @@ use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; -class CreateShippingSchedulesTable extends Migration +class CreateSchedulesTable extends Migration { /** * Run the migrations. @@ -13,15 +13,16 @@ class CreateShippingSchedulesTable extends Migration */ public function up() { - Schema::create('shipping_schedules', function (Blueprint $table) { + Schema::create('schedules', function (Blueprint $table) { $table->increments('id'); - $table->integer('arrangement_id')->unsigned()->index(); + $table->integer('type'); + $table->integer('arrangement_id'); $table->date('ETD'); $table->date('ETA'); $table->integer('status')->default(0); + $table->string('issue_remark')->nullable(); $table->timestamps(); - $table->foreign('arrangement_id')->references('id')->on('shipping_arrangements'); }); } diff --git a/database/migrations/2018_11_30_195656_create_custom_issues_table.php b/database/migrations/2019_05_29_174236_create_delivery_arrangements.php similarity index 51% rename from database/migrations/2018_11_30_195656_create_custom_issues_table.php rename to database/migrations/2019_05_29_174236_create_delivery_arrangements.php index b0e155d..c3ab0cc 100644 --- a/database/migrations/2018_11_30_195656_create_custom_issues_table.php +++ b/database/migrations/2019_05_29_174236_create_delivery_arrangements.php @@ -4,7 +4,7 @@ use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; -class CreateCustomIssuesTable extends Migration +class CreateDeliveryArrangements extends Migration { /** * Run the migrations. @@ -13,13 +13,14 @@ class CreateCustomIssuesTable extends Migration */ public function up() { - Schema::create('custom_issues', function (Blueprint $table) { + Schema::create('delivery_arrangements', function (Blueprint $table) { $table->increments('id'); - $table->integer('schedule_id')->unsigned()->index(); - $table->text('remark'); + $table->integer('order_id')->unsigned()->index(); + $table->integer('type')->default(0); + $table->string('vehicle_no')->nullable(); $table->timestamps(); -// $table->foreign('schedule_id')->references('id')->on('shipping_schedule'); + $table->foreign('order_id')->references('id')->on('orders'); }); } @@ -30,6 +31,6 @@ class CreateCustomIssuesTable extends Migration */ public function down() { - Schema::dropIfExists('custom_issues'); + Schema::dropIfExists('delivery_arrangements'); } } diff --git a/package.json b/package.json index b2a29f1..81bd83c 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "devDependencies": { "axios": "^0.18", "bootstrap": "^4.0.0", - "cross-env": "^5.1", + "cross-env": "^5.2.0", "del": "^3.0.0", "fancy-log": "^1.3.0", "gulp": "^3.9.1", diff --git a/resources/assets/js/notification.js b/resources/assets/js/notification.js index 4c63be0..6de704c 100644 --- a/resources/assets/js/notification.js +++ b/resources/assets/js/notification.js @@ -1,52 +1,56 @@ export default Object.freeze({ ORDER: Object.freeze({ - ORDER_CREATED: Object.freeze({ - TITLE: 'Orders Created Successfully', - MESSAGE: 'Orders have been created successfully' + CREATED: Object.freeze({ + TITLE: 'Create order', + MESSAGE: 'Orders has been created successfully' }), - ORDER_WAREHOUSE_CONFIRMED: Object.freeze({ - TITLE: 'Warehouse Successfully confirmed', - MESSAGE: 'Warehouse have been confirmed successfully' - }), - PACKING_LIST_NOTIFICATION: Object.freeze({ - TITLE: 'Packing list Successfully created', - MESSAGE: 'Packing list have been created', - UPDATE: Object.freeze({ - TITLE: 'Packing list Successfully Updated', - MESSAGE: 'Packing list have been updated' - }) - }), - ORDER_PACKED: Object.freeze({ - TITLE: 'Order Successfully Packed', - MESSAGE: 'Order have been packed successfully' - }), - SHIPPING_ARRANGEMENT: Object.freeze({ - TITLE: 'Shipping Arrangement Successfully Created', - MESSAGE: 'Shipping Arrangement have been created successfully', - RESCHEDULE: Object.freeze({ - TITLE: 'Shipping Arrangement Successfully Rescheduled', - MESSAGE: 'Shipping Arrangement have been rescheduled successfully' - }) - }), - PORT_ARRIVAL: Object.freeze({ - TITLE: 'Port Arrival Successfully Confirmed', - MESSAGE: 'Port Arrival have been confirmed successfully' - }), - WAREHOUSE_ARRIVAL: Object.freeze({ - TITLE: 'Warehouse Arrival Successfully Confirmed', - MESSAGE: 'Warehouse Arrival have been confirmed successfully' + WAREHOUSE_CONFIRMED: Object.freeze({ + TITLE: 'Confirm warehouse', + MESSAGE: 'Order\'s warehouse has been confirmed successfully' }), WAREHOUSE_RECEIVE: Object.freeze({ - TITLE: 'Warehouse Received Confirmed', - MESSAGE: 'Warehouse Received have been confirmed' + TITLE: 'Receive note', + MESSAGE: 'Warehouse has received the order successfully' }), - ORDER_UNPACKED: Object.freeze({ - TITLE: 'Order Successfully Unpacked', - MESSAGE: 'Order have been unpacked successfully' + PACKING_LIST: Object.freeze({ + TITLE: 'Packing list', + MESSAGE: 'Packing list has been updated successfully' }), - OUT_FOR_DELIVERY: Object.freeze({ - TITLE: 'Out For Delivery Successfully Confirmed', - MESSAGE: 'Out For Delivery have been confirmed successfully' + PACKED: Object.freeze({ + TITLE: 'Pack order', + MESSAGE: 'Order has been packed successfully' + }), + SHIPPING_ARRANGEMENT: Object.freeze({ + TITLE: 'Shipping arrangement', + MESSAGE: 'Shipping arrangement has been updated successfully' + }), + SHIPPING_RESCHEDULE: Object.freeze({ + TITLE: 'Reschedule shipping arrangement', + MESSAGE: 'Shipping arrangement has been rescheduled successfully' + }), + PORT_ARRIVAL: Object.freeze({ + TITLE: 'Port arrival', + MESSAGE: 'Order has arrived to port successfully' + }), + WAREHOUSE_ARRIVAL: Object.freeze({ + TITLE: 'Warehouse arrival', + MESSAGE: 'Order has arrived to warehouse successfully' + }), + UNPACKED: Object.freeze({ + TITLE: 'Unpack Order', + MESSAGE: 'Order has been unpacked successfully' + }), + DELIVERY_ARRANGEMENT: Object.freeze({ + TITLE: 'Delivery arrangement', + MESSAGE: 'Delivery arrangement has been updated successfully' + }), + DELIVERY_RESCHEDULE: Object.freeze({ + TITLE: 'Reschedule delivery arrangement', + MESSAGE: 'Delivery arrangement has been rescheduled successfully' + }), + COMPLETE: Object.freeze({ + TITLE: 'Order complete', + MESSAGE: 'Order has been delivered successfully' }) }), IMPORTER: Object.freeze({ diff --git a/resources/assets/js/scripts.js b/resources/assets/js/scripts.js index 9cf0e18..171c03c 100644 --- a/resources/assets/js/scripts.js +++ b/resources/assets/js/scripts.js @@ -26,13 +26,16 @@ $(function() { if(type){ $(this).parents('.parentContainer').find('.modalContainer[data-type="'+type+'"]').modal('show'); } }); - VANTA.BIRDS({ - el: "#maintenanceContainer", - backgroundColor: 0xf9f9f9, - wingSpan: 40.00, - separation: 100.00, - alignment: 100.00, - cohesion: 100.00, - quantity: 2.00 - }) + if($('#maintenanceContainer').length >0 ){ + VANTA.BIRDS({ + el: "#maintenanceContainer", + backgroundColor: 0xf9f9f9, + wingSpan: 40.00, + separation: 100.00, + alignment: 100.00, + cohesion: 100.00, + quantity: 2.00 + }) + } + }); \ No newline at end of file diff --git a/resources/assets/js/validation.js b/resources/assets/js/validation.js index 147759a..36da61c 100644 --- a/resources/assets/js/validation.js +++ b/resources/assets/js/validation.js @@ -4,6 +4,10 @@ $(function() { return regex.test(value); }, "Please enter a valid email address"); + $.validator.addMethod("minDate", function(value, element, params) { + return (moment(value, "DD-MM-YYYY") > moment(params, "DD-MM-YYYY")) + }); + $("#registration-form").validate({ rules: { first_name: "required", diff --git a/resources/assets/vue/app.js b/resources/assets/vue/app.js index 2c02568..50734f3 100644 --- a/resources/assets/vue/app.js +++ b/resources/assets/vue/app.js @@ -84,9 +84,12 @@ Vue.component('order-profile-component', require('./components/order/elements/Or Vue.component('order-header-component', require('./components/order/elements/OrderHeaderComponenet.vue')); Vue.component('order-action-component', require('./components/order/elements/OrderActionComponenet.vue')); Vue.component('order-delivery-address-component', require('./components/order/elements/OrderDeliveryAddressComponenet.vue')); +Vue.component('order-history-component', require('./components/order/elements/OrderHistoryComponenet.vue')); Vue.component('order-quick-view-component', require('./components/order/elements/OrderQuickViewComponenet.vue')); +Vue.component('action-date-component', require('./components/order/elements/steps/ActionDateComponenet.vue')); + Vue.component('confirm-order-component', require('./components/order/elements/steps/ConfirmOrderComponent.vue')); Vue.component('receive-step-component', require('./components/order/elements/steps/ReceiveStepComponenet.vue')); Vue.component('packing-step-component', require('./components/order/elements/steps/PackingStepComponenet.vue')); @@ -109,6 +112,9 @@ Vue.component('warehouse-form-component', require('./components/warehouse/forms/ Vue.component('order-form-component', require('./components/order/forms/OrderFormComponent.vue')); Vue.component('addon-order-form-component', require('./components/order/forms/AddonOrderFormComponent.vue')); Vue.component('warehouse-receive-note-form-component', require('./components/order/forms/WarehouseReceiveNoteFormComponent.vue')); +Vue.component('packing-list-form-component', require('./components/order/forms/PackingFormComponenet.vue')); +Vue.component('shipping-arrangement-form-component', require('./components/order/forms/ShippingArrangmentFormComponenet.vue')); +Vue.component('delivery-arrangement-form-component', require('./components/order/forms/DeliveryArrangmentFormComponenet.vue')); Vue.component('notification-component', require('./components/common/NotificationComponent.vue')); @@ -122,39 +128,43 @@ Vue.component('order-status-chart-component', require('./components/dashboard/el window.Event = new Vue(); -const header = new Vue({ - el: '#header' -}); +if($('#header').length >0 ) { + const header = new Vue({ + el: '#header' + }); +} -const app = new Vue({ - el: '#app', - provide() { - const countriesList = {}; - Object.defineProperty(countriesList, 'countries', { - enumerable: true, - get: () => this.countries - }); - return { - countriesList +if($('#app').length >0 ) { + const app = new Vue({ + el: '#app', + provide() { + const countriesList = {}; + Object.defineProperty(countriesList, 'countries', { + enumerable: true, + get: () => this.countries + }); + return { + countriesList + } + }, + data() { + return { + countries: [] + } + }, + created() { + this.fetchCountries(); + }, + methods: { + fetchCountries() { + fetch(route('api.service.list.countries')).then(response => response.json()) + .then(response => { + this.countries = $.map(response, function (value, key) { + return {'id': value.name, 'text': value.name}; + }); + }) + .catch(error => console.log(error)) + } } - }, - data() { - return { - countries: [] - } - }, - created(){ - this.fetchCountries(); - }, - methods: { - fetchCountries(){ - fetch(route('api.service.list.countries')).then(response => response.json()) - .then(response => { - this.countries = $.map(response, function(value, key){ - return {'id': value.name, 'text': value.name}; - }); - }) - .catch(error => console.log(error)) - } - } -}); + }); +} diff --git a/resources/assets/vue/components/common/ConfirmModalComponent.vue b/resources/assets/vue/components/common/ConfirmModalComponent.vue index 039481f..79429dc 100644 --- a/resources/assets/vue/components/common/ConfirmModalComponent.vue +++ b/resources/assets/vue/components/common/ConfirmModalComponent.vue @@ -10,7 +10,16 @@
-
Tracking No: {{ order.tracking_no }}Empty
+
Tracking No: {{ order.tracking_number }}Empty
@@ -167,6 +167,12 @@ headers: { 'content-type': 'application/json' } + }).then(() => { + this.receive_note = { + receive_date: null, + orders: [] + }; + Event.$emit('updateOrdersSelectList'); }) } } diff --git a/resources/views/partials/general/menu.blade.php b/resources/views/partials/general/menu.blade.php index c97bf47..5513f18 100644 --- a/resources/views/partials/general/menu.blade.php +++ b/resources/views/partials/general/menu.blade.php @@ -21,7 +21,7 @@
  • - +
    Payments Invoices & Receipts diff --git a/routes/api.php b/routes/api.php index b17edc2..fff38c2 100644 --- a/routes/api.php +++ b/routes/api.php @@ -117,25 +117,29 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function Route::get('{id}/profile', 'OrderController@show')->name('profile'); - Route::get('/company/{companyId}/list', 'OrderController@listCompanyOrders')->name('company.list'); - Route::post('/{companyId}/create', 'CreateOrderController@create')->name('create'); Route::delete('/{orderId}/delete', 'OrderController@delete')->name('delete'); + Route::post('/{orderId}/warehouse', 'UpdateWarehouseController@update')->name('warehouse.update'); Route::post('/{orderId}/update', 'updateOrderStepController@update')->name('step.update'); - Route::post('/{orderId}/packing-list', 'OrderController@updatePackingList')->name('packages.update'); - - Route::post('/{orderId}/shipping-arrangement', 'OrderController@orderShippingArrangement')->name('shipping.arrangement.create'); - Route::post('/{orderId}/shipping-arrangement/reschedule', 'OrderController@rescheduleShipping')->name('shipping.arrangement.reschedule'); - Route::get('/list/{category}', 'ListOrderController@list')->name('list'); Route::post('/search','SearchOrderController@search')->name('search'); Route::post('/bulk-receive-notes', 'BulkReceiveNotesController@create')->name('bulk.receive.update'); + Route::group(['prefix' => 'attachment', 'as' => 'attachment.', 'namespace' => 'Attachments'], function () { + Route::post('/{orderId}/packing-list', 'UpdatePackingListController@update')->name('packages.update'); + Route::post('/{orderId}/tracking-number', 'UpdateTrackingNumberController@update')->name('tracking.update'); + + Route::post('/{orderId}/shipping-arrangement', 'UpdateShippingArrangementController@update')->name('shipping.update'); + Route::post('/{orderId}/delivery-arrangement', 'UpdateDeliveryArrangementController@update')->name('delivery.update'); + }); + + + }); // Service Routes diff --git a/webpack.mix.js b/webpack.mix.js index 30d30ab..5f83728 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -11,4 +11,4 @@ const mix = require('laravel-mix'); | */ -mix.js('resources/assets/vue/app.js', 'public/vue'); +mix.js('./resources/assets/vue/app.js', 'public/vue');