mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git
synced 2026-08-19 04:24:12 +00:00
Orders APIs WIP
This commit is contained in:
@@ -33,7 +33,7 @@ class CreateCompanyModuleProcessor
|
||||
$company_module_object = new CompanyModuleObject(
|
||||
$company->id,
|
||||
$company->type,
|
||||
$company->status,
|
||||
$company->status
|
||||
);
|
||||
|
||||
return $this->createsCompanyModule->execute($company_module_object);
|
||||
|
||||
@@ -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,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\OrderSteps\Processors;
|
||||
|
||||
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 Illuminate\Http\Request;
|
||||
|
||||
class CreateOrderStepsProcessor
|
||||
{
|
||||
private $canCreateOrder;
|
||||
|
||||
private $createsOrder;
|
||||
|
||||
public function __construct(CanCreateOrder $canCreateOrder, CreatesOrder $createsOrder)
|
||||
{
|
||||
$this->canCreateOrder = $canCreateOrder;
|
||||
$this->createsOrder = $createsOrder;
|
||||
}
|
||||
|
||||
public function execute(Request $request) {
|
||||
|
||||
$order_object = new OrderObject();
|
||||
|
||||
$this->canCreateOrder->passes($order_object);
|
||||
|
||||
return $this->createsOrder->execute($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?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\Orders\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\ValueObjects\Constants\OrderStatus;
|
||||
use App\Classes\ValueObjects\Constants\OrderSteps;
|
||||
use App\Models\Order;
|
||||
use App\Models\OrderStep;
|
||||
|
||||
class UpdateOrderStep
|
||||
{
|
||||
private $canUpdateCurrentStep;
|
||||
|
||||
private $updatesOrderCurrentStep;
|
||||
|
||||
private $fetchesOrder;
|
||||
|
||||
private $fetchesOrderSteps;
|
||||
|
||||
public function __construct(CanUpdateCurrentStep $canUpdateCurrentStep, FetchesOrder $fetchesOrder, FetchesOrderSteps $fetchesOrderSteps, UpdatesOrderCurrentStep $updatesOrderCurrentStep)
|
||||
{
|
||||
$this->canUpdateCurrentStep = $canUpdateCurrentStep;
|
||||
$this->updatesOrderCurrentStep = $updatesOrderCurrentStep;
|
||||
$this->fetchesOrder = $fetchesOrder;
|
||||
$this->fetchesOrderSteps = $fetchesOrderSteps;
|
||||
}
|
||||
|
||||
public function execute(int $orderId, string $currentStep){
|
||||
|
||||
$order_object = new OrderStepsObject($currentStep, 0, $currentStep, 0, 0, OrderStatus::PROCESSING, 0, null);
|
||||
|
||||
$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);
|
||||
|
||||
$this->updatesOrderCurrentStep->execute($orderId, $currentStep);
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\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\Orders\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();
|
||||
}
|
||||
}
|
||||
@@ -3,20 +3,27 @@
|
||||
namespace App\Classes\Modules\Orders\ControllersLogic;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
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 CreateOrderLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
private $createOrderProcessor;
|
||||
private $canCreateOrder;
|
||||
|
||||
private $createOrderStepsProcessor;
|
||||
private $createsOrder;
|
||||
|
||||
public function __construct(CreateOrderProcessor $createOrderProcessor, CreateOrderStepsProcessor $createOrderStepsProcessor)
|
||||
public function __construct(CanCreateOrder $canCreateOrder, CreatesOrder $createsOrder)
|
||||
{
|
||||
$this->createOrderProcessor = $createOrderProcessor;
|
||||
$this->createOrderStepsProcessor = $createOrderStepsProcessor;
|
||||
$this->canCreateOrder = $canCreateOrder;
|
||||
$this->createsOrder = $createsOrder;
|
||||
}
|
||||
|
||||
protected function notification():array {
|
||||
@@ -26,11 +33,13 @@ class CreateOrderLogic extends AbstractControllerLogic
|
||||
];
|
||||
}
|
||||
|
||||
public function logic(Request $request) {
|
||||
$this->createOrderProcessor->execute($request);
|
||||
public function logic(Request $request) : JsonResponse {
|
||||
$order_object = new OrderObject($request->get('company_module_id'), '', '', OrderType::SHARED_CONTAINER, OrderStatus::PROCESSING, OrderSteps::PROCESSING);
|
||||
|
||||
$this->createOrderStepsProcessor->execute($order_id, $request);
|
||||
$this->canCreateOrder->passes($order_object);
|
||||
|
||||
//return resources JSON
|
||||
$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;
|
||||
}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\ControllersLogic;
|
||||
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CreateOrderProcessor
|
||||
{
|
||||
private $canCreateOrder;
|
||||
|
||||
private $createsOrder;
|
||||
|
||||
public function __construct(CanCreateOrder $canCreateOrder, CreatesOrder $createsOrder)
|
||||
{
|
||||
$this->canCreateOrder = $canCreateOrder;
|
||||
$this->createsOrder = $createsOrder;
|
||||
}
|
||||
|
||||
public function execute(Request $request) {
|
||||
|
||||
//Data object
|
||||
|
||||
|
||||
$this->createOrderProcessor->execute($request);
|
||||
|
||||
|
||||
//return resources JSON
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
<?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\Orders\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 UpdatesOrderCurrentStep
|
||||
{
|
||||
private $canUpdateCurrentStep;
|
||||
|
||||
private $updatesCurrentStep;
|
||||
|
||||
private $fetchesOrder;
|
||||
|
||||
private $fetchesOrderSteps;
|
||||
|
||||
public function __construct(CanUpdateCurrentStep $canUpdateCurrentStep, FetchesOrder $fetchesOrder, FetchesOrderSteps $fetchesOrderSteps, UpdatesOrderCurrentStep $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,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,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,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;
|
||||
|
||||
}
|
||||
@@ -2,18 +2,19 @@
|
||||
|
||||
namespace App\Classes\ValueObjects\Constants;
|
||||
|
||||
|
||||
use App\Classes\Modules\Orders\Processors\ConfirmsOrder;
|
||||
use App\Classes\Modules\Orders\Processors\DeliverOrder;
|
||||
use App\Classes\Modules\Orders\Processors\ShipOrder;
|
||||
use App\Classes\Modules\Orders\Processors\WarehouseArrivalOrder;
|
||||
use App\Classes\Modules\Orders\Processors\WarehousePackOrder;
|
||||
use App\Classes\Modules\Orders\Processors\WarehouseReceivesOrder;
|
||||
use App\Classes\Modules\Orders\Processors\WarehouseUnpackingOrder;
|
||||
|
||||
class OrderSteps
|
||||
final class OrderSteps
|
||||
{
|
||||
public const PROCESSING = 'PS_PROCESSING';
|
||||
public const PACKING = 'PS_PACKING';
|
||||
public const SHIPPING = 'PS_SHIPPING';
|
||||
public const DELIVERY = 'PS_DELIVERY';
|
||||
|
||||
public const WAREHOUSE_RECEIVING = 'MS_WAREHOUSE_RECEIVING';
|
||||
public const WAREHOUSE_LOAD_CONTAINER = 'MS_WAREHOUSE_LOAD_CONTAINER';
|
||||
public const WAREHOUSE_ARRIVAL = 'MS_WAREHOUSE_ARRIVAL';
|
||||
public const WAREHOUSE_UNLOAD_CONTAINER = 'MS_WAREHOUSE_UNLOAD_CONTAINER';
|
||||
|
||||
/*
|
||||
public const COMPANY_PROCESSING_CATEGORY = 'processing';
|
||||
public const COMPANY_SHIPPING_CATEGORY = 'shipping';
|
||||
public const COMPANY_RECEIVING_CATEGORY = 'receiving';
|
||||
@@ -156,5 +157,5 @@ class OrderSteps
|
||||
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=>[]
|
||||
],
|
||||
];
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Accounts;
|
||||
namespace App\Http\Controllers\Orders;
|
||||
|
||||
use App\Classes\Modules\ControllersLogic\Orders\CreateOrderLogic;
|
||||
use App\Classes\Modules\Orders\ControllersLogic\CreateOrderLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
@@ -13,8 +13,8 @@ class CreateOrderController
|
||||
* @param CreateOrderLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function create(Request $request, CreateOrderLogic $createOrderLogic): JsonResponse
|
||||
public function create(Request $request, CreateOrderLogic $logic): JsonResponse
|
||||
{
|
||||
return $createOrderLogic->execute($request);
|
||||
return $logic->execute($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
|
||||
use App\Models\Company;
|
||||
use App\Models\Currency;
|
||||
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,
|
||||
'company' => new CompanyResource(Company::where('id',$this->companyModule()->first()->company_id)->first()),
|
||||
|
||||
];
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
<?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,
|
||||
'name' => $this->name,
|
||||
'reference' => $this->reference,
|
||||
'type' => (int) $this->type,
|
||||
'business_type' => (int) $this->business_type,
|
||||
'status' => (int) $this->status,
|
||||
'contact' => new ContactResource ($this->when($this->has('contacts'), $this->contacts->first())),
|
||||
'address' => new AddressResource($this->when($this->has('addresses'), $this->addresses->where('billing', true)->first())),
|
||||
// 'employee' => new UserResource($this->employees->first()),
|
||||
// 'identification' => new DocumentResource($this->documents->whereIn('document_type', DocumentType::IDENTIFICATION_DOCUMENTS)->first()),
|
||||
// 'bookings' => BookingResource::collection($this->whenLoaded('bookings', $this->bookings()->orderBy('id', 'DESC')->get(), [])),
|
||||
// 'personal_banks' => BankResource::collection($this->banks->where('type', BankAccountType::PERSONAL)),
|
||||
// 'recipient_banks' => [
|
||||
// 'accounts' => BankResource::collection($this->banks->where('type', BankAccountType::EXTERNAL)),
|
||||
// 'default' => new BankResource($this->banks->where('type', BankAccountType::EXTERNAL)->where('default', true)->first())
|
||||
// ],
|
||||
// 'segments' => SegmentResource::collection($this->segments),
|
||||
// 'services' => (new FetchesCompanyServices())->getServices($this->servicesConfigurations()),
|
||||
// 'currencies' => $this->when($this->business_type === BusinessType::CURRENCY_VENDOR, function(){
|
||||
// $segment = SegmentConstant::where('reference', SegmentConstants::SUPPLIER_CURRENCIES)->where('detail->id', $this->id)->first();
|
||||
// return $segment ? CurrencyResource::collection(Currency::whereIn('id', $segment->detail->currencies)->get()) : [];
|
||||
// })
|
||||
|
||||
|
||||
];
|
||||
|
||||
}
|
||||
}
|
||||
+23
-4
@@ -2,10 +2,29 @@
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
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 Model
|
||||
class Order extends AbstractModel
|
||||
{
|
||||
use HasFactory;
|
||||
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');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ class CreateOrdersTable extends Migration
|
||||
$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();
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
+5
-5
@@ -3,11 +3,11 @@
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::group(['prefix' => 'order', 'as' => 'order.', 'namespace' => 'Orders'], function () {
|
||||
Route::get('/{id}/show', 'FetchCompanyController@fetch')->name('show');
|
||||
Route::get('/list', 'ListCompaniesController@list')->name('list');
|
||||
Route::post('/create', 'CreateCompanyController@create')->name('create');
|
||||
Route::put('/update/{id}', 'UpdateCompanyController@update')->name('update');
|
||||
Route::delete('/delete/{id}', 'DeleteCompanyController@destroy')->name('delete');
|
||||
Route::get('/{id}/show', 'FetchOrderController@fetch')->name('show');
|
||||
Route::get('/list', 'ListOrdersController@list')->name('list');
|
||||
Route::post('/create', 'CreateOrderController@create')->name('create');
|
||||
Route::put('/update/{id}', 'UpdateOrderController@update')->name('update');
|
||||
Route::delete('/delete/{id}', 'DeleteOrderController@destroy')->name('delete');
|
||||
|
||||
|
||||
Route::group(['prefix' => '{id}/step', 'as' => 'step.'], function () {});
|
||||
|
||||
Reference in New Issue
Block a user