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 @@
-
- {{this.company.name}}Confirm Order
+