diff --git a/app/Classes/Modules/Accounts/Services/CreatesUserAccount.php b/app/Classes/Modules/Accounts/Services/CreatesUserAccount.php index 4570b42..90a08ea 100644 --- a/app/Classes/Modules/Accounts/Services/CreatesUserAccount.php +++ b/app/Classes/Modules/Accounts/Services/CreatesUserAccount.php @@ -3,7 +3,7 @@ namespace App\Classes\Modules\Accounts\Services; use App\Classes\Modules\Accounts\DataTransferObjects\UserObject; -use App\Classes\Modules\Accounts\Exceptions\CannotCreateUserException; +use App\Classes\Modules\Accounts\Exceptions\CannotCreateOrderException; use App\Classes\Modules\ControllerLogic\Exceptions\ResourceConflictException; use App\Models\User; use App\Traits\DeterminesIfUserPasswordMatchesRequirements; @@ -34,7 +34,7 @@ class CreatesUserAccount { * @param UserObject $object * * @return User - * @throws CannotCreateUserException + * @throws CannotCreateOrderException */ public function execute(UserObject $object): ?User { @@ -60,8 +60,7 @@ class CreatesUserAccount { return $user; } catch (\Exception $exception) { - dd($exception); - throw new CannotCreateUserException($exception->getMessage()); + throw new CannotCreateOrderException($exception->getMessage()); } } } diff --git a/app/Classes/Modules/ControllersLogic/Accounts/RegisterAccountLogic.php b/app/Classes/Modules/ControllersLogic/Accounts/RegisterAccountLogic.php index adf0937..3a9386f 100644 --- a/app/Classes/Modules/ControllersLogic/Accounts/RegisterAccountLogic.php +++ b/app/Classes/Modules/ControllersLogic/Accounts/RegisterAccountLogic.php @@ -5,12 +5,10 @@ namespace App\Classes\Modules\ControllersLogic\Accounts; use App\Classes\Modules\Accounts\DataTransferObjects\UserInvitationObject; use App\Classes\Modules\Accounts\DataTransferObjects\UserObject; -use App\Classes\Modules\Accounts\Exceptions\CannotCreateUserException; +use App\Classes\Modules\Accounts\Exceptions\CannotCreateOrderException; use App\Classes\Modules\Accounts\Services\CreatesUserAccount; use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException; use App\Classes\Modules\ControllerLogic\Exceptions\MalformedRequestException; -use App\Classes\ValueObjects\Constants\HttpStatus; -use App\Events\Accounts\UserHasRegistered; use App\Models\UserInvitation; use App\Traits\DeterminesIfUserPasswordMatchesRequirements; use Illuminate\Http\JsonResponse; @@ -74,7 +72,7 @@ class RegisterAccountLogic return redirect()->route('dashboard'); - } catch (CannotCreateUserException $exception) { + } catch (CannotCreateOrderException $exception) { throw new InternalServerErrorException("Failed to create user because {$exception->getMessage()}"); } } diff --git a/app/Classes/Modules/ControllersLogic/Orders/ConfirmOrderLogic.php b/app/Classes/Modules/ControllersLogic/Orders/ConfirmOrderLogic.php new file mode 100644 index 0000000..9812c7f --- /dev/null +++ b/app/Classes/Modules/ControllersLogic/Orders/ConfirmOrderLogic.php @@ -0,0 +1,73 @@ +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 (CannotConfirmOrderException $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/CreateOrderLogic.php b/app/Classes/Modules/ControllersLogic/Orders/CreateOrderLogic.php new file mode 100644 index 0000000..587d609 --- /dev/null +++ b/app/Classes/Modules/ControllersLogic/Orders/CreateOrderLogic.php @@ -0,0 +1,44 @@ +createOrder = $createOrder; + } + + + /** + * @param int $companyId + * @param Request $request + * @return \App\Models\Order|null + * @throws InternalServerErrorException + */ + public function execute(int $companyId, Request $request) { + try { + + $order = new OrderObject($request->input('marking'), $companyId); + + return $this->createOrder->execute($order); + + } catch (CannotCreateOrderException $exception){ + throw new InternalServerErrorException("Failed to create 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 new file mode 100644 index 0000000..a1e5ba5 --- /dev/null +++ b/app/Classes/Modules/ControllersLogic/Orders/UpdateOrderStepLogic.php @@ -0,0 +1,51 @@ +repository = $repository; + $this->updateOrderSteps = $updateOrderSteps; + } + + + /** + * @param int $orderId + * @param Request $request + * @return \Illuminate\Http\JsonResponse + */ + public function execute(int $orderId, Request $request) { + + $repository = $this->repository->findOrFail($orderId); + + $orderObject = new OrderObject($orderId); + + $stepObject = new StepObject($repository->current_step); + + return $this->updateOrderSteps->execute($orderObject, $stepObject, $request); + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/DataTransferObjects/OrderObject.php b/app/Classes/Modules/Orders/DataTransferObjects/OrderObject.php new file mode 100644 index 0000000..24cadff --- /dev/null +++ b/app/Classes/Modules/Orders/DataTransferObjects/OrderObject.php @@ -0,0 +1,66 @@ +orderId = $orderId; + $this->companyId = $companyId; + $this->warehouseId = $warehouseId; + } + + /** + * @return string + */ + public function getOrderId(): string + { + return $this->orderId; + } + + /** + * @return int|null + */ + public function getCompanyId(): ?int + { + return $this->companyId; + } + + /** + * @return int|null + */ + public function getWarehouseId(): ?int + { + return $this->warehouseId; + } + + /** + * @param int|null $warehouseId + */ + public function setWarehouseId(?int $warehouseId): void + { + $this->warehouseId = $warehouseId; + } + + + + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/DataTransferObjects/OrderStepObject.php b/app/Classes/Modules/Orders/DataTransferObjects/OrderStepObject.php new file mode 100644 index 0000000..7740ee0 --- /dev/null +++ b/app/Classes/Modules/Orders/DataTransferObjects/OrderStepObject.php @@ -0,0 +1,38 @@ +orderId = $orderId; + $this->currentStep = $this->getCurrentStep(); + $this->currentStep = $this->getCurrentStep(); + } + + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/DataTransferObjects/PackageObject.php b/app/Classes/Modules/Orders/DataTransferObjects/PackageObject.php new file mode 100644 index 0000000..bd8c8b8 --- /dev/null +++ b/app/Classes/Modules/Orders/DataTransferObjects/PackageObject.php @@ -0,0 +1,82 @@ +description = $description; + $this->quantity = $quantity; + $this->width = $width; + $this->height = $height; + $this->length = $length; + } + + /** + * @return string + */ + public function getDescription(): string + { + return $this->description; + } + + /** + * @return int + */ + public function getQuantity(): int + { + return $this->quantity; + } + + /** + * @return int + */ + public function getWidth(): int + { + return $this->width; + } + + /** + * @return int + */ + public function getHeight(): int + { + return $this->height; + } + + /** + * @return int + */ + public function getLength(): int + { + return $this->length; + } + + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/DataTransferObjects/PackingListObject.php b/app/Classes/Modules/Orders/DataTransferObjects/PackingListObject.php new file mode 100644 index 0000000..89489db --- /dev/null +++ b/app/Classes/Modules/Orders/DataTransferObjects/PackingListObject.php @@ -0,0 +1,60 @@ +referenceId = $referenceId; + $this->confirmed = $confirmed; + $this->packages = $packages; + } + + /** + * @return string + */ + public function getReferenceId(): string + { + return $this->referenceId; + } + + /** + * @return bool + */ + public function isConfirmed(): bool + { + return $this->confirmed; + } + + /** + * @return PackageObject[] + */ + public function getPackages() + { + return array_map(function($package){ + return new PackageObject($package['description'], $package['quantity'], $package['width'], $package['height'], $package['length']); + }, $this->packages); + } + + + + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/DataTransferObjects/ReceiveNoteObject.php b/app/Classes/Modules/Orders/DataTransferObjects/ReceiveNoteObject.php new file mode 100644 index 0000000..9e51980 --- /dev/null +++ b/app/Classes/Modules/Orders/DataTransferObjects/ReceiveNoteObject.php @@ -0,0 +1,47 @@ +trackingNumber = $trackingNumber; + $this->date = $date; + } + + /** + * @return string + */ + public function getTrackingNumber(): string + { + return $this->trackingNumber; + } + + /** + * @return Carbon + */ + public function getDate(): Carbon + { + return Carbon::parse($this->date); + } + + + + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/DataTransferObjects/StepObject.php b/app/Classes/Modules/Orders/DataTransferObjects/StepObject.php new file mode 100644 index 0000000..6adc58a --- /dev/null +++ b/app/Classes/Modules/Orders/DataTransferObjects/StepObject.php @@ -0,0 +1,56 @@ +referenceId = $referenceId; + $this->isPrimary = $isPrimary; + $this->sequence = $sequence; + } + + /** + * @return string + */ + public function getReferenceId(): string + { + return $this->referenceId; + } + + /** + * @return bool + */ + public function isPrimary(): bool + { + return $this->isPrimary; + } + + /** + * @return float + */ + public function getSequence(): float + { + return $this->sequence; + } + + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Exceptions/CannotConfirmOrderException.php b/app/Classes/Modules/Orders/Exceptions/CannotConfirmOrderException.php new file mode 100644 index 0000000..a2df0cd --- /dev/null +++ b/app/Classes/Modules/Orders/Exceptions/CannotConfirmOrderException.php @@ -0,0 +1,15 @@ +order_id = $receiveNote->getOrderId(); - $receiveNotes->tracking_no = $receiveNote->getTrackingNo(); - $receiveNotes->receive_date = $receiveNote->getReceiveDate(); - - if($receiveNotes->save()){ - return true; - } - - return false; - } - -} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/ReceiveNotes/ReceiveNote.php b/app/Classes/Modules/Orders/ReceiveNotes/ReceiveNote.php deleted file mode 100644 index e066ef3..0000000 --- a/app/Classes/Modules/Orders/ReceiveNotes/ReceiveNote.php +++ /dev/null @@ -1,57 +0,0 @@ -orderId = $orderId; - $this->trackingNo = $request->input('tracking_no'); - $this->receiveDate = Carbon::parse($request->input('receive_date')); - } - - /** - * @return int - */ - public function getOrderId(): int - { - return $this->orderId; - } - - /** - * @return string - */ - public function getTrackingNo(): string - { - return $this->trackingNo; - } - - /** - * @return Carbon - */ - public function getReceiveDate(): Carbon - { - return $this->receiveDate; - } - -} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/CompletesOrderStep.php b/app/Classes/Modules/Orders/Services/CompletesOrderStep.php new file mode 100644 index 0000000..d0249e7 --- /dev/null +++ b/app/Classes/Modules/Orders/Services/CompletesOrderStep.php @@ -0,0 +1,44 @@ +repository = $repository; + } + + + /** + * @param OrderObject $order + * @param StepObject $step + */ + public function execute(OrderObject $order, StepObject $step){ + + /** @var Order $repository */ + $repository = $this->repository->findOrFail($order->getOrderId()); + + $orderStep = $repository->orderSteps()->where('reference_id', $step->getReferenceId())->firstOrFail(); + + $orderStep->complete = 1; + + $orderStep->save(); + + + } + + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/CreatesOrder.php b/app/Classes/Modules/Orders/Services/CreatesOrder.php new file mode 100644 index 0000000..916392b --- /dev/null +++ b/app/Classes/Modules/Orders/Services/CreatesOrder.php @@ -0,0 +1,49 @@ +repository = $repository; + } + + /** + * @param OrderObject $order + * @return Order + * @throws CannotCreateOrderException + */ + public function execute(OrderObject $order): ?Order { + + try { + + $this->repository->company_id = $order->getCompanyId(); + $this->repository->marking = $order->getOrderId(); + $this->repository->current_step = Constants::ORDER_PROCESSING_STEP; + + $this->repository->save(); + + return $this->repository; + + } catch (\Exception $exception){ + throw new CannotCreateOrderException($exception->getMessage()); + } + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/CreatesOrderSteps.php b/app/Classes/Modules/Orders/Services/CreatesOrderSteps.php new file mode 100644 index 0000000..3b1a1f0 --- /dev/null +++ b/app/Classes/Modules/Orders/Services/CreatesOrderSteps.php @@ -0,0 +1,49 @@ +repository = $repository; + } + + /** + * @param OrderObject $order + * @param array $orderSteps + * @throws CannotCreateOrderStepsException + */ + public function execute(OrderObject $order, array $orderSteps){ + + try { + + /** @var Order $repository */ + $repository = $this->repository->findOrFail($order->getOrderId()); + + $repository->orderSteps()->delete(); + + $repository->orderSteps()->createMany($orderSteps); + + } catch (\Exception $exception){ + throw new CannotCreateOrderStepsException($exception->getMessage()); + } + + + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/CreatesPackingList.php b/app/Classes/Modules/Orders/Services/CreatesPackingList.php new file mode 100644 index 0000000..9e43c89 --- /dev/null +++ b/app/Classes/Modules/Orders/Services/CreatesPackingList.php @@ -0,0 +1,15 @@ +repository = $repository; + } + + + public function execute(OrderObject $order , ReceiveNoteObject $receiveNote){ + + $this->repository->order_id = $order->getOrderId(); + $this->repository->tracking_no = $receiveNote->getTrackingNumber(); + $this->repository->receive_date = $receiveNote->getDate(); + + $this->repository->save(); + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/ListsOrderHistory.php b/app/Classes/Modules/Orders/Services/ListsOrderHistory.php new file mode 100644 index 0000000..24060f1 --- /dev/null +++ b/app/Classes/Modules/Orders/Services/ListsOrderHistory.php @@ -0,0 +1,62 @@ +orderSteps()->where('complete', true)->orderBy('sequence')->get(); + + $history = new Collection(); + + $history->push(['date' => $createdAt->format('d-m-Y H:i'), 'description' => 'Order created']); + + + foreach ($orderSteps as $step){ + switch ($step->reference_id){ + case Constants::ORDER_PROCESSING_STEP: + $history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => 'Order has been confirmed']); + break; + case Constants::ORDER_NO_WAREHOUSE_PENDING_SUPPLIER: + $history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => 'Your Order is packed and is ready to ship']); + break; + case Constants::ORDER_WAREHOUSE_RECEIVING_STEP: + $history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => 'Your Order has arrived at China\'s sorting centre']); + break; + case Constants::ORDER_WAREHOUSE_PACKING_STEP: + $history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => 'Your Order is packed and is ready to ship']); + break; + case Constants::ORDER_SHIPPING_STEP: + $history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => 'Your Order has been shipped successfully']); + break; + case Constants::ORDER_WAREHOUSE_ARRIVAL_STEP: + $history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => 'Your Order has arrived at Malaysia\'s sorting centre']); + break; + case Constants::ORDER_WAREHOUSE_UNPACKING_STEP: + $history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => 'Your Order has been unpacked and being prepared for delivery']); + break; + case Constants::ORDER_DELIVERY_STEP: + $history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => 'Your Order is out for delivery']); + break; + } + } + + if($complete){ + $history->push(['date' => $lastUpdate->format('d-m-Y H:i'), 'description' => 'Your Order has successfully been delivered']); + } + + return $history->reverse()->toArray(); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/ProcessesOrderStep.php b/app/Classes/Modules/Orders/Services/ProcessesOrderStep.php new file mode 100644 index 0000000..b4cebdd --- /dev/null +++ b/app/Classes/Modules/Orders/Services/ProcessesOrderStep.php @@ -0,0 +1,63 @@ +confirmOrder = $confirmOrder; + $this->warehouseReceivesOrder = $warehouseReceivesOrder; + $this->warehousePackingOrder = $warehousePackingOrder; + } + + + + public function execute(OrderObject $order, StepObject $step, Request $request): bool{ + switch ($step->getReferenceId()){ + case Constants::ORDER_PROCESSING_STEP: + return $this->confirmOrder->execute($order, $request); + case Constants::ORDER_NO_WAREHOUSE_PENDING_SUPPLIER: + return true; + case Constants::ORDER_WAREHOUSE_RECEIVING_STEP: + return $this->warehouseReceivesOrder->execute($order, $request); + case Constants::ORDER_WAREHOUSE_PACKING_STEP: + return $this->warehousePackingOrder->execute($order); + case Constants::ORDER_SHIPPING_STEP: + return true; + case Constants::ORDER_WAREHOUSE_ARRIVAL_STEP: + return true; + case Constants::ORDER_WAREHOUSE_UNPACKING_STEP: + return true; + case Constants::ORDER_DELIVERY_STEP: + return true; + default: + return false; + } + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/Processors/ConfirmsOrder.php b/app/Classes/Modules/Orders/Services/Processors/ConfirmsOrder.php new file mode 100644 index 0000000..dd78f23 --- /dev/null +++ b/app/Classes/Modules/Orders/Services/Processors/ConfirmsOrder.php @@ -0,0 +1,79 @@ +setOrderWarehouse = $setOrderWarehouse; + $this->generateOrderSteps = $generateOrderSteps; + $this->createsOrderSteps = $createsOrderSteps; + } + + + /** + * @param OrderObject $order + * @param Request $request + * @return bool + */ + public function execute(OrderObject $order, Request $request){ + + try { + + if($request->input('warehouse_id')){ + + $order->setWarehouseId($request->input('warehouse_id')); + + $this->setOrderWarehouse->execute($order); + } + + $modules = new Collection(); + + $order->getWarehouseId() ? $modules->push(Constants::ORDER_MODULE_WAREHOUSE) : $modules->push(Constants::ORDER_MODULE_NO_WAREHOUSE); + + $orderSteps = $this->generateOrderSteps->getSteps($modules->toArray())->toArray(); + + $this->createsOrderSteps->execute($order, $orderSteps); + + return true; + + } catch (\Exception $exception){ + + return false; + + } + + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/Processors/WarehousePackingOrder.php b/app/Classes/Modules/Orders/Services/Processors/WarehousePackingOrder.php new file mode 100644 index 0000000..0814864 --- /dev/null +++ b/app/Classes/Modules/Orders/Services/Processors/WarehousePackingOrder.php @@ -0,0 +1,33 @@ +repository = $repository; + } + + public function execute(OrderObject $order){ + $packingList = $this->repository->where('order_id', $order->getOrderId())->firstOrFail(); + if($packingList->confirmed) { + return true; + } + + return false; + } + + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/Processors/WarehouseReceivesOrder.php b/app/Classes/Modules/Orders/Services/Processors/WarehouseReceivesOrder.php new file mode 100644 index 0000000..553e7fa --- /dev/null +++ b/app/Classes/Modules/Orders/Services/Processors/WarehouseReceivesOrder.php @@ -0,0 +1,33 @@ +createsReceiveNote = $createsReceiveNote; + } + + + public function execute(OrderObject $order, Request $request){ + $object = new ReceiveNoteObject($request->input('tracking_no'), $request->input('receive_date')); + $this->createsReceiveNote->execute($order, $object); + return true; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/SetsOrderWarehouse.php b/app/Classes/Modules/Orders/Services/SetsOrderWarehouse.php new file mode 100644 index 0000000..30c38d8 --- /dev/null +++ b/app/Classes/Modules/Orders/Services/SetsOrderWarehouse.php @@ -0,0 +1,44 @@ +repository = $repository; + } + + + /** + * @param OrderObject $order + * @throws CannotUpdateOrderWarehouseException + */ + public function execute(OrderObject $order){ + try { + + /** @var Order $repository */ + $repository = $this->repository->findOrFail($order->getOrderId()); + $repository->warehouse_id = $order->getWarehouseId(); + $repository->save(); + + } catch (\Exception $exception){ + throw new CannotUpdateOrderWarehouseException($exception->getMessage()); + } + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/UpdatesOrderCurrentStep.php b/app/Classes/Modules/Orders/Services/UpdatesOrderCurrentStep.php new file mode 100644 index 0000000..f30d73d --- /dev/null +++ b/app/Classes/Modules/Orders/Services/UpdatesOrderCurrentStep.php @@ -0,0 +1,49 @@ +order = $order; + $this->orderStep = $orderStep; + } + + + public function execute(OrderObject $order, StepObject $step){ + + $orderStep = $this->orderStep->where('order_id', $order->getOrderId()) + ->where('complete', 0)->orderBy('sequence')->first(); + + $nextStep = $orderStep ? $orderStep->reference_id : null; + + $repository = $this->order->findOrFail($order->getOrderId()); + $repository->current_step = $nextStep; + + if($nextStep === null && $step !== Constants::ORDER_PROCESSING_STEP){ + $repository->complete = true; + } + + $repository->save(); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/UpdatesOrderSteps.php b/app/Classes/Modules/Orders/Services/UpdatesOrderSteps.php new file mode 100644 index 0000000..fd5e13c --- /dev/null +++ b/app/Classes/Modules/Orders/Services/UpdatesOrderSteps.php @@ -0,0 +1,56 @@ +processesOrderStep = $processesOrderStep; + $this->completesOrderStep = $completesOrderStep; + $this->updatesOrderCurrentStep = $updatesOrderCurrentStep; + } + + + /** + * @param OrderObject $order + * @param StepObject $step + * @param Request $request + * @return JsonResponse + */ + public function execute(OrderObject $order, StepObject $step, Request $request) { + + + if($this->processesOrderStep->execute($order, $step, $request)){ + $this->completesOrderStep->execute($order, $step); + $this->updatesOrderCurrentStep->execute($order, $step); + } + + return new JsonResponse(null, HttpStatus::OK); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Steps/GenerateOrderSteps.php b/app/Classes/Modules/Orders/Steps/GenerateOrderSteps.php index f208941..9d74055 100644 --- a/app/Classes/Modules/Orders/Steps/GenerateOrderSteps.php +++ b/app/Classes/Modules/Orders/Steps/GenerateOrderSteps.php @@ -14,42 +14,29 @@ class GenerateOrderSteps /** @var Collection */ protected $steps; - /** @var array */ - protected $modules; - /** * GenerateOrderSteps constructor. + * @param Collection $steps + */ + public function __construct(Collection $steps) + { + $this->steps = $steps; + } + + + /** * @param array $modules - */ - public function __construct(array $modules) - { - $this->steps = collect([]); - $this->modules = $modules; - - $this->primarySteps(); - $this->modularSteps(); - } - - /** - * @return array - */ - public function getModules(): array - { - return $this->modules; - } - - - /** * @return Collection */ - public function getSteps(): Collection + public function getSteps(array $modules): Collection { - + $this->primarySteps(); + $this->modularSteps($modules); return $this->steps->sortBy('sequence'); } - public function modularSteps(){ - $modularSteps = ModularStep::with('moduleGroups.steps')->whereIn('reference_id', $this->getModules())->get(); + public function modularSteps(array $modules){ + $modularSteps = ModularStep::with('moduleGroups.steps')->whereIn('reference_id', $modules)->get(); foreach ($modularSteps as $module){ foreach($module->moduleGroups as $group){ $i = 0; diff --git a/app/Http/Controllers/Account/RegisterAccountController.php b/app/Http/Controllers/Account/RegisterAccountController.php index bb67331..5e50114 100644 --- a/app/Http/Controllers/Account/RegisterAccountController.php +++ b/app/Http/Controllers/Account/RegisterAccountController.php @@ -13,11 +13,12 @@ class RegisterAccountController extends Controller /** * @param Request $request * @param RegisterAccountLogic $logic - * @return RedirectResponse + * @return JsonResponse * @throws \App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException * @throws \App\Classes\Modules\ControllerLogic\Exceptions\MalformedRequestException */ - public function register(Request $request, RegisterAccountLogic $logic): RedirectResponse { + public function register(Request $request, RegisterAccountLogic $logic): JsonResponse + { return $logic->execute($request); } } diff --git a/app/Http/Controllers/Orders/ConfirmOrderController.php b/app/Http/Controllers/Orders/ConfirmOrderController.php new file mode 100644 index 0000000..ac0390c --- /dev/null +++ b/app/Http/Controllers/Orders/ConfirmOrderController.php @@ -0,0 +1,22 @@ +execute($orderId, $request); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Orders/CreateOrderController.php b/app/Http/Controllers/Orders/CreateOrderController.php new file mode 100644 index 0000000..09433d0 --- /dev/null +++ b/app/Http/Controllers/Orders/CreateOrderController.php @@ -0,0 +1,21 @@ +execute($companyId, $request); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Orders/OrderController.php b/app/Http/Controllers/Orders/OrderController.php index d96f58e..36fbc88 100644 --- a/app/Http/Controllers/Orders/OrderController.php +++ b/app/Http/Controllers/Orders/OrderController.php @@ -3,9 +3,12 @@ namespace App\Http\Controllers\Orders; use App\Classes\ControllersLogic\Orders\CreateOrder; -use App\Classes\ControllersLogic\Orders\UpdateOrderStep; +use App\Classes\Modules\ControllersLogic\Orders\UpdateOrderStepLogic; +use App\Classes\Modules\Orders\DataTransferObjects\PackageObject; +use App\Classes\Modules\Orders\DataTransferObjects\PackingListObject; use App\Models\CustomIssues; use App\Models\Order; +use App\Models\OrderStep; use App\Models\PackingList; use App\Models\ShippingArrangement; use Carbon\Carbon; @@ -22,12 +25,9 @@ class OrderController extends Controller return OrderResource::collection($orders); } - public function insert(String $companyId, Request $request){ - return (new CreateOrder())->execute($companyId, $request) ? 200 : 408; - } - - public function updateStep(String $orderId, Request $request){ - return (new UpdateOrderStep())->execute($orderId, $request) ? 200 : 408; + public function updateStep(String $orderId, Request $request, UpdateOrderStepLogic $logic){ + return $logic->execute($orderId, $request); +// return (new UpdateOrderStepLogic())->execute($orderId, $request) ? 200 : 408; } public function updatePackingList(String $orderId, Request $request){ @@ -74,5 +74,12 @@ class OrderController extends Controller return 200; } + public function delete(String $orderId){ + /** @var Order $order */ + $order = Order::findOrFail($orderId); + $order->delete(); + + } + } diff --git a/app/Http/Controllers/Orders/UpdateOrderStepController.php b/app/Http/Controllers/Orders/UpdateOrderStepController.php new file mode 100644 index 0000000..a95492a --- /dev/null +++ b/app/Http/Controllers/Orders/UpdateOrderStepController.php @@ -0,0 +1,21 @@ +execute($companyId, $request); + } +} \ No newline at end of file diff --git a/app/Http/Resources/Order.php b/app/Http/Resources/Order.php index 6f40ab0..54bbf77 100644 --- a/app/Http/Resources/Order.php +++ b/app/Http/Resources/Order.php @@ -2,6 +2,7 @@ namespace App\Http\Resources; +use App\Classes\Modules\Orders\Services\ListsOrderHistory; use App\Classes\Modules\Steps\GetStep; use App\Classes\Modules\Steps\StepAttachments; use Illuminate\Http\Resources\Json\JsonResource; @@ -24,12 +25,13 @@ class Order extends JsonResource 'supplier_id' => $this->supplier_id, 'warehouse_id' => $this->warehouse_id, 'current_step' => $this->current_step, - 'complete' => $this->complete, + 'complete' => (float)$this->complete, 'date' => $this->created_at->format('d/m/Y'), 'steps' => [ 'details' => (new GetStep())->execute($this->current_step), 'attachments' => (new StepAttachments())->execute($this->id, $this->current_step) - ] + ], + 'details' => (new ListsOrderHistory())->execute($this->id, $this->created_at, $this->complete, $this->updated_at) ]; } diff --git a/app/Models/Order.php b/app/Models/Order.php index 5aa5ca9..25d3236 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -2,8 +2,13 @@ namespace App\Models; +use Illuminate\Database\Eloquent\SoftDeletes; + class Order extends AbstractModel { + + use SoftDeletes; + protected $table = 'orders'; protected $fillable = [ 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 2886c7d..fe0bb3f 100644 --- a/database/migrations/2018_11_26_145701_create_orders_table.php +++ b/database/migrations/2018_11_26_145701_create_orders_table.php @@ -22,6 +22,7 @@ class CreateOrdersTable extends Migration $table->string('warehouse_id')->nullable(); $table->string('current_step')->nullable(); $table->integer('complete')->default(0); + $table->softDeletes(); $table->timestamps(); $table->foreign('company_id')->references('id')->on('companies'); diff --git a/resources/assets/sass/modules/_layout.scss b/resources/assets/sass/modules/_layout.scss index c28669c..9777866 100644 --- a/resources/assets/sass/modules/_layout.scss +++ b/resources/assets/sass/modules/_layout.scss @@ -2043,6 +2043,28 @@ padding-right: 30px; } } +.order-history-border { + height: .1875rem; + width: 100%; + background-position-x: -1.875rem; + background-size: 7.25rem .1875rem; + background-image: repeating-linear-gradient(45deg,$color-complete,$color-complete 33px,transparent 0,transparent 41px,$color-primary 0,$color-primary 74px,transparent 0,transparent 82px); +} +.order-history { + .bullet-connector { + width: 2px; + height: 30px; + background: $color-master-light; + top: 10px; + left: 18px; + } + &:last-child { + .bullet-connector { + display: none !important; + } + } +} + @keyframes slideDown { 0% { diff --git a/resources/assets/vue/app.js b/resources/assets/vue/app.js index 1120b14..8138fc7 100644 --- a/resources/assets/vue/app.js +++ b/resources/assets/vue/app.js @@ -51,6 +51,7 @@ Vue.component('orders-list-component', require('./components/order/lists/OrdersL //elements Vue.component('account-component', require('./components/account/elements/AccountComponenet.vue')); +Vue.component('company-profile-component', require('./components/company/elements/CompanyProfileComponenet.vue')); Vue.component('company-summary-component', require('./components/company/elements/CompanySummaryComponenet.vue')); Vue.component('company-component', require('./components/company/elements/CompanyComponenet.vue')); Vue.component('address-book-component', require('./components/company/elements/AddressBookComponenet.vue')); @@ -61,6 +62,7 @@ Vue.component('warehouse-component', require('./components/warehouse/elements/Wa Vue.component('warehouse-summary-component', require('./components/warehouse/elements/WarehouseSummaryComponenet.vue')); Vue.component('order-component', require('./components/order/elements/OrderComponenet.vue')); +Vue.component('confirm-order-component', require('./components/order/elements/ConfirmOrderComponent.vue')); Vue.component('receive-step-component', require('./components/order/elements/ReceiveStepComponenet.vue')); Vue.component('packing-step-component', require('./components/order/elements/PackingStepComponenet.vue')); Vue.component('supplier-packing-step-component', require('./components/order/elements/SupplierPackingStepComponenet.vue')); diff --git a/resources/assets/vue/components/company/components/AddressBookComponenet.vue b/resources/assets/vue/components/company/components/AddressBookComponenet.vue deleted file mode 100644 index 9d14dcf..0000000 --- a/resources/assets/vue/components/company/components/AddressBookComponenet.vue +++ /dev/null @@ -1,166 +0,0 @@ - - - \ No newline at end of file diff --git a/resources/assets/vue/components/company/components/CompanyComponenet.vue b/resources/assets/vue/components/company/components/CompanyComponenet.vue deleted file mode 100644 index 83a5818..0000000 --- a/resources/assets/vue/components/company/components/CompanyComponenet.vue +++ /dev/null @@ -1,128 +0,0 @@ - - - \ No newline at end of file diff --git a/resources/assets/vue/components/company/elements/CompanyProfileComponenet.vue b/resources/assets/vue/components/company/elements/CompanyProfileComponenet.vue new file mode 100644 index 0000000..6a88298 --- /dev/null +++ b/resources/assets/vue/components/company/elements/CompanyProfileComponenet.vue @@ -0,0 +1,210 @@ + + + \ No newline at end of file diff --git a/resources/assets/vue/components/order/elements/ArrivalStepComponenet.vue b/resources/assets/vue/components/order/elements/ArrivalStepComponenet.vue index e7c074c..c0bb9fe 100644 --- a/resources/assets/vue/components/order/elements/ArrivalStepComponenet.vue +++ b/resources/assets/vue/components/order/elements/ArrivalStepComponenet.vue @@ -32,17 +32,11 @@ headers: { 'content-type': 'application/json' } - }).then(response => response.json()).then((response) => { - if(response === 200){ - //turn off loading animation - this.isLoading = false; + }).then(() => { + //turn off loading animation + this.isLoading = false; - Event.$emit('updateOrdersList', true); - - } else { - //failed to update; - this.isLoading = false; - } + Event.$emit('updateOrdersList', true); }) diff --git a/resources/assets/vue/components/order/elements/ConfirmOrderComponent.vue b/resources/assets/vue/components/order/elements/ConfirmOrderComponent.vue new file mode 100644 index 0000000..22e3fd2 --- /dev/null +++ b/resources/assets/vue/components/order/elements/ConfirmOrderComponent.vue @@ -0,0 +1,125 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/order/elements/DeliveryStepComponenet.vue b/resources/assets/vue/components/order/elements/DeliveryStepComponenet.vue index 8832119..90c3a99 100644 --- a/resources/assets/vue/components/order/elements/DeliveryStepComponenet.vue +++ b/resources/assets/vue/components/order/elements/DeliveryStepComponenet.vue @@ -32,17 +32,11 @@ headers: { 'content-type': 'application/json' } - }).then(response => response.json()).then((response) => { - if(response === 200){ - //turn off loading animation - this.isLoading = false; + }).then(() => { + //turn off loading animation + this.isLoading = false; - Event.$emit('updateOrdersList', true); - - } else { - //failed to update; - this.isLoading = false; - } + Event.$emit('updateOrdersList', true); }) diff --git a/resources/assets/vue/components/order/elements/OrderComponenet.vue b/resources/assets/vue/components/order/elements/OrderComponenet.vue index 4a0e1c0..3ef326c 100644 --- a/resources/assets/vue/components/order/elements/OrderComponenet.vue +++ b/resources/assets/vue/components/order/elements/OrderComponenet.vue @@ -40,7 +40,9 @@
-
+
+ delete order +
View Details
@@ -48,7 +50,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{detail.date}} +
+
+ {{detail.description}} +
+
+
+
+
+
+
+
+ @@ -59,6 +96,9 @@ required: true } }, + created(){ + console.log(this.data); + }, data() { return { order: this.data, @@ -74,8 +114,18 @@ } }, methods: { + deleteOrder(){ + fetch(route('api.order.delete', {'id': this.data}), { + method: 'delete' + }).then(() => { + Event.$emit('updateOrdersList'); + }) + .catch(error => console.log(error)) + }, stepComponent(stepReference){ switch (stepReference) { + case 'PS_PROCESSING': + return 'confirm-order-component'; case 'MS_WAREHOUSE_RECEIVING': return 'receive-step-component'; case 'MS_WAREHOUSE_PACKING': diff --git a/resources/assets/vue/components/order/elements/PackingStepComponenet.vue b/resources/assets/vue/components/order/elements/PackingStepComponenet.vue index daa4724..2ef78e3 100644 --- a/resources/assets/vue/components/order/elements/PackingStepComponenet.vue +++ b/resources/assets/vue/components/order/elements/PackingStepComponenet.vue @@ -258,17 +258,11 @@ headers: { 'content-type': 'application/json' } - }).then(response => response.json()).then((response) => { - if(response === 200){ - //turn off loading animation - this.isLoading = false; + }).then(() => { + //turn off loading animation + this.isLoading = false; - Event.$emit('updateOrdersList', true); - - } else { - //failed to update; - this.isLoading = false; - } + Event.$emit('updateOrdersList', true); }) diff --git a/resources/assets/vue/components/order/elements/ReceiveStepComponenet.vue b/resources/assets/vue/components/order/elements/ReceiveStepComponenet.vue index 2744829..82c6e61 100644 --- a/resources/assets/vue/components/order/elements/ReceiveStepComponenet.vue +++ b/resources/assets/vue/components/order/elements/ReceiveStepComponenet.vue @@ -77,19 +77,13 @@ headers: { 'content-type': 'application/json' } - }).then(response => response.json()).then((response) => { - if(response === 200){ - this.clearForm(); + }).then(() => { + this.clearForm(); - //turn off loading animation - this.isLoading = false; + //turn off loading animation + this.isLoading = false; - Event.$emit('updateOrdersList', true); - - } else { - //failed to update; - this.isLoading = false; - } + Event.$emit('updateOrdersList', true); }) diff --git a/resources/assets/vue/components/order/elements/ShippingStepComponenet.vue b/resources/assets/vue/components/order/elements/ShippingStepComponenet.vue index d49d321..b0be2b0 100644 --- a/resources/assets/vue/components/order/elements/ShippingStepComponenet.vue +++ b/resources/assets/vue/components/order/elements/ShippingStepComponenet.vue @@ -195,17 +195,12 @@ 'content-type': 'application/json' } }).then(response => response.json()).then((response) => { - if(response === 200){ - //turn off loading animation - this.isLoading = false; + this.arrangementExist = true; + //turn off loading animation + this.isLoading = false; - Event.$emit('updateOrdersList', true); - - } else { - //failed to update; - this.isLoading = false; - } + Event.$emit('updateOrdersList', true); }) @@ -244,17 +239,11 @@ headers: { 'content-type': 'application/json' } - }).then(response => response.json()).then((response) => { - if(response === 200){ - //turn off loading animation - this.isLoading = false; + }).then(() => { + //turn off loading animation + this.isLoading = false; - Event.$emit('updateOrdersList', true); - - } else { - //failed to update; - this.isLoading = false; - } + Event.$emit('updateOrdersList', true); }) diff --git a/resources/assets/vue/components/order/elements/SupplierPackingStepComponenet.vue b/resources/assets/vue/components/order/elements/SupplierPackingStepComponenet.vue index 600b028..26f80ae 100644 --- a/resources/assets/vue/components/order/elements/SupplierPackingStepComponenet.vue +++ b/resources/assets/vue/components/order/elements/SupplierPackingStepComponenet.vue @@ -32,17 +32,11 @@ headers: { 'content-type': 'application/json' } - }).then(response => response.json()).then((response) => { - if(response === 200){ - //turn off loading animation - this.isLoading = false; + }).then(() => { + //turn off loading animation + this.isLoading = false; - Event.$emit('updateOrdersList', true); - - } else { - //failed to update; - this.isLoading = false; - } + Event.$emit('updateOrdersList', true); }) diff --git a/resources/assets/vue/components/order/elements/UnpackingStepComponenet.vue b/resources/assets/vue/components/order/elements/UnpackingStepComponenet.vue index c4a911c..acd7454 100644 --- a/resources/assets/vue/components/order/elements/UnpackingStepComponenet.vue +++ b/resources/assets/vue/components/order/elements/UnpackingStepComponenet.vue @@ -32,18 +32,11 @@ headers: { 'content-type': 'application/json' } - }).then(response => response.json()).then((response) => { - if(response === 200){ - //turn off loading animation - this.isLoading = false; - - Event.$emit('updateOrdersList', true); - - } else { - //failed to update; - this.isLoading = false; - } + }).then(() => { + //turn off loading animation + this.isLoading = false; + Event.$emit('updateOrdersList', true); }) } diff --git a/resources/assets/vue/components/order/forms/OrderFormComponent.vue b/resources/assets/vue/components/order/forms/OrderFormComponent.vue index 0dfc715..843f176 100644 --- a/resources/assets/vue/components/order/forms/OrderFormComponent.vue +++ b/resources/assets/vue/components/order/forms/OrderFormComponent.vue @@ -30,26 +30,6 @@ -
-
-
- - -
-
-
-
-
- -
-
-
-
-
-
-
Add Warehouse
-
-
@@ -77,35 +57,15 @@ data() { return { order: { - marking: '', - warehouse_id: null + marking: '' }, - warehouses: [], - showWarehouse: false, isLoading: false } }, created() { - this.fetchWarehouses(); + this.generateMarking(); }, methods: { - fetchWarehouses(){ - //turn on loading animation - this.isLoading = true; - - fetch(route('api.warehouse.list', {'all': true})).then(response => response.json()) - .then(response => { - - this.warehouses = $.map(response.data, function(value, key){ - return {'id': value.id, 'text': value.name}; - }); - - //turn off loading animation - this.isLoading = false; - - }) - .catch(error => console.log(error)) - }, addOrder() { //turn on loading animation @@ -116,7 +76,7 @@ headers: { 'content-type': 'application/json' } - }).then((response) => { + }).then(() => { this.clearForm(); //turn off loading animation this.isLoading = false; @@ -128,14 +88,8 @@ generateMarking(){ this.order.marking = Math.floor(Math.random() * 799999) + 200000; }, - toggleIncludeWarehouse(){ - this.order.warehouse_id = null; - this.showWarehouse = !this.showWarehouse; - }, clearForm(){ - this.order.marking = ''; - this.order.warehouse_id = null; - this.showWarehouse = false; + this.generateMarking(); } } } diff --git a/resources/assets/vue/components/pages/CompaniesComponent.vue b/resources/assets/vue/components/pages/CompaniesComponent.vue deleted file mode 100644 index b9b39f1..0000000 --- a/resources/assets/vue/components/pages/CompaniesComponent.vue +++ /dev/null @@ -1,44 +0,0 @@ - - - \ No newline at end of file diff --git a/resources/views/pages/companies/profile.blade.php b/resources/views/pages/companies/profile.blade.php index ae35e52..d7a6f4a 100644 --- a/resources/views/pages/companies/profile.blade.php +++ b/resources/views/pages/companies/profile.blade.php @@ -1,90 +1,91 @@ @extends('layouts.base_portal') @section('inner_content') -
-
-
-
- -
-
-
-
-
- -
-
- -
-
-
-
- -
-
-
-
- -
-
- -
-
-
-
-
-
-
- - - - -
-
-
-
- -
-
-
-
- -
-
-
-
+{{--
--}} + {{--
--}} + {{--
--}} + {{--
--}} + {{----}} + {{--
--}} + {{--
--}} + {{--
--}} + {{--
--}} + {{--
--}} + {{----}} + {{--
--}} + {{--
--}} + {{----}} + {{--
--}} + {{--
--}} + {{--
--}} + {{--
--}} + {{----}} + {{--
--}} + {{--
--}} + {{--
--}} + {{--
--}} + {{----}} + {{--
--}} + {{--
--}} + {{----}} + {{--
--}} + {{--
--}} + {{--
--}} + {{--
--}} + {{--
--}} + {{--
--}} + {{--
--}} + {{----}} + {{----}} + {{----}} + {{----}} + {{--
--}} + {{--
--}} + {{--
--}} + {{--
--}} + {{----}} + {{--
--}} + {{--
--}} + {{--
--}} + {{--
--}} + {{----}} + {{--
--}} + {{--
--}} + {{--
--}} +{{--
--}} + @endsection diff --git a/routes/api.php b/routes/api.php index 414fc96..b549ffc 100644 --- a/routes/api.php +++ b/routes/api.php @@ -102,11 +102,13 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function Route::group(['prefix' => 'order', 'as' => 'order.', 'namespace' => 'Orders'], function () { - // Create new warehouses - Route::post('/{companyId}/create', 'OrderController@insert')->name('create'); Route::get('/company/{companyId}/list', 'OrderController@listCompanyOrders')->name('company.list'); - Route::post('/{orderId}', 'OrderController@updateStep')->name('step.update'); + Route::post('/{companyId}/create', 'CreateOrderController@create')->name('create'); + Route::delete('/{orderId}/delete', 'OrderController@delete')->name('delete'); + + + Route::post('/{orderId}/update', 'OrderController@updateStep')->name('step.update'); Route::post('/{orderId}/packing-list', 'OrderController@updatePackingList')->name('packages.update');