mirror of
https://gitlab.com/omair-personal/izyim.git
synced 2026-08-19 04:14:05 +00:00
large commit
This commit is contained in:
@@ -1,12 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Interfaces\Order\Steps;
|
||||
|
||||
interface OrderRequirement
|
||||
{
|
||||
|
||||
public function getOrderId();
|
||||
|
||||
public function getReferenceId();
|
||||
|
||||
}
|
||||
@@ -2,12 +2,11 @@
|
||||
|
||||
namespace App\Classes\Modules\ControllersLogic\Orders;
|
||||
|
||||
use App\Classes\Modules\Accounts\Exceptions\CannotListCompanyOrdersException;
|
||||
use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Classes\Modules\Orders\Services\ConfirmsOrder;
|
||||
use App\Classes\Modules\Orders\Processors\ConfirmsOrder;
|
||||
use App\Classes\Modules\Orders\Services\SetsOrderWarehouse;
|
||||
use App\Classes\Modules\Orders\Services\UpdatesOrderSteps;
|
||||
use App\Classes\Modules\Orders\Services\Steps\UpdatesOrderSteps;
|
||||
use App\Classes\ValueObjects\Constants\HttpStatus;
|
||||
use App\Models\Order;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
@@ -19,7 +18,8 @@ class ConfirmOrderLogic
|
||||
/** @var Order */
|
||||
private $repository;
|
||||
|
||||
|
||||
/** @var SetsOrderWarehouse */
|
||||
private $setOrderWarehouse;
|
||||
|
||||
/** @var ConfirmsOrder */
|
||||
private $confirmOrder;
|
||||
|
||||
@@ -2,12 +2,9 @@
|
||||
|
||||
namespace App\Classes\Modules\ControllersLogic\Orders;
|
||||
|
||||
use App\Classes\Modules\Accounts\Exceptions\CannotCreateOrderException;
|
||||
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\CreatesOrder;
|
||||
use App\Classes\Modules\Orders\Services\UpdatesOrderSteps;
|
||||
use App\Classes\Modules\Orders\Services\Steps\UpdatesOrderSteps;
|
||||
use App\Models\Order;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
@@ -36,14 +33,13 @@ class UpdateOrderStepLogic
|
||||
* @param int $orderId
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
* @throws \ReflectionException
|
||||
*/
|
||||
public function execute(int $orderId, Request $request) {
|
||||
|
||||
$repository = $this->repository->findOrFail($orderId);
|
||||
|
||||
$orderObject = new OrderObject($orderId);
|
||||
|
||||
$stepObject = new StepObject($repository->current_step);
|
||||
$stepObject = new StepObject($repository->current_step, $request->input('complete_date'));
|
||||
|
||||
return $this->updateOrderSteps->execute($orderObject, $stepObject, $request);
|
||||
|
||||
|
||||
@@ -11,18 +11,13 @@ class ReceiveNoteObject
|
||||
/** @var string */
|
||||
private $trackingNumber;
|
||||
|
||||
/** @var string */
|
||||
private $date;
|
||||
|
||||
/**
|
||||
* ReceiveNoteObject constructor.
|
||||
* @param string $trackingNumber
|
||||
* @param string $date
|
||||
*/
|
||||
public function __construct(string $trackingNumber, string $date)
|
||||
public function __construct(string $trackingNumber)
|
||||
{
|
||||
$this->trackingNumber = $trackingNumber;
|
||||
$this->date = $date;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -33,15 +28,5 @@ class ReceiveNoteObject
|
||||
return $this->trackingNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Carbon
|
||||
*/
|
||||
public function getDate(): Carbon
|
||||
{
|
||||
return Carbon::parse($this->date);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -3,29 +3,27 @@
|
||||
namespace App\Classes\Modules\Orders\DataTransferObjects;
|
||||
|
||||
|
||||
use Carbon\Carbon;
|
||||
|
||||
class StepObject
|
||||
{
|
||||
|
||||
/** @var string */
|
||||
protected $referenceId;
|
||||
|
||||
/** @var bool */
|
||||
protected $isPrimary;
|
||||
|
||||
/** @var float */
|
||||
protected $sequence;
|
||||
/** @var null|string */
|
||||
protected $complete_date;
|
||||
|
||||
/**
|
||||
* StepObject constructor.
|
||||
* @param string $referenceId
|
||||
* @param bool $isPrimary
|
||||
* @param float $sequence
|
||||
* @param null|string $complete_date
|
||||
*/
|
||||
public function __construct(string $referenceId, bool $isPrimary = false, float $sequence = 0)
|
||||
public function __construct(string $referenceId, ?string $complete_date = null)
|
||||
{
|
||||
$this->referenceId = $referenceId;
|
||||
$this->isPrimary = $isPrimary;
|
||||
$this->sequence = $sequence;
|
||||
$this->complete_date = $complete_date;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -37,19 +35,11 @@ class StepObject
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
* @return Carbon
|
||||
*/
|
||||
public function isPrimary(): bool
|
||||
public function getCompleteDate(): Carbon
|
||||
{
|
||||
return $this->isPrimary;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return float
|
||||
*/
|
||||
public function getSequence(): float
|
||||
{
|
||||
return $this->sequence;
|
||||
return $this->complete_date ? Carbon::parse($this->complete_date) : Carbon::now();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
<?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\Processors\updatesStep;
|
||||
use App\Classes\Modules\Orders\Services\SetsOrderWarehouse;
|
||||
use App\Classes\Modules\Orders\Services\Steps\GenerateOrderSteps;
|
||||
use App\Classes\ValueObjects\Constants\HttpStatus;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class ConfirmsOrder
|
||||
{
|
||||
|
||||
use updatesStep;
|
||||
|
||||
/** @var GenerateOrderSteps */
|
||||
private $generateOrderSteps;
|
||||
|
||||
/** @var SetsOrderWarehouse */
|
||||
private $setOrderWarehouse;
|
||||
|
||||
|
||||
/**
|
||||
* ConfirmsOrder constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->setOrderWarehouse = new SetsOrderWarehouse();
|
||||
$this->generateOrderSteps = new GenerateOrderSteps();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param OrderObject $order
|
||||
* @param StepObject $step
|
||||
* @param int $warehouseId
|
||||
* @return JsonResponse
|
||||
* @throws InternalServerErrorException
|
||||
*/
|
||||
public function execute(OrderObject $order, StepObject $step, ?int $warehouseId = null){
|
||||
|
||||
try {
|
||||
|
||||
if($warehouseId){
|
||||
$order->setWarehouseId($warehouseId);
|
||||
$this->setOrderWarehouse->execute($order);
|
||||
}
|
||||
|
||||
$this->generateOrderSteps->execute($order);
|
||||
|
||||
$this->completeStep($order, $step);
|
||||
|
||||
return new JsonResponse(null, HttpStatus::RESOURCE_CREATED);
|
||||
|
||||
} catch (\Exception $exception){
|
||||
|
||||
throw new InternalServerErrorException("Failed to update order step because {$exception->getMessage()}");
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?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\Processors\updatesStep;
|
||||
use App\Classes\ValueObjects\Constants\HttpStatus;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class DeliverOrder
|
||||
{
|
||||
|
||||
use updatesStep;
|
||||
|
||||
/**
|
||||
* @param OrderObject $order
|
||||
* @param StepObject $step
|
||||
* @return JsonResponse
|
||||
* @throws InternalServerErrorException
|
||||
*/
|
||||
public function execute(OrderObject $order, StepObject $step){
|
||||
|
||||
try {
|
||||
|
||||
|
||||
$this->completeStep($order, $step);
|
||||
return new JsonResponse(null, HttpStatus::REQUEST_ACCEPTED);
|
||||
|
||||
} catch (\Exception $exception) {
|
||||
throw new InternalServerErrorException("Failed to update order step because {$exception->getMessage()}");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?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\Processors\updatesStep;
|
||||
use App\Classes\ValueObjects\Constants\HttpStatus;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class ShipOrder
|
||||
{
|
||||
|
||||
use updatesStep;
|
||||
|
||||
/**
|
||||
* @param OrderObject $order
|
||||
* @param StepObject $step
|
||||
* @return JsonResponse
|
||||
* @throws InternalServerErrorException
|
||||
*/
|
||||
public function execute(OrderObject $order, StepObject $step){
|
||||
|
||||
try {
|
||||
|
||||
$this->completeStep($order, $step);
|
||||
return new JsonResponse(null, HttpStatus::REQUEST_ACCEPTED);
|
||||
|
||||
} catch (\Exception $exception) {
|
||||
throw new InternalServerErrorException("Failed to update order step because {$exception->getMessage()}");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Processors;
|
||||
|
||||
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\StepObject;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class StepProcessMapper
|
||||
{
|
||||
|
||||
/**
|
||||
* @param $class
|
||||
* @param array $valuesArray
|
||||
* @return array
|
||||
* @throws \ReflectionException
|
||||
*/
|
||||
public function map(string $class, array $valuesArray){
|
||||
|
||||
$arguments = [];
|
||||
$reflection = new \ReflectionMethod($class, 'execute');
|
||||
$parameters = $reflection->getParameters();
|
||||
|
||||
foreach ($parameters as $parameter){
|
||||
|
||||
if(!$parameter->getClass()){
|
||||
$arguments[] = self::mapVariables($parameter->getType(), $valuesArray[Str::snake($parameter->getName())]?? null);
|
||||
continue;
|
||||
}
|
||||
|
||||
$className = $parameter->getClass()->getName();
|
||||
|
||||
if(!in_array($className, [OrderObject::class, StepObject::class, Carbon::class])){
|
||||
$arguments[] = self::mapClassObjects($className, $valuesArray);
|
||||
}
|
||||
}
|
||||
|
||||
return $arguments;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
* @param $value
|
||||
* @return bool|float|int|string
|
||||
*/
|
||||
private function mapVariables(string $type, $value){
|
||||
|
||||
if($value === null){
|
||||
return null;
|
||||
}
|
||||
|
||||
switch ($type){
|
||||
case 'float':
|
||||
return (float) $value;
|
||||
break;
|
||||
case 'int':
|
||||
case 'integer':
|
||||
return (int) $value;
|
||||
break;
|
||||
case 'bool':
|
||||
case 'boolean':
|
||||
return (bool) $value;
|
||||
break;
|
||||
default:
|
||||
return (string) $value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $class
|
||||
* @param array $valuesArray
|
||||
* @return mixed
|
||||
* @throws \ReflectionException
|
||||
*/
|
||||
private function mapClassObjects(string $class, array $valuesArray){
|
||||
|
||||
$reflection = new \ReflectionClass($class);
|
||||
$properties = $reflection->getProperties();
|
||||
|
||||
return new $class(...array_map(function ($property) use ($valuesArray) {
|
||||
return $valuesArray[Str::snake($property->getName())] ?? null;
|
||||
}, $properties));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?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\Processors\updatesStep;
|
||||
use App\Classes\ValueObjects\Constants\HttpStatus;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class WarehouseArrivalOrder
|
||||
{
|
||||
|
||||
use updatesStep;
|
||||
|
||||
/**
|
||||
* @param OrderObject $order
|
||||
* @param StepObject $step
|
||||
* @return JsonResponse
|
||||
* @throws InternalServerErrorException
|
||||
*/
|
||||
public function execute(OrderObject $order, StepObject $step){
|
||||
|
||||
try {
|
||||
|
||||
$this->completeStep($order, $step);
|
||||
return new JsonResponse(null, HttpStatus::REQUEST_ACCEPTED);
|
||||
|
||||
} catch (\Exception $exception) {
|
||||
throw new InternalServerErrorException("Failed to update order step because {$exception->getMessage()}");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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\Processors\updatesStep;
|
||||
use App\Classes\ValueObjects\Constants\HttpStatus;
|
||||
use App\Models\PackingList;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class WarehousePackOrder
|
||||
{
|
||||
|
||||
use updatesStep;
|
||||
|
||||
/**
|
||||
* @param OrderObject $order
|
||||
* @param StepObject $step
|
||||
* @return JsonResponse
|
||||
* @throws InternalServerErrorException
|
||||
*/
|
||||
public function execute(OrderObject $order, StepObject $step){
|
||||
|
||||
try {
|
||||
$packingList = PackingList::where('order_id', $order->getOrderId())->firstOrFail();
|
||||
|
||||
if($packingList->confirmed) {
|
||||
|
||||
$this->completeStep($order, $step);
|
||||
|
||||
return new JsonResponse(null, HttpStatus::REQUEST_ACCEPTED);
|
||||
}
|
||||
|
||||
return new JsonResponse(['message' => 'Failed to update order step because packing list is in complete'], HttpStatus::VALIDATION_FAILED);
|
||||
|
||||
} catch (\Exception $exception) {
|
||||
throw new InternalServerErrorException("Failed to update order step because {$exception->getMessage()}");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
<?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\ReceiveNoteObject;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\StepObject;
|
||||
use App\Classes\Modules\Orders\Services\Processors\updatesStep;
|
||||
use App\Classes\Modules\Orders\Services\ReceiveNote\CreatesReceiveNote;
|
||||
use App\Classes\ValueObjects\Constants\HttpStatus;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class WarehouseReceivesOrder
|
||||
{
|
||||
|
||||
use updatesStep;
|
||||
|
||||
/** @var CreatesReceiveNote */
|
||||
private $createsReceiveNote;
|
||||
|
||||
/**
|
||||
* WarehouseReceivesOrder constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->createsReceiveNote = new CreatesReceiveNote();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param OrderObject $order
|
||||
* @param StepObject $step
|
||||
* @param ReceiveNoteObject $object
|
||||
* @return JsonResponse
|
||||
* @throws InternalServerErrorException
|
||||
*/
|
||||
public function execute(OrderObject $order, StepObject $step, ReceiveNoteObject $object){
|
||||
try {
|
||||
|
||||
$this->createsReceiveNote->execute($order, $object);
|
||||
|
||||
$this->completeStep($order, $step);
|
||||
|
||||
return new JsonResponse(null, HttpStatus::RESOURCE_CREATED);
|
||||
|
||||
} catch (\Exception $exception){
|
||||
throw new InternalServerErrorException("Failed to update order step because {$exception->getMessage()}");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?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\Processors\updatesStep;
|
||||
use App\Classes\ValueObjects\Constants\HttpStatus;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class WarehouseUnpackingOrder
|
||||
{
|
||||
|
||||
use updatesStep;
|
||||
|
||||
/**
|
||||
* @param OrderObject $order
|
||||
* @param StepObject $step
|
||||
* @return JsonResponse
|
||||
* @throws InternalServerErrorException
|
||||
*/
|
||||
public function execute(OrderObject $order, StepObject $step){
|
||||
|
||||
try {
|
||||
|
||||
$this->completeStep($order, $step);
|
||||
return new JsonResponse(null, HttpStatus::REQUEST_ACCEPTED);
|
||||
|
||||
} catch (\Exception $exception) {
|
||||
throw new InternalServerErrorException("Failed to update order step because {$exception->getMessage()}");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -6,6 +6,7 @@ namespace App\Classes\Modules\Orders\Services;
|
||||
use App\Classes\Constants;
|
||||
use App\Classes\Modules\Accounts\Exceptions\CannotCreateOrderException;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Models\AddressBook;
|
||||
use App\Models\Order;
|
||||
|
||||
class CreatesOrder
|
||||
@@ -32,8 +33,11 @@ class CreatesOrder
|
||||
|
||||
try {
|
||||
|
||||
$address = AddressBook::where('company_id', $order->getCompanyId())
|
||||
->where('default', true)->firstOrFail();
|
||||
$this->repository->company_id = $order->getCompanyId();
|
||||
$this->repository->marking = $order->getOrderId();
|
||||
$this->repository->address_id = $address->id;
|
||||
$this->repository->current_step = Constants::ORDER_PROCESSING_STEP;
|
||||
|
||||
$this->repository->save();
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Services;
|
||||
|
||||
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
|
||||
class CreatesPackingList
|
||||
{
|
||||
|
||||
public function execute(OrderObject $order, $packingList){
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -23,27 +23,28 @@ class ListsOrderHistory
|
||||
|
||||
$history = new Collection();
|
||||
|
||||
$history->push(['date' => $createdAt->format('d-m-Y H:i'), 'description' => 'Order number has been created']);
|
||||
$history->push(['date' => $createdAt->format('d-m-Y'), 'description' => 'Order number has been created']);
|
||||
|
||||
|
||||
foreach ($orderSteps as $step){
|
||||
$completeDate = Carbon::parse($step->complete_date)->format('d-m-Y');
|
||||
switch ($step->reference_id){
|
||||
case Constants::ORDER_PROCESSING_STEP:
|
||||
if($order->warehouse_id){
|
||||
$history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => Warehouse::find($order->warehouse_id)->first()->name.' confirmed as your order\'s warehouse']);
|
||||
$history->push(['date' => $completeDate, 'description' => Warehouse::find($order->warehouse_id)->first()->name.' confirmed as your order\'s warehouse']);
|
||||
}
|
||||
break;
|
||||
case Constants::ORDER_NO_WAREHOUSE_PENDING_SUPPLIER:
|
||||
$history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => 'Your Order has been loaded into container']);
|
||||
$history->push(['date' => $completeDate, 'description' => 'Your Order has been loaded into container']);
|
||||
break;
|
||||
case Constants::ORDER_WAREHOUSE_RECEIVING_STEP:
|
||||
$warehouse = Warehouse::find($order->warehouse_id)->first();
|
||||
$history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => 'Arrived at '.$warehouse ? $warehouse->name : null.' warehouse in china on: ['.Carbon::parse($order->receiveNotes()->firstOrFail()->receive_date)->format('d-m-Y').']']);
|
||||
$history->push(['date' => $completeDate, 'description' => 'Arrived at '. $warehouse->name .' warehouse in china']);
|
||||
break;
|
||||
case Constants::ORDER_WAREHOUSE_PACKING_STEP:
|
||||
$packages = $order->packingLists()->firstOrFail()->packages()->selectRaw(DB::raw('((width/100) * (height/100) * (length/100)) * quantity as cbm, quantity'))->get();
|
||||
$history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => '['.$packages->sum('quantity').' Packages, '.number_format((float)$packages->sum('cbm'), 2, '.', '').' CBM] Your order has been loaded into container']);
|
||||
$history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => 'Invoice has been issued, waiting for shipping payment']);
|
||||
$history->push(['date' => $completeDate, 'description' => '['.$packages->sum('quantity').' Packages, '.number_format((float)$packages->sum('cbm'), 2, '.', '').' CBM] Your order has been loaded into container']);
|
||||
$history->push(['date' => $completeDate, 'description' => 'Invoice has been issued, waiting for shipping payment']);
|
||||
break;
|
||||
case Constants::ORDER_SHIPPING_STEP:
|
||||
$shippingArrangement = $order->shippingArrangement()->first();
|
||||
@@ -53,26 +54,26 @@ class ListsOrderHistory
|
||||
if($schedule->status === 2){
|
||||
$customIssue = CustomIssues::where('schedule_id', $schedule->id)->first();
|
||||
if($customIssue !== null){
|
||||
$history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => '[ETD: '.$schedule->ETD.', ETA: '.$schedule->ETA.'] Shipping Schedule failed due to: '.$customIssue->remark]);
|
||||
$history->push(['date' => $completeDate, 'description' => '[ETD: '.$schedule->ETD.', ETA: '.$schedule->ETA.'] Shipping Schedule failed due to: '.$customIssue->remark]);
|
||||
} else {
|
||||
$history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => '[ETD: '.$schedule->ETD.', ETA: '.$schedule->ETA.'] Shipping Schedule failed']);
|
||||
$history->push(['date' => $completeDate, 'description' => '[ETD: '.$schedule->ETD.', ETA: '.$schedule->ETA.'] Shipping Schedule failed']);
|
||||
}
|
||||
} else {
|
||||
$history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => '[ETD: '.$schedule->ETD.', ETA: '.$schedule->ETA.'] Your Order has been scheduled for shipping ']);
|
||||
$history->push(['date' => $completeDate, 'description' => '[ETD: '.$schedule->ETD.', ETA: '.$schedule->ETA.'] Your Order has been scheduled for shipping ']);
|
||||
}
|
||||
}
|
||||
}
|
||||
$history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => 'Arrived to Malaysian port']);
|
||||
$history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => 'Custom clearance is successful']);
|
||||
$history->push(['date' => $completeDate, 'description' => 'Arrived to Malaysian port']);
|
||||
$history->push(['date' => $completeDate, 'description' => 'Custom clearance is successful']);
|
||||
break;
|
||||
case Constants::ORDER_WAREHOUSE_ARRIVAL_STEP:
|
||||
$history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => 'Arrived at Malaysia\'s warehouse']);
|
||||
$history->push(['date' => $completeDate, 'description' => 'Arrived at Malaysia\'s warehouse']);
|
||||
break;
|
||||
case Constants::ORDER_WAREHOUSE_UNPACKING_STEP:
|
||||
$history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => 'Your Order has been unloaded and being prepared for delivery']);
|
||||
$history->push(['date' => $completeDate, 'description' => 'Your Order has been unloaded and being prepared for delivery']);
|
||||
break;
|
||||
case Constants::ORDER_DELIVERY_STEP:
|
||||
$history->push(['date' => $step->updated_at->format('d-m-Y H:i'), 'description' => 'Out for delivery']);
|
||||
$history->push(['date' => $completeDate, 'description' => 'Out for delivery']);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -85,12 +86,12 @@ class ListsOrderHistory
|
||||
if($schedule->status === 2){
|
||||
$customIssue = CustomIssues::where('schedule_id', $schedule->id)->first();
|
||||
if($customIssue !== null){
|
||||
$history->push(['date' => $schedule->updated_at->format('d-m-Y H:i'), 'description' => '[ETD: '.$schedule->ETD.', ETA: '.$schedule->ETA.'] Shipping Schedule failed due to: '.$customIssue->remark]);
|
||||
$history->push(['date' => $schedule->updated_at->format('d-m-Y'), 'description' => '[ETD: '.$schedule->ETD.', ETA: '.$schedule->ETA.'] Shipping Schedule failed due to: '.$customIssue->remark]);
|
||||
} else {
|
||||
$history->push(['date' => $schedule->updated_at->format('d-m-Y H:i'), 'description' => '[ETD: '.$schedule->ETD.', ETA: '.$schedule->ETA.'] Shipping Schedule failed']);
|
||||
$history->push(['date' => $schedule->updated_at->format('d-m-Y'), 'description' => '[ETD: '.$schedule->ETD.', ETA: '.$schedule->ETA.'] Shipping Schedule failed']);
|
||||
}
|
||||
} else {
|
||||
$history->push(['date' => $schedule->updated_at->format('d-m-Y H:i'), 'description' => '[ETD: '.$schedule->ETD.', ETA: '.$schedule->ETA.'] Your Order has been scheduled for shipping ']);
|
||||
$history->push(['date' => $schedule->updated_at->format('d-m-Y'), 'description' => '[ETD: '.$schedule->ETD.', ETA: '.$schedule->ETA.'] Your Order has been scheduled for shipping ']);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -98,7 +99,7 @@ class ListsOrderHistory
|
||||
}
|
||||
|
||||
if($complete){
|
||||
$history->push(['date' => $lastUpdate->format('d-m-Y H:i'), 'description' => 'Your Order has successfully been delivered']);
|
||||
$history->push(['date' => $lastUpdate->format('d-m-Y'), 'description' => 'Your Order has successfully been delivered']);
|
||||
}
|
||||
|
||||
return $history->reverse()->toArray();
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Services;
|
||||
|
||||
|
||||
use App\Classes\Constants;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\StepObject;
|
||||
use App\Classes\Modules\Orders\Services\Processors\ConfirmsOrder;
|
||||
use App\Classes\Modules\Orders\Services\Processors\WarehousePackingOrder;
|
||||
use App\Classes\Modules\Orders\Services\Processors\WarehouseReceivesOrder;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ProcessesOrderStep
|
||||
{
|
||||
/** @var ConfirmsOrder */
|
||||
private $confirmOrder;
|
||||
|
||||
/** @var WarehouseReceivesOrder */
|
||||
private $warehouseReceivesOrder;
|
||||
|
||||
/** @var WarehousePackingOrder */
|
||||
private $warehousePackingOrder;
|
||||
|
||||
/**
|
||||
* StepProcessor constructor.
|
||||
* @param ConfirmsOrder $confirmOrder
|
||||
* @param WarehouseReceivesOrder $warehouseReceivesOrder
|
||||
* @param WarehousePackingOrder $warehousePackingOrder
|
||||
*/
|
||||
public function __construct(ConfirmsOrder $confirmOrder, WarehouseReceivesOrder $warehouseReceivesOrder, WarehousePackingOrder $warehousePackingOrder)
|
||||
{
|
||||
$this->confirmOrder = $confirmOrder;
|
||||
$this->warehouseReceivesOrder = $warehouseReceivesOrder;
|
||||
$this->warehousePackingOrder = $warehousePackingOrder;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function execute(OrderObject $order, StepObject $step, Request $request): bool{
|
||||
switch ($step->getReferenceId()){
|
||||
case Constants::ORDER_PROCESSING_STEP:
|
||||
return $this->confirmOrder->execute($order, $request);
|
||||
case Constants::ORDER_NO_WAREHOUSE_PENDING_SUPPLIER:
|
||||
return true;
|
||||
case Constants::ORDER_WAREHOUSE_RECEIVING_STEP:
|
||||
return $this->warehouseReceivesOrder->execute($order, $request);
|
||||
case Constants::ORDER_WAREHOUSE_PACKING_STEP:
|
||||
return $this->warehousePackingOrder->execute($order);
|
||||
case Constants::ORDER_SHIPPING_STEP:
|
||||
return true;
|
||||
case Constants::ORDER_WAREHOUSE_ARRIVAL_STEP:
|
||||
return true;
|
||||
case Constants::ORDER_WAREHOUSE_UNPACKING_STEP:
|
||||
return true;
|
||||
case Constants::ORDER_DELIVERY_STEP:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,79 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Services\Processors;
|
||||
|
||||
|
||||
use App\Classes\Constants;
|
||||
use App\Classes\Modules\Accounts\Exceptions\CannotListCompanyOrdersException;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\StepObject;
|
||||
use App\Classes\Modules\Orders\Services\CreatesOrderSteps;
|
||||
use App\Classes\Modules\Orders\Services\SetsOrderWarehouse;
|
||||
use App\Classes\Modules\Orders\Steps\GenerateOrderSteps;
|
||||
use App\Classes\Modules\Steps\ModularStep;
|
||||
use App\Models\Order;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
class ConfirmsOrder
|
||||
{
|
||||
|
||||
/** @var SetsOrderWarehouse */
|
||||
private $setOrderWarehouse;
|
||||
|
||||
/** @var GenerateOrderSteps */
|
||||
private $generateOrderSteps;
|
||||
|
||||
/** @var CreatesOrderSteps */
|
||||
private $createsOrderSteps;
|
||||
|
||||
/**
|
||||
* ConfirmsOrder constructor.
|
||||
* @param SetsOrderWarehouse $setOrderWarehouse
|
||||
* @param GenerateOrderSteps $generateOrderSteps
|
||||
* @param CreatesOrderSteps $createsOrderSteps
|
||||
*/
|
||||
public function __construct(SetsOrderWarehouse $setOrderWarehouse, GenerateOrderSteps $generateOrderSteps, CreatesOrderSteps $createsOrderSteps)
|
||||
{
|
||||
$this->setOrderWarehouse = $setOrderWarehouse;
|
||||
$this->generateOrderSteps = $generateOrderSteps;
|
||||
$this->createsOrderSteps = $createsOrderSteps;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param OrderObject $order
|
||||
* @param Request $request
|
||||
* @return bool
|
||||
*/
|
||||
public function execute(OrderObject $order, Request $request){
|
||||
|
||||
try {
|
||||
|
||||
if($request->input('warehouse_id')){
|
||||
|
||||
$order->setWarehouseId($request->input('warehouse_id'));
|
||||
|
||||
$this->setOrderWarehouse->execute($order);
|
||||
}
|
||||
|
||||
$modules = new Collection();
|
||||
|
||||
$order->getWarehouseId() ? $modules->push(Constants::ORDER_MODULE_WAREHOUSE) : $modules->push(Constants::ORDER_MODULE_NO_WAREHOUSE);
|
||||
|
||||
$orderSteps = $this->generateOrderSteps->getSteps($modules->toArray())->toArray();
|
||||
|
||||
$this->createsOrderSteps->execute($order, $orderSteps);
|
||||
|
||||
return true;
|
||||
|
||||
} catch (\Exception $exception){
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Services\Processors;
|
||||
|
||||
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Models\PackingList;
|
||||
|
||||
class WarehousePackingOrder
|
||||
{
|
||||
/** @var PackingList */
|
||||
private $repository;
|
||||
|
||||
/**
|
||||
* WarehousePackingOrder constructor.
|
||||
* @param PackingList $repository
|
||||
*/
|
||||
public function __construct(PackingList $repository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
public function execute(OrderObject $order){
|
||||
$packingList = $this->repository->where('order_id', $order->getOrderId())->firstOrFail();
|
||||
if($packingList->confirmed) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Services\Processors;
|
||||
|
||||
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\ReceiveNoteObject;
|
||||
use App\Classes\Modules\Orders\Services\CreatesReceiveNote;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class WarehouseReceivesOrder
|
||||
{
|
||||
|
||||
/** @var CreatesReceiveNote */
|
||||
private $createsReceiveNote;
|
||||
|
||||
/**
|
||||
* WarehouseReceiveOrder constructor.
|
||||
* @param CreatesReceiveNote $createsReceiveNote
|
||||
*/
|
||||
public function __construct(CreatesReceiveNote $createsReceiveNote)
|
||||
{
|
||||
$this->createsReceiveNote = $createsReceiveNote;
|
||||
}
|
||||
|
||||
|
||||
public function execute(OrderObject $order, Request $request){
|
||||
$object = new ReceiveNoteObject($request->input('tracking_no'), $request->input('receive_date'));
|
||||
$this->createsReceiveNote->execute($order, $object);
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
+3
-9
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Services;
|
||||
namespace App\Classes\Modules\Orders\Services\ReceiveNote;
|
||||
|
||||
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
@@ -13,21 +13,15 @@ class CreatesReceiveNote
|
||||
/** @var ReceiveNote */
|
||||
private $repository;
|
||||
|
||||
/**
|
||||
* CreatesReceiveNote constructor.
|
||||
* @param ReceiveNote $repository
|
||||
*/
|
||||
public function __construct(ReceiveNote $repository)
|
||||
public function __construct()
|
||||
{
|
||||
$this->repository = $repository;
|
||||
$this->repository = new ReceiveNote();
|
||||
}
|
||||
|
||||
|
||||
public function execute(OrderObject $order , ReceiveNoteObject $receiveNote){
|
||||
|
||||
$this->repository->order_id = $order->getOrderId();
|
||||
$this->repository->tracking_no = $receiveNote->getTrackingNumber();
|
||||
$this->repository->receive_date = $receiveNote->getDate();
|
||||
|
||||
$this->repository->save();
|
||||
|
||||
@@ -15,11 +15,10 @@ class SetsOrderWarehouse
|
||||
|
||||
/**
|
||||
* SetsOrderWarehouse constructor.
|
||||
* @param Order $repository
|
||||
*/
|
||||
public function __construct(Order $repository)
|
||||
public function __construct()
|
||||
{
|
||||
$this->repository = $repository;
|
||||
$this->repository = new Order();
|
||||
}
|
||||
|
||||
|
||||
|
||||
+3
-15
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Services;
|
||||
namespace App\Classes\Modules\Orders\Services\Steps;
|
||||
|
||||
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
@@ -9,19 +9,6 @@ use App\Models\Order;
|
||||
|
||||
class CompletesOrderStep {
|
||||
|
||||
/** @var Order */
|
||||
private $repository;
|
||||
|
||||
/**
|
||||
* CompletesOrderStep constructor.
|
||||
* @param Order $repository
|
||||
*/
|
||||
public function __construct(Order $repository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param OrderObject $order
|
||||
* @param StepObject $step
|
||||
@@ -29,11 +16,12 @@ class CompletesOrderStep {
|
||||
public function execute(OrderObject $order, StepObject $step){
|
||||
|
||||
/** @var Order $repository */
|
||||
$repository = $this->repository->findOrFail($order->getOrderId());
|
||||
$repository = Order::findOrFail($order->getOrderId());
|
||||
|
||||
$orderStep = $repository->orderSteps()->where('reference_id', $step->getReferenceId())->firstOrFail();
|
||||
|
||||
$orderStep->complete = 1;
|
||||
$orderStep->complete_date = $step->getCompleteDate();
|
||||
|
||||
$orderStep->save();
|
||||
|
||||
+3
-4
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Services;
|
||||
namespace App\Classes\Modules\Orders\Services\Steps;
|
||||
|
||||
|
||||
use App\Classes\Modules\Accounts\Exceptions\CannotCreateOrderStepsException;
|
||||
@@ -15,11 +15,10 @@ class CreatesOrderSteps
|
||||
|
||||
/**
|
||||
* CompletesOrderStep constructor.
|
||||
* @param Order $repository
|
||||
*/
|
||||
public function __construct(Order $repository)
|
||||
public function __construct()
|
||||
{
|
||||
$this->repository = $repository;
|
||||
$this->repository = new Order();
|
||||
}
|
||||
|
||||
/**
|
||||
+30
-4
@@ -1,28 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Steps;
|
||||
namespace App\Classes\Modules\Orders\Services\Steps;
|
||||
|
||||
|
||||
use App\Classes\Constants;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Classes\Objects\Orders\OrderStepObject;
|
||||
use App\Models\ModularStep;
|
||||
use App\Models\Order;
|
||||
use App\Models\PrimaryStep;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
class GenerateOrderSteps
|
||||
{
|
||||
/**
|
||||
* @var Order
|
||||
*/
|
||||
private $repository;
|
||||
|
||||
/** @var CreatesOrderSteps */
|
||||
private $createsOrderSteps;
|
||||
|
||||
|
||||
/** @var Collection */
|
||||
protected $steps;
|
||||
|
||||
/**
|
||||
* GenerateOrderSteps constructor.
|
||||
* @param Collection $steps
|
||||
*/
|
||||
public function __construct(Collection $steps)
|
||||
public function __construct()
|
||||
{
|
||||
$this->steps = $steps;
|
||||
$this->repository = new Order();
|
||||
$this->steps = new Collection();
|
||||
$this->createsOrderSteps = new CreatesOrderSteps();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param OrderObject $order
|
||||
* @throws \App\Classes\Modules\Accounts\Exceptions\CannotCreateOrderStepsException
|
||||
*/
|
||||
public function execute(OrderObject $order){
|
||||
|
||||
$modules = new Collection();
|
||||
|
||||
$order->getWarehouseId() ? $modules->push(Constants::ORDER_MODULE_WAREHOUSE) : $modules->push(Constants::ORDER_MODULE_NO_WAREHOUSE);
|
||||
|
||||
$orderSteps = $this->getSteps([$this->repository->findOrFail($order->getOrderId())->pluck('warehouse_id') ? Constants::ORDER_MODULE_WAREHOUSE : Constants::ORDER_MODULE_NO_WAREHOUSE]);
|
||||
|
||||
$this->createsOrderSteps->execute($order, $orderSteps->toArray());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $modules
|
||||
+3
-22
@@ -1,7 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Services;
|
||||
|
||||
namespace App\Classes\Modules\Orders\Services\Steps;
|
||||
|
||||
use App\Classes\Constants;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
@@ -12,32 +11,14 @@ use App\Models\OrderStep;
|
||||
class UpdatesOrderCurrentStep
|
||||
{
|
||||
|
||||
/** @var Order */
|
||||
private $order;
|
||||
|
||||
/** @var OrderStep */
|
||||
private $orderStep;
|
||||
|
||||
/**
|
||||
* UpdatesOrderCurrentStep constructor.
|
||||
* @param Order $order
|
||||
* @param OrderStep $orderStep
|
||||
*/
|
||||
public function __construct(Order $order, OrderStep $orderStep)
|
||||
{
|
||||
$this->order = $order;
|
||||
$this->orderStep = $orderStep;
|
||||
}
|
||||
|
||||
|
||||
public function execute(OrderObject $order, StepObject $step){
|
||||
|
||||
$orderStep = $this->orderStep->where('order_id', $order->getOrderId())
|
||||
$orderStep = OrderStep::where('order_id', $order->getOrderId())
|
||||
->where('complete', 0)->orderBy('sequence')->first();
|
||||
|
||||
$nextStep = $orderStep ? $orderStep->reference_id : null;
|
||||
|
||||
$repository = $this->order->findOrFail($order->getOrderId());
|
||||
$repository = order::findOrFail($order->getOrderId());
|
||||
$repository->current_step = $nextStep;
|
||||
|
||||
if($nextStep === null && $step !== Constants::ORDER_PROCESSING_STEP){
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Services\Steps;
|
||||
|
||||
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\StepObject;
|
||||
use App\Classes\Modules\Orders\Processors\StepProcessMapper;
|
||||
use App\Classes\ValueObjects\Constants\OrderSteps;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class UpdatesOrderSteps
|
||||
{
|
||||
/**
|
||||
* @param OrderObject $order
|
||||
* @param StepObject $step
|
||||
* @param Request $request
|
||||
* @return mixed
|
||||
* @throws \ReflectionException
|
||||
*/
|
||||
public function execute(OrderObject $order, StepObject $step, Request $request) {
|
||||
|
||||
$class = OrderSteps::STEP_PROCESSOR[$step->getReferenceId()];
|
||||
$arguments = (new StepProcessMapper())->map($class, $request->all());
|
||||
|
||||
return (new $class())->execute($order, $step,...$arguments);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Services;
|
||||
|
||||
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\StepObject;
|
||||
use App\Classes\ValueObjects\Constants\HttpStatus;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class UpdatesOrderSteps
|
||||
{
|
||||
|
||||
|
||||
/** @var ProcessesOrderStep */
|
||||
private $processesOrderStep;
|
||||
|
||||
/** @var CompletesOrderStep */
|
||||
private $completesOrderStep;
|
||||
|
||||
/** @var UpdatesOrderCurrentStep */
|
||||
private $updatesOrderCurrentStep;
|
||||
|
||||
/**
|
||||
* UpdatesOrderSteps constructor.
|
||||
* @param ProcessesOrderStep $processesOrderStep
|
||||
* @param CompletesOrderStep $completesOrderStep
|
||||
* @param UpdatesOrderCurrentStep $updatesOrderCurrentStep
|
||||
*/
|
||||
public function __construct(ProcessesOrderStep $processesOrderStep, CompletesOrderStep $completesOrderStep, UpdatesOrderCurrentStep $updatesOrderCurrentStep)
|
||||
{
|
||||
$this->processesOrderStep = $processesOrderStep;
|
||||
$this->completesOrderStep = $completesOrderStep;
|
||||
$this->updatesOrderCurrentStep = $updatesOrderCurrentStep;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param OrderObject $order
|
||||
* @param StepObject $step
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function execute(OrderObject $order, StepObject $step, Request $request) {
|
||||
|
||||
|
||||
if($this->processesOrderStep->execute($order, $step, $request)){
|
||||
$this->completesOrderStep->execute($order, $step);
|
||||
$this->updatesOrderCurrentStep->execute($order, $step);
|
||||
}
|
||||
|
||||
return new JsonResponse(null, HttpStatus::OK);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,76 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Steps;
|
||||
|
||||
|
||||
use App\Models\Order;
|
||||
use App\Models\OrderStep;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
abstract class AbstractOrderStep
|
||||
{
|
||||
/** @var string */
|
||||
protected $orderId;
|
||||
|
||||
/** @var string */
|
||||
protected $currentStep;
|
||||
|
||||
/** @var null|string */
|
||||
protected $nextStep;
|
||||
|
||||
/**
|
||||
* AbstractOrderStep constructor.
|
||||
* @param string $orderId
|
||||
* @param Request|null $request
|
||||
*/
|
||||
public function __construct(string $orderId, ?Request $request = null)
|
||||
{
|
||||
$this->orderId = $orderId;
|
||||
$this->currentStep = $this->getCurrentStep();
|
||||
$this->currentStep = $this->getCurrentStep();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getOrderId(): string
|
||||
{
|
||||
return $this->orderId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getCurrentStep(): string
|
||||
{
|
||||
return Order::findOrFail($this->getOrderId())->current_step;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $currentStep
|
||||
*/
|
||||
public function setCurrentStep(string $currentStep): void
|
||||
{
|
||||
$this->currentStep = $currentStep;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return null|string
|
||||
*/
|
||||
public function getNextStep(): ?string
|
||||
{
|
||||
$nextStep = OrderStep::where('order_id', $this->getOrderId())
|
||||
->where('complete', 0)->orderBy('sequence')->first();
|
||||
return $nextStep ? $nextStep->reference_id : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param null|string $nextStep
|
||||
*/
|
||||
public function setNextStep(?string $nextStep): void
|
||||
{
|
||||
$this->nextStep = $nextStep;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Steps;
|
||||
|
||||
use App\Classes\Interfaces\Order\Steps\OrderStep as OrderStepInterface;
|
||||
|
||||
class OrderStep implements OrderStepInterface
|
||||
{
|
||||
/** @var bool */
|
||||
protected $isPrimary;
|
||||
|
||||
/** @var string */
|
||||
protected $referenceId;
|
||||
|
||||
/** @var float */
|
||||
protected $sequence;
|
||||
|
||||
/**
|
||||
* AbstractOrderStep constructor.
|
||||
* @param bool $isPrimary
|
||||
* @param string $referenceId
|
||||
* @param float $sequence
|
||||
*/
|
||||
public function __construct(bool $isPrimary, string $referenceId, float $sequence)
|
||||
{
|
||||
$this->isPrimary = $isPrimary;
|
||||
$this->referenceId = $referenceId;
|
||||
$this->sequence = $sequence;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isPrimary(): bool
|
||||
{
|
||||
return $this->isPrimary;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getReferenceId(): string
|
||||
{
|
||||
return $this->referenceId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return float
|
||||
*/
|
||||
public function getSequence(): float
|
||||
{
|
||||
return $this->sequence;
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Steps;
|
||||
|
||||
|
||||
use App\Traits\OrderStepTrait;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class OrderStepUpdate extends AbstractOrderStep
|
||||
{
|
||||
|
||||
use OrderStepTrait;
|
||||
|
||||
public function execute(?Request $request){
|
||||
if($this->ProcessStep($request)){
|
||||
return $this->CompleteOrderCurrentStep();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: accountadmin2
|
||||
* Date: 11/27/2018
|
||||
* Time: 12:25 PM
|
||||
*/
|
||||
|
||||
namespace App\Classes\Modules\Orders\Steps;
|
||||
|
||||
|
||||
class ProcessStep
|
||||
{
|
||||
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors;
|
||||
|
||||
|
||||
use App\Classes\Interfaces\Order\Steps\OrderRequirement;
|
||||
use App\Models\OrderStep;
|
||||
|
||||
abstract class AbstractOrderRequirement implements OrderRequirement
|
||||
{
|
||||
/** @var string */
|
||||
protected $orderId;
|
||||
|
||||
/** @var string */
|
||||
protected $referenceId;
|
||||
|
||||
/**
|
||||
* AbstractOrderRequirement constructor.
|
||||
* @param string $orderId
|
||||
* @param string $referenceId
|
||||
*/
|
||||
public function __construct(string $orderId, string $referenceId)
|
||||
{
|
||||
$this->orderId = $orderId;
|
||||
$this->referenceId = $referenceId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getOrderId(): string
|
||||
{
|
||||
return $this->orderId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getReferenceId(): string
|
||||
{
|
||||
return $this->referenceId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function completeStep(): bool {
|
||||
|
||||
$orderStep = OrderStep::where('order_id', $this->getOrderId())
|
||||
->where('reference_id', $this->getReferenceId())->firstOrFail();
|
||||
|
||||
$orderStep->complete = 1;
|
||||
|
||||
if($orderStep->save()){
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
<?php
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors;
|
||||
|
||||
|
||||
class Delivery extends AbstractOrderRequirement
|
||||
{
|
||||
public function execute(): bool {
|
||||
return $this->completeStep();
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
<?php
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors;
|
||||
|
||||
|
||||
class OrderProcessing extends AbstractOrderRequirement
|
||||
{
|
||||
public function execute(): bool {
|
||||
return $this->completeStep();
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
<?php
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors;
|
||||
|
||||
|
||||
class Shipping extends AbstractOrderRequirement
|
||||
{
|
||||
public function execute(): bool {
|
||||
return $this->completeStep();
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
<?php
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors;
|
||||
|
||||
|
||||
class SupplierPacking extends AbstractOrderRequirement
|
||||
{
|
||||
public function execute(): bool {
|
||||
return $this->completeStep();
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
<?php
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors\Validation;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
class ReceiveNoteValidation
|
||||
{
|
||||
public function execute(Request $request): bool {
|
||||
|
||||
return !(Validator::make($request->all(), [
|
||||
'tracking_no' => 'required',
|
||||
'receive_date' => 'required|date'
|
||||
]))->fails();
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
<?php
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors;
|
||||
|
||||
|
||||
class WarehouseArrival extends AbstractOrderRequirement
|
||||
{
|
||||
public function execute(): bool {
|
||||
return $this->completeStep();
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
<?php
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors;
|
||||
|
||||
|
||||
use App\Models\PackingList;
|
||||
|
||||
class WarehousePacking extends AbstractOrderRequirement
|
||||
{
|
||||
public function execute(): bool {
|
||||
|
||||
$packingList = PackingList::where('order_id', $this->getOrderId())->first();
|
||||
if($packingList){
|
||||
if($packingList->confirmed){
|
||||
return $this->completeStep();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors;
|
||||
|
||||
use App\Classes\Modules\Orders\ReceiveNotes\CreateReceiveNote;
|
||||
use App\Classes\Modules\Orders\Steps\Processors\Validation\ReceiveNoteValidation;
|
||||
use App\Classes\Objects\Orders\ReceiveNotes\ReceiveNoteObject;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class WarehouseReceive extends AbstractOrderRequirement
|
||||
{
|
||||
public function execute(Request $request): bool {
|
||||
|
||||
if((new ReceiveNoteValidation())->execute($request)){
|
||||
|
||||
if((new CreateReceiveNote())->execute(new ReceiveNoteObject($this->getOrderId(), $request))){
|
||||
return $this->completeStep();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
<?php
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors;
|
||||
|
||||
|
||||
class WarehouseUnpacking extends AbstractOrderRequirement
|
||||
{
|
||||
public function execute(): bool {
|
||||
return $this->completeStep();
|
||||
}
|
||||
}
|
||||
@@ -1,64 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Steps\Requirements;
|
||||
|
||||
|
||||
use App\Classes\Constants;
|
||||
use App\Classes\Modules\Orders\Steps\Processors\Delivery;
|
||||
use App\Classes\Modules\Orders\Steps\Processors\OrderProcessing;
|
||||
use App\Classes\Modules\Orders\Steps\Processors\Shipping;
|
||||
use App\Classes\Modules\Orders\Steps\Processors\SupplierPacking;
|
||||
use App\Classes\Modules\Orders\Steps\Processors\WarehouseArrival;
|
||||
use App\Classes\Modules\Orders\Steps\Processors\WarehousePacking;
|
||||
use App\Classes\Modules\Orders\Steps\Processors\WarehouseReceive;
|
||||
use App\Classes\Modules\Orders\Steps\Processors\WarehouseUnpacking;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class StepManager
|
||||
{
|
||||
/** @var string */
|
||||
protected $orderId;
|
||||
|
||||
/** @var string */
|
||||
protected $step;
|
||||
|
||||
/** @var null|Request */
|
||||
protected $request;
|
||||
|
||||
/**
|
||||
* StepManager constructor.
|
||||
* @param string $orderId
|
||||
* @param string $step
|
||||
* @param Request|null $request
|
||||
*/
|
||||
public function __construct(string $orderId, string $step, ?Request $request)
|
||||
{
|
||||
$this->orderId = $orderId;
|
||||
$this->step = $step;
|
||||
$this->request = $request;
|
||||
}
|
||||
|
||||
|
||||
public function execute(): bool{
|
||||
switch ($this->step){
|
||||
case Constants::ORDER_PROCESSING_STEP:
|
||||
return (new OrderProcessing($this->orderId, $this->step))->execute();
|
||||
case Constants::ORDER_WAREHOUSE_RECEIVING_STEP:
|
||||
return (new WarehouseReceive($this->orderId, $this->step))->execute($this->request);
|
||||
case Constants::ORDER_WAREHOUSE_PACKING_STEP:
|
||||
return (new WarehousePacking($this->orderId, $this->step))->execute($this->request);
|
||||
case Constants::ORDER_NO_WAREHOUSE_PENDING_SUPPLIER:
|
||||
return (new SupplierPacking($this->orderId, $this->step))->execute();
|
||||
case Constants::ORDER_SHIPPING_STEP:
|
||||
return (new Shipping($this->orderId, $this->step))->execute();
|
||||
case Constants::ORDER_WAREHOUSE_ARRIVAL_STEP:
|
||||
return (new WarehouseArrival($this->orderId, $this->step))->execute();
|
||||
case Constants::ORDER_WAREHOUSE_UNPACKING_STEP:
|
||||
return (new WarehouseUnpacking($this->orderId, $this->step))->execute();
|
||||
case Constants::ORDER_DELIVERY_STEP:
|
||||
return (new Delivery($this->orderId, $this->step))->execute();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,6 +4,13 @@ namespace App\Classes\ValueObjects\Constants;
|
||||
|
||||
|
||||
use App\Classes\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
|
||||
{
|
||||
@@ -52,4 +59,14 @@ class OrderSteps
|
||||
Constants::ORDER_DELIVERY_STEP
|
||||
];
|
||||
|
||||
public const STEP_PROCESSOR = [
|
||||
Constants::ORDER_PROCESSING_STEP => ConfirmsOrder::class,
|
||||
Constants::ORDER_WAREHOUSE_RECEIVING_STEP => WarehouseReceivesOrder::class,
|
||||
Constants::ORDER_WAREHOUSE_PACKING_STEP => WarehousePackOrder::class,
|
||||
Constants::ORDER_SHIPPING_STEP => ShipOrder::class,
|
||||
Constants::ORDER_WAREHOUSE_ARRIVAL_STEP => WarehouseArrivalOrder::class,
|
||||
Constants::ORDER_WAREHOUSE_UNPACKING_STEP => WarehouseUnpackingOrder::class,
|
||||
Constants::ORDER_DELIVERY_STEP => DeliverOrder::class,
|
||||
];
|
||||
|
||||
}
|
||||
@@ -18,8 +18,8 @@ class CompanyController extends Controller
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
*/
|
||||
public function index() {
|
||||
return (new ListCompanies())->execute();
|
||||
public function index(?bool $pagination = true) {
|
||||
return (new ListCompanies())->execute($pagination);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Orders;
|
||||
|
||||
use App\Classes\Modules\ControllersLogic\Orders\UpdateOrderStepLogic;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class BulkReceiveNotesController
|
||||
{
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param UpdateOrderStepLogic $logic
|
||||
* @return void
|
||||
* @throws \ReflectionException
|
||||
*/
|
||||
public function create(Request $request, UpdateOrderStepLogic $logic){
|
||||
$receiveDate = $request->input('receive_date');
|
||||
foreach ($request->input('orders') as $note){
|
||||
$requestObject = new Request();
|
||||
$requestObject->merge(['tracking_number' => $note['tracking_number'], 'receive_date' => $receiveDate]);
|
||||
$logic->execute($note['id'], $requestObject);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,10 +1,4 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: user
|
||||
* Date: 22/03/2019
|
||||
* Time: 10:00 AM
|
||||
*/
|
||||
|
||||
namespace App\Http\Controllers\Orders;
|
||||
|
||||
@@ -14,7 +8,6 @@ use App\Classes\Modules\ControllersLogic\Orders\ListOrderLogic;
|
||||
class ListOrderController
|
||||
{
|
||||
public function list(String $category,ListOrderLogic $logic){
|
||||
|
||||
return $logic->execute($category);
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ use App\Classes\Modules\Orders\DataTransferObjects\PackageObject;
|
||||
use App\Classes\Modules\Orders\DataTransferObjects\PackingListObject;
|
||||
use App\Models\CustomIssues;
|
||||
use App\Models\Order;
|
||||
use App\Models\OrderStep;
|
||||
use App\Models\PackingList;
|
||||
use App\Models\ShippingArrangement;
|
||||
use Carbon\Carbon;
|
||||
@@ -19,6 +18,11 @@ use App\Http\Resources\Order as OrderResource;
|
||||
class OrderController extends Controller
|
||||
{
|
||||
|
||||
public function show($id){
|
||||
$order = Order::findOrFail($id)->first();
|
||||
return new OrderResource($order);
|
||||
}
|
||||
|
||||
public function listCompanyOrders(String $companyId){
|
||||
$orders = Order::where('company_id', $companyId)->orderBy('created_at', 'DESC')
|
||||
->paginate(100);
|
||||
@@ -31,11 +35,6 @@ class OrderController extends Controller
|
||||
return OrderResource::collection($orders);
|
||||
}
|
||||
|
||||
public function updateStep(String $orderId, Request $request, UpdateOrderStepLogic $logic){
|
||||
return $logic->execute($orderId, $request);
|
||||
// return (new UpdateOrderStepLogic())->execute($orderId, $request) ? 200 : 408;
|
||||
}
|
||||
|
||||
public function updatePackingList(String $orderId, Request $request){
|
||||
$packingList = PackingList::updateOrCreate(['order_id' => $orderId],['reference_no' => $request->input('reference_no')]);
|
||||
$confirmed = true;
|
||||
|
||||
@@ -9,12 +9,13 @@ class UpdateOrderStepController
|
||||
{
|
||||
|
||||
/**
|
||||
* @param int $companyId
|
||||
* @param String $orderId
|
||||
* @param Request $request
|
||||
* @param UpdateOrderStepLogic $logic
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
* @throws \ReflectionException
|
||||
*/
|
||||
public function create(int $companyId, Request $request, UpdateOrderStepLogic $logic){
|
||||
return $logic->execute($companyId, $request);
|
||||
public function update(String $orderId, Request $request, UpdateOrderStepLogic $logic){
|
||||
return $logic->execute($orderId, $request);
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ use App\Classes\Modules\Orders\Services\ListsOrderHistory;
|
||||
use App\Classes\Modules\Steps\GetStep;
|
||||
use App\Classes\Modules\Steps\StepAttachments;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use App\Models\AddressBook;
|
||||
|
||||
class Order extends JsonResource
|
||||
{
|
||||
@@ -17,6 +18,7 @@ class Order extends JsonResource
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$addressBook = AddressBook::find($this->address_id)->first();
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'company_id' => $this->company_id,
|
||||
@@ -24,6 +26,7 @@ class Order extends JsonResource
|
||||
'forwarder_id' => $this->forwarder_id,
|
||||
'supplier_id' => $this->supplier_id,
|
||||
'warehouse_id' => $this->warehouse_id,
|
||||
'address' => new \App\Http\Resources\AddressBook($addressBook),
|
||||
'current_step' => $this->current_step,
|
||||
'complete' => (float)$this->complete,
|
||||
'date' => $this->created_at->format('d/m/Y'),
|
||||
|
||||
@@ -12,7 +12,7 @@ class Order extends AbstractModel
|
||||
protected $table = 'orders';
|
||||
|
||||
protected $fillable = [
|
||||
'company_id', 'marking', 'forwarder_id', 'supplier_id', 'warehouse_id', 'current_step', 'complete'
|
||||
'company_id', 'marking', 'forwarder_id', 'supplier_id', 'warehouse_id', 'address_id', 'current_step', 'complete'
|
||||
];
|
||||
|
||||
public function orderSteps()
|
||||
|
||||
@@ -8,7 +8,7 @@ class OrderStep extends AbstractModel
|
||||
protected $table = 'order_steps';
|
||||
|
||||
protected $fillable = [
|
||||
'order_id', 'reference_id', 'primary', 'sequence', 'complete'
|
||||
'order_id', 'reference_id', 'primary', 'sequence', 'complete', 'complete_date'
|
||||
];
|
||||
|
||||
public function order()
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Services\Processors;
|
||||
|
||||
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\Modules\Orders\Services\Steps\UpdatesOrderCurrentStep;
|
||||
|
||||
trait updatesStep
|
||||
{
|
||||
|
||||
public function completeStep(OrderObject $order, StepObject $step){
|
||||
$this->CompleteOrderStep($order, $step);
|
||||
$this->updatesOrderCurrentStep($order, $step);
|
||||
}
|
||||
|
||||
public function CompleteOrderStep(OrderObject $order, StepObject $step){
|
||||
(new CompletesOrderStep())->execute($order, $step);
|
||||
}
|
||||
|
||||
public function updatesOrderCurrentStep(OrderObject $order, StepObject $step){
|
||||
(new UpdatesOrderCurrentStep())->execute($order, $step);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -15,9 +15,10 @@ class CreateCompaniesTable extends Migration
|
||||
{
|
||||
Schema::create('companies', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->string('name', 50);
|
||||
$table->string('name', 80);
|
||||
$table->string('marking', 80)->unique();
|
||||
$table->string('email', 80)->nullable();
|
||||
$table->string('wechat_id', 80)->nullable();
|
||||
$table->string('registration_no', 25)->nullable();
|
||||
$table->string('tax_no', 25)->nullable();
|
||||
$table->double('rate')->default(0);
|
||||
|
||||
@@ -20,6 +20,7 @@ class CreateOrdersTable extends Migration
|
||||
$table->string('forwarder_id')->nullable();
|
||||
$table->string('supplier_id')->nullable();
|
||||
$table->string('warehouse_id')->nullable();
|
||||
$table->string('address_id');
|
||||
$table->string('current_step')->nullable();
|
||||
$table->integer('complete')->default(0);
|
||||
$table->softDeletes();
|
||||
|
||||
@@ -20,6 +20,7 @@ class CreateOrderStepsTable extends Migration
|
||||
$table->integer('primary')->default(0);
|
||||
$table->decimal('sequence');
|
||||
$table->integer('complete')->default(0);
|
||||
$table->date('complete_date')->nullable();
|
||||
$table->timestamps();
|
||||
|
||||
$table->foreign('order_id')->references('id')->on('orders');
|
||||
|
||||
@@ -17,7 +17,6 @@ class CreateReceiveNotesTable extends Migration
|
||||
$table->increments('id');
|
||||
$table->integer('order_id')->unsigned()->index();
|
||||
$table->string('tracking_no');
|
||||
$table->date('receive_date');
|
||||
$table->timestamps();
|
||||
|
||||
$table->foreign('order_id')->references('id')->on('orders');
|
||||
|
||||
@@ -15,9 +15,9 @@ class DatabaseSeeder extends Seeder
|
||||
$this->call(AddressBookTableSeeder::class);
|
||||
$this->call(ContactsTableSeeder::class);
|
||||
$this->call(WarehousesTableSeeder::class);
|
||||
$this->call(OrdersTableSeeder::class);
|
||||
$this->call(PackingListsTableSeeder::class);
|
||||
$this->call(PackagesTableSeeder::class);
|
||||
// $this->call(OrdersTableSeeder::class);
|
||||
// $this->call(PackingListsTableSeeder::class);
|
||||
// $this->call(PackagesTableSeeder::class);
|
||||
}
|
||||
|
||||
$this->call(PrimaryStepsTableSeeder::class);
|
||||
|
||||
Vendored
+1
@@ -1,4 +1,5 @@
|
||||
$(function() {
|
||||
$('.page-container').scrollbar().addClass('scrollbar-macosx');
|
||||
$.fn.selectListTrigger = function(eventName) {
|
||||
return this.each(function() {
|
||||
var el = $(this).get(0);
|
||||
|
||||
+38
@@ -2006,6 +2006,44 @@ padding-right: 30px;
|
||||
z-index: 1050 !important;
|
||||
}
|
||||
|
||||
.select2-container--open .select2-dropdown {
|
||||
border-radius: 0px !important;
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
.select2-dropdown {
|
||||
box-shadow: none !important;
|
||||
&.select2-dark {
|
||||
background-color: $color-master !important;
|
||||
.select2-search--dropdown .select2-search__field {
|
||||
background-color: $color-master-dark !important;
|
||||
color: $color-master-lightest;
|
||||
}
|
||||
.select2-results {
|
||||
li {
|
||||
color: $color-master-lighter !important;
|
||||
&.select2-results__option--highlighted {
|
||||
color: $color-white !important;
|
||||
background-color: $color-master-darkest !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.select2-dark {
|
||||
.select2-container--default {
|
||||
.select2-selection__arrow b {
|
||||
border-color: #fff transparent transparent transparent !important;
|
||||
}
|
||||
}
|
||||
.select2-container--open {
|
||||
.select2-selection__arrow b {
|
||||
border-color: transparent transparent #fff transparent !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.side-tab {
|
||||
.tab-container {
|
||||
border-left: solid 3px transparent !important;
|
||||
|
||||
Vendored
+20
-10
@@ -53,7 +53,8 @@ Vue.component('contact-list-component', require('./components/contact/list/Conta
|
||||
|
||||
Vue.component('warehouses-list-component', require('./components/warehouse/lists/WarehousesListComponenet.vue'));
|
||||
|
||||
Vue.component('orders-list-component', require('./components/order/lists/OrdersListComponenet.vue'));
|
||||
Vue.component('orders-list-component', require('./components/order/lists/OrdersListComponent.vue'));
|
||||
Vue.component('orders-select-list-component', require('./components/order/lists/OrdersSelectListComponent.vue'));
|
||||
|
||||
//elements
|
||||
|
||||
@@ -76,16 +77,23 @@ Vue.component('warehouse-summary-component', require('./components/warehouse/ele
|
||||
|
||||
Vue.component('order-page-component', require('./components/order/elements/OrdersPageComponent.vue'));
|
||||
|
||||
Vue.component('order-select-component', require('./components/order/elements/OrderSelectComponent.vue'));
|
||||
|
||||
Vue.component('order-component', require('./components/order/elements/OrderComponenet.vue'));
|
||||
Vue.component('confirm-order-component', require('./components/order/elements/ConfirmOrderComponent.vue'));
|
||||
Vue.component('receive-step-component', require('./components/order/elements/ReceiveStepComponenet.vue'));
|
||||
Vue.component('packing-step-component', require('./components/order/elements/PackingStepComponenet.vue'));
|
||||
Vue.component('supplier-packing-step-component', require('./components/order/elements/SupplierPackingStepComponenet.vue'));
|
||||
Vue.component('shipping-step-component', require('./components/order/elements/ShippingStepComponenet.vue'));
|
||||
Vue.component('arrival-step-component', require('./components/order/elements/ArrivalStepComponenet.vue'));
|
||||
Vue.component('unpacking-step-component', require('./components/order/elements/UnpackingStepComponenet.vue'));
|
||||
Vue.component('delivery-step-component', require('./components/order/elements/DeliveryStepComponenet.vue'));
|
||||
Vue.component('complete-order-component', require('./components/order/elements/CompleteOrderComponenet.vue'));
|
||||
Vue.component('order-profile-component', require('./components/order/elements/OrdersProfileComponent.vue'));
|
||||
Vue.component('order-header-component', require('./components/order/elements/OrderHeaderComponenet.vue'));
|
||||
Vue.component('order-action-component', require('./components/order/elements/OrderActionComponenet.vue'));
|
||||
Vue.component('order-history-component', require('./components/order/elements/OrderHistoryComponenet.vue'));
|
||||
|
||||
|
||||
Vue.component('confirm-order-component', require('./components/order/elements/steps/ConfirmOrderComponent.vue'));
|
||||
Vue.component('receive-step-component', require('./components/order/elements/steps/ReceiveStepComponenet.vue'));
|
||||
Vue.component('packing-step-component', require('./components/order/elements/steps/PackingStepComponenet.vue'));
|
||||
Vue.component('supplier-packing-step-component', require('./components/order/elements/steps/SupplierPackingStepComponenet.vue'));
|
||||
Vue.component('shipping-step-component', require('./components/order/elements/steps/ShippingStepComponenet.vue'));
|
||||
Vue.component('arrival-step-component', require('./components/order/elements/steps/ArrivalStepComponenet.vue'));
|
||||
Vue.component('unpacking-step-component', require('./components/order/elements/steps/UnpackingStepComponenet.vue'));
|
||||
Vue.component('delivery-step-component', require('./components/order/elements/steps/DeliveryStepComponenet.vue'));
|
||||
|
||||
//forms
|
||||
Vue.component('invite-account-form-component', require('./components/account/forms/InviteAccountFormComponent.vue'));
|
||||
@@ -98,6 +106,8 @@ Vue.component('contact-form-component', require('./components/contact/forms/Cont
|
||||
Vue.component('warehouse-form-component', require('./components/warehouse/forms/WarehouseFormComponent.vue'));
|
||||
|
||||
Vue.component('order-form-component', require('./components/order/forms/OrderFormComponent.vue'));
|
||||
Vue.component('addon-order-form-component', require('./components/order/forms/AddonOrderFormComponent.vue'));
|
||||
Vue.component('warehouse-receive-note-form-component', require('./components/order/forms/WarehouseReceiveNoteFormComponent.vue'));
|
||||
|
||||
|
||||
Vue.component('notification-component', require('./components/common/NotificationComponent.vue'));
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-7">
|
||||
<div class="col-9">
|
||||
<div class="card no-border bg-transparent">
|
||||
<div class="tab-content bg-transparent p-l-0 p-r-0">
|
||||
<div class="tab-pane active" id="orders">
|
||||
@@ -158,26 +158,26 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-2 p-t-40 p-r-0 p-l-0">
|
||||
<div class="row m-b-15 parentContainer">
|
||||
<div class="col">
|
||||
<button class="btn btn-sm btn-block btn-primary b-rad-none all-caps bold p-t-10 p-b-10 requestModal" data-type="newOrder"><i class="fa fa-shopping-basket fs-14 m-r-5"></i> New Order</button>
|
||||
<modal-component type="newOrder">
|
||||
<order-form-component :data="companyId"></order-form-component>
|
||||
</modal-component>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row m-b-15">
|
||||
<div class="col">
|
||||
<button class="btn btn-sm btn-block btn-info b-rad-none all-caps bold p-t-10 p-b-10"><i class="fa fa-envelope-open-o fs-14 m-r-5"></i> Send Invite</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<button class="btn btn-sm btn-block btn-info bg-master bg-master b-rad-none all-caps bold p-t-10 p-b-10"><i class="fa fa-line-chart fs-14 m-r-5"></i> Reports</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--<div class="col-2 p-t-40 p-r-0 p-l-0">-->
|
||||
<!--<div class="row m-b-15 parentContainer">-->
|
||||
<!--<div class="col">-->
|
||||
<!--<button class="btn btn-sm btn-block btn-primary b-rad-none all-caps bold p-t-10 p-b-10 requestModal" data-type="newOrder"><i class="fa fa-shopping-basket fs-14 m-r-5"></i> New Order</button>-->
|
||||
<!--<modal-component type="newOrder">-->
|
||||
<!--<order-form-component :data="companyId"></order-form-component>-->
|
||||
<!--</modal-component>-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<!--<div class="row m-b-15">-->
|
||||
<!--<div class="col">-->
|
||||
<!--<button class="btn btn-sm btn-block btn-info b-rad-none all-caps bold p-t-10 p-b-10"><i class="fa fa-envelope-open-o fs-14 m-r-5"></i> Send Invite</button>-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<!--<div class="row">-->
|
||||
<!--<div class="col">-->
|
||||
<!--<button class="btn btn-sm btn-block btn-info bg-master bg-master b-rad-none all-caps bold p-t-10 p-b-10"><i class="fa fa-line-chart fs-14 m-r-5"></i> Reports</button>-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
<!--</div>-->
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -24,7 +24,8 @@
|
||||
<small class="muted fs-10 all-caps">Registration No:</small>
|
||||
</div>
|
||||
<div class="col-auto p-r-0">
|
||||
<small class="text-complete fs-10 bold">{{this.company.registration_no}}</small>
|
||||
<small v-if="this.company.registration_no !==''" class="text-complete fs-10 bold">{{this.company.registration_no}}</small>
|
||||
<small v-else class="muted fs-8 hint-text">Empty</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row p-t-5 p-b-5 b-b b-grey">
|
||||
@@ -32,8 +33,8 @@
|
||||
<small class="muted fs-10 all-caps">Tax No:</small>
|
||||
</div>
|
||||
<div class="col-auto p-r-0">
|
||||
<small :if="this.company.tax_no !==''" class="text-complete fs-10 bold">{{this.company.tax_no}}</small>
|
||||
<small class="muted fs-8 hint-text">Empty</small>
|
||||
<small v-if="this.company.tax_no !==''" class="text-complete fs-10 bold">{{this.company.tax_no}}</small>
|
||||
<small v-else class="muted fs-8 hint-text">Empty</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row p-t-5 p-b-5">
|
||||
@@ -41,8 +42,8 @@
|
||||
<small class="muted fs-10 all-caps">Email:</small>
|
||||
</div>
|
||||
<div class="col-auto p-r-0">
|
||||
<small :if="this.company.email !==''" class="text-complete fs-10 bold">{{this.company.email}}</small>
|
||||
<small class="muted fs-8 hint-text">Empty</small>
|
||||
<small v-if="this.company.email !==''" class="text-complete fs-10 bold">{{this.company.email}}</small>
|
||||
<small v-else class="muted fs-8 hint-text">Empty</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import notificationConstant from '../../../constant/notification'
|
||||
import notificationConstant from '../../../../js/notification'
|
||||
export default {
|
||||
props: {
|
||||
'id': {
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import notificationConstant from '../../../constant/notification';
|
||||
import notificationConstant from '../../../../js/notification';
|
||||
export default {
|
||||
props: {
|
||||
'data': {
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import notificationConstant from '../../../constant/notification';
|
||||
import notificationConstant from '../../../../js/notification';
|
||||
export default {
|
||||
props: {
|
||||
'type': {
|
||||
|
||||
@@ -9,11 +9,20 @@
|
||||
mounted(){
|
||||
var vm = this;
|
||||
$(this.$el)
|
||||
.select2({data: this.options})
|
||||
.select2({
|
||||
data: this.options,
|
||||
containerCssClass: "error",
|
||||
dropdownCssClass: "select2-dark"
|
||||
})
|
||||
.val(this.value)
|
||||
.trigger('change')
|
||||
.on('change', function(){
|
||||
vm.$emit('input', this.value);
|
||||
}).on('select2:open', function(){
|
||||
if($(this).parents('.select2-dark').length){
|
||||
$('.select2-dropdown').addClass('select2-dark');
|
||||
}
|
||||
$('.select2-results__options').scrollbar().parent().addClass('scrollbar-inner');
|
||||
});
|
||||
},
|
||||
watch: {
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<template>
|
||||
<div class="inline">
|
||||
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
</script>
|
||||
@@ -0,0 +1,75 @@
|
||||
<template>
|
||||
<div class="row">
|
||||
<div class="col p-t-10 p-b-10">
|
||||
<div class="row no-margin align-items-center justify-content-center">
|
||||
<div class="col">
|
||||
<small class="text-danger fs-10 requestModal pointer" data-type="delete"><i class="fa fa-times"></i> delete order</small>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<component :is="stepComponent(this.order.current_step)" :attachments="this.order.steps.attachments" :data="this.order.id"></component>
|
||||
<div class="btn btn-sm btn-default b-rad-none">View Details</div>
|
||||
</div>
|
||||
</div>
|
||||
<confirm-modal-component
|
||||
title="Cancel Order"
|
||||
:message="'Are you sure you want to cancel this order ?'"
|
||||
type="delete"
|
||||
danger
|
||||
v-on:confirm="deleteOrder()"></confirm-modal-component>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
'data': {
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
order: this.data,
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
'data': function() {
|
||||
this.order = this.data;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
deleteOrder(){
|
||||
fetch(route('api.order.delete', {'id': this.data}), {
|
||||
method: 'delete'
|
||||
}).then(() => {
|
||||
Event.$emit('updateOrdersList');
|
||||
})
|
||||
.catch(error => console.log(error))
|
||||
},
|
||||
stepComponent(stepReference){
|
||||
switch (stepReference) {
|
||||
case 'PS_PROCESSING':
|
||||
return 'confirm-order-component';
|
||||
case 'MS_WAREHOUSE_RECEIVING':
|
||||
return 'receive-step-component';
|
||||
case 'MS_WAREHOUSE_PACKING':
|
||||
return 'packing-step-component';
|
||||
case 'MS_NO_WAREHOUSE_PENDING_SUPPLIER':
|
||||
return 'supplier-packing-step-component';
|
||||
case 'PS_SHIPPING':
|
||||
return 'shipping-step-component';
|
||||
case 'MS_WAREHOUSE_ARRIVAL':
|
||||
return 'arrival-step-component';
|
||||
case 'MS_WAREHOUSE_UNPACKING':
|
||||
return 'unpacking-step-component';
|
||||
case 'PS_DELIVERY':
|
||||
if(this.order.complete){
|
||||
return 'complete-order-component';
|
||||
}
|
||||
return 'delivery-step-component';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -1,89 +1,10 @@
|
||||
<template>
|
||||
<div class="row m-b-10 parentContainer bg-white">
|
||||
<div class="col">
|
||||
<div class="row no-margin">
|
||||
<div class="col">
|
||||
<div class="row no-margin p-t-10 p-b-10 b-b b-grey">
|
||||
<div class="col p-l-0">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="bold">
|
||||
<span class="v-align-middle">#{{this.order.marking}} </span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="fs-10 muted">Created: <span class="text-success semi-bold">{{this.order.date}}</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-auto p-r-0">
|
||||
<div class="row">
|
||||
<div class="col"></div>
|
||||
<div class="col-auto">
|
||||
<span class="fs-11 muted">Status: </span>
|
||||
<span class="text-capitalize bold text-danger fs-11" v-if="!this.order.complete">{{this.order.steps.details.initial_name}}</span>
|
||||
<span class="text-capitalize bold text-success fs-11" v-if="this.order.complete">Complete</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" >
|
||||
<div class="col text-right muted">
|
||||
<span class="fs-11 inline v-align-middle" v-if="!this.order.complete">{{this.order.steps.details.description}}</span>
|
||||
<span class="fs-11 inline v-align-middle" v-if="this.order.complete">Order has been delivered</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col p-t-10 p-b-10">
|
||||
<div class="row no-margin align-items-center justify-content-center">
|
||||
<div class="col">
|
||||
<small class="text-danger fs-10 requestModal pointer" data-type="delete"><i class="fa fa-times"></i> delete order</small>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<component :is="stepComponent(this.order.current_step)" :attachments="this.order.steps.attachments" :data="this.order.id"></component>
|
||||
<div class="btn btn-sm btn-default b-rad-none">View Details</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row m-t-5">
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="order-history-border"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row fs-12 p-t-15 p-b-15 ">
|
||||
<div class="col">
|
||||
<div class="row m-l-0 m-r-0 p-b-15 relative order-history" v-for="detail in this.order.details">
|
||||
<div class="absolute bullet-connector hint-text"></div>
|
||||
<div class="col">
|
||||
<div class="row align-items-center justify-content-center">
|
||||
<div class="col-auto p-r-10">
|
||||
<div class="bg-master-light btn-rounded hint-text" style="width: 8px;height: 8px;" ></div>
|
||||
</div>
|
||||
<div class="col-auto hint-text p-l-0">
|
||||
{{detail.date}}
|
||||
</div>
|
||||
<div class="col p-l-0 semi-bold lh-25" v-html="detail.description"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<order-header-component :data="this.data"></order-header-component>
|
||||
<order-action-component :data="this.data"></order-action-component>
|
||||
<order-history-component :data="this.data"></order-history-component>
|
||||
</div>
|
||||
<confirm-modal-component
|
||||
title="Cancel Order"
|
||||
:message="'Are you sure you want to cancel this order ?'"
|
||||
type="delete"
|
||||
danger
|
||||
v-on:confirm="deleteOrder()"></confirm-modal-component>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -97,49 +18,12 @@
|
||||
data() {
|
||||
return {
|
||||
order: this.data,
|
||||
receiveNote: {
|
||||
tracking_no: '',
|
||||
receive_date: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
'data': function() {
|
||||
this.order = this.data;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
deleteOrder(){
|
||||
fetch(route('api.order.delete', {'id': this.data}), {
|
||||
method: 'delete'
|
||||
}).then(() => {
|
||||
Event.$emit('updateOrdersList');
|
||||
})
|
||||
.catch(error => console.log(error))
|
||||
},
|
||||
stepComponent(stepReference){
|
||||
switch (stepReference) {
|
||||
case 'PS_PROCESSING':
|
||||
return 'confirm-order-component';
|
||||
case 'MS_WAREHOUSE_RECEIVING':
|
||||
return 'receive-step-component';
|
||||
case 'MS_WAREHOUSE_PACKING':
|
||||
return 'packing-step-component';
|
||||
case 'MS_NO_WAREHOUSE_PENDING_SUPPLIER':
|
||||
return 'supplier-packing-step-component';
|
||||
case 'PS_SHIPPING':
|
||||
return 'shipping-step-component';
|
||||
case 'MS_WAREHOUSE_ARRIVAL':
|
||||
return 'arrival-step-component';
|
||||
case 'MS_WAREHOUSE_UNPACKING':
|
||||
return 'unpacking-step-component';
|
||||
case 'PS_DELIVERY':
|
||||
if(this.order.complete){
|
||||
return 'complete-order-component';
|
||||
}
|
||||
return 'delivery-step-component';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,58 @@
|
||||
<template>
|
||||
<div class="row no-margin">
|
||||
<div class="col">
|
||||
<div class="row no-margin p-t-10 p-b-10 b-b b-grey">
|
||||
<div class="col p-l-0">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="bold">
|
||||
<span class="v-align-middle">#{{this.order.marking}} </span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="fs-10 muted">Created: <span class="text-success semi-bold">{{this.order.date}}</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-auto p-r-0">
|
||||
<div class="row">
|
||||
<div class="col"></div>
|
||||
<div class="col-auto">
|
||||
<span class="fs-11 muted">Status: </span>
|
||||
<span class="text-capitalize bold text-danger fs-11" v-if="!this.order.complete">{{this.order.steps.details.initial_name}}</span>
|
||||
<span class="text-capitalize bold text-success fs-11" v-if="this.order.complete">Complete</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" >
|
||||
<div class="col text-right muted">
|
||||
<span class="fs-11 inline v-align-middle" v-if="!this.order.complete">{{this.order.steps.details.description}}</span>
|
||||
<span class="fs-11 inline v-align-middle" v-if="this.order.complete">Order has been delivered</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
'data': {
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
order: this.data,
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
'data': function() {
|
||||
this.order = this.data;
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,74 @@
|
||||
<template>
|
||||
<div class="row m-t-5">
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="order-history-border"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row fs-12 p-t-15 p-b-15 m-l-0 m-r-0 ">
|
||||
<div class="col">
|
||||
<div class="row m-b-15">
|
||||
<div class="col">
|
||||
<small class="muted all-caps">Delivery Address</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="bold m-b-5">{{this.order.address.reference}}</div>
|
||||
<div class="hint-text semi-bold">{{this.order.address.contact}}</div>
|
||||
<div class="m-t-15 m-b-15 hint-text">{{this.order.address.street_one || ''}} {{ this.order.address.street_two || '' }} {{this.order.address.city || '' }} {{this.order.address.post_code || ''}} {{this.order.address.state || ''}} {{this.order.address.country || ''}}</div>
|
||||
<small class="block text-complete text-underline pointer">Change Address</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-9 p-l-0">
|
||||
<div class="row m-l-0 m-r-0 m-b-15">
|
||||
<div class="col p-l-0">
|
||||
<small class="muted all-caps">Order History</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col p-l-0">
|
||||
<div class="row m-l-0 m-r-0 p-b-15 relative order-history" v-for="detail in this.order.details">
|
||||
<div class="absolute bullet-connector hint-text"></div>
|
||||
<div class="col">
|
||||
<div class="row align-items-center justify-content-center">
|
||||
<div class="col-auto p-r-10">
|
||||
<div class="bg-master-light btn-rounded hint-text" style="width: 8px;height: 8px;" ></div>
|
||||
</div>
|
||||
<div class="col-auto hint-text p-l-0">
|
||||
{{detail.date}}
|
||||
</div>
|
||||
<div class="col p-l-0 semi-bold lh-20" v-html="detail.description"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
'data': {
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
order: this.data,
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
'data': function() {
|
||||
this.order = this.data;
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,77 @@
|
||||
<template>
|
||||
<div class="row m-b-10">
|
||||
<div class="col" :class="[{ 'bg-success': selected }, { 'bg-white': !selected }]">
|
||||
<div class="row no-margin p-t-10 p-b-10 align-items-center justify-content-center">
|
||||
<div class="col p-l-0">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="bold fs-12 text-master"><span class="v-align-middle">#{{this.order.marking}} </span></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col" :class="[{ 'hint-text': selected }]">
|
||||
<div class="fs-10" :class="[{ 'muted': !selected }]">Created: <span class="semi-bold" :class="[{ 'text-success': !selected }]">{{this.order.date}}</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class=" p-r-0" :class="[{ 'col-auto': selected }, { 'col-4': !selected }]">
|
||||
<button type="button" class="btn btn-xs btn-block all-caps b-rad-none pointer no-border" @mouseenter="mouseOver()" @mouseleave="mouseOver()" @click="selectOrder()" :class="[{ 'btn-default': !selected }, {'bg-master-light': !selected}, { 'btn-success': selected }, {'bg-success-darker': selected}]">
|
||||
<span v-show="!selected">Select</span>
|
||||
<span v-show="selected">
|
||||
<i class="fa fa-check fa-fw" v-show="ishover"></i>
|
||||
<i class="fa fa-times text-danger-light fa-fw" v-show="!ishover"></i>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" v-show="selected">
|
||||
<div class="col">
|
||||
<div class="form-group form-group-default bg-success-lighter">
|
||||
<label class="muted">Tracking Number</label>
|
||||
<input class="form-control" @keyup="updateSelection" v-model="tracking_no">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
'data': {
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
order: this.data,
|
||||
selected: false,
|
||||
tracking_number: '',
|
||||
ishover: true
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
'data': function() {
|
||||
this.order = this.data;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
mouseOver(){
|
||||
this.ishover = !this.ishover;
|
||||
},
|
||||
selectOrder(){
|
||||
this.selected = !this.selected;
|
||||
this.updateSelection();
|
||||
},
|
||||
updateSelection(){
|
||||
Event.$emit('orderSelected', {
|
||||
id: this.order.id,
|
||||
marking: this.order.marking,
|
||||
tracking_number: this.tracking_number,
|
||||
selected: this.selected
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,43 @@
|
||||
<template>
|
||||
<div class="row m-t-50">
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col-6 bg-white">
|
||||
<order-header-component :data="this.order"></order-header-component>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row m-t-30">
|
||||
<div class="col-9 bg-white">
|
||||
<order-history-component :data="this.order"></order-history-component>
|
||||
</div>
|
||||
<div class="col">
|
||||
<order-action-component :data="this.order"></order-action-component>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
props: ['data'],
|
||||
data() {
|
||||
return {
|
||||
orderId: this.data,
|
||||
order: null
|
||||
}
|
||||
},
|
||||
created(){
|
||||
this.fetchOrder();
|
||||
},
|
||||
methods: {
|
||||
fetchOrder(){
|
||||
fetch(route('api.order.profile', {'id': this.orderId})).then(response => response.json())
|
||||
.then(response => {
|
||||
this.order = response.data;
|
||||
})
|
||||
.catch(error => console.log(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
+1
-1
@@ -12,7 +12,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import notificationConstant from '../../../constant/notification';
|
||||
import notificationConstant from '../../../../../js/notification';
|
||||
export default {
|
||||
props: {
|
||||
'data': {
|
||||
+1
-1
@@ -56,7 +56,7 @@
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import notificationConstant from '../../../constant/notification';
|
||||
import notificationConstant from '../../../../../js/notification';
|
||||
export default {
|
||||
props: {
|
||||
'data': {
|
||||
+1
-1
@@ -12,7 +12,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import notificationConstant from '../../../constant/notification';
|
||||
import notificationConstant from '../../../../../js/notification';
|
||||
export default {
|
||||
props: {
|
||||
'data': {
|
||||
+14
-1
@@ -161,6 +161,12 @@
|
||||
</div>
|
||||
<div class="row m-b-20">
|
||||
<div class="col no-padding bg-master-lightest">
|
||||
<div class="form-group form-group-default input-group" style=" overflow: visible; ">
|
||||
<div class="form-input-group">
|
||||
<label>Action Date</label>
|
||||
<date-picker-component name="complete_date" v-on:updateDate="setCompleteDate($event)"></date-picker-component>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col p-t-10 p-b-10 b-b b-grey bg-master-lighter">
|
||||
<p class="no-margin text-info"><small class="muted all-caps fs-12 m-r-5">Packing List No:</small> {{packingList.reference_no}}</p>
|
||||
@@ -197,7 +203,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import notificationConstant from '../../../constant/notification';
|
||||
import notificationConstant from '../../../../../js/notification';
|
||||
export default {
|
||||
props: {
|
||||
'data': {
|
||||
@@ -220,6 +226,9 @@
|
||||
height: 0.0,
|
||||
length: 0.0
|
||||
}]
|
||||
},
|
||||
actionData: {
|
||||
complete_date: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -265,6 +274,7 @@
|
||||
this.isLoading = true;
|
||||
fetch(route('api.order.step.update', {orderId: this.data}), {
|
||||
method: 'post',
|
||||
body: JSON.stringify(this.actionData),
|
||||
headers: {
|
||||
'content-type': 'application/json'
|
||||
}
|
||||
@@ -318,6 +328,9 @@
|
||||
total += (((object.width/100) * (object.length/100) * (object.height/100)) * object.quantity)
|
||||
});
|
||||
return total.toFixed(5);
|
||||
},
|
||||
setCompleteDate(date){
|
||||
this.actionData.complete_date = date;
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
-15
@@ -21,14 +21,14 @@
|
||||
<div class="row w-100">
|
||||
<div class="col no-padding">
|
||||
<label class="muted block">Tracking Number</label>
|
||||
<input class="form-control block" name="tracking_no" v-model="receiveNote.tracking_no">
|
||||
<input class="form-control block" name="tracking_number" v-model="receiveNote.tracking_number">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group form-group-default input-group" style=" overflow: visible; ">
|
||||
<div class="form-input-group">
|
||||
<label>Date Received</label>
|
||||
<date-picker-component name="receive_date" v-on:updateDate="setReceiveNote($event, 'receiveNote.receive_date')"></date-picker-component>
|
||||
<date-picker-component name="complete_date" v-on:updateDate="setCompleteDate($event)"></date-picker-component>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
@@ -52,7 +52,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import notificationConstant from '../../../constant/notification';
|
||||
import notificationConstant from '../../../../../js/notification';
|
||||
export default {
|
||||
props: {
|
||||
'data': {
|
||||
@@ -62,8 +62,8 @@
|
||||
data() {
|
||||
return {
|
||||
receiveNote: {
|
||||
tracking_no: '',
|
||||
receive_date: ''
|
||||
tracking_number: '',
|
||||
complete_date: ''
|
||||
},
|
||||
isLoading: false
|
||||
}
|
||||
@@ -71,8 +71,8 @@
|
||||
mounted: function() {
|
||||
$(this.$el).find('.receiveForm').validate({
|
||||
rules: {
|
||||
tracking_no: "required",
|
||||
receive_date: "required"
|
||||
tracking_number: "required",
|
||||
complete_date: "required"
|
||||
},
|
||||
errorPlacement: function ( error, element ) {
|
||||
|
||||
@@ -93,9 +93,9 @@
|
||||
},
|
||||
methods: {
|
||||
|
||||
setReceiveNote(date){
|
||||
setCompleteDate(date){
|
||||
$(this.$el).find('.receiveForm').valid();
|
||||
this.receiveNote.receive_date = date;
|
||||
this.receiveNote.complete_date = date;
|
||||
},
|
||||
|
||||
createReceiveNote() {
|
||||
@@ -130,13 +130,9 @@
|
||||
})
|
||||
}
|
||||
},
|
||||
updateReceiveDate(value){
|
||||
//alert(value);
|
||||
this.receiveNote.receive_date = value;
|
||||
},
|
||||
clearForm(){
|
||||
this.receiveNote.tracking_no = '';
|
||||
this.receiveNote.receive_date = '';
|
||||
this.receiveNote.tracking_number = '';
|
||||
this.receiveNote.complete_date = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -152,7 +152,7 @@
|
||||
|
||||
<script>
|
||||
import moment from 'moment';
|
||||
import notificationConstant from '../../../constant/notification';
|
||||
import notificationConstant from '../../../../../js/notification';
|
||||
export default {
|
||||
props: {
|
||||
'data': {
|
||||
+1
-1
@@ -12,7 +12,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import notificationConstant from '../../../constant/notification';
|
||||
import notificationConstant from '../../../../../js/notification';
|
||||
export default {
|
||||
props: {
|
||||
'data': {
|
||||
+1
-1
@@ -12,7 +12,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import notificationConstant from '../../../constant/notification';
|
||||
import notificationConstant from '../../../../../js/notification';
|
||||
export default {
|
||||
props: {
|
||||
'data': {
|
||||
@@ -0,0 +1,158 @@
|
||||
<template>
|
||||
<div class="row m-b-15">
|
||||
<div class="col">
|
||||
<loading-component v-show="isLoading"></loading-component>
|
||||
<div class="row" v-show="isAdding">
|
||||
<div class="col bg-info">
|
||||
<div class="row">
|
||||
<div class="col-7 bg-master" style="height: 3px;"></div>
|
||||
<div class="col"></div>
|
||||
</div>
|
||||
<div class="row p-b-5 m-b-5">
|
||||
<div class="col p-l-0">
|
||||
<div class="b-l b-master p-l-15 p-t-15 p-b-10 m-b-5" style="border-left-width: 2px;">
|
||||
<h6 class="bold all-caps no-margin text-white hint-text">New Order</h6>
|
||||
<div class="muted all-caps fs-12">Create A New Order</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<form @submit.prevent="addOrder()">
|
||||
<div class="row">
|
||||
<div class="col no-padding">
|
||||
<div class="row m-b-15">
|
||||
<div class="col no-padding">
|
||||
<div class="form-group form-group-default input-group bg-info-light no-border">
|
||||
<div class="row w-100">
|
||||
<div class="col no-padding">
|
||||
<label class="text-white block fade">Order No.</label>
|
||||
<input class="form-control block text-white" name="marking" v-model="order.marking">
|
||||
</div>
|
||||
<div class="col-auto no-padding" @click="generateMarking()">
|
||||
<div class="input-group-addon pointer inline bg-info-darker">
|
||||
<div class="row align-items-center justify-content-center h-100">
|
||||
<div class="col">
|
||||
<i class="fa fa-random text-white hint-text"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group form-group-default form-group-default-select2 select2-dark bg-info-light m-b-0">
|
||||
<label class="muted">Importer</label>
|
||||
<select-component :options="companies" v-model="order.companyId"></select-component>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col no-padding">
|
||||
<div class="row">
|
||||
<div class="col text-right no-padding">
|
||||
<button type="button" class="btn btn-sm b-rad-none btn-default bg-info-darker text-white no-border all-caps" @click="isAdding = false">Cancel</button>
|
||||
<button type="submit" class="btn btn-sm b-rad-none btn-primary bg-master-darkest no-border all-caps">Create Order</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="row p-t-15 b-r b-master" style="height: 30px; border-right-width: 2px; margin-top: -15px;">
|
||||
<div class="col"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col bg-info-light"></div>
|
||||
<div class="col-1 bg-master" style="height: 3px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" v-show="!isAdding">
|
||||
<div class="col no-padding">
|
||||
<button type="button" class="btn btn-sm btn-block btn-default bg-info text-white no-border b-rad-none all-caps" @click="isAdding = true">New Orders</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
'data': {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
order: {
|
||||
marking: '',
|
||||
companyId: ''
|
||||
},
|
||||
companies: [],
|
||||
isAdding: false,
|
||||
isLoading: false
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.fetchCompanies();
|
||||
this.generateMarking()
|
||||
},
|
||||
methods: {
|
||||
fetchCompanies(){
|
||||
//turn on loading animation
|
||||
this.isLoading = true;
|
||||
|
||||
fetch(route('api.company.list', {'pagination': 0})).then(response => response.json())
|
||||
.then(response => {
|
||||
this.companies = $.map(response, function(company) {
|
||||
return {id: company.id, text: company.name};
|
||||
});
|
||||
|
||||
//turn off loading animation
|
||||
this.isLoading = false;
|
||||
|
||||
})
|
||||
.catch(error => console.log(error))
|
||||
},
|
||||
addOrder() {
|
||||
//turn on loading animation
|
||||
this.isLoading = true;
|
||||
fetch(route('api.order.create', {companyId: this.order.companyId}), {
|
||||
method: 'post',
|
||||
body: JSON.stringify(this.order),
|
||||
headers: {
|
||||
'content-type': 'application/json'
|
||||
}
|
||||
}).then(response => response.json())
|
||||
.then(response => {
|
||||
//turn off loading animation
|
||||
this.isLoading = false;
|
||||
this.ConfirmWarehouse(response.id);
|
||||
})
|
||||
},
|
||||
ConfirmWarehouse(orderId){
|
||||
this.isLoading = true;
|
||||
fetch(route('api.order.step.update', {orderId: orderId}), {
|
||||
method: 'post',
|
||||
body: JSON.stringify({warehouse_id: this.data}),
|
||||
headers: {
|
||||
'content-type': 'application/json'
|
||||
}
|
||||
}).then(() => {
|
||||
this.resetForm();
|
||||
|
||||
Event.$emit('updateOrdersSelectList');
|
||||
this.isLoading = false;
|
||||
this.isAdding = false;
|
||||
})
|
||||
},
|
||||
generateMarking(){
|
||||
this.order.marking = Math.floor(Math.random() * 799999) + 200000;
|
||||
},
|
||||
resetForm(){
|
||||
this.generateMarking();
|
||||
this.companyId = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -48,7 +48,7 @@
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import notificationConstant from '../../../constant/notification';
|
||||
import notificationConstant from '../../../../js/notification';
|
||||
export default {
|
||||
props: {
|
||||
'data': {
|
||||
|
||||
@@ -0,0 +1,174 @@
|
||||
<template>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h3 class="all-caps hint-text">Receive Note</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row m-t-15">
|
||||
<div class="col">
|
||||
<div class="row justify-content-between">
|
||||
<div class="col-6">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<small class="all-caps fs-12 no-margin hint-text">Warehouse</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h6 class="bold m-t-5">{{this.warehouse.name}}</h6>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<small>{{this.warehouse.street_one}} {{this.warehouse.street_two}}, {{this.warehouse.city}}, {{this.warehouse.state}}, {{this.warehouse.post_code}}, {{this.warehouse.country}}</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-5 text-right">
|
||||
<div class="row m-b-10">
|
||||
<div class="col">
|
||||
<small class="all-caps fs-12 no-margin hint-text">Receive Date</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="form-group m-b-0">
|
||||
<div class="input-group">
|
||||
<date-picker-component class="no-border" placeholder="Select Date" v-on:updateDate="updateReceiveDate($event)"></date-picker-component>
|
||||
<span class="input-group-addon bg-info text-white no-border b-rad-none">
|
||||
<i class="fa fa-calendar-o fa-align-justify"></i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row m-t-50">
|
||||
<div class="col">
|
||||
<div class="row no-margin" v-show="!receive_note.orders.length">
|
||||
<div class="col bg-master-lightest text-center p-t-20 p-b-20">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h6 class="bold all-caps m-t-0 fs-12 text-primary">You have no orders selected</h6>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-8">
|
||||
<small class="muted fs-10 all-caps">Select at least one order from the list on the left to proceed with creating a receive note.</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" v-show="receive_note.orders.length">
|
||||
<div class="col">
|
||||
<div class="row m-b-10 m-l-0 m-r-0">
|
||||
<div class="col p-b-5 p-l-0 b-b b-grey">
|
||||
<small class="fs-10 all-caps muted">Received Orders</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row m-b-10 m-l-0 m-r-0" v-for="(order, index) in receive_note.orders" v-bind:key="index" >
|
||||
<div class="col bg-master-lighter p-t-10 p-b-10">
|
||||
<div class="row align-items-center justify-content-center">
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="bold fs-12 text-master">
|
||||
<span class="v-align-middle">#{{ order.marking }} </span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="fs-11 all-caps muted">Tracking No: <span class="semi-bold text-success" v-if="order.tracking_no">{{ order.tracking_no }}</span><span class="muted all-caps fs-10" v-else>Empty</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--<div class="col-auto">-->
|
||||
<!--<i class="fa fa-times muted"></i>-->
|
||||
<!--</div>-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="row m-t-30">
|
||||
<div class="col text-right">
|
||||
<div class="btn btn-sm btn-primary b-rad-none all-caps pointer" v-show="receive_note.orders.length" @click="createReceiveNotes()">Confirm Receive Note</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
'id': {
|
||||
type: String,
|
||||
required: false
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
warehouse: '',
|
||||
receive_note: {
|
||||
receive_date: null,
|
||||
orders: []
|
||||
},
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.fetchWarehouse()
|
||||
},
|
||||
mounted(){
|
||||
Event.$on('orderSelected', (order) => {
|
||||
this.updateSelection(order);
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
updateReceiveDate(date){
|
||||
this.receive_note.receive_date = date;
|
||||
},
|
||||
fetchWarehouse(){
|
||||
fetch(route('api.warehouse.profile', {'id': this.id})).then(response => response.json())
|
||||
.then(response => {
|
||||
this.warehouse = response.data;
|
||||
})
|
||||
.catch(error => console.log(error))
|
||||
},
|
||||
updateSelection(order){
|
||||
let index = this.receive_note.orders.findIndex(x => x.id === order.id);
|
||||
if(index === -1){
|
||||
this.receive_note.orders.push(order);
|
||||
} else {
|
||||
if(order.selected){
|
||||
Vue.set(this.receive_note.orders, index, order)
|
||||
} else {
|
||||
this.receive_note.orders.splice(index, 1)
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
createReceiveNotes(){
|
||||
fetch(route('api.order.bulk.receive.update'), {
|
||||
method: 'post',
|
||||
body: JSON.stringify(this.receive_note),
|
||||
headers: {
|
||||
'content-type': 'application/json'
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,92 @@
|
||||
<template>
|
||||
<div class="relative">
|
||||
<loading-component v-show="isLoading"></loading-component>
|
||||
<div class="row" v-if="!orders.length && isLoading === false">
|
||||
<div class="col text-center p-t-30 p-b-30 bg-white">
|
||||
<div class="row">
|
||||
<div class="col text-center">
|
||||
<img src="https://static.thenounproject.com/png/10066-200.png" width="60" class="hint-text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="bold all-caps p-t-15 fs-12 text-primary">Order list is empty</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<small class="all-caps fs-10 muted">No orders matching your criteria</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<order-select-component v-for="order in orders" v-bind:key="order.id" :data="order"></order-select-component>
|
||||
<pagination-component class="m-b-20" ref="pagination" v-on:changePage="fetchOrders($event)"></pagination-component>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
'type': {
|
||||
type: String,
|
||||
default: 'company'
|
||||
},
|
||||
'id': {
|
||||
type: String,
|
||||
required: false
|
||||
},
|
||||
'category': {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
orders: [],
|
||||
isLoading: true
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.fetchOrders();
|
||||
},
|
||||
mounted() {
|
||||
Event.$on('updateOrdersSelectList', (current) => {
|
||||
this.fetchOrders(current ? this.$refs.pagination.pagination.current_page : 1);
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
fetchOrders(page = 1){
|
||||
//turn on loading animation
|
||||
this.isLoading = true;
|
||||
|
||||
let url = route('api.company.order.list', {id: this.id, category: this.category});
|
||||
|
||||
if(this.type === 'warehouse'){
|
||||
url = route('api.warehouse.order.list', {id: this.id, category: this.category});
|
||||
}
|
||||
|
||||
if(this.type === 'forwarder'){
|
||||
url = route('api.order.list', {category: this.category});
|
||||
}
|
||||
|
||||
fetch(url + '?page='+ page)
|
||||
.then(response => response.json())
|
||||
.then(response => {
|
||||
|
||||
this.orders = response.data;
|
||||
//turn off loading animation
|
||||
this.isLoading = false;
|
||||
this.$refs.pagination.makePagination(response.meta, response.links);
|
||||
|
||||
|
||||
|
||||
})
|
||||
.catch(error => console.log(error))
|
||||
},
|
||||
updateSelectedOrders(order){
|
||||
console.log(order);
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -126,6 +126,13 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="row m-b-15 parentContainer">
|
||||
<div class="col">
|
||||
<a :href="route('order.bulk.receive_note', {warehouseId: warehouseId})" class="btn btn-sm btn-block btn-primary b-rad-none all-caps fs-10 bold p-t-10 p-b-10 requestModal">Warehouse List</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -143,6 +150,7 @@
|
||||
this.fetchWarehouse();
|
||||
},
|
||||
methods: {
|
||||
route: route,
|
||||
fetchWarehouse(){
|
||||
fetch(route('api.warehouse.profile', {'id': this.warehouseId})).then(response => response.json())
|
||||
.then(response => {
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import notificationConstant from '../../../constant/notification';
|
||||
import notificationConstant from '../../../../js/notification';
|
||||
export default {
|
||||
props: {
|
||||
'data': {
|
||||
|
||||
@@ -1,81 +1,5 @@
|
||||
@extends('layouts.base_portal')
|
||||
|
||||
@section('inner_content')
|
||||
<div class="row p-t-20 p-b-20">
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="row bg-white p-t-15 p-b-15 m-b-20">
|
||||
<div class="col">
|
||||
<div class="row m-b-5">
|
||||
<div class="col bold fs-15">
|
||||
Order #216718963296916
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col muted">
|
||||
Placed on 05 Mar 2019 16:40:08
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-auto text-right">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<span class="muted">Status: </span>
|
||||
<span class="text-success">Complete</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<span class="muted">Order has been delivered</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row bg-white">
|
||||
<div class="col">
|
||||
<div class="row m-t-5"><div class="col"><div class="row"><div class="col no-padding"><div class="order-history-border"></div></div></div> <div class="row fs-12 p-t-15 p-b-15 "><div class="col"><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
|
||||
05-03-2019 17:05
|
||||
</div> <div class="col p-l-0 semi-bold">
|
||||
Your Order has successfully been delivered
|
||||
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
|
||||
05-03-2019 17:05
|
||||
</div> <div class="col p-l-0 semi-bold">
|
||||
Your Order is out for delivery
|
||||
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
|
||||
05-03-2019 17:05
|
||||
</div> <div class="col p-l-0 semi-bold">
|
||||
Your Order has been unpacked and being prepared for delivery
|
||||
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
|
||||
05-03-2019 17:05
|
||||
</div> <div class="col p-l-0 semi-bold">
|
||||
Your Order has arrived at Malaysia's sorting centre
|
||||
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
|
||||
05-03-2019 17:05
|
||||
</div> <div class="col p-l-0 semi-bold">
|
||||
Your Order has been shipped successfully
|
||||
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
|
||||
05-03-2019 17:05
|
||||
</div> <div class="col p-l-0 semi-bold">
|
||||
Your Order is packed and is ready to ship
|
||||
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
|
||||
05-03-2019 17:05
|
||||
</div> <div class="col p-l-0 semi-bold">
|
||||
Your Order has arrived at China's sorting centre
|
||||
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
|
||||
05-03-2019 17:04
|
||||
</div> <div class="col p-l-0 semi-bold">
|
||||
Order has been confirmed
|
||||
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
|
||||
05-03-2019 17:02
|
||||
</div> <div class="col p-l-0 semi-bold">
|
||||
Order created
|
||||
</div></div></div></div></div></div></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<order-profile-component data="{{$orderId}}"></order-profile-component>
|
||||
@endsection
|
||||
@@ -0,0 +1,27 @@
|
||||
@extends('layouts.base_portal')
|
||||
|
||||
@section('inner_content')
|
||||
<div class="row m-t-30">
|
||||
<div class="col-4">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<addon-order-form-component data="{{$warehouseId}}"></addon-order-form-component>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" >
|
||||
<div class="col">
|
||||
<orders-select-list-component id="{{$warehouseId}}" type="warehouse" category="receiving" class="m-b-10"></orders-select-list-component>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="card card-default">
|
||||
<div class="card-block">
|
||||
<warehouse-receive-note-form-component id="{{$warehouseId}}"></warehouse-receive-note-form-component>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@endsection
|
||||
+6
-2
@@ -32,7 +32,7 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function
|
||||
Route::group(['prefix' => 'company', 'as' => 'company.', 'namespace' => 'Companies'], function () {
|
||||
|
||||
// List companies
|
||||
Route::get('/list', 'CompanyController@index')->name('list');
|
||||
Route::get('/list/{pagination?}', 'CompanyController@index')->name('list');
|
||||
|
||||
// search companies
|
||||
Route::get('/search', 'CompanyController@search')->name('search');
|
||||
@@ -115,13 +115,15 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function
|
||||
|
||||
Route::group(['prefix' => 'order', 'as' => 'order.', 'namespace' => 'Orders'], function () {
|
||||
|
||||
Route::get('{id}/profile', 'OrderController@show')->name('profile');
|
||||
|
||||
Route::get('/company/{companyId}/list', 'OrderController@listCompanyOrders')->name('company.list');
|
||||
|
||||
Route::post('/{companyId}/create', 'CreateOrderController@create')->name('create');
|
||||
Route::delete('/{orderId}/delete', 'OrderController@delete')->name('delete');
|
||||
|
||||
|
||||
Route::post('/{orderId}/update', 'OrderController@updateStep')->name('step.update');
|
||||
Route::post('/{orderId}/update', 'updateOrderStepController@update')->name('step.update');
|
||||
|
||||
Route::post('/{orderId}/packing-list', 'OrderController@updatePackingList')->name('packages.update');
|
||||
|
||||
@@ -132,6 +134,8 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function
|
||||
|
||||
Route::post('/search','SearchOrderController@search')->name('search');
|
||||
|
||||
Route::post('/bulk-receive-notes', 'BulkReceiveNotesController@create')->name('bulk.receive.update');
|
||||
|
||||
});
|
||||
|
||||
// Service Routes
|
||||
|
||||
+6
-2
@@ -54,13 +54,17 @@ Route::group(['middleware' => ['secure', 'clearcache']], function (): void {
|
||||
return view('pages.warehouses.profile', ['warehouseId' => $warehouseId]);
|
||||
})->name('warehouses.profile');
|
||||
|
||||
Route::get('/order/profile', function(){
|
||||
return view('pages.orders.profile');
|
||||
Route::get('/order/{orderId}/profile', function($orderId){
|
||||
return view('pages.orders.profile', ['orderId' => $orderId]);
|
||||
})->name('order.profile');
|
||||
|
||||
Route::get('/order', function(){
|
||||
return view('pages.orders.index');
|
||||
})->name('order');
|
||||
|
||||
Route::get('/order/{warehouseId}/receive_note', function($warehouseId){
|
||||
return view('pages.orders.receive_note', ['warehouseId' => $warehouseId]);
|
||||
})->name('order.bulk.receive_note');
|
||||
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user