mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git
synced 2026-08-19 04:24:12 +00:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\ControllersLogic;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Classes\Modules\Orders\Services\CreatesOrder;
|
||||
use App\Classes\Modules\Orders\Standards\Rules\CanCreateOrder;
|
||||
use App\Classes\ValueObjects\Constants\OrderStatus;
|
||||
use App\Classes\ValueObjects\Constants\OrderSteps;
|
||||
use App\Classes\ValueObjects\Constants\OrderType;
|
||||
use App\Http\Resources\OrderResource;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class CompletesOrderStepLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
private $canCreateOrder;
|
||||
|
||||
private $createsOrder;
|
||||
|
||||
public function __construct(CanCreateOrder $canCreateOrder, CreatesOrder $createsOrder)
|
||||
{
|
||||
$this->canCreateOrder = $canCreateOrder;
|
||||
$this->createsOrder = $createsOrder;
|
||||
}
|
||||
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Created Order',
|
||||
'message' => 'You have successfully created a new Order'
|
||||
];
|
||||
}
|
||||
|
||||
public function logic(Request $request) : JsonResponse {
|
||||
$order_object = new OrderObject($request->get('company_module_id'), '', '', OrderType::SHARED_CONTAINER, OrderStatus::PROCESSING, OrderSteps::PROCESSING);
|
||||
|
||||
$this->canCreateOrder->passes($order_object);
|
||||
|
||||
$order = $this->createsOrder->execute($order_object);
|
||||
|
||||
return $this->resourceResponse(new OrderResource($order));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\OrderSteps\DataTransferObjects;
|
||||
|
||||
use App\Classes\General\Interfaces\DataTransferObject;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class OrderStepsObject implements DataTransferObject
|
||||
{
|
||||
private $id;
|
||||
|
||||
private $order_id;
|
||||
|
||||
private $appointee_id;
|
||||
|
||||
private $reference;
|
||||
|
||||
private $primary;
|
||||
|
||||
private $sequence;
|
||||
|
||||
private $status;
|
||||
|
||||
private $contract_status;
|
||||
|
||||
private $completed_date;
|
||||
|
||||
public function __construct(int $order_id, int $appointee_id, string $reference, bool $primary, float $sequence, int $status, int $contract_status, ?string $completed_date, int $id=0)
|
||||
{
|
||||
$this->order_id = $order_id;
|
||||
$this->appointee_id = $appointee_id;
|
||||
$this->reference = $reference;
|
||||
$this->primary = $primary;
|
||||
|
||||
$this->sequence = $sequence;
|
||||
$this->status = $status;
|
||||
$this->contract_status = $contract_status;
|
||||
$this->completed_date = $completed_date;
|
||||
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
public function getOrderId(): int
|
||||
{
|
||||
return $this->order_id;
|
||||
}
|
||||
|
||||
public function getAppointeeId(): int
|
||||
{
|
||||
return $this->appointee_id;
|
||||
}
|
||||
public function getReference(): string
|
||||
{
|
||||
return $this->reference;
|
||||
}
|
||||
public function getPrimary(): bool
|
||||
{
|
||||
return $this->primary;
|
||||
}
|
||||
|
||||
public function getSequence(): float
|
||||
{
|
||||
return $this->sequence;
|
||||
}
|
||||
|
||||
public function getStatus(): int
|
||||
{
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
public function getContractStatus(): int
|
||||
{
|
||||
return $this->contract_status;
|
||||
}
|
||||
|
||||
public function getCompletedDate(): Carbon
|
||||
{
|
||||
return $this->completed_date ? Carbon::parse($this->completed_date) : Carbon::now();
|
||||
}
|
||||
|
||||
public function getId(): int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\OrderSteps\Processors;
|
||||
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Classes\Modules\Orders\Processors\UpdatesOrderCurrentStepProcessor;
|
||||
use App\Classes\Modules\Orders\Services\FetchesOrder;
|
||||
use App\Classes\Modules\OrderSteps\Services\CreatesOrderSteps;
|
||||
use App\Classes\Modules\OrderSteps\Services\FetchesOrderSteps;
|
||||
use App\Classes\Modules\Orders\Services\UpdatesCurrentStep;
|
||||
use App\Classes\Modules\Orders\Standards\Rules\CanUpdateCurrentStep;
|
||||
use App\Classes\Modules\OrderSteps\DataTransferObjects\OrderStepsObject;
|
||||
use App\Classes\Modules\OrderSteps\Standards\Rules\CanCreateOrderStep;
|
||||
use App\Classes\ValueObjects\Constants\OrderStatus;
|
||||
use App\Classes\ValueObjects\Constants\OrderSteps;
|
||||
use App\Models\Order;
|
||||
use App\Models\OrderStep;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class CreateOrderStepsProcessor
|
||||
{
|
||||
private $canCreateOrderStep;
|
||||
|
||||
private $createsOrderSteps;
|
||||
|
||||
private $fetchesOrder;
|
||||
|
||||
private $fetchesOrderSteps;
|
||||
|
||||
public function __construct(CanCreateOrderStep $canCreateOrderStep, FetchesOrder $fetchesOrder, FetchesOrderSteps $fetchesOrderSteps, CreatesOrderSteps $createsOrderSteps )
|
||||
{
|
||||
$this->canCreateOrderStep = $canCreateOrderStep;
|
||||
$this->createsOrderSteps = $createsOrderSteps;
|
||||
$this->fetchesOrder = $fetchesOrder;
|
||||
$this->fetchesOrderSteps = $fetchesOrderSteps;
|
||||
}
|
||||
|
||||
public function execute(Model $order, string $currentStep){
|
||||
|
||||
$order_steps_object = new OrderStepsObject($order->id, $order->company_module_id, $currentStep, true, 0, OrderStatus::PROCESSING, 0, null);
|
||||
|
||||
$this->canCreateOrderStep->passes($order_steps_object);
|
||||
|
||||
return $this->createsOrderSteps->execute($order_steps_object);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\OrderSteps\Processors;
|
||||
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Classes\Modules\Orders\Processors\UpdatesOrderCurrentStepProcessor;
|
||||
use App\Classes\Modules\OrderSteps\Processors\UpdateOrderStepsProcessor;
|
||||
use App\Classes\Modules\Orders\Services\FetchesOrder;
|
||||
use App\Classes\Modules\OrderSteps\Services\FetchesOrderSteps;
|
||||
use App\Classes\Modules\Orders\Services\UpdatesCurrentStep;
|
||||
use App\Classes\Modules\Orders\Standards\Rules\CanUpdateCurrentStep;
|
||||
use App\Classes\Modules\OrderSteps\DataTransferObjects\OrderStepsObject;
|
||||
use App\Classes\Modules\OrderSteps\Services\CreatesManyOrderSteps;
|
||||
use App\Classes\ValueObjects\Constants\OrderStatus;
|
||||
use App\Classes\ValueObjects\Constants\OrderSteps;
|
||||
use App\Classes\Modules\Unity\Processors\GetContractObligationsProcessor;
|
||||
use App\Models\Order;
|
||||
use App\Models\OrderStep;
|
||||
use App\Classes\Jobs\UnityLogin;
|
||||
use Config;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
|
||||
class GenerateOrderStepsProcessor
|
||||
{
|
||||
private $updatesOrderCurrentStep;
|
||||
|
||||
private $createsManyOrderStep;
|
||||
|
||||
private $unityConfig;
|
||||
|
||||
private $updateOrderStepProcessors;
|
||||
|
||||
private $getContractObligationsProcessor;
|
||||
|
||||
public function __construct(UpdatesOrderCurrentStepProcessor $updatesOrderCurrentStep, CreatesManyOrderSteps $createsManyOrderStep, UpdateOrderStepsProcessor $updateOrderStepProcessors, GetContractObligationsProcessor $getContractObligationsProcessor)
|
||||
{
|
||||
$this->updatesOrderCurrentStep = $updatesOrderCurrentStep;
|
||||
$this->unityConfig = Config::get('unity');
|
||||
$this->createsManyOrderStep = $createsManyOrderStep;
|
||||
$this->updateOrderStepProcessors = $updateOrderStepProcessors;
|
||||
$this->getContractObligationsProcessor = $getContractObligationsProcessor;
|
||||
}
|
||||
|
||||
public function execute(Order $order){
|
||||
|
||||
$obligations = $this->getContractObligationsProcessor->execute();
|
||||
|
||||
foreach($obligations as $step){
|
||||
$orderSteps[] = new OrderStepsObject(
|
||||
$order->id,
|
||||
1,
|
||||
$step->name,
|
||||
true,
|
||||
$step->sequence,
|
||||
0,
|
||||
0,
|
||||
null
|
||||
);
|
||||
}
|
||||
|
||||
$this->createsManyOrderStep->execute($order, $orderSteps);
|
||||
|
||||
$this->updatesOrderCurrentStep->execute($order->id, OrderSteps::PACKING);
|
||||
|
||||
$this->updateOrderStepProcessors->execute(OrderSteps::PROCESSING);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Processors;
|
||||
|
||||
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\Steps\CompletesOrderStep;
|
||||
use App\Classes\ValueObjects\Constants\HttpStatus;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
abstract class AbstractStepProcessor
|
||||
{
|
||||
|
||||
abstract function validator(): bool;
|
||||
|
||||
abstract function execute(): JsonResponse;
|
||||
|
||||
/**
|
||||
* @param int $orderId
|
||||
* @param StepObject $step
|
||||
* @return JsonResponse
|
||||
* @throws InternalServerErrorException
|
||||
*/
|
||||
public function handler(int $orderId, StepObject $step) {
|
||||
try {
|
||||
|
||||
if(!$this->validator()){
|
||||
return new JsonResponse(['message' => 'Updating step validation has failed due to missing requirements'], HttpStatus::VALIDATION_FAILED);
|
||||
}
|
||||
|
||||
(new CompletesOrderStep())->execute($orderId, $step);
|
||||
|
||||
/** notification */
|
||||
|
||||
|
||||
return new JsonResponse(null, HttpStatus::REQUEST_ACCEPTED);
|
||||
|
||||
} catch (\Exception $exception){
|
||||
|
||||
throw new InternalServerErrorException("Failed to update order step because {$exception->getMessage()}");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\OrderSteps\Processors\Steps;
|
||||
|
||||
|
||||
use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\StepObject;
|
||||
use App\Classes\Modules\Orders\Services\Steps\GenerateOrderSteps;
|
||||
use App\Classes\ValueObjects\Constants\OrderSteps;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class ConfirmsOrder extends AbstractStepProcessor
|
||||
{
|
||||
|
||||
/** @var string */
|
||||
const STEP_REFERENCE = OrderSteps::ORDER_PROCESSING_STEP;
|
||||
|
||||
/** @var int */
|
||||
private $orderId;
|
||||
|
||||
/** @var StepObject */
|
||||
private $step;
|
||||
|
||||
/**
|
||||
* WarehousePackOrder constructor.
|
||||
* @param int $orderId
|
||||
* @param string $completeDate
|
||||
*/
|
||||
public function __construct(int $orderId, string $completeDate = null)
|
||||
{
|
||||
$this->orderId = $orderId;
|
||||
$this->step = new StepObject(self::STEP_REFERENCE, $completeDate);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function validator(): bool {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return JsonResponse
|
||||
* @throws InternalServerErrorException
|
||||
* @throws \App\Classes\Modules\Accounts\Exceptions\CannotCreateOrderStepsException
|
||||
*/
|
||||
public function execute(): JsonResponse {
|
||||
|
||||
(new generateOrderSteps())->execute($this->orderId);
|
||||
|
||||
return $this->handler($this->orderId, $this->step);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Processors;
|
||||
|
||||
|
||||
use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\StepObject;
|
||||
use App\Classes\ValueObjects\Constants\OrderSteps;
|
||||
use App\Models\DeliveryArrangement;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class DeliverOrder extends AbstractStepProcessor
|
||||
{
|
||||
|
||||
/** @var string */
|
||||
const STEP_REFERENCE = OrderSteps::ORDER_DELIVERY_STEP;
|
||||
|
||||
/** @var int */
|
||||
private $orderId;
|
||||
|
||||
/** @var StepObject */
|
||||
private $step;
|
||||
|
||||
/**
|
||||
* WarehousePackOrder constructor.
|
||||
* @param int $orderId
|
||||
* @param string $completeDate
|
||||
*/
|
||||
public function __construct(int $orderId, string $completeDate = null)
|
||||
{
|
||||
$this->orderId = $orderId;
|
||||
$this->step = new StepObject(self::STEP_REFERENCE, $completeDate);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function validator(): bool {
|
||||
if(!DeliveryArrangement::where('order_id', $this->orderId)->exists()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return JsonResponse
|
||||
* @throws InternalServerErrorException
|
||||
*/
|
||||
public function execute(): JsonResponse {
|
||||
return $this->handler($this->orderId, $this->step);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Processors;
|
||||
|
||||
|
||||
use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\StepObject;
|
||||
use App\Classes\ValueObjects\Constants\OrderSteps;
|
||||
use App\Models\ShippingArrangement;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class ShipOrder extends AbstractStepProcessor
|
||||
{
|
||||
|
||||
/** @var string */
|
||||
const STEP_REFERENCE = OrderSteps::ORDER_SHIPPING_STEP;
|
||||
|
||||
/** @var int */
|
||||
private $orderId;
|
||||
|
||||
/** @var StepObject */
|
||||
private $step;
|
||||
|
||||
/**
|
||||
* WarehousePackOrder constructor.
|
||||
* @param int $orderId
|
||||
* @param string $completeDate
|
||||
*/
|
||||
public function __construct(int $orderId, string $completeDate = null)
|
||||
{
|
||||
$this->orderId = $orderId;
|
||||
$this->step = new StepObject(self::STEP_REFERENCE, $completeDate);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function validator(): bool {
|
||||
|
||||
if(!ShippingArrangement::where('order_id', $this->orderId)->exists()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return JsonResponse
|
||||
* @throws InternalServerErrorException
|
||||
*/
|
||||
public function execute(): JsonResponse {
|
||||
return $this->handler($this->orderId, $this->step);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Processors;
|
||||
|
||||
|
||||
use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\StepObject;
|
||||
use App\Classes\ValueObjects\Constants\OrderSteps;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class WarehouseArrivalOrder extends AbstractStepProcessor
|
||||
{
|
||||
|
||||
/** @var string */
|
||||
const STEP_REFERENCE = OrderSteps::ORDER_WAREHOUSE_ARRIVAL_STEP;
|
||||
|
||||
/** @var int */
|
||||
private $orderId;
|
||||
|
||||
/** @var StepObject */
|
||||
private $step;
|
||||
|
||||
/**
|
||||
* WarehousePackOrder constructor.
|
||||
* @param int $orderId
|
||||
* @param string $completeDate
|
||||
*/
|
||||
public function __construct(int $orderId, string $completeDate = null)
|
||||
{
|
||||
$this->orderId = $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->orderId, $this->step);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Processors;
|
||||
|
||||
|
||||
use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\StepObject;
|
||||
use App\Classes\ValueObjects\Constants\OrderSteps;
|
||||
use App\Models\PackingList;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class WarehousePackOrder extends AbstractStepProcessor
|
||||
{
|
||||
|
||||
/** @var string */
|
||||
const STEP_REFERENCE = OrderSteps::ORDER_WAREHOUSE_PACKING_STEP;
|
||||
|
||||
/** @var int */
|
||||
private $orderId;
|
||||
|
||||
/** @var StepObject */
|
||||
private $step;
|
||||
|
||||
/**
|
||||
* WarehousePackOrder constructor.
|
||||
* @param int $orderId
|
||||
* @param string $completeDate
|
||||
*/
|
||||
public function __construct(int $orderId, string $completeDate = null)
|
||||
{
|
||||
$this->orderId = $orderId;
|
||||
$this->step = new StepObject(self::STEP_REFERENCE, $completeDate);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function validator(): bool {
|
||||
|
||||
$packingList = PackingList::where('order_id', $this->orderId)->first();
|
||||
|
||||
if(!$packingList->confirmed) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return JsonResponse
|
||||
* @throws InternalServerErrorException
|
||||
*/
|
||||
public function execute(): JsonResponse {
|
||||
|
||||
return $this->handler($this->orderId, $this->step);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Processors;
|
||||
|
||||
|
||||
use App\Classes\Excel\Import\OrdersExport;
|
||||
use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\StepObject;
|
||||
use App\Classes\ValueObjects\Constants\OrderSteps;
|
||||
use App\Models\Order;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
|
||||
class WarehouseReceivesOrder extends AbstractStepProcessor
|
||||
{
|
||||
|
||||
/** @var string */
|
||||
const STEP_REFERENCE = OrderSteps::ORDER_WAREHOUSE_RECEIVING_STEP;
|
||||
|
||||
/** @var int */
|
||||
private $orderId;
|
||||
|
||||
/** @var StepObject */
|
||||
private $step;
|
||||
|
||||
/**
|
||||
* WarehousePackOrder constructor.
|
||||
* @param int $orderId
|
||||
* @param string $completeDate
|
||||
*/
|
||||
public function __construct(int $orderId, string $completeDate = null)
|
||||
{
|
||||
$this->orderId = $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 {
|
||||
Mail::send('emails.received_orders_email', [], function ($message) {
|
||||
$message->from('noreply@izyin.com', 'IZYIM');
|
||||
$message->to('uldvstar@gmail.com', 'Omair Saleh')->subject('Received orders report '.now()->format('dd/mm/YY'));
|
||||
$message->attach(
|
||||
Excel::download(Order::find($this->orderId),
|
||||
'report_'.now()->format('dd_mm_YY').'.xlsx')
|
||||
->getFile(), ['as' => 'report_'.now()->format('dd/mm/YY').'.xlsx']);
|
||||
|
||||
});
|
||||
|
||||
return $this->handler($this->orderId, $this->step);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Processors;
|
||||
|
||||
|
||||
use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\StepObject;
|
||||
use App\Classes\ValueObjects\Constants\OrderSteps;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class WarehouseUnpackingOrder extends AbstractStepProcessor
|
||||
{
|
||||
|
||||
/** @var string */
|
||||
const STEP_REFERENCE = OrderSteps::ORDER_WAREHOUSE_UNPACKING_STEP;
|
||||
|
||||
/** @var int */
|
||||
private $orderId;
|
||||
|
||||
/** @var StepObject */
|
||||
private $step;
|
||||
|
||||
/**
|
||||
* WarehousePackOrder constructor.
|
||||
* @param int $orderId
|
||||
* @param string $completeDate
|
||||
*/
|
||||
public function __construct(int $orderId, string $completeDate = null)
|
||||
{
|
||||
$this->orderId = $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->orderId, $this->step);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\OrderSteps\Processors;
|
||||
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Classes\Modules\Orders\Processors\UpdatesOrderCurrentStepProcessor;
|
||||
use App\Classes\Modules\OrderSteps\Services\FetchesOrderSteps;
|
||||
use App\Classes\Modules\OrderSteps\Services\UpdatesOrderSteps;
|
||||
use App\Classes\Modules\Orders\Services\UpdatesCurrentStep;
|
||||
use App\Classes\Modules\OrderSteps\Standards\Rules\CanUpdateOrderStep;
|
||||
use App\Classes\Modules\OrderSteps\DataTransferObjects\OrderStepsObject;
|
||||
use App\Classes\ValueObjects\Constants\OrderStatus;
|
||||
use App\Classes\ValueObjects\Constants\OrderSteps;
|
||||
use App\Models\Order;
|
||||
use App\Models\OrderStep;
|
||||
|
||||
class UpdateOrderStepsProcessor
|
||||
{
|
||||
private $canUpdateOrderStep;
|
||||
|
||||
private $updatesOrderSteps;
|
||||
|
||||
private $fetchesOrderSteps;
|
||||
|
||||
public function __construct(CanUpdateOrderStep $canUpdateOrderStep, UpdatesOrderSteps $updatesOrderSteps, FetchesOrderSteps $fetchesOrderSteps )
|
||||
{
|
||||
$this->canUpdateOrderStep = $canUpdateOrderStep;
|
||||
$this->updatesOrderSteps = $updatesOrderSteps;
|
||||
$this->fetchesOrderSteps = $fetchesOrderSteps;
|
||||
}
|
||||
|
||||
public function execute(string $currentStep){
|
||||
|
||||
$orderStepsObject = new OrderStepsObject(0,0,$currentStep, 0, 0, 1, 1, null);
|
||||
|
||||
$this->canUpdateOrderStep->passes($orderStepsObject);
|
||||
|
||||
$orderSteps = $this->fetchesOrderSteps->execute(['reference'=>$currentStep]);
|
||||
|
||||
$this->updatesOrderSteps->execute($orderSteps, $orderStepsObject);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\OrderSteps\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Classes\Modules\OrderSteps\DataTransferObjects\OrderStepsObject;
|
||||
use App\Models\OrderStep;
|
||||
use App\Models\Order;
|
||||
|
||||
class CreatesManyOrderSteps extends AbstractUpdateRecord
|
||||
{
|
||||
|
||||
public function execute(Order $order, array $orderSteps) {
|
||||
|
||||
$orderStepsModel=[];
|
||||
foreach($orderSteps as $step){
|
||||
$orderStepsModel[]=[
|
||||
'order_id' => $step->getOrderId(),
|
||||
'appointee_id' => $step->getAppointeeId(),
|
||||
'reference' => $step->getReference(),
|
||||
'primary' => $step->getPrimary(),
|
||||
'sequence' => $step->getSequence(),
|
||||
'status' => 0,
|
||||
'contract_status' => 0
|
||||
];
|
||||
}
|
||||
$order->orderSteps()->createMany($orderStepsModel);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\OrderSteps\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Classes\Modules\OrderSteps\DataTransferObjects\OrderStepsObject;
|
||||
use App\Models\OrderStep;
|
||||
use App\Models\Order;
|
||||
|
||||
class CreatesOrderSteps extends AbstractUpdateRecord
|
||||
{
|
||||
|
||||
public function execute(OrderStepsObject $orderSteps) {
|
||||
|
||||
$orderStepsModel = new OrderStep();
|
||||
|
||||
$orderStepsModel->order_id = $orderSteps->getOrderId();
|
||||
$orderStepsModel->appointee_id = $orderSteps->getAppointeeId();
|
||||
$orderStepsModel->reference = $orderSteps->getReference();
|
||||
$orderStepsModel->primary = $orderSteps->getPrimary();
|
||||
$orderStepsModel->sequence = $orderSteps->getSequence();
|
||||
$orderStepsModel->status = 0;
|
||||
$orderStepsModel->contract_status = 0;
|
||||
$orderStepsModel->complete_date = null;
|
||||
|
||||
return $this->handler($orderStepsModel);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\OrderSteps\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractFetchRecord;
|
||||
use App\Models\OrderStep;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
class FetchesOrderSteps extends AbstractFetchRecord
|
||||
{
|
||||
|
||||
/** @var OrderStep */
|
||||
private $repository;
|
||||
|
||||
/**
|
||||
* FetchOrderSteps constructor.
|
||||
* @param OrderStep $repository
|
||||
*/
|
||||
public function __construct(OrderStep $repository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Builder
|
||||
*/
|
||||
public function getRepository(): Builder
|
||||
{
|
||||
return $this->repository->newQuery();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\OrderSteps\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractFetchRecord;
|
||||
use App\Models\OrderStep;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use phpDocumentor\Reflection\Types\AbstractList;
|
||||
|
||||
class ListsOrderSteps extends AbstractList
|
||||
{
|
||||
|
||||
/** @var OrderStep */
|
||||
private $repository;
|
||||
|
||||
/**
|
||||
* FetchOrderSteps constructor.
|
||||
* @param OrderStep $repository
|
||||
*/
|
||||
public function __construct(OrderStep $repository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Builder
|
||||
*/
|
||||
public function getRepository(): Builder
|
||||
{
|
||||
return $this->repository->newQuery();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\OrderSteps\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Classes\Modules\OrderSteps\DataTransferObjects\OrderStepsObject;
|
||||
use App\Models\OrderStep;
|
||||
|
||||
class UpdatesOrderSteps extends AbstractUpdateRecord
|
||||
{
|
||||
|
||||
public function execute(OrderStep $model, OrderStepsObject $object) {
|
||||
|
||||
$model->status = $object->getStatus();
|
||||
$model->contract_status = $object->getContractStatus();
|
||||
$model->complete_date = $object->getCompletedDate();
|
||||
|
||||
return $this->handler($model);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\OrderSteps\Standards\Rules;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\OrderSteps\Standards\Validators\CreateOrderStepValidation;
|
||||
|
||||
class CanCreateOrderStep extends AbstractRule
|
||||
{
|
||||
private $orderValidation;
|
||||
|
||||
public function __construct(CreateOrderStepValidation $orderValidation)
|
||||
{
|
||||
$this->orderValidation = $orderValidation;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return $this->orderValidation->validate($object);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CompanyObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
//Verify account?
|
||||
//Contract created on Unity
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\OrderSteps\Standards\Rules;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\OrderSteps\Standards\Validators\UpdateOrderStepValidation;
|
||||
|
||||
class CanUpdateOrderStep extends AbstractRule
|
||||
{
|
||||
private $orderValidation;
|
||||
|
||||
public function __construct(UpdateOrderStepValidation $orderValidation)
|
||||
{
|
||||
$this->orderValidation = $orderValidation;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return $this->orderValidation->validate($object);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CompanyObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\OrderSteps\Standards\Validators;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractValidation;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
|
||||
class CreateOrderStepValidation extends AbstractValidation
|
||||
{
|
||||
/**
|
||||
* @param OrderObject $object
|
||||
* @return array
|
||||
*/
|
||||
protected function data($object): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
* @return array
|
||||
*/
|
||||
protected function rules(?string $type = 'POST'): array
|
||||
{
|
||||
if ($type == 'POST') {
|
||||
return [];
|
||||
} elseif ($type == 'PUT') {
|
||||
return [
|
||||
'id' => 'required'
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function messages(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\OrderSteps\Standards\Validators;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractValidation;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
|
||||
class UpdateOrderStepValidation extends AbstractValidation
|
||||
{
|
||||
/**
|
||||
* @param OrderObject $object
|
||||
* @return array
|
||||
*/
|
||||
protected function data($object): array
|
||||
{
|
||||
return [
|
||||
'id' => $object->getId(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
* @return array
|
||||
*/
|
||||
protected function rules(?string $type = 'POST'): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function messages(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\ControllersLogic;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Classes\Modules\Orders\Services\CreatesOrder;
|
||||
use App\Classes\Modules\Orders\Services\FetchesOrder;
|
||||
use App\Classes\Modules\Orders\Standards\Rules\CanConfirmOrder;
|
||||
use App\Classes\Modules\OrderSteps\Processors\GenerateOrderStepsProcessor;
|
||||
use App\Classes\ValueObjects\Constants\OrderStatus;
|
||||
use App\Classes\ValueObjects\Constants\OrderSteps;
|
||||
use App\Classes\ValueObjects\Constants\OrderType;
|
||||
use App\Http\Resources\OrderResource;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Config;
|
||||
|
||||
class ConfirmOrderLogic extends AbstractControllerLogic
|
||||
{
|
||||
private $canConfirmOrder;
|
||||
|
||||
private $generateOrderStepsProcessor;
|
||||
|
||||
public function __construct(CanConfirmOrder $canConfirmOrder, GenerateOrderStepsProcessor $generateOrderStepsProcessor, FetchesOrder $fetchesOrder)
|
||||
{
|
||||
$this->canConfirmOrder = $canConfirmOrder;
|
||||
$this->generateOrderStepsProcessor = $generateOrderStepsProcessor;
|
||||
$this->fetchesOrder = $fetchesOrder;
|
||||
}
|
||||
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Confirm Order',
|
||||
'message' => 'Order confirmed'
|
||||
];
|
||||
}
|
||||
|
||||
public function logic(Request $request) : JsonResponse {
|
||||
|
||||
$order_object = new OrderObject(0,'','',0,0, '',$request->get('id'));
|
||||
|
||||
$this->canConfirmOrder->passes($order_object);
|
||||
|
||||
$order = $this->fetchesOrder->execute(['id'=>$order_object->getId()]);
|
||||
|
||||
$this->generateOrderStepsProcessor->execute($order);
|
||||
|
||||
return $this->resourceResponse(new OrderResource($order));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\ControllersLogic;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Classes\Modules\Orders\Services\CreatesOrder;
|
||||
use App\Classes\Modules\Orders\Processors\CreateOrderProcessor;
|
||||
use App\Classes\Modules\Orders\Standards\Rules\CanCreateOrder;
|
||||
use App\Classes\ValueObjects\Constants\OrderStatus;
|
||||
use App\Classes\ValueObjects\Constants\OrderSteps;
|
||||
use App\Classes\ValueObjects\Constants\OrderType;
|
||||
use App\Http\Resources\OrderResource;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class CreateOrderLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
private $createOrderProcessor;
|
||||
|
||||
public function __construct( CreateOrderProcessor $createsOrderProcessor)
|
||||
{
|
||||
$this->createOrderProcessor = $createsOrderProcessor;
|
||||
}
|
||||
|
||||
protected function notification():array {
|
||||
return [
|
||||
'title' => 'Created Order',
|
||||
'message' => 'You have successfully created a new Order'
|
||||
];
|
||||
}
|
||||
|
||||
public function logic(Request $request) : JsonResponse {
|
||||
|
||||
$order = $this->createOrderProcessor->execute($request);
|
||||
|
||||
//$order_object = new OrderObject($request->get('company_module_id'), '', '', OrderType::SHARED_CONTAINER, OrderStatus::PROCESSING, OrderSteps::PROCESSING);
|
||||
|
||||
//$this->canCreateOrder->passes($order_object);
|
||||
|
||||
//$order = $this->createsOrder->execute($order_object);
|
||||
|
||||
return $this->resourceResponse(new OrderResource($order));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\DataTransferObjects;
|
||||
|
||||
|
||||
use App\Classes\General\Interfaces\DataTransferObject;
|
||||
|
||||
class OrderObject implements DataTransferObject
|
||||
{
|
||||
private $id;
|
||||
|
||||
private $company_module_id;
|
||||
|
||||
private $reference;
|
||||
|
||||
private $reference_contract;
|
||||
|
||||
private $type;
|
||||
|
||||
private $status;
|
||||
|
||||
private $current_step;
|
||||
|
||||
public function __construct(int $company_module_id, ?string $reference, string $reference_contract, int $type, int $status, string $current_step, int $id=0)
|
||||
{
|
||||
$this->company_module_id = $company_module_id;
|
||||
$this->reference = $reference;
|
||||
$this->reference_contract = $reference_contract;
|
||||
$this->type = $type;
|
||||
$this->status = $status;
|
||||
$this->current_step = $current_step;
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
public function getId(): int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function getCompanyModuleId(): int
|
||||
{
|
||||
return $this->company_module_id;
|
||||
}
|
||||
|
||||
public function getReference(): string
|
||||
{
|
||||
return $this->reference;
|
||||
}
|
||||
|
||||
public function getReferenceContract(): string
|
||||
{
|
||||
return $this->reference_contract;
|
||||
}
|
||||
|
||||
public function getType(): int
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
public function getStatus(): int
|
||||
{
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
public function getCurrentStep(): string
|
||||
{
|
||||
return $this->current_step;
|
||||
}
|
||||
|
||||
public function setCurrentStep(string $step)
|
||||
{
|
||||
$this->current_step = $step;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Services\Steps;
|
||||
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Classes\Modules\Orders\Services\FetchesOrder;
|
||||
use App\Classes\Modules\OrderSteps\Services\FetchesOrderSteps;
|
||||
use App\Classes\Modules\Orders\Standards\Rules\CanUpdateCurrentStep;
|
||||
use App\Classes\Modules\OrderSteps\Processors\UpdateOrderStepsProcessor;
|
||||
use App\Classes\ValueObjects\Constants\OrderStatus;
|
||||
use App\Classes\ValueObjects\Constants\OrderSteps;
|
||||
use App\Models\Order;
|
||||
use App\Models\OrderStep;
|
||||
|
||||
class ConfirmOrderProcessor
|
||||
{
|
||||
private $canUpdateCurrentStep;
|
||||
|
||||
private $updatesCurrentStep;
|
||||
|
||||
private $fetchesOrder;
|
||||
|
||||
private $fetchesOrderSteps;
|
||||
|
||||
private $updateOrderStepProcessors;
|
||||
|
||||
public function __construct(CanUpdateCurrentStep $canUpdateCurrentStep, FetchesOrder $fetchesOrder, FetchesOrderSteps $fetchesOrderSteps, UpdatesOrderCurrentStep $updatesCurrentStep, UpdateOrderStepsProcessor $updateOrderStepProcessors)
|
||||
{
|
||||
$this->canUpdateCurrentStep = $canUpdateCurrentStep;
|
||||
$this->updatesCurrentStep = $updatesCurrentStep;
|
||||
$this->fetchesOrder = $fetchesOrder;
|
||||
$this->fetchesOrderSteps = $fetchesOrderSteps;
|
||||
$this->updateOrderStepProcessors = $updateOrderStepProcessors;
|
||||
}
|
||||
|
||||
public function execute(int $orderId, string $currentStep){
|
||||
|
||||
$order_object = new OrderObject(0, '', '', 0, 0, $currentStep, $orderId);
|
||||
|
||||
$this->canUpdateCurrentStep->passes($order_object);
|
||||
|
||||
$order = $this->fetchesOrder->execute(['id'=>$order_object->getId()]);
|
||||
|
||||
$order_steps = $this->fetchesOrderSteps->execute(['order_id'=>$order_object->getId(), 'status'=> OrderStatus::PROCESSING, 'order_by' => 'sequence', 'per_page' => 1]);
|
||||
|
||||
$order_object->setCurrentStep($currentStep);
|
||||
|
||||
$order = $this->updatesCurrentStep->execute($order, $order_object);
|
||||
|
||||
$this->updateOrderStepProcessors->execute($currentStep);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Processors;
|
||||
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Classes\Modules\Orders\Services\CreatesOrder;
|
||||
use App\Classes\Modules\Orders\Standards\Rules\CanCreateOrder;
|
||||
use App\Classes\Modules\OrderSteps\Processors\CreateOrderStepsProcessor;
|
||||
use App\Classes\ValueObjects\Constants\OrderStatus;
|
||||
use App\Classes\ValueObjects\Constants\OrderSteps;
|
||||
use App\Classes\ValueObjects\Constants\OrderType;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CreateOrderProcessor
|
||||
{
|
||||
private $canCreateOrder;
|
||||
|
||||
private $createsOrder;
|
||||
|
||||
private $createOrderStepsProcessor;
|
||||
|
||||
public function __construct(CanCreateOrder $canCreateOrder, CreatesOrder $createsOrder, CreateOrderStepsProcessor $createOrderStepsProcessor)
|
||||
{
|
||||
$this->canCreateOrder = $canCreateOrder;
|
||||
$this->createsOrder = $createsOrder;
|
||||
$this->createOrderStepsProcessor = $createOrderStepsProcessor;
|
||||
}
|
||||
|
||||
public function execute(Request $request){
|
||||
|
||||
$order_object = new OrderObject($request->get('company_module_id'), $request->get('reference'), '', OrderType::SHARED_CONTAINER, OrderStatus::PROCESSING, OrderSteps::PROCESSING);
|
||||
|
||||
$this->canCreateOrder->passes($order_object);
|
||||
|
||||
$order = $this->createsOrder->execute($order_object);
|
||||
|
||||
//Add processing to order step
|
||||
$this->createOrderStepsProcessor->execute($order, OrderSteps::PROCESSING);
|
||||
|
||||
return $order;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Processors;
|
||||
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Classes\Modules\Orders\Services\FetchesOrder;
|
||||
use App\Classes\Modules\Orders\Services\UpdatesCurrentStep;
|
||||
use App\Classes\Modules\OrderSteps\Services\FetchesOrderSteps;
|
||||
use App\Classes\Modules\Orders\Standards\Rules\CanUpdateCurrentStep;
|
||||
use App\Classes\ValueObjects\Constants\OrderStatus;
|
||||
use App\Classes\ValueObjects\Constants\OrderSteps;
|
||||
use App\Models\Order;
|
||||
use App\Models\OrderStep;
|
||||
|
||||
class UpdatesOrderCurrentStepProcessor
|
||||
{
|
||||
private $canUpdateCurrentStep;
|
||||
|
||||
private $updatesCurrentStep;
|
||||
|
||||
private $fetchesOrder;
|
||||
|
||||
private $fetchesOrderSteps;
|
||||
|
||||
public function __construct(CanUpdateCurrentStep $canUpdateCurrentStep, FetchesOrder $fetchesOrder, FetchesOrderSteps $fetchesOrderSteps, UpdatesCurrentStep $updatesCurrentStep)
|
||||
{
|
||||
$this->canUpdateCurrentStep = $canUpdateCurrentStep;
|
||||
$this->updatesCurrentStep = $updatesCurrentStep;
|
||||
$this->fetchesOrder = $fetchesOrder;
|
||||
$this->fetchesOrderSteps = $fetchesOrderSteps;
|
||||
}
|
||||
|
||||
public function execute(int $orderId, string $currentStep){
|
||||
|
||||
$order_object = new OrderObject(0, '', '', 0, 0, $currentStep, $orderId);
|
||||
|
||||
$this->canUpdateCurrentStep->passes($order_object);
|
||||
|
||||
$order = $this->fetchesOrder->execute(['id'=>$order_object->getId()]);
|
||||
|
||||
$order_steps = $this->fetchesOrderSteps->execute(['order_id'=>$order_object->getId(), 'status'=> OrderStatus::PROCESSING, 'order_by' => 'sequence', 'per_page' => 1]);
|
||||
|
||||
$order_object->setCurrentStep($currentStep);
|
||||
|
||||
$order = $this->updatesCurrentStep->execute($order, $order_object);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Models\Order;
|
||||
|
||||
class CreatesOrder extends AbstractUpdateRecord
|
||||
{
|
||||
|
||||
/**
|
||||
* @param OrderObject $object
|
||||
* @return \Illuminate\Database\Eloquent\Model
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(OrderObject $object)
|
||||
{
|
||||
$model = new Order();
|
||||
$model->company_module_id = $object->getCompanyModuleId();
|
||||
$model->reference = $object->getReference();
|
||||
$model->reference_contract = $object->getReferenceContract();
|
||||
$model->type = $object->getType();
|
||||
$model->status = $object->getStatus();
|
||||
$model->current_step = $object->getCurrentStep();
|
||||
|
||||
return $this->handler($model);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractFetchRecord;
|
||||
use App\Models\Order;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
class FetchesOrder extends AbstractFetchRecord
|
||||
{
|
||||
|
||||
/** @var Order */
|
||||
private $repository;
|
||||
|
||||
/**
|
||||
* FetchOrder constructor.
|
||||
* @param Order $repository
|
||||
*/
|
||||
public function __construct(Order $repository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Builder
|
||||
*/
|
||||
public function getRepository(): Builder
|
||||
{
|
||||
return $this->repository->newQuery();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Models\Order;
|
||||
|
||||
class UpdatesCurrentStep extends AbstractUpdateRecord
|
||||
{
|
||||
|
||||
public function execute(Order $model, OrderObject $object) {
|
||||
|
||||
$model->current_step = $object->getCurrentStep();
|
||||
|
||||
return $this->handler($model);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Standards\Rules;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\Orders\Standards\Validators\ConfirmOrderValidation;
|
||||
|
||||
class CanConfirmOrder extends AbstractRule
|
||||
{
|
||||
private $confirmOrderValidation;
|
||||
|
||||
public function __construct(ConfirmOrderValidation $confirmOrderValidation)
|
||||
{
|
||||
$this->confirmOrderValidation = $confirmOrderValidation;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return $this->confirmOrderValidation->validate($object);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CompanyObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Standards\Rules;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\Orders\Standards\Validators\OrderValidation;
|
||||
|
||||
class CanCreateOrder extends AbstractRule
|
||||
{
|
||||
private $orderValidation;
|
||||
|
||||
public function __construct(OrderValidation $orderValidation)
|
||||
{
|
||||
$this->orderValidation = $orderValidation;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return $this->orderValidation->validate($object);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CompanyObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
//Verify account?
|
||||
//Contract created on Unity
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Standards\Rules;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractRule;
|
||||
use App\Classes\Modules\Orders\Standards\Validators\UpdateCurrentStepValidation;
|
||||
|
||||
class CanUpdateCurrentStep extends AbstractRule
|
||||
{
|
||||
private $orderValidation;
|
||||
|
||||
public function __construct(UpdateCurrentStepValidation $orderValidation)
|
||||
{
|
||||
$this->orderValidation = $orderValidation;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function authorized(): bool
|
||||
{
|
||||
// TODO Set Authorization rules
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function validators($object): bool
|
||||
{
|
||||
return $this->orderValidation->validate($object);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CompanyObject $object
|
||||
* @return bool
|
||||
*/
|
||||
protected function criteria($object): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Standards\Validators;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractValidation;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
|
||||
class ConfirmOrderValidation extends AbstractValidation
|
||||
{
|
||||
/**
|
||||
* @param OrderObject $object
|
||||
* @return array
|
||||
*/
|
||||
protected function data($object): array
|
||||
{
|
||||
return [
|
||||
'id' => $object->getId(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
* @return array
|
||||
*/
|
||||
protected function rules(?string $type = 'POST'): array
|
||||
{
|
||||
|
||||
return [
|
||||
'id' => 'required|exists:orders,id'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function messages(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Standards\Validators;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractValidation;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
|
||||
class OrderValidation extends AbstractValidation
|
||||
{
|
||||
/**
|
||||
* @param OrderObject $object
|
||||
* @return array
|
||||
*/
|
||||
protected function data($object): array
|
||||
{
|
||||
return [
|
||||
'company_module_id' => $object->getCompanyModuleId(),
|
||||
'reference' => $object->getReference(),
|
||||
'reference_contract' => $object->getReferenceContract(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
* @return array
|
||||
*/
|
||||
protected function rules(?string $type = 'POST'): array
|
||||
{
|
||||
if ($type == 'POST') {
|
||||
return [
|
||||
'company_module_id' => 'required',
|
||||
'reference' => '',
|
||||
'reference_contract' => ''
|
||||
];
|
||||
} elseif ($type == 'PUT') {
|
||||
return [
|
||||
'id' => 'required'
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function messages(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Standards\Validators;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractValidation;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
|
||||
class UpdateCurrentStepValidation extends AbstractValidation
|
||||
{
|
||||
/**
|
||||
* @param OrderObject $object
|
||||
* @return array
|
||||
*/
|
||||
protected function data($object): array
|
||||
{
|
||||
return [
|
||||
'id' => $object->getId(),
|
||||
'current_step' => $object->getCurrentStep(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
* @return array
|
||||
*/
|
||||
protected function rules(?string $type = 'POST'): array
|
||||
{
|
||||
return [
|
||||
'id'=> 'required|numeric',
|
||||
'current_step'=> 'required',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function messages(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Unity\Processors;
|
||||
|
||||
use Config;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use App\Classes\Modules\Unity\Services\GetContractObligations;
|
||||
|
||||
class GetContractObligationsProcessor
|
||||
{
|
||||
private $unityConfig;
|
||||
|
||||
private $GetContractObligations;
|
||||
|
||||
public function __construct(GetContractObligations $getContractObligations)
|
||||
{
|
||||
$this->unityConfig = Config::get('unity');
|
||||
$this->getContractObligations = $getContractObligations;
|
||||
}
|
||||
|
||||
public function execute(){
|
||||
return $this->getContractObligations->execute();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Unity\Services;
|
||||
|
||||
use Config;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class GetAccessToken
|
||||
{
|
||||
private $unityConfig;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->unityConfig = Config::get('unity');
|
||||
}
|
||||
|
||||
public function execute(){
|
||||
|
||||
//TODO: Cache access token base on expiry for login version
|
||||
|
||||
$accesToken='';
|
||||
if($this->unityConfig['default_auth']=='login'){
|
||||
$loginDetails = $this->unityConfig['auth']['login'];
|
||||
$response = Http::post($this->unityConfig['url'].$loginDetails['endpoint'], [
|
||||
'email' => $loginDetails['username'],
|
||||
'password' => $loginDetails['password'],
|
||||
])->object();
|
||||
$accesToken = $response->access_token;
|
||||
}else{
|
||||
$accesToken = $this->unityConfig['auth']['api_key']['key'];
|
||||
}
|
||||
|
||||
//TODO: Throw error if access token not available
|
||||
|
||||
return $accesToken;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Unity\Services;
|
||||
|
||||
use Config;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use App\Classes\Modules\Unity\Services\GetAccessToken;
|
||||
|
||||
class GetContractObligations
|
||||
{
|
||||
private $unityConfig;
|
||||
|
||||
private $getAccessToken;
|
||||
|
||||
public function __construct(GetAccessToken $getAccessToken)
|
||||
{
|
||||
$this->unityConfig = Config::get('unity');
|
||||
$this->getAccessToken = $getAccessToken;
|
||||
}
|
||||
|
||||
public function execute(){
|
||||
|
||||
$accesToken=$this->getAccessToken->execute();
|
||||
|
||||
$response = Http::withToken($accesToken)->get($this->unityConfig['url'].$this->unityConfig['steps_endpoint'])->object();
|
||||
$orderSteps = [];
|
||||
|
||||
return (isset($response->data)) ? $response->data : [];
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ValueObjects\Constants;
|
||||
|
||||
final class OrderEntity {
|
||||
|
||||
public const WAREHOUSE_MALAYSIA = "Warehouse Malaysia";
|
||||
|
||||
public const WAREHOUSE_YIWU = "Warehouse Yiwu";
|
||||
|
||||
public const WAREHOUSE_GUANG_ZHOU = "Warehouse Guang Zhou";
|
||||
|
||||
public const SUPPLIER = "Supplier";
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ValueObjects\Constants;
|
||||
|
||||
final class OrderStatus {
|
||||
|
||||
public const PROCESSING = 0;
|
||||
|
||||
public const SHIPPING = 1;
|
||||
|
||||
public const RECEIVING = 2;
|
||||
|
||||
public const COMPLETE = 3;
|
||||
|
||||
public const CANCEL = 4;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,161 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ValueObjects\Constants;
|
||||
|
||||
final class OrderSteps
|
||||
{
|
||||
public const PROCESSING = 'PROCESSING';
|
||||
public const PACKING = 'PACKING';
|
||||
public const SHIPPING = 'SHIPPING';
|
||||
public const DELIVERY = 'DELIVERY';
|
||||
|
||||
public const WAREHOUSE_RECEIVING = 'WAREHOUSE_RECEIVING';
|
||||
public const WAREHOUSE_LOAD_CONTAINER = 'WAREHOUSE_LOAD_CONTAINER';
|
||||
public const WAREHOUSE_ARRIVAL = 'WAREHOUSE_ARRIVAL';
|
||||
public const WAREHOUSE_UNLOAD_CONTAINER = 'WAREHOUSE_UNLOAD_CONTAINER';
|
||||
|
||||
/*
|
||||
public const COMPANY_PROCESSING_CATEGORY = 'processing';
|
||||
public const COMPANY_SHIPPING_CATEGORY = 'shipping';
|
||||
public const COMPANY_RECEIVING_CATEGORY = 'receiving';
|
||||
public const COMPANY_COMPLETE_CATEGORY = 'complete';
|
||||
public const COMPANY_CANCEL_CATEGORY = 'cancel';
|
||||
|
||||
public const ORDER_PROCESSING_STEP = 'PS_PROCESSING';
|
||||
public const ORDER_SHIPPING_STEP = 'PS_SHIPPING';
|
||||
public const ORDER_DELIVERY_STEP = 'PS_DELIVERY';
|
||||
|
||||
public const ORDER_MODULE_WAREHOUSE = 'WAREHOUSE';
|
||||
public const ORDER_WAREHOUSE_RECEIVING_STEP = 'MS_WAREHOUSE_RECEIVING';
|
||||
public const ORDER_WAREHOUSE_PACKING_STEP = 'MS_WAREHOUSE_PACKING';
|
||||
public const ORDER_WAREHOUSE_ARRIVAL_STEP = 'MS_WAREHOUSE_ARRIVAL';
|
||||
public const ORDER_WAREHOUSE_UNPACKING_STEP = 'MS_WAREHOUSE_UNPACKING';
|
||||
|
||||
public const ORDER_MODULE_NO_WAREHOUSE = 'NO_WAREHOUSE';
|
||||
public const ORDER_NO_WAREHOUSE_PENDING_SUPPLIER = 'MS_NO_WAREHOUSE_PENDING_SUPPLIER';
|
||||
|
||||
|
||||
public const ORDER_PRIMARY_STEPS = [
|
||||
OrderSteps::ORDER_PROCESSING_STEP => [
|
||||
'initial_name' => 'processing order',
|
||||
'final_name' => 'order confirmed',
|
||||
'description' => 'Order created and pending confirmation',
|
||||
'sequence' => 0
|
||||
]
|
||||
];
|
||||
|
||||
public const ORDER_PRIMARY_MODULAR_STEPS = [
|
||||
OrderSteps::ORDER_SHIPPING_STEP => [
|
||||
'initial_name' => 'shipping',
|
||||
'final_name' => 'shipped out',
|
||||
'description' => 'Order is Loaded to Container, waiting for Shipment',
|
||||
'sequence' => 1
|
||||
],
|
||||
OrderSteps::ORDER_DELIVERY_STEP => [
|
||||
'initial_name' => 'delivery',
|
||||
'final_name' => 'Received',
|
||||
'description' => 'Order out for delivery soon',
|
||||
'sequence' => 2
|
||||
],
|
||||
];
|
||||
|
||||
public const ORDER_MODULAR_STEPS = [
|
||||
OrderSteps::ORDER_MODULE_WAREHOUSE => [
|
||||
'china_warehouse' => [
|
||||
'previous' => OrderSteps::ORDER_PROCESSING_STEP,
|
||||
'next' => OrderSteps::ORDER_SHIPPING_STEP,
|
||||
'steps' => [
|
||||
OrderSteps::ORDER_WAREHOUSE_RECEIVING_STEP => [
|
||||
'initial_name' => 'pending supplier',
|
||||
'final_name' => 'arrived at warehouse',
|
||||
'description' => 'Waiting for supplier to deliver order to warehouse'
|
||||
],
|
||||
OrderSteps::ORDER_WAREHOUSE_PACKING_STEP => [
|
||||
'initial_name' => 'packing',
|
||||
'final_name' => 'packed',
|
||||
'description' => 'Packing order into shipping container'
|
||||
]
|
||||
]
|
||||
],
|
||||
'malaysia_warehouse' => [
|
||||
'previous' => OrderSteps::ORDER_SHIPPING_STEP,
|
||||
'next' => OrderSteps::ORDER_DELIVERY_STEP,
|
||||
'steps' => [
|
||||
OrderSteps::ORDER_WAREHOUSE_ARRIVAL_STEP => [
|
||||
'initial_name' => 'pending arrival',
|
||||
'final_name' => 'arrived at warehouse',
|
||||
'description' => 'Waiting for order\'s arrival & custom clearance'
|
||||
],
|
||||
OrderSteps::ORDER_WAREHOUSE_UNPACKING_STEP => [
|
||||
'initial_name' => 'unpacking',
|
||||
'final_name' => 'unpacked',
|
||||
'description' => 'Unpacking order from shipping container'
|
||||
]
|
||||
]
|
||||
]
|
||||
],
|
||||
OrderSteps::ORDER_MODULE_NO_WAREHOUSE => [
|
||||
'pending_arrival' => [
|
||||
'previous' => OrderSteps::ORDER_PROCESSING_STEP,
|
||||
'next' => OrderSteps::ORDER_SHIPPING_STEP,
|
||||
'steps' => [
|
||||
OrderSteps::ORDER_NO_WAREHOUSE_PENDING_SUPPLIER => [
|
||||
'initial_name' => 'pending supplier',
|
||||
'final_name' => 'supplier packed order',
|
||||
'description' => 'Waiting for supplier to pack order for shipping'
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
],
|
||||
];
|
||||
|
||||
public const COMPANY_ORDER_PROCESSING = [
|
||||
OrderSteps::ORDER_PROCESSING_STEP,
|
||||
OrderSteps::ORDER_NO_WAREHOUSE_PENDING_SUPPLIER,
|
||||
OrderSteps::ORDER_WAREHOUSE_RECEIVING_STEP
|
||||
];
|
||||
|
||||
public const COMPANY_ORDER_SHIPPING = [
|
||||
OrderSteps::ORDER_WAREHOUSE_PACKING_STEP,
|
||||
OrderSteps::ORDER_SHIPPING_STEP
|
||||
];
|
||||
|
||||
public const COMPANY_ORDER_RECEIVING = [
|
||||
OrderSteps::ORDER_WAREHOUSE_ARRIVAL_STEP,
|
||||
OrderSteps::ORDER_WAREHOUSE_UNPACKING_STEP,
|
||||
OrderSteps::ORDER_DELIVERY_STEP
|
||||
|
||||
];
|
||||
|
||||
public const WAREHOUSE_RECEIVING_CATEGORY = 'receiving';
|
||||
public const WAREHOUSE_SHIPPING_CATEGORY = 'shipping';
|
||||
public const WAREHOUSE_COMPLETE_CATEGORY = 'complete';
|
||||
public const WAREHOUSE_CANCEL_CATEGORY = 'cancel';
|
||||
|
||||
public const WAREHOUSE_ORDER_RECEIVING = [
|
||||
OrderSteps::ORDER_WAREHOUSE_RECEIVING_STEP
|
||||
];
|
||||
|
||||
public const WAREHOUSE_ORDER_SHIPPING = [
|
||||
OrderSteps::ORDER_WAREHOUSE_PACKING_STEP,
|
||||
OrderSteps::ORDER_SHIPPING_STEP,
|
||||
];
|
||||
|
||||
public const WAREHOUSE_ORDER_COMPLETE = [
|
||||
OrderSteps::ORDER_WAREHOUSE_ARRIVAL_STEP,
|
||||
OrderSteps::ORDER_WAREHOUSE_UNPACKING_STEP,
|
||||
OrderSteps::ORDER_DELIVERY_STEP
|
||||
];
|
||||
|
||||
public const STEP_PROCESSOR = [
|
||||
OrderSteps::ORDER_PROCESSING_STEP => ConfirmsOrder::class,
|
||||
OrderSteps::ORDER_WAREHOUSE_RECEIVING_STEP => WarehouseReceivesOrder::class,
|
||||
OrderSteps::ORDER_WAREHOUSE_PACKING_STEP => WarehousePackOrder::class,
|
||||
OrderSteps::ORDER_SHIPPING_STEP => ShipOrder::class,
|
||||
OrderSteps::ORDER_WAREHOUSE_ARRIVAL_STEP => WarehouseArrivalOrder::class,
|
||||
OrderSteps::ORDER_WAREHOUSE_UNPACKING_STEP => WarehouseUnpackingOrder::class,
|
||||
OrderSteps::ORDER_DELIVERY_STEP => DeliverOrder::class,
|
||||
];
|
||||
*/
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ValueObjects\Constants;
|
||||
|
||||
final class OrderType {
|
||||
|
||||
public const SHARED_CONTAINER = 0;
|
||||
|
||||
public const DEDICATED_CONTAINER = 1;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ValueObjects\Constants;
|
||||
|
||||
final class OrderWorkflow
|
||||
{
|
||||
public const STANDARD = [
|
||||
OrderSteps::PROCESSING=>[],
|
||||
OrderSteps::PACKING=>[],
|
||||
OrderSteps::SHIPPING=>[
|
||||
OrderSteps::WAREHOUSE_ARRIVAL=>[],
|
||||
OrderSteps::WAREHOUSE_LOAD_CONTAINER=>[]
|
||||
],
|
||||
OrderSteps::DELIVERY=>[
|
||||
OrderSteps::WAREHOUSE_RECEIVING=>[],
|
||||
OrderSteps::WAREHOUSE_UNLOAD_CONTAINER=>[]
|
||||
],
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ValueObjects\Constants;
|
||||
|
||||
final class UnityStatus {
|
||||
|
||||
public const PENDING = 9;
|
||||
|
||||
public const ACTIVE = 1;
|
||||
|
||||
public const DELETED = 2;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Orders;
|
||||
|
||||
use App\Classes\Modules\Orders\ControllersLogic\CompletesOrderStepLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CompletesOrderStepsController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param CreateOrderLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function complete(Request $request, CompletesOrderStepLogic $logic): JsonResponse
|
||||
{
|
||||
return $logic->execute($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Orders;
|
||||
|
||||
use App\Classes\Modules\Orders\ControllersLogic\ConfirmOrderLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ConfirmOrderController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param ConfirmOrderLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function confirm(int $id, Request $request, ConfirmOrderLogic $logic): JsonResponse
|
||||
{
|
||||
$request->merge(['id' => $id]);
|
||||
return $logic->execute($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Orders;
|
||||
|
||||
use App\Classes\Modules\Orders\ControllersLogic\CreateOrderLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CreateOrderController
|
||||
{
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param CreateOrderLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function create(Request $request, CreateOrderLogic $logic): JsonResponse
|
||||
{
|
||||
return $logic->execute($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
|
||||
use App\Models\Company;
|
||||
use App\Models\Currency;
|
||||
use App\Models\OrderStep;
|
||||
use App\Models\SegmentConstant;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class OrderResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'reference' => $this->reference,
|
||||
'reference_contract' => (int) $this->type,
|
||||
'type' => (int) $this->type,
|
||||
'status' => (int) $this->status,
|
||||
'current_step' => $this->current_step,
|
||||
'company' => new CompanyResource(Company::where('id',$this->companyModule()->first()->company_id)->first()),
|
||||
'order_steps' => OrderStepsResource::collection($this->orderSteps()->get()),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use App\Classes\Modules\Companies\Services\FetchesCompanyServices;
|
||||
use App\Classes\ValueObjects\Constants\BankAccountType;
|
||||
use App\Classes\ValueObjects\Constants\BusinessType;
|
||||
use App\Classes\ValueObjects\Constants\DocumentType;
|
||||
use App\Classes\ValueObjects\Constants\SegmentConstants;
|
||||
use App\Models\Currency;
|
||||
use App\Models\SegmentConstant;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class OrderStepsResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'order_id' => $this->order_id,
|
||||
'appointee_id' => $this->appointee_id,
|
||||
'reference' => $this->reference,
|
||||
'primary' => (int) $this->primary,
|
||||
'sequence' => (double) $this->sequence,
|
||||
'status' =>(int) $this->status,
|
||||
'contract_status' =>(int) $this->contract_status,
|
||||
'complete_date' => $this->complete_date,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use Illuminate\Database\Eloquent\Relations\MorphMany;
|
||||
|
||||
class Order extends AbstractModel
|
||||
{
|
||||
use SoftDeletes;
|
||||
|
||||
protected $table = 'orders';
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
|
||||
|
||||
public function companyModule(): belongsTo
|
||||
{
|
||||
return $this->belongsTo(CompanyModule::class, 'company_module_id', 'id');
|
||||
}
|
||||
|
||||
public function orderSteps()
|
||||
{
|
||||
return $this->hasMany(OrderStep::class, 'order_id');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class OrderRole extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
|
||||
class OrderStep extends AbstractModel
|
||||
{
|
||||
use SoftDeletes;
|
||||
|
||||
protected $table = 'order_steps';
|
||||
|
||||
protected $dates = ['deleted_at'];
|
||||
|
||||
protected $fillable = ['order_id','appointee_id','reference','primary','sequence','status','contract_status','complete_date'];
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'url' => env('UNITY_API_URL', 'https://dev.unity.izyim.com/user-backsys/api/'),
|
||||
|
||||
'auth' => [
|
||||
|
||||
'api_key' => [
|
||||
'key' => env('UNITY_API_KEY', ''),
|
||||
],
|
||||
|
||||
'login' => [
|
||||
'username' => env('UNITY_LOGIN_USERNAME','one@izyim.com'),
|
||||
'password' => env('UNITY_LOGIN_PASSWORD','pass123'),
|
||||
'endpoint' => env('UNITY_LOGIN_ENDPOINT','login')
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
'steps_endpoint' => env('UNITY_LOGIN_ENDPOINT','contract-template-obligation/list'),
|
||||
|
||||
'default_auth' => env('UNITY_AUTH','login'),
|
||||
|
||||
'on_error_email' => env('UNITY_ON_ERROR_EMAIL','dev@shipping.com,dev@unity.com'),
|
||||
|
||||
'contract_template_id' => env('UNITY_CONTRACT_TEMPLATE_ID', 102),
|
||||
|
||||
'contract_template_cache' => env('UNITY_CONTRACT_TEMPLATE_CACHE','60'),
|
||||
|
||||
'entity' => [
|
||||
'xxx' => App\Classes\ValueObjects\Constants\OrderEntity::SUPPLIER,
|
||||
'zzz' => App\Classes\ValueObjects\Constants\OrderEntity::WAREHOUSE_YIWU,
|
||||
'vvv' => App\Classes\ValueObjects\Constants\OrderEntity::WAREHOUSE_GUANG_ZHOU,
|
||||
'wwww' => App\Classes\ValueObjects\Constants\OrderEntity::SUPPLIER,
|
||||
],
|
||||
|
||||
'step_processor' => [
|
||||
App\Classes\ValueObjects\Constants\OrderSteps::PACKING => App\Classes\Modules\OrderSteps\Processors\Steps\Packing::class,
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateOrdersTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('orders', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->bigInteger('company_module_id')->unsigned()->index()->comment('Entity responsible to create this order');
|
||||
$table->string('reference')->comment('Reference no for user ');
|
||||
$table->string('reference_contract')->comment('Reference no from Unity platform');
|
||||
$table->integer('type')->default(0)->comment('Order packages can be shipped in shared or dedicated container');
|
||||
$table->integer('status')->default(0)->comment('Status of this order, e.g. processing, shipping etc.');
|
||||
$table->string('current_step')->nullable(false)->comment('Current steps is quick reference for order steps');
|
||||
$table->softDeletes();
|
||||
$table->timestamps();
|
||||
|
||||
$table->foreign('company_module_id')->references('id')->on('company_modules');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('orders');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateOrderStepsTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('order_steps', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->bigInteger('order_id')->unsigned()->index();
|
||||
$table->bigInteger('appointee_id')->unsigned()->index()->comment('');
|
||||
$table->string('reference')->comment('Reference no for user ');
|
||||
$table->integer('primary')->default(0);
|
||||
$table->decimal('sequence', 4, 2);
|
||||
$table->integer('status')->default(0)->comment('Status of this order, e.g. processing, shipping etc.');
|
||||
$table->integer('contract_status')->default(0)->comment('Status of this order, e.g. processing, shipping etc.');
|
||||
$table->date('complete_date')->nullable();
|
||||
$table->softDeletes();
|
||||
$table->timestamps();
|
||||
|
||||
$table->foreign('appointee_id')->references('id')->on('company_modules');
|
||||
$table->foreign('order_id')->references('id')->on('orders');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('order_steps');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateOrderRolesTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('order_roles', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->bigInteger('order_id')->unsigned()->index()->comment('Order id');
|
||||
$table->bigInteger('company_module_id')->unsigned()->index()->comment('Entity plays a role in this order, e.g. Freight Forwarder');
|
||||
$table->integer('role')->default(0)->comment('Describe role participate in processing order');
|
||||
$table->softDeletes();
|
||||
$table->timestamps();
|
||||
|
||||
$table->foreign('company_module_id')->references('id')->on('company_modules');
|
||||
$table->foreign('order_id')->references('id')->on('orders');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('order_roles');
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
+2
-2
@@ -40,8 +40,8 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function
|
||||
//
|
||||
// require __DIR__ . '/bank.php';
|
||||
//
|
||||
// require __DIR__ . '/booking.php';
|
||||
//
|
||||
require __DIR__ . '/order.php';
|
||||
|
||||
require __DIR__ . '/currency.php';
|
||||
|
||||
require __DIR__ . '/address.php';
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::group(['prefix' => 'order', 'as' => 'order.', 'namespace' => 'Orders'], function () {
|
||||
#Route::get('/{id}/show', 'FetchOrderController@fetch')->name('show');
|
||||
#Route::get('/list', 'ListOrdersController@list')->name('list');
|
||||
Route::post('/create', 'CreateOrderController@create')->name('create');
|
||||
Route::put('/confirm/{id}', 'ConfirmOrderController@confirm')->name('confirm');
|
||||
#Route::put('/update/{id}', 'UpdateOrderController@update')->name('update');
|
||||
#Route::delete('/delete/{id}', 'DeleteOrderController@destroy')->name('delete');
|
||||
|
||||
|
||||
Route::group(['prefix' => '{id}/step', 'as' => 'step.'], function () {
|
||||
|
||||
Route::post('/complete', 'CompletesOrderStepsController@complete')->name('create');
|
||||
|
||||
});
|
||||
|
||||
Route::group(['prefix' => '{id}/role', 'as' => 'role.'], function () {});
|
||||
});
|
||||
Reference in New Issue
Block a user