Merge branch 'package-ui-create' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into packaging-list-schedule

This commit is contained in:
glovetleong
2021-10-03 20:42:46 +08:00
42 changed files with 1594 additions and 23 deletions
@@ -0,0 +1,118 @@
<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\PackingLists\Processors\CreatePackingListProcessor;
use App\Classes\Modules\PackingLists\Processors\CreatePackageProcessor;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Classes\Modules\Transports\Services\CreatesTransport;
use App\Classes\Modules\PackingLists\Services\GeneratesPackingListReferenceNumber;
use App\Classes\Modules\Schedules\Services\CreatesSchedule;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject;
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Classes\ValueObjects\Constants\TransportType;
use App\Http\Resources\PackingListResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Carbon\Carbon;
class CreateShippingPackingListLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created PackingList',
'message' => 'You have successfully created a new PackingList'
];
}
/** @var CreatePackingListProcessor */
private $createPackingListProcessor;
/** @var GeneratesPackingListReferenceNumber */
private $generatesPackingListReferenceNumber;
/** @var CreatesTransport */
private $createsTransport;
/** @var CreatePackageProcessor */
private $createPackageProcessor;
/** @var CreatesSchedule */
private $createsSchedule;
/** @var FetchesOrder */
private $fetchesOrder;
/**
* CreatePackingListLogic constructor.
* @param CreatePackingListProcessor $createPackingListProcessor
* @param FetchesOrder $fetchesOrder
*/
public function __construct(
CreatePackingListProcessor $createPackingListProcessor,
CreatesTransport $createsTransport,
CreatesSchedule $createsSchedule,
CreatePackageProcessor $createPackageProcessor,
GeneratesPackingListReferenceNumber $generatesPackingListReferenceNumber,
FetchesOrder $fetchesOrder
)
{
$this->createPackingListProcessor = $createPackingListProcessor;
$this->createsTransport = $createsTransport;
$this->createsSchedule = $createsSchedule;
$this->createPackageProcessor = $createPackageProcessor;
$this->generatesPackingListReferenceNumber = $generatesPackingListReferenceNumber;
$this->fetchesOrder = $fetchesOrder;
}
/**
* @param Request $request
* @return JsonResponse
*/
public function logic(Request $request) : JsonResponse
{
$order = $this->fetchesOrder->execute(['id' => $request->input('order_id')]);
$reference_number = $this->generatesPackingListReferenceNumber->execute();
$packingListObject = new PackingListObject(
$reference_number,
$order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id,
PackingListType::SHIPPING_PACKING_LIST,
ApprovalStatus::PENDING_SUBMISSION
);
$packingList = $this->createPackingListProcessor->execute($packingListObject, $order);
$packages = $request->input('packages');
foreach ($packages as $key => $row) {
$packageObject = new PackageObject(
$row['type'],
$row['description'],
$row['width'],
$row['height'],
$row['length'],
$row['weight'],
$row['quantity'],
ApprovalStatus::APPROVED,
$row['reference'],
);
$this->createPackageProcessor->execute($packageObject, $packingList);
}
return $this->resourceResponse(new PackingListResource($packingList));
}
}
@@ -0,0 +1,124 @@
<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\PackingLists\Processors\CreatePackingListProcessor;
use App\Classes\Modules\PackingLists\Processors\CreatePackageProcessor;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Classes\Modules\Transports\Services\CreatesTransport;
use App\Classes\Modules\PackingLists\Services\GeneratesPackingListReferenceNumber;
use App\Classes\Modules\Schedules\Services\CreatesSchedule;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject;
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Classes\ValueObjects\Constants\TransportType;
use App\Http\Resources\PackingListResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Carbon\Carbon;
class CreateWarehousePackingListLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created Warehouse PackingList',
'message' => 'You have successfully created a new Warehouse PackingList'
];
}
/** @var CreatePackingListProcessor */
private $createPackingListProcessor;
/** @var GeneratesPackingListReferenceNumber */
private $generatesPackingListReferenceNumber;
/** @var CreatesTransport */
private $createsTransport;
/** @var CreatePackageProcessor */
private $createPackageProcessor;
/** @var CreatesSchedule */
private $createsSchedule;
/** @var FetchesOrder */
private $fetchesOrder;
/**
* CreatePackingListLogic constructor.
* @param CreatePackingListProcessor $createPackingListProcessor
* @param FetchesOrder $fetchesOrder
*/
public function __construct(
CreatePackingListProcessor $createPackingListProcessor,
CreatesTransport $createsTransport,
CreatesSchedule $createsSchedule,
CreatePackageProcessor $createPackageProcessor,
GeneratesPackingListReferenceNumber $generatesPackingListReferenceNumber,
FetchesOrder $fetchesOrder
)
{
$this->createPackingListProcessor = $createPackingListProcessor;
$this->createsTransport = $createsTransport;
$this->createsSchedule = $createsSchedule;
$this->createPackageProcessor = $createPackageProcessor;
$this->generatesPackingListReferenceNumber = $generatesPackingListReferenceNumber;
$this->fetchesOrder = $fetchesOrder;
}
/**
* @param Request $request
* @return JsonResponse
*/
public function logic(Request $request) : JsonResponse
{
$order = $this->fetchesOrder->execute(['id' => $request->input('order_id')]);
$reference_number = $this->generatesPackingListReferenceNumber->execute();
$packingListObject = new PackingListObject(
$reference_number,
$order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id,
PackingListType::WAREHOUSE_RECEIVE_LIST,
ApprovalStatus::PENDING_SUBMISSION
);
$packingList = $this->createPackingListProcessor->execute($packingListObject, $order);
$transportObject = new TransportObject(TransportType::LAND, null, $request->input('tracking'), Carbon::parse($request->input('receive_date')), Carbon::parse($request->input('receive_date')), ApprovalStatus::APPROVED);
$transport = $this->createsTransport->execute($transportObject, $packingList);
$scheduleObject = new ScheduleObject(Carbon::parse($request->input('receive_date')), Carbon::parse($request->input('receive_date')), ApprovalStatus::APPROVED);
$schedule = $this->createsSchedule->execute($transport, $scheduleObject);
$packages = $request->input('packages');
foreach ($packages as $key => $row) {
$packageObject = new PackageObject(
$row['type'],
$row['description'],
$row['width'],
$row['height'],
$row['length'],
$row['weight'],
$row['quantity'],
ApprovalStatus::APPROVED,
$row['reference'],
);
$this->createPackageProcessor->execute($packageObject, $packingList);
}
return $this->resourceResponse(new PackingListResource($packingList));
}
}
@@ -0,0 +1,61 @@
<?php
namespace App\Classes\Modules\PackingLists\ControllersLogic\Containers;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\PackingLists\Services\Containers\UpdatesContainerStatus;
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Http\Resources\ContainerResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Carbon\Carbon;
class CompleteContainerLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Updated Container',
'message' => 'You have successfully updated the Container'
];
}
/** @var UpdatesContainerStatus */
private $updatesContainerStatus;
/** @var FetchesContainer */
private $fetchesContainer;
/**
* CompleteContainerLogic constructor.
* @param CanUpdateContainer $canUpdateContainer
* @param UpdatesContainerStatus $updatesContainerStatus
* @param FetchesContainer $fetchesContainer
*/
public function __construct(UpdatesContainerStatus $updatesContainerStatus, FetchesContainer $fetchesContainer)
{
$this->updatesContainerStatus = $updatesContainerStatus;
$this->fetchesContainer = $fetchesContainer;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
$query = $this->updatesContainerStatus->execute($container, ApprovalStatus::COMPLETED);
return $this->resourceResponse(new ContainerResource($container));
}
}
@@ -23,8 +23,8 @@ class CreateContainerLogic extends AbstractControllerLogic
*/
protected function notification():array {
return [
'title' => 'Created PackingList',
'message' => 'You have successfully created a new PackingList'
'title' => 'Created Container',
'message' => 'You have successfully created a new Container'
];
}
@@ -66,8 +66,6 @@ class CreateContainerLogic extends AbstractControllerLogic
$request->input('status')
);
$company = $this->fetchesCompanyModule->execute(['id' => 2]);
$this->canCreateContainer->passes($object);
$query = $this->createsContainer->execute($object, $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]));
@@ -0,0 +1,121 @@
<?php
namespace App\Classes\Modules\PackingLists\ControllersLogic\Containers;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
use App\Classes\Modules\PackingLists\Services\Containers\CreatesContainer;
use App\Classes\Modules\PackingLists\Standards\Rules\Containers\CanCreateContainer;
use App\Classes\Modules\Transports\Services\CreatesTransport;
use App\Classes\Modules\Schedules\Services\CreatesSchedule;
use App\Classes\Modules\PackingLists\DataTransferObjects\ContainerObject;
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Classes\ValueObjects\Constants\TransportType;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Http\Resources\ContainerResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Carbon\Carbon;
class CreateLoadContainerLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created Container',
'message' => 'You have successfully created a new Container'
];
}
/** @var CanCreateContainer */
private $canCreateContainer;
/** @var FetchesPackingList */
private $fetchesPackingList;
/** @var FetchesCompanyModule */
private $fetchesCompanyModule;
/** @var CreatesPackingList */
private $createsContainer;
/** @var CreatesTransport */
private $createsTransport;
/** @var CreatesSchedule */
private $createsSchedule;
public function __construct(
CanCreateContainer $canCreateContainer,
FetchesPackingList $fetchesPackingList,
FetchesCompanyModule $fetchesCompanyModule,
CreatesContainer $createsContainer,
CreatesTransport $createsTransport,
CreatesSchedule $createsSchedule
)
{
$this->canCreateContainer = $canCreateContainer;
$this->fetchesPackingList = $fetchesPackingList;
$this->fetchesCompanyModule = $fetchesCompanyModule;
$this->createsContainer = $createsContainer;
$this->createsTransport = $createsTransport;
$this->createsSchedule = $createsSchedule;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$object = new ContainerObject(
$request->input('container_reference'),
$request->input('container_number'),
$request->input('seal_reference'),
$request->input('container_type'),
ApprovalStatus::APPROVED
);
$this->canCreateContainer->passes($object);
$container = $this->createsContainer->execute($object, $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]));
$transportObject = new TransportObject(
TransportType::LAND, null,
$request->input('tracking'),
Carbon::parse($request->input('eta')),
Carbon::parse($request->input('etd')),
ApprovalStatus::APPROVED
);
$transport = $this->createsTransport->execute($transportObject, $container);
$scheduleObject = new ScheduleObject(
Carbon::parse($request->input('eta')),
Carbon::parse($request->input('etd')),
ApprovalStatus::APPROVED
);
$schedule = $this->createsSchedule->execute($transport, $scheduleObject);
return $this->resourceResponse(new ContainerResource($container));
}
}
{
"container_reference": "",
"container_number": "",
"seal_reference": "",
"container_type": "",
}
@@ -0,0 +1,82 @@
<?php
namespace App\Classes\Modules\PackingLists\ControllersLogic\Containers;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
use App\Classes\Modules\Schedules\Services\CreatesSchedule;
use App\Classes\Modules\Schedules\Services\UpdatesScheduleStatus;
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Http\Resources\ContainerResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Carbon\Carbon;
class RescheduleContainerLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Reschedule Container',
'message' => 'You have successfully Reschedule Container'
];
}
/** @var FetchesContainer */
private $fetchesContainer;
/** @var UpdatesScheduleStatus */
private $updatesScheduleStatus;
/** @var CreatesSchedule */
private $createsSchedule;
/**
* DeleteContainerControllersLogic constructor.
* @param FetchesContainer $fetchesContainer
* @param CreatesSchedule $createsSchedule
*/
public function __construct(FetchesContainer $fetchesContainer, UpdatesScheduleStatus $updatesScheduleStatus, CreatesSchedule $createsSchedule)
{
$this->fetchesContainer = $fetchesContainer;
$this->updatesScheduleStatus = $updatesScheduleStatus;
$this->createsSchedule = $createsSchedule;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
$transport = $container->transports()->first();
$old_sechedule = $transport->schedules()->first();
$this->updatesScheduleStatus->execute($old_sechedule, ApprovalStatus::REJECTED);
$scheduleObject = new ScheduleObject(
Carbon::parse($request->input('eta')),
Carbon::parse($request->input('etd')),
ApprovalStatus::APPROVED
);
$schedule = $this->createsSchedule->execute($transport, $scheduleObject);
return $this->resourceResponse(new ContainerResource($container));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -0,0 +1,60 @@
<?php
namespace App\Classes\Modules\PackingLists\ControllersLogic\Containers;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Transports\Services\UpdatesDispatchDateTransport;
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
use App\Http\Resources\ContainerResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Carbon\Carbon;
class UpdateDispatchDateContainerLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Updated Dispatch Date Container',
'message' => 'You have successfully updated the Dispatch Date Container'
];
}
/** @var UpdatesDispatchDateTransport */
private $updatesDispatchDateTransport;
/** @var FetchesContainer */
private $fetchesContainer;
/**
* UpdateDispatchDateContainerLogic constructor.
* @param CanUpdateContainer $canUpdateContainer
* @param UpdatesDispatchDateTransport $updatesDispatchDateTransport
* @param FetchesContainer $fetchesContainer
*/
public function __construct(UpdatesDispatchDateTransport $updatesDispatchDateTransport, FetchesContainer $fetchesContainer)
{
$this->updatesDispatchDateTransport = $updatesDispatchDateTransport;
$this->fetchesContainer = $fetchesContainer;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
$transport = $container->transports()->first();
$query = $this->updatesDispatchDateTransport->execute($transport, Carbon::parse($request->input('dispatch_date')));
return $this->resourceResponse(new ContainerResource($container));
}
}
@@ -0,0 +1,60 @@
<?php
namespace App\Classes\Modules\PackingLists\ControllersLogic\Containers;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Transports\Services\UpdatesDropDateTransport;
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
use App\Http\Resources\ContainerResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Carbon\Carbon;
class UpdateDropDateContainerLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Updated Drop Date Container',
'message' => 'You have successfully updated the Drop Date Container'
];
}
/** @var UpdatesDropDateTransport */
private $updatesDropDateTransport;
/** @var FetchesContainer */
private $fetchesContainer;
/**
* UpdateDropDateContainerLogic constructor.
* @param CanUpdateContainer $canUpdateContainer
* @param UpdatesDropDateTransport $updatesDropDateTransport
* @param FetchesContainer $fetchesContainer
*/
public function __construct(UpdatesDropDateTransport $updatesDropDateTransport, FetchesContainer $fetchesContainer)
{
$this->updatesDropDateTransport = $updatesDropDateTransport;
$this->fetchesContainer = $fetchesContainer;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
$transport = $container->transports()->first();
$query = $this->updatesDropDateTransport->execute($transport, Carbon::parse($request->input('drop_date')));
return $this->resourceResponse(new ContainerResource($container));
}
}
@@ -72,7 +72,6 @@ class CreatePackageLogic extends AbstractControllerLogic
$request->input('height'),
$request->input('length'),
$request->input('weight'),
0,
$request->input('quantity'),
ApprovalStatus::PENDING_VERIFICATION);
@@ -20,7 +20,7 @@ class CreatePackingListProcessor
/**
* CreatePackingListLogic constructor.
* CreatePackingListProcessor constructor.
* @param CanCreatePackingList $canCreatePackingList
* @param CreatesPackingList $createsPackingList
*/
@@ -0,0 +1,21 @@
<?php
namespace App\Classes\Modules\PackingLists\Services;
use App\Models\Order;
class ChecksIfPackingListReferenceNumberExists
{
private $repository;
public function __construct(Order $repository)
{
$this->repository = $repository;
}
public function execute(string $reference_number): bool {
return $this->repository->where('reference', $reference_number)->exists();
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Classes\Modules\PackingLists\Services\Containers;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Container;
class UpdatesContainerStatus extends AbstractUpdateRecord
{
/**
* @param Container $model
* @param int $status
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Container $model, int $status) {
$model->status = $status;
return $this->handler($model);
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Classes\Modules\PackingLists\Services;
class GeneratesPackingListReferenceNumber
{
/** @var ChecksIfPackingListReferenceNumberExists */
private $checksIfPackingListReferenceNumberExists;
/**
* GeneratesTransactionBillNo constructor.
* @param ChecksIfPackingListReferenceNumberExists $checksIfPackingListRefrenceNumberExists
*/
public function __construct(ChecksIfPackingListReferenceNumberExists $checksIfPackingListReferenceNumberExists)
{
$this->checksIfPackingListReferenceNumberExists = $checksIfPackingListReferenceNumberExists;
}
/**
* @return string
*/
public function execute(): string {
$referenceNumber = mt_rand(10000000, 99999999);
return !$this->checksIfPackingListReferenceNumberExists->execute($referenceNumber) ? $referenceNumber : self::execute();
}
}
@@ -23,7 +23,7 @@ class ScheduleObject implements DataTransferObject
* @param Carbon $eta
* @param int $status
*/
public function __construct(Carbon $etd, Carbon $eta, int $status)
public function __construct(?Carbon $etd, ?Carbon $eta, int $status)
{
$this->etd = $etd;
$this->eta = $eta;
@@ -33,7 +33,7 @@ class ScheduleObject implements DataTransferObject
/**
* @return Carbon
*/
public function getEtd(): Carbon
public function getEtd(): ?Carbon
{
return $this->etd;
}
@@ -41,7 +41,7 @@ class ScheduleObject implements DataTransferObject
/**
* @return Carbon
*/
public function getEta(): Carbon
public function getEta(): ?Carbon
{
return $this->eta;
}
@@ -0,0 +1,23 @@
<?php
namespace App\Classes\Modules\Schedules\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Schedule;
class UpdatesScheduleStatus extends AbstractUpdateRecord
{
/**
* @param Schedule $model
* @param int $status
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Schedule $model, int $status) {
$model->status = $status;
return $this->handler($model);
}
}
@@ -0,0 +1,22 @@
<?php
namespace App\Classes\Modules\Transports\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
use App\Models\Transport;
class UpdatesDispatchDateTransport extends AbstractUpdateRecord
{
/**
* @param Transport $model
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Transport $model, $date) {
$model->dispatch_date = $date;
return $this->handler($model);
}
}
@@ -0,0 +1,22 @@
<?php
namespace App\Classes\Modules\Transports\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
use App\Models\Transport;
class UpdatesDropDateTransport extends AbstractUpdateRecord
{
/**
* @param Transport $model
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Transport $model, $date) {
$model->drop_date = $date;
return $this->handler($model);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Orders;
use App\Classes\Modules\Orders\ControllersLogic\CreateShippingPackingListLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateShippingPackingListController
{
/**
* @param Request $request
* @param CreateShippingPackingListLogic $logic
* @return JsonResponse
*/
public function create(Request $request, CreateShippingPackingListLogic $logic): JsonResponse
{
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Orders;
use App\Classes\Modules\Orders\ControllersLogic\CreateWarehousePackingListLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateWarehousePackingListController
{
/**
* @param Request $request
* @param CreateWarehousePackingListLogic $logic
* @return JsonResponse
*/
public function create(Request $request, CreateWarehousePackingListLogic $logic): JsonResponse
{
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\PackingLists\Containers;
use App\Classes\Modules\PackingLists\ControllersLogic\Containers\CompleteContainerLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CompleteContainerController
{
/**
* @param Request $request
* @param CompleteContainerLogic $logic
* @return JsonResponse
*/
public function complete(Request $request, CompleteContainerLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\PackingLists\Containers;
use App\Classes\Modules\PackingLists\ControllersLogic\Containers\CreateLoadContainerLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateLoadContainerController
{
/**
* @param Request $request
* @param CreateLoadContainerLogic $logic
* @return JsonResponse
*/
public function create(Request $request, CreateLoadContainerLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Http\Controllers\PackingLists\Containers;
use App\Classes\Modules\PackingLists\ControllersLogic\Containers\RescheduleContainerLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class RescheduleContainerController
{
/**
* @param Request $request
* @param RescheduleContainerLogic $logic
* @return JsonResponse
*/
public function reschedule(Request $request, RescheduleContainerLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\PackingLists\Containers;
use App\Classes\Modules\PackingLists\ControllersLogic\Containers\UpdateDispatchDateContainerLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateDispatchDateContainerController
{
/**
* @param Request $request
* @param UpdateDispatchDateContainerLogic $logic
* @return JsonResponse
*/
public function update(Request $request, UpdateDispatchDateContainerLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\PackingLists\Containers;
use App\Classes\Modules\PackingLists\ControllersLogic\Containers\UpdateDropDateContainerLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateDropDateContainerController
{
/**
* @param Request $request
* @param UpdateDropDateContainerLogic $logic
* @return JsonResponse
*/
public function update(Request $request, UpdateDropDateContainerLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
+1 -7
View File
@@ -32,13 +32,7 @@ class OrderResource extends JsonResource
'address_change_request' => new AddressResource($this->addressesPendingVerification()->first()),
$this->mergeWhen($this->relationLoaded('parcels'), [
'origin_warehouse_packages' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){
return $query->where('type', PackingListType::SHIPPING_PACKING_LIST)->whereDoesntHave('containers', function($query) {
return $query->whereHas('transports', function($query){
return $query->whereHas('schedules', function($query){
return $query->where('etd', '<', Carbon::now());
});
});
});
return $query->where('type', PackingListType::SHIPPING_PACKING_LIST);
})->get()),
'in_transit_packages' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){
return $query->where('type', PackingListType::SHIPPING_PACKING_LIST)->whereHas('containers', function($query) {
+2 -2
View File
@@ -16,8 +16,8 @@ class ScheduleResource extends JsonResource
{
return [
'id' => $this->id,
'etd' => $this->etd->format('d-m-Y'),
'eta' => $this->eta->format('d-m-Y'),
'etd' => $this->etd ? $this->etd->format('d-m-Y') : 'n/a',
'eta' => $this->eta ? $this->eta->format('d-m-Y') : 'n/a',
'status' => $this->status,
];
}
+1
View File
@@ -30,6 +30,7 @@
"v-money": "^0.8.1",
"vue": "^2.6.10",
"vue-avatar": "^2.1.8",
"vue-bootstrap-datetimepicker": "^5.0.1",
"vue-debounce": "^2.6.0",
"vue-template-compiler": "^2.6.10",
"vue-the-mask": "^0.11.1",
-1
View File
@@ -560,7 +560,6 @@ input[type=checkbox]:checked + label{
padding-left: 12px;
padding-right: 12px;
padding-bottom: 4px;
overflow: hidden;
width: 100%;
@include transition(background-color .2s ease);
&.required:after {
@@ -0,0 +1,90 @@
<template>
<div class="row" @keyup.enter="submitForm">
<div class="col">
<div class="row m-b-20 text-info">
<div class="col">
<h3 class="text-left">Create Load Container</h3>
</div>
</div>
<error-message-component class="m-b-20" :error="error"></error-message-component>
<div class="row">
<div class="col">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.receive_date">
<label class="text-primary">Receive Date</label>
<date-picker-component :parameters="parameters" :value="'receive_date'"></date-picker-component>
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.tracking">
<label class="text-primary">Tracking</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.tracking">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.company_module_id">
<label class="text-primary">Company Module</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.company_module_id">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.container_reference">
<label class="text-primary">Container Reference</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.container_reference">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.container_number">
<label class="text-primary">Container Number</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.container_number">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.seal_reference">
<label class="text-primary">Seal Reference</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.seal_reference">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.container_type">
<label class="text-primary">Container Type</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.container_type">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.status">
<label class="text-primary">Status</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.status">
</validation-wrapper-component>
<div class="row m-t-15 align-items-center justify-content-center">
<div class="col">
<div class="btn btn-block btn-lg btn-primary b-rad-none no-border" @click="submitForm">Submit</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import createContainerFormValidation from '../../../general/mixins/containers/validation/createContainerFormValidation';
import componentHandler from '../../../general/mixins/componentHandler';
import modalFormHandler from '../../../general/mixins/modalFormHandler';
export default {
data() {
return {
error: '',
parameters: {
tracking: this.tracking,
receive_date: this.receive_date,
company_module_id: this.company_module_id,
container_reference: this.container_reference,
container_number: this.container_number,
seal_reference: this.seal_reference,
container_type: this.container_type,
status: this.status,
}
};
},
methods: {
submitForm(){
this.submit(this.route('api.packing_list.container.create.load'), 'post', this.section, true, true)
}
},
mixins: [createContainerFormValidation, componentHandler, modalFormHandler]
}
</script>
@@ -0,0 +1,37 @@
<template>
<div >
<date-picker v-model.trim="date" :config="options" @dp-change="onChange"></date-picker>
</div>
</template>
<script>
import datePicker from 'vue-bootstrap-datetimepicker';
export default {
components: {
datePicker
},
props: {
value: {
required: false
},
parameters: {
required: false
}
},
data(){
return {
date: '',
options: {
format: 'YYYY/MM/DD',
useCurrent: true,
}
}
},
methods: {
onChange(){
this.parameters[this.value] = this.date;
}
},
}
</script>
@@ -54,7 +54,7 @@
</div>
<div class="col-auto" v-if="$store.getters.isAdmin">
<small class="fs-10 all-caps muted">Container</small>
<p class="no-margin bold">{{item.container.container_reference}}</p>
<p class="no-margin bold">{{item.container ? item.container.container_reference : '-'}}</p>
</div>
</div>
<div class="row">
@@ -69,7 +69,7 @@
</div>
</div>
</div>
<div class="row p-t-10 p-b-10">
<div class="row p-t-10 p-b-10" v-if="item.container">
<div class="col-auto p-r-0 p-t-10">
<div class="row" v-for="schedule in item.container.transport.schedule_history" :key="schedule.id">
<div class="col">
@@ -0,0 +1,107 @@
<template>
<div class="row" @keyup.enter="submitForm">
<div class="col">
<div class="row m-b-20 text-info">
<div class="col">
<h3 class="text-left">Create Package</h3>
</div>
</div>
<error-message-component class="m-b-20" :error="error"></error-message-component>
<div class="row">
<div class="col">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.type">
<label class="text-primary">Type</label>
<select-component :options="[{'id': 0, 'text': 'Carton'}, {'id': 1, 'text': 'Pallet'}]" v-model="parameters.type"></select-component>
<input type="text" class="form-control fs-12" v-model.trim="parameters.type">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.description">
<label class="text-primary">Description</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.description">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.width">
<label class="text-primary">Width</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.width">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.height">
<label class="text-primary">Height</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.height">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.length">
<label class="text-primary">Length</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.length">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.weight">
<label class="text-primary">Weight</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.weight">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.quantity">
<label class="text-primary">Quantity</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.quantity">
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.reference">
<label class="text-primary">Reference</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.reference">
</validation-wrapper-component>
<div class="row m-t-15 align-items-center justify-content-center">
<div class="col">
<div class="btn btn-block btn-lg btn-primary b-rad-none no-border" @click="submitForm">Submit</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import createPackageFormValidation from '../../../general/mixins/orders/validation/createPackageFormValidation';
import componentHandler from '../../../general/mixins/componentHandler';
import modalFormHandler from '../../../general/mixins/modalFormHandler';
export default {
props: {
id: {
type: Number,
required: true
},
section:{
type: String,
required: true
}
},
data() {
return {
error: '',
parameters: {
order_id: this.id,
type: this.type,
description: this.description,
width: this.width,
height: this.height,
length: this.length,
weight: this.weight,
quantity: this.quantity,
reference: this.reference
}
};
},
watch: {
'id': function () {
this.parameters.order_id = this.id;
}
},
methods: {
submitForm(){
this.submit(this.route('api.packing_list.package.create'), 'post', this.section, true, true)
}
},
mixins: [createPackageFormValidation, componentHandler, modalFormHandler]
}
</script>
@@ -0,0 +1,60 @@
<template>
<div class="row" @keyup.enter="submitForm">
<div class="col">
<div class="row m-b-20 text-info">
<div class="col">
<h3 class="text-left">Create Shipping Packing List</h3>
</div>
</div>
<error-message-component class="m-b-20" :error="error"></error-message-component>
<div class="row">
<div class="col">
<package-form-component :section="section" :packages="parameters.packages"></package-form-component>
<div class="row m-t-15 align-items-center justify-content-center">
<div class="col">
<div class="btn btn-block btn-lg btn-primary b-rad-none no-border" @click="submitForm">Submit</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
import modalFormHandler from '../../../general/mixins/modalFormHandler';
export default {
props: {
id: {
type: Number,
required: true
},
section:{
type: String,
required: true
}
},
data() {
return {
error: '',
parameters: {
order_id: this.id,
packages: []
}
};
},
watch: {
'id': function () {
this.parameters.order_id = this.id;
}
},
methods: {
submitForm(){
this.submit(this.route('api.order.create.shipping.packing_list'), 'post', this.section, true, true)
}
},
mixins: [componentHandler, modalFormHandler]
}
</script>
@@ -0,0 +1,71 @@
<template>
<div class="row" @keyup.enter="submitForm">
<div class="col">
<div class="row m-b-20 text-info">
<div class="col">
<h3 class="text-left">Create Warehouse Packing List</h3>
</div>
</div>
<error-message-component class="m-b-20" :error="error"></error-message-component>
<div class="row">
<div class="col">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.receive_date">
<label class="text-primary">Receive Date</label>
<date-picker-component :parameters="parameters" :value="'receive_date'"></date-picker-component>
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.tracking">
<label class="text-primary">Tracking</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.tracking">
</validation-wrapper-component>
<package-form-component :section="section" :packages="parameters.packages"></package-form-component>
<div class="row m-t-15 align-items-center justify-content-center">
<div class="col">
<div class="btn btn-block btn-lg btn-primary b-rad-none no-border" @click="submitForm">Submit</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import createPackageListFormValidation from '../../../general/mixins/orders/validation/createPackageListFormValidation';
import componentHandler from '../../../general/mixins/componentHandler';
import modalFormHandler from '../../../general/mixins/modalFormHandler';
export default {
props: {
id: {
type: Number,
required: true
},
section:{
type: String,
required: true
}
},
data() {
return {
error: '',
parameters: {
order_id: this.id,
tracking: this.tracking,
receive_date: this.receive_date,
packages: []
}
};
},
watch: {
'id': function () {
this.parameters.order_id = this.id;
}
},
methods: {
submitForm(){
this.submit(this.route('api.order.create.warehouse.packing_list'), 'post', this.section, true, true)
}
},
mixins: [createPackageListFormValidation, componentHandler, modalFormHandler]
}
</script>
@@ -0,0 +1,194 @@
<template>
<div class="row">
<div class="col">
<div class="row no-margin">
<div class="col p-t-25 p-t-25">
<div class="row">
<div class="col p-b-10 b-b b-grey">
<div class="row align-items-center">
<div class="col-auto p-r-0" style="min-width: 40px;">
<div class="font-heading all-caps fs-10"></div>
</div>
<div class="col p-r-5">
<div class="font-heading all-caps fs-10 muted">Type</div>
</div>
<div class="col-4 p-r-5 p-l-5">
<div class="font-heading all-caps fs-10 muted">Description</div>
</div>
<div class="col text-center p-r-5 p-l-5">
<div class="font-heading all-caps fs-10 muted">Width</div>
</div>
<div class="col text-center p-r-5 p-l-5">
<div class="font-heading all-caps fs-10 muted">Height</div>
</div>
<div class="col-1 text-center p-r-5 p-l-5">
<div class="font-heading all-caps fs-10 muted">Length</div>
</div>
<div class="col-1 text-right p-r-5 p-l-5">
<div class="font-heading all-caps fs-10 muted">Weight</div>
</div>
<div class="col-1 text-right p-r-5 p-l-5">
<div class="font-heading all-caps fs-10 muted">Quantity</div>
</div>
<div class="col-1 text-right p-r-5 p-l-5">
<div class="font-heading all-caps fs-10 muted">Reference</div>
</div>
<div class="col-auto text-center">
<button class="btn btn-xs btn-outline-success b-rad-none invisible"><i class="fa fa-check"></i></button>
</div>
</div>
</div>
</div>
<div class="row m-b-20">
<div class="col">
<div class="row" v-if="!submitted">
<div class="col p-b-5 p-t-5 b-b b-grey">
<div class="row align-items-center">
<div class="col-auto p-r-0" style="min-width: 40px;">
<div class="font-heading all-caps fs-10"></div>
</div>
<div class="col p-r-5">
<select-component :options="[{'id': 0, 'text': 'Carton'}, {'id': 1, 'text': 'Pallet'}]" v-model="product.type"></select-component>
</div>
<div class="col-4 p-r-5 p-l-5">
<textarea class="form-control fs-10 b-rad-none" placeholder="Description" rows="1" @keyup="onlyEnglish($event)" v-model="product.description"></textarea>
</div>
<div class="col text-center p-r-5 p-l-5">
<input type="text" class="form-control fs-10 b-rad-none text-center" placeholder="Width" v-model.lazy="product.width"/>
</div>
<div class="col text-center p-r-5 p-l-5">
<input type="text" class="form-control fs-10 b-rad-none text-center" placeholder="Height" v-model.lazy="product.height"/>
</div>
<div class="col text-center p-r-5 p-l-5">
<input type="text" class="form-control fs-10 b-rad-none text-center" placeholder="Length" v-model.lazy="product.length"/>
</div>
<div class="col text-center p-r-5 p-l-5">
<input type="text" class="form-control fs-10 b-rad-none text-center" placeholder="Weight" v-model.lazy="product.weight"/>
</div>
<div class="col text-center p-r-5 p-l-5">
<input type="text" class="form-control fs-10 b-rad-none text-center" placeholder="Quantity" v-model.lazy="product.quantity"/>
</div>
<div class="col text-center p-r-5 p-l-5">
<input type="text" class="form-control fs-10 b-rad-none text-center" placeholder="Reference" v-model.lazy="product.reference"/>
</div>
<div class="col-auto">
<button class="btn btn-xs btn-outline-success b-rad-none" @click="addPackage()"><i class="fa fa-check"></i></button>
</div>
</div>
</div>
</div>
<div class="row" v-for="(item, index) in packages">
<div class="col p-b-10 p-t-10 b-b b-grey">
<div class="row align-items-center">
<div class="col-auto p-r-0" style="min-width: 40px;">
<div class="font-heading all-caps fs-10">{{index + 1}}</div>
</div>
<div class="col p-r-5">
<div class="font-heading all-caps fs-10">{{item.type}}</div>
</div>
<div class="col-4 p-r-5 p-l-5">
<div class="font-heading all-caps fs-10">{{item.description}}</div>
</div>
<div class="col text-center p-r-5 p-l-5">
<div class="font-heading all-caps fs-10">{{item.width}}</div>
</div>
<div class="col text-center p-r-5 p-l-5">
<div class="font-heading all-caps fs-10">{{item.height}}</div>
</div>
<div class="col-1 text-center p-r-5 p-l-5">
<div class="font-heading all-caps fs-10">{{item.length}}</div>
</div>
<div class="col-1 text-center p-r-5 p-l-5">
<div class="font-heading all-caps fs-10">{{item.weight}}</div>
</div>
<div class="col-1 text-right p-r-5 p-l-5">
<div class="font-heading all-caps fs-10">{{item.quantity}}</div>
</div>
<div class="col-1 text-right p-r-5 p-l-5">
<div class="font-heading all-caps fs-10">{{item.reference}}</div>
</div>
<div class="col-auto">
<button class="btn btn-xs btn-outline-danger b-rad-none" v-if="!submitted" @click="removePackage(index)"><i class="fa fa-times"></i></button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import formHandler from '../../../general/mixins/formHandler';
export default {
props: {
packages: {
type: Array,
required: true
},
},
data(){
return {
submitted: false,
product: {
type: '',
description: '',
width: 0,
height: 0,
length: 0,
weight: 0,
quantity: 1,
reference: '',
},
}
},
methods: {
onlyEnglish(event){
let value = event.target.value,
regex = /^[^~`!@#$%^&*()_+=[\]\{}|;':",.\/<>?a-zA-Z0-9-]+$/;
event.preventDefault();
if(regex.test(value)){
this.product.description = value.replace(regex, '');
}
},
addPackage(){
this.packages.push({
type: this.product.type,
description: this.product.description,
width: this.product.width,
height: this.product.height,
length: this.product.length,
weight: this.product.weight,
quantity: this.product.quantity,
reference: this.product.reference,
});
this.product = {
type: '',
description: '',
width: 0,
height: 0,
length: 0,
weight: 0,
quantity: 1,
reference: 0,
};
},
removePackage(index){
this.packages.splice(index, 1);
}
},
mixins: [formHandler]
}
</script>
@@ -218,7 +218,7 @@
<div class="row no-margin">
<div class="col bg-master-lightest padding-30">
<div class="row tabsContainer tabContent active" tab-name="originWarehouse">
<div class="col-4">
<div class="col-5">
<div class="row">
<div class="col bg-complete-lighter p-b-10">
<div class="row align-item-center p-t-10 p-b-10">
@@ -232,6 +232,12 @@
viewBox="0 0 172 172"
style=" fill:#000000;"><g fill="none" fill-rule="nonzero" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><path d="M0,172v-172h172v172z" fill="none"></path><g fill="#000000"><path d="M8.6,23.65c-2.37676,0 -4.3,1.92324 -4.3,4.3c0,2.37676 1.92324,4.3 4.3,4.3c2.37676,0 4.3,-1.92324 4.3,-4.3c4.77031,0 8.6,3.82969 8.6,8.6v85.10137c0,8.28926 6.76074,15.05 15.05,15.05h0.50391c0.99941,2.98145 3.72051,5.19863 7.02109,5.19863h4.43438c-0.74746,1.26816 -1.20938,2.72949 -1.20938,4.3c0,4.72832 3.87168,8.6 8.6,8.6c4.72832,0 8.6,-3.87168 8.6,-8.6c0,-1.57051 -0.46191,-3.03184 -1.20938,-4.3h66.91875c-0.74746,1.26816 -1.20937,2.72949 -1.20937,4.3c0,4.72832 3.87168,8.6 8.6,8.6c4.72832,0 8.6,-3.87168 8.6,-8.6c0,-1.57051 -0.46191,-3.03184 -1.20937,-4.3h4.43437c3.36777,0 6.13926,-2.30117 7.08828,-5.375h0.43672v-2.15c0,-3.90527 -3.04863,-7.12188 -6.87832,-7.45781c0.26035,-0.69707 0.42832,-1.43613 0.42832,-2.21719v-40.85c0,-1.67129 -0.73066,-3.14941 -1.78887,-4.3c1.0582,-1.15059 1.78887,-2.62871 1.78887,-4.3v-43c0,-3.53574 -2.91426,-6.45 -6.45,-6.45h-94.6c-3.53574,0 -6.45,2.91426 -6.45,6.45v43c0,1.67129 0.73066,3.14941 1.78887,4.3c-1.0582,1.15059 -1.78887,2.62871 -1.78887,4.3v40.85c0,0.78105 0.16797,1.52012 0.42832,2.21719c-3.15781,0.27715 -5.75293,2.51953 -6.57598,5.48418h-0.30234c-5.96289,0 -10.75,-4.78711 -10.75,-10.75v-85.10137c0,-7.09668 -5.80332,-12.9 -12.9,-12.9zM49.45,30.1h94.6c1.21777,0 2.15,0.93223 2.15,2.15v43c0,1.21777 -0.93223,2.15 -2.15,2.15c-1.17578,0.0168 -2.11641,0.97422 -2.11641,2.15c0,1.17578 0.94062,2.1332 2.11641,2.15c1.21777,0 2.15,0.93223 2.15,2.15v40.85c0,1.21777 -0.93223,2.15 -2.15,2.15h-94.6c-1.21777,0 -2.15,-0.93223 -2.15,-2.15v-40.85c0,-1.21777 0.93223,-2.15 2.15,-2.15c1.17578,-0.0168 2.11641,-0.97422 2.11641,-2.15c0,-1.17578 -0.94063,-2.1332 -2.11641,-2.15c-1.21777,0 -2.15,-0.93223 -2.15,-2.15v-43c0,-1.21777 0.93223,-2.15 2.15,-2.15zM88.15,38.7c-0.77266,-0.0084 -1.49492,0.39473 -1.88965,1.0666c-0.38633,0.67188 -0.38633,1.49492 0,2.1668c0.39473,0.67188 1.11699,1.075 1.88965,1.0666h17.2c0.77266,0.0084 1.49492,-0.39473 1.88965,-1.0666c0.38633,-0.67187 0.38633,-1.49492 0,-2.1668c-0.39472,-0.67187 -1.11699,-1.075 -1.88965,-1.0666zM58.05,77.4c-1.18418,0 -2.15,0.96582 -2.15,2.15c0,1.18418 0.96582,2.15 2.15,2.15c1.18418,0 2.15,-0.96582 2.15,-2.15c0,-1.18418 -0.96582,-2.15 -2.15,-2.15zM66.65,77.4c-1.18418,0 -2.15,0.96582 -2.15,2.15c0,1.18418 0.96582,2.15 2.15,2.15c1.18418,0 2.15,-0.96582 2.15,-2.15c0,-1.18418 -0.96582,-2.15 -2.15,-2.15zM75.25,77.4c-1.18418,0 -2.15,0.96582 -2.15,2.15c0,1.18418 0.96582,2.15 2.15,2.15c1.18418,0 2.15,-0.96582 2.15,-2.15c0,-1.18418 -0.96582,-2.15 -2.15,-2.15zM83.85,77.4c-1.18418,0 -2.15,0.96582 -2.15,2.15c0,1.18418 0.96582,2.15 2.15,2.15c1.18418,0 2.15,-0.96582 2.15,-2.15c0,-1.18418 -0.96582,-2.15 -2.15,-2.15zM92.45,77.4c-1.18418,0 -2.15,0.96582 -2.15,2.15c0,1.18418 0.96582,2.15 2.15,2.15c1.18418,0 2.15,-0.96582 2.15,-2.15c0,-1.18418 -0.96582,-2.15 -2.15,-2.15zM101.05,77.4c-1.18418,0 -2.15,0.96582 -2.15,2.15c0,1.18418 0.96582,2.15 2.15,2.15c1.18418,0 2.15,-0.96582 2.15,-2.15c0,-1.18418 -0.96582,-2.15 -2.15,-2.15zM109.65,77.4c-1.18418,0 -2.15,0.96582 -2.15,2.15c0,1.18418 0.96582,2.15 2.15,2.15c1.18418,0 2.15,-0.96582 2.15,-2.15c0,-1.18418 -0.96582,-2.15 -2.15,-2.15zM118.25,77.4c-1.18418,0 -2.15,0.96582 -2.15,2.15c0,1.18418 0.96582,2.15 2.15,2.15c1.18418,0 2.15,-0.96582 2.15,-2.15c0,-1.18418 -0.96582,-2.15 -2.15,-2.15zM126.85,77.4c-1.18418,0 -2.15,0.96582 -2.15,2.15c0,1.18418 0.96582,2.15 2.15,2.15c1.18418,0 2.15,-0.96582 2.15,-2.15c0,-1.18418 -0.96582,-2.15 -2.15,-2.15zM135.45,77.4c-1.18418,0 -2.15,0.96582 -2.15,2.15c0,1.18418 0.96582,2.15 2.15,2.15c1.18418,0 2.15,-0.96582 2.15,-2.15c0,-1.18418 -0.96582,-2.15 -2.15,-2.15zM88.15,90.3c-0.77266,-0.0084 -1.49492,0.39473 -1.88965,1.0666c-0.38633,0.67188 -0.38633,1.49492 0,2.1668c0.39473,0.67188 1.11699,1.075 1.88965,1.0666h17.2c0.77266,0.0084 1.49492,-0.39473 1.88965,-1.0666c0.38633,-0.67187 0.38633,-1.49492 0,-2.1668c-0.39472,-0.67187 -1.11699,-1.075 -1.88965,-1.0666zM44.075,131.15h105.35c1.80566,0 3.225,1.41934 3.225,3.225c0,1.80566 -1.41934,3.225 -3.225,3.225h-105.35c-1.80566,0 -3.225,-1.41934 -3.225,-3.225c0,-1.80566 1.41934,-3.225 3.225,-3.225zM55.9,141.9c2.40195,0 4.3,1.89805 4.3,4.3c0,2.40195 -1.89805,4.3 -4.3,4.3c-2.40195,0 -4.3,-1.89805 -4.3,-4.3c0,-2.40195 1.89805,-4.3 4.3,-4.3zM137.6,141.9c2.40195,0 4.3,1.89805 4.3,4.3c0,2.40195 -1.89805,4.3 -4.3,4.3c-2.40195,0 -4.3,-1.89805 -4.3,-4.3c0,-2.40195 1.89805,-4.3 4.3,-4.3z"></path></g></g></svg>
</div>
<div class="col-auto">
<div data-type="createWarehousePackageList" class="btn btn-sm btn-block bg-white text-info b-rad-sm pointer requestModal">Add</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="stick-up" type="createWarehousePackageList" size="large">
<create-warehouse-package-list-form-component :id="order.id" :section="section"></create-warehouse-package-list-form-component>
</modal-component>
</div>
</div>
<div class="row">
<div class="col">
@@ -243,9 +249,20 @@
</div>
<div class="col">
<div class="row">
<div class="col-12 mb-2">
<div data-type="createShippingPackageList" class="btn btn-sm btn-block bg-white text-info b-rad-sm pointer requestModal">
Add
</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="stick-up" type="createShippingPackageList" size="large">
<create-shipping-package-list-form-component :id="order.id" :section="section"></create-shipping-package-list-form-component>
</modal-component>
</div>
<div class="col">
<div class="row" v-if="order.origin_warehouse_packages.length">
<div class="col">
<div class="row" v-for="group in Math.ceil(order.origin_warehouse_packages.length / 2)">
<div class="col-12 p-r-0" :class="'col-md-'+(12/2)" v-for="item in order.origin_warehouse_packages.slice((group - 1) * 2, group * 2)" v-bind:key="item.id" :data="item">
<package-component :data="item" status="Ready To Ship"></package-component>
@@ -0,0 +1,32 @@
import { required } from "vuelidate/lib/validators";
export default {
validations: {
parameters: {
tracking: {
required
},
receive_date: {
required
},
company_module_id: {
required
},
container_reference: {
required
},
container_number: {
required
},
seal_reference: {
required
},
container_type: {
required
},
status: {
required
}
}
},
}
@@ -0,0 +1,37 @@
import { required, numeric } from "vuelidate/lib/validators";
export default {
validations: {
parameters: {
type: {
required
},
description: {
required
},
width: {
required,
numeric
},
height: {
required,
numeric
},
length: {
required,
numeric
},
weight: {
required,
numeric
},
quantity: {
required,
numeric
},
reference: {
required
}
}
},
}
@@ -0,0 +1,14 @@
import { required } from "vuelidate/lib/validators";
export default {
validations: {
parameters: {
tracking: {
required
},
receive_date: {
required
}
}
},
}
@@ -27,6 +27,12 @@
</div>
<div class="col-auto p-r-0">
<a href="{{route('orders.refresh')}}"><div class="btn btn-sm btn-warning all-caps b-rad-none pointer"><i class="fa fa-refresh m-r-10"></i>Refresh Orders</div></a>
<div data-type="createContainer" class="btn btn-sm btn-block bg-white text-info b-rad-sm pointer requestModal">Add</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="stick-up" type="createContainer" size="large">
<create-load-container-form-component :section="'containerListSection'"></create-load-container-form-component>
</modal-component>
</div>
</div>
@yield('inner_content')
+4
View File
@@ -11,4 +11,8 @@ Route::group(['prefix' => 'order', 'as' => 'order.', 'namespace' => 'Orders'], f
Route::put('/restore/{id}', 'RestoreOrderController@restore')->name('restore');
Route::post('/address/change/request', 'RequestChangeOrderAddressController@request')->name('address.change.request');
Route::put('/address/{id}/status/{status}', 'ApproveChangeOrderAddressController@approve')->name('address.status.update');
Route::post('/create-warehouse-packing-list', 'CreateWarehousePackingListController@create')->name('create.warehouse.packing_list');
Route::post('/create-shipping-packing-list', 'CreateShippingPackingListController@create')->name('create.shipping.packing_list');
// Route::post('/create', 'CreateOrderController@create')->name('create');
});
+5 -1
View File
@@ -20,10 +20,14 @@ Route::group(['namespace' => 'PackingLists', 'as' => 'packing_list.', 'prefix' =
Route::get('/{id}/show', 'FetchContainerController@fetch')->name('show');
Route::get('/list', 'ListContainersController@list')->name('list');
Route::post('/create', 'CreateContainerController@create')->name('create');
Route::post('/create/load', 'CreateLoadContainerController@create')->name('create.load');
Route::put('/update/{id}', 'UpdateContainerController@update')->name('update');
Route::delete('/delete/{id}', 'DeleteContainerController@delete')->name('delete');
Route::put('/assign-packing_list/{id}', 'AssignPackingListContainerController@assign')->name('assign.packing_list');
Route::put('/reschedule/{id}', 'RescheduleContainerController@reschedule')->name('reschedule');
Route::put('/update-dispatch-date/{id}', 'UpdateDispatchDateContainerController@update')->name('update_dispatch_date');
Route::put('/update-drop-date/{id}', 'UpdateDropDateContainerController@update')->name('update_drop_date');
Route::put('/complete/{id}', 'CompleteContainerController@complete')->name('complete');
});
Route::group(['namespace' => 'Packages', 'as' => 'package.', 'prefix' => 'package'], function () {