Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into shipping-queue-ui

# Conflicts:
#	routes/web.php
This commit is contained in:
edmondlang
2021-09-10 16:22:29 +08:00
84 changed files with 1449 additions and 361 deletions
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class WithOwner implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->with('owner');
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class WithPackingLists implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->with('packingLists');
}
}
@@ -3,6 +3,7 @@
namespace App\Classes\Modules\Addresses\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
class AddressObject implements DataTransferObject
{
@@ -38,7 +39,7 @@ class AddressObject implements DataTransferObject
* @param int $postCode
* @param null|string $reference
*/
public function __construct(string $streetOne, ?string $streetTwo, int $countryId, int $stateId, int $districtId, int $postCode, ?string $reference = null)
public function __construct(string $streetOne, ?string $streetTwo, int $countryId, int $stateId, int $districtId, int $postCode, ?string $reference = null, ?int $status = ApprovalStatus::APPROVED)
{
$this->streetOne = $streetOne;
$this->streetTwo = $streetTwo;
@@ -47,6 +48,7 @@ class AddressObject implements DataTransferObject
$this->districtId = $districtId;
$this->postCode = $postCode;
$this->reference = $reference;
$this->status = $status;
}
/**
@@ -105,5 +107,13 @@ class AddressObject implements DataTransferObject
return $this->reference;
}
/**
* @return int
*/
public function getStatus(): int
{
return $this->status;
}
}
@@ -28,6 +28,7 @@ class CreatesAddress extends AbstractUpdateRelationshipRecord
$model->state_id = $object->getStateId();
$model->district_id = $object->getDistrictId();
$model->postcode = $object->getPostCode();
$model->status = $object->getStatus();
return $this->handler($addressable->addresses(), $model);
@@ -0,0 +1,44 @@
<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\Processors\ApproveChangeOrderAddressProcessor;
use App\Http\Resources\AddressResource;
use App\Http\Resources\OrderResource;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
class ApproveChangeOrderAddressLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Change Order Address Approval',
'message' => 'You have successfully change the order address'
];
}
/** @var ApproveChangeOrderAddressProcessor */
private $approveChangeOrderAddressProcessor;
/**
* ApproveChangeOrderAddressLogic constructor.
* @param ApproveChangeOrderAddressProcessor $approveChangeOrderAddressProcessor
*/
public function __construct(ApproveChangeOrderAddressProcessor $approveChangeOrderAddressProcessor)
{
$this->approveChangeOrderAddressProcessor = $approveChangeOrderAddressProcessor;
}
public function logic(Request $request): JsonResponse
{
$address = $this->approveChangeOrderAddressProcessor->execute($request);
return $this->resourceResponse(new AddressResource($address));
}
}
@@ -0,0 +1,49 @@
<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\Processors\RequestChangeOrderAddressProcessor;
use App\Http\Resources\OrderResource;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
class RequestChangeOrderAddressLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Request To Change Order Address',
'message' => 'You have successfully request to change order address'
];
}
/** @var RequestChangeOrderAddressProcessor */
private $requestChangeOrderAddressProcessor;
/**
* RequestChangeOrderAddressLogic constructor.
* @param RequestChangeOrderAddressProcessor $requestChangeOrderAddressProcessor
*/
public function __construct(RequestChangeOrderAddressProcessor $requestChangeOrderAddressProcessor)
{
$this->requestChangeOrderAddressProcessor = $requestChangeOrderAddressProcessor;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request): JsonResponse
{
$order = $this->requestChangeOrderAddressProcessor->execute($request);
return $this->resourceResponse(new OrderResource($order));
}
}
@@ -0,0 +1,61 @@
<?php
namespace App\Classes\Modules\Orders\Processors;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Orders\Standards\Rules\CanApproveChangeOrderAddress;
use App\Classes\Modules\Orders\Services\UpdatesOrdersAddress;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use Illuminate\Http\Request;
class ApproveChangeOrderAddressProcessor
{
/** @var CanApproveChangeOrderAddress */
private $canApproveChangeOrderAddress;
/** @var FetchesAddress */
private $fetchesAddress;
/** @var UpdatesOrdersAddress */
private $updatesOrdersAddress;
/**
* ApproveChangeOrderAddressProcessor constructor.
* @param CanApproveChangeOrderAddress $canApproveChangeOrderAddress
* @param FetchesAddress $fetchesAddress
* @param UpdatesOrdersAddress $updatesOrdersAddress
*/
public function __construct(CanApproveChangeOrderAddress $canApproveChangeOrderAddress, FetchesAddress $fetchesAddress, UpdatesOrdersAddress $updatesOrdersAddress)
{
$this->canApproveChangeOrderAddress = $canApproveChangeOrderAddress;
$this->fetchesAddress = $fetchesAddress;
$this->updatesOrdersAddress = $updatesOrdersAddress;
}
/**
* @param Request $request
* @return mixed
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(Request $request)
{
$status = (int) $request->route('status');
$this->canApproveChangeOrderAddress->passes();
$address = $this->fetchesAddress->execute(['id' => $request->route('id')]);
if($status === ApprovalStatus::APPROVED){
$address->owner->addresses()->update(['status' => ApprovalStatus::EXPIRED]);
}
$this->updatesOrdersAddress->execute($address, $status);
return $address;
}
}
@@ -0,0 +1,66 @@
<?php
namespace App\Classes\Modules\Orders\Processors;
use App\Classes\Modules\Orders\Standards\Rules\CanChangeOrderAddress;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Classes\Modules\Addresses\Services\CreatesAddress;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Addresses\Services\DeletesAddress;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use Illuminate\Http\Request;
class RequestChangeOrderAddressProcessor
{
/** @var CanChangeOrderAddress */
private $canChangeOrderAddress;
/** @var FetchesOrder */
private $fetchesOrder;
/** @var FetchesAddress */
private $fetchesAddress;
/** @var CreatesAddress */
private $createsAddress;
/** @var DeletesAddress */
private $deletesAddress;
/**
* ChangeOrderAddressProcessor constructor.
* @param FetchesOrder $fetchesOrder
* @param CreatesAddress $createsAddress
* @param FetchesAddress $fetchesAddress
* @param DeletesAddress $deletesAddress
*/
public function __construct(CanChangeOrderAddress $canChangeOrderAddress, FetchesOrder $fetchesOrder, CreatesAddress $createsAddress, FetchesAddress $fetchesAddress, DeletesAddress $deletesAddress)
{
$this->canChangeOrderAddress = $canChangeOrderAddress;
$this->fetchesOrder = $fetchesOrder;
$this->createsAddress = $createsAddress;
$this->fetchesAddress = $fetchesAddress;
$this->deletesAddress = $deletesAddress;
}
public function execute(Request $request)
{
$this->canChangeOrderAddress->passes();
$order = $this->fetchesOrder->execute(['id' => $request->get('order_id')]);
foreach ($order->addressesPendingVerification as $address) {
$this->deletesAddress->execute($address);
}
$address = $this->fetchesAddress->execute(['id' => $request->get('address_id')]);
$addressObject = new AddressObject($address->street_one, $address->street_two, $address->country_id, $address->state_id, $address->district_id, $address->postcode, $address->reference, ApprovalStatus::PENDING_VERIFICATION);
$this->createsAddress->execute($order, $addressObject);
return $order;
}
}
@@ -0,0 +1,21 @@
<?php
namespace App\Classes\Modules\Orders\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Address;
class UpdatesOrdersAddress extends AbstractUpdateRecord
{
/**
* @param Address $address
* @param int $type
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Address $address, int $type)
{
$address->status = $type;
return $this->handler($address);
}
}
@@ -0,0 +1,39 @@
<?php
namespace App\Classes\Modules\Orders\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
class CanApproveChangeOrderAddress extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param OrderObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param OrderObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,39 @@
<?php
namespace App\Classes\Modules\Orders\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
class CanChangeOrderAddress extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param OrderObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param OrderObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -4,10 +4,12 @@ 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\PackingLists\DataTransferObjects\ContainerObject;
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Http\Resources\ContainerResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
@@ -32,13 +34,17 @@ class CreateContainerLogic extends AbstractControllerLogic
/** @var FetchesPackingList */
private $fetchesPackingList;
/** @var FetchesCompanyModule */
private $fetchesCompanyModule;
/** @var CreatesPackingList */
private $createsContainer;
public function __construct(CanCreateContainer $canCreateContainer, FetchesPackingList $fetchesPackingList, CreatesContainer $createsContainer)
public function __construct(CanCreateContainer $canCreateContainer, FetchesPackingList $fetchesPackingList, FetchesCompanyModule $fetchesCompanyModule, CreatesContainer $createsContainer)
{
$this->canCreateContainer = $canCreateContainer;
$this->fetchesPackingList = $fetchesPackingList;
$this->fetchesCompanyModule = $fetchesCompanyModule;
$this->createsContainer = $createsContainer;
}
@@ -51,15 +57,21 @@ class CreateContainerLogic extends AbstractControllerLogic
*/
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'),
$request->input('status')
);
$object = new ContainerObject($request->input('container_reference'), $request->input('container_type'), $request->input('seal_reference'));
$company = $this->fetchesCompanyModule->execute(['id' => 2]);
$this->canCreateContainer->passes($object);
$query = $this->createsContainer->execute($object);
$query = $this->createsContainer->execute($object, $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]));
return $this->resourceResponse(new ContainerResource($query));
}
}
@@ -58,8 +58,14 @@ class UpdateContainerLogic extends AbstractControllerLogic
{
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
$object = new ContainerObject( $container->packing_list_id , $request->input('container_reference'), $request->input('container_type'), $request->input('seal_reference'));
$object = new ContainerObject(
$request->input('container_reference'),
$container->container_number,
$request->input('container_type'),
$request->input('seal_reference'),
$container->status,
);
$this->canUpdateContainer->passes($object);
@@ -5,6 +5,7 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject;
use App\Classes\Modules\PackingLists\Processors\CreatePackingListProcessor;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Classes\Modules\PackingLists\Services\Packages\FetchesPackage;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\General\Abstracts\AbstractControllerLogic;
@@ -13,6 +14,9 @@ use App\Classes\Modules\PackingLists\Services\CreatesPackingListPackage;
use App\Classes\Modules\PackingLists\Standards\Rules\CanCreatePackingList;
use App\Classes\Modules\PackingLists\Standards\Rules\CanCreatePackingListPackage;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Http\Resources\PackingListResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -34,13 +38,18 @@ class CreatePackingListLogic extends AbstractControllerLogic
/** @var CreatePackingListProcessor */
private $createPackingListProcessor;
/** @var FetchesOrder */
private $fetchesOrder;
/**
* CreatePackingListLogic constructor.
* @param CreatePackingListProcessor $createPackingListProcessor
* @param FetchesOrder $fetchesOrder
*/
public function __construct(CreatePackingListProcessor $createPackingListProcessor)
public function __construct(CreatePackingListProcessor $createPackingListProcessor, FetchesOrder $fetchesOrder)
{
$this->createPackingListProcessor = $createPackingListProcessor;
$this->fetchesOrder = $fetchesOrder;
}
/**
@@ -50,11 +59,13 @@ class CreatePackingListLogic extends AbstractControllerLogic
public function logic(Request $request) : JsonResponse
{
$object = new PackingListObject($request->input('reference_number'), ApprovalStatus::PENDING_SUBMISSION);
$order = $this->fetchesOrder->execute(['reference' => $request->input('reference_number')]);
$query = $this->createPackingListProcessor->execute($object);
$packingListObject = new PackingListObject($request->input('reference_number'), $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id, PackingListType::WAREHOUSE_RECEIVE_LIST, ApprovalStatus::PENDING_SUBMISSION);
return $this->resourceResponse(new PackingListResource($query));
$packingList = $this->createPackingListProcessor->execute($packingListObject, $order);
return $this->resourceResponse(new PackingListResource($packingList));
}
@@ -12,6 +12,7 @@ use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Http\Resources\PackageResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use App\Classes\ValueObjects\Constants\PackageType;
class CreatePackageLogic extends AbstractControllerLogic
{
@@ -61,23 +62,23 @@ class CreatePackageLogic extends AbstractControllerLogic
*/
public function logic(Request $request) : JsonResponse
{
$order = $this->fetchesOrder->execute(['id' => $request->input('order_id')]);
$object = new PackageObject(
null,
$request->input('type'),
$request->input('description'),
$request->input('width'),
$request->input('height'),
$request->input('length'),
$request->input('weight'),
0,
$request->input('quantity'),
ApprovalStatus::PENDING_VERIFICATION);
$this->canCreatePackage->passes($object);
$query = $this->createsPackage->execute($object);
$query = $this->createsPackage->execute($object, $order->packingLists()->first());
return $this->resourceResponse(new PackageResource($query));
@@ -4,8 +4,8 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic\Packages;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Packages\Services\FetchesPackage;
use App\Classes\Modules\Packages\Standards\Rules\CanFetchPackage;
use App\Classes\Modules\PackingLists\Services\Packages\FetchesPackage;
use App\Classes\Modules\PackingLists\Standards\Rules\Packages\CanFetchPackage;
use App\Http\Resources\PackageResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
@@ -4,8 +4,8 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic\Packages;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Packages\Services\ListsPackages;
use App\Classes\Modules\Packages\Standards\Rules\CanListPackages;
use App\Classes\Modules\PackingLists\Services\Packages\ListsPackages;
use App\Classes\Modules\PackingLists\Standards\Rules\Packages\CanListPackages;
use App\Http\Resources\PackageResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
@@ -4,10 +4,10 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic\Packages;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Packages\Services\UpdatesPackage;
use App\Classes\Modules\Packages\Services\FetchesPackage;
use App\Classes\Modules\Packages\Standards\Rules\CanUpdatePackage;
use App\Classes\Modules\Packages\DataTransferObjects\PackageObject;
use App\Classes\Modules\PackingLists\Services\Packages\UpdatesPackage;
use App\Classes\Modules\PackingLists\Services\Packages\FetchesPackage;
use App\Classes\Modules\PackingLists\Standards\Rules\Packages\CanUpdatePackage;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject;
use App\Http\Resources\PackageResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
@@ -60,8 +60,6 @@ class UpdatePackageLogic extends AbstractControllerLogic
$package = $this->fetchesPackage->execute(['id' => $request->route('id')]);
$object = new PackageObject(
$package->order_id,
null,
$request->input('type'),
$request->input('description'),
$request->input('width'),
@@ -69,7 +67,9 @@ class UpdatePackageLogic extends AbstractControllerLogic
$request->input('length'),
$request->input('weight'),
$request->input('quantity'),
$request->input('status'));
$request->input('status'),
$package->reference
);
$this->canUpdatePackage->passes($object);
@@ -57,7 +57,7 @@ class UpdatePackingListLogic extends AbstractControllerLogic
{
$packingList = $this->fetchesPackingList->execute(['id' => $request->route('id')]);
$object = new PackingListObject($packingList->reference, $request->input('status'));
$object = new PackingListObject($packingList->reference, $packingList->claimant_id, $packingList->type, $request->input('status'));
$this->canUpdatePackingList->passes($object);
@@ -0,0 +1,62 @@
<?php
namespace App\Classes\Modules\PackingLists\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\PackingLists\Services\UpdatesPackingList;
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Classes\Modules\PackingLists\Services\UpdatesPackingListStatus;
use App\Classes\Modules\PackingLists\Standards\Rules\CanUpdatePackingList;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
use App\Http\Resources\PackingListResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdatePackingListStatusLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Updated PackingList Status',
'message' => 'You have successfully updated the PackingList status'
];
}
/** @var FetchesPackingList */
private $fetchesPackingList;
/** @var UpdatesPackingListStatus */
private $updatesPackingListStatus;
/**
* UpdatePackingListStatusLogic constructor.
* @param FetchesPackingList $fetchesPackingList
* @param UpdatesPackingListStatus $updatesPackingListStatus
*/
public function __construct(FetchesPackingList $fetchesPackingList, UpdatesPackingListStatus $updatesPackingListStatus)
{
$this->fetchesPackingList = $fetchesPackingList;
$this->updatesPackingListStatus = $updatesPackingListStatus;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
$packingList = $this->fetchesPackingList->execute(['id' => $request->route('id')]);
$query = $this->updatesPackingListStatus->execute($packingList, $request->route('status'));
return $this->resourceResponse(new PackingListResource($query));
}
}
@@ -14,7 +14,7 @@ class ContainerObject implements DataTransferObject
private $containerNumber;
/** @var string */
private $sealNumber;
private $sealReference;
/** @var int */
private $containerType;
@@ -26,15 +26,15 @@ class ContainerObject implements DataTransferObject
* ContainerObject constructor.
* @param string $reference
* @param string $containerNumber
* @param string $sealNumber
* @param string $sealReference
* @param int $containerType
* @param int $status
*/
public function __construct(string $reference, string $containerNumber, string $sealNumber, int $containerType, int $status)
public function __construct(string $reference, string $containerNumber, string $sealReference, int $containerType, int $status)
{
$this->reference = $reference;
$this->containerNumber = $containerNumber;
$this->sealNumber = $sealNumber;
$this->sealReference = $sealReference;
$this->containerType = $containerType;
$this->status = $status;
}
@@ -58,9 +58,9 @@ class ContainerObject implements DataTransferObject
/**
* @return string
*/
public function getSealNumber(): string
public function getSealReference(): string
{
return $this->sealNumber;
return $this->sealReference;
}
/**
@@ -65,7 +65,6 @@ class FetchContainersStatusUpdateFromVTPortalProcessor
/**
* @return array
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(){
@@ -77,7 +76,7 @@ class FetchContainersStatusUpdateFromVTPortalProcessor
try {
$filter = '["RefNo:=%js%\"'.$container->reference.'\"\u0000"]';
$containerDetailsRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VCustomercontainer","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"ModifiedOn DESC","Filter":'.$filter.'}}'), '');
$containerDetailsRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VCustomercontainer","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"CreatedOn asc","Filter":'.$filter.'}}'), '');
$containerDetails = $this->fetchesDataFRomVTPortal->getResponseBody($containerDetailsRequest);
@@ -122,9 +121,15 @@ class FetchContainersStatusUpdateFromVTPortalProcessor
if($containerStatus === 'Unstuffing'){
$container->update(['status' => ApprovalStatus::COMPLETED]);
$container->transports()->first()->update(['drop_date' => Carbon::parse($unstuffingDate)->subDay(), 'status' => ApprovalStatus::COMPLETED]);
$container->packingLists()->update(['status' => ApprovalStatus::APPROVED]);
/** @var PackingList $packingList */
foreach($container->packingLists as $packingList){
if($packingList->status === ApprovalStatus::PENDING_VERIFICATION){
$packingList->status = ApprovalStatus::APPROVED;
$packingList->save();
}
$signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture;
foreach($packingList->steps()->where('reference', '!=', 'DELIVERY')->get() as $step){
$this->updatesContractObligations->execute($signature, $step->obligation_hash_id);
@@ -3,8 +3,6 @@
namespace App\Classes\Modules\PackingLists\Processors;
use App\Classes\Modules\Orders\Services\FetchesDataFromVTPortal;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject;
use App\Classes\Modules\PackingLists\Services\ListsPackingLists;
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
use App\Classes\Modules\Schedules\Services\CreatesSchedule;
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
@@ -12,7 +10,6 @@ use App\Classes\Modules\Transports\Services\CreatesTransport;
use App\Classes\Modules\Unity\Services\UpdatesContractObligation;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\PackageType;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Classes\ValueObjects\Constants\TransportType;
use App\Models\PackingList;
@@ -65,7 +62,7 @@ class FetchDeliveryListFromVTPortalProcessor
try {
$filter = '["PoNumber:=%js%\"'.$packingList->reference.'\"\u0000"]';
$shippingPackingListsRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VPodetailparcel","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"ModifiedOn DESC","Filter":'.$filter.'}}'), '');
$shippingPackingListsRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VPodetailparcel","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"CreatedOn asc","Filter":'.$filter.'}}'), '');
$shippingPackingLists = $this->fetchesDataFRomVTPortal->getResponseBody($shippingPackingListsRequest);
@@ -137,14 +137,14 @@ class FetchLoadedContainersFromVTPortalProcessor
$end = $end ? $end : Carbon::now();
$filter = '["LoadedTime:$between$%js%\"'.$start->format('Y-m-d').'T00:00:00.000\"$and$%js%\"'.$end->format('Y-m-d').'T00:00:00.000\"\u0000"]';
$containersRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VCustomercontainer","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"ModifiedOn DESC","Filter":'.$filter.'}}'), '');
$containersRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VCustomercontainer","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"LoadedTime asc","Filter":'.$filter.'}}'), '');
$containers = $this->fetchesDataFRomVTPortal->getResponseBody($containersRequest);
foreach ($containers->Rows as $container){
$filter = '["ContainerID:=%js%'.$container[11].'"]';
$containerDetailRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VPodetailparcel","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"ModifiedOn DESC","Filter":'.$filter.'}}'), '');
$containerDetailRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VPodetailparcel","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"CreatedOn asc","Filter":'.$filter.'}}'), '');
$containerDetail = $this->fetchesDataFRomVTPortal->getResponseBody($containerDetailRequest);
@@ -199,7 +199,10 @@ class FetchLoadedContainersFromVTPortalProcessor
$this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations);
$packingListObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::SHIPPING_PACKING_LIST, ApprovalStatus::PENDING_VERIFICATION, $contractReference);
$connection = $order->companyModule->connections()->first();
$marking = $connection->invitee_reference;
$packingListObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::SHIPPING_PACKING_LIST, (int) filter_var($marking, FILTER_SANITIZE_NUMBER_INT) <= 1000 ? ApprovalStatus::PENDING_VERIFICATION : ApprovalStatus::SUSPENDED, $contractReference);
/** @var PackingList $packingList */
$packingList = $this->createPackingListProcessor->execute($packingListObject, $order);
@@ -46,7 +46,9 @@ class FetchPackingListFromVTPortalProcessor
*/
public function execute(){
$packingLists = PackingList::where('type', '=', PackingListType::SHIPPING_PACKING_LIST)->where('status', '=', ApprovalStatus::PENDING_VERIFICATION)->get();
$packingLists = PackingList::where('type', '=', PackingListType::SHIPPING_PACKING_LIST)->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::SUSPENDED])->whereDoesntHave('containers', function($query){
$query->where('status', '=', ApprovalStatus::COMPLETED);
})->get();
foreach($packingLists as $packingList){
@@ -55,7 +57,7 @@ class FetchPackingListFromVTPortalProcessor
$filter = '["PoNumber:=%js%\"'.$packingList->reference.'\"\u0000"]';
$shippingPackingListsRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VPodetailparcel","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"ModifiedOn DESC","Filter":'.$filter.'}}'), '');
$shippingPackingListsRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VPodetailparcel","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"CreatedOn asc","Filter":'.$filter.'}}'), '');
$shippingPackingLists = $this->fetchesDataFRomVTPortal->getResponseBody($shippingPackingListsRequest);
@@ -128,7 +128,7 @@ class FetchWarehouseReceiveListFromVTPortalProcessor
$filter = '["ParcelDate:$between$%js%\"'.$start->format('Y-m-d').'T00:00:00.000\"$and$%js%\"'.$end->format('Y-m-d').'T00:00:00.000\"\u0000"]';
$warehouseListRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"WarehouseList","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"ModifiedOn DESC","Filter":'.$filter.'}}'), '');
$warehouseListRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"WarehouseList","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"ParcelDate asc","Filter":'.$filter.'}}'), '');
$response = $this->fetchesDataFRomVTPortal->getResponseBody($warehouseListRequest);
@@ -22,7 +22,7 @@ class CreatesContainer extends AbstractUpdateRelationshipRecord
$model->reference = $object->getReference();
$model->container_number = $object->getContainerNumber();
$model->container_type = $object->getContainerType();
$model->seal_reference = $object->getSealNumber();
$model->seal_reference = $object->getSealReference();
$model->status = $object->getStatus();
return $this->handler($owner->containers(), $model);
@@ -17,7 +17,7 @@ class UpdatesContainer extends AbstractUpdateRecord
*/
public function execute(Container $model, ContainerObject $object) {
$model->container_reference = $object->getContainerReference();
$model->reference = $object->getReference();
$model->container_type = $object->getContainerType();
$model->seal_reference = $object->getSealReference();
@@ -10,7 +10,6 @@ class UpdatesPackage extends AbstractUpdateRecord
{
public function execute(Package $model, PackageObject $object) {
$model->claimant_id = $object->getClaimantId();
$model->type = $object->getType();
$model->description = $object->getDescription();
$model->width = $object->getWidth();
@@ -0,0 +1,24 @@
<?php
namespace App\Classes\Modules\PackingLists\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\PackingList;
class UpdatesPackingListStatus extends AbstractUpdateRecord
{
/**
* @param PackingList $model
* @param int $status
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(PackingList $model, int $status) {
$model->status = $status;
return $this->handler($model);
}
}
@@ -56,7 +56,7 @@ class CreateScheduleLogic extends AbstractControllerLogic
*/
public function logic(Request $request) : JsonResponse
{
$object = new ScheduleObject($request->input('etd'), $request->input('eta'), $request->input('transport_id'), ApprovalStatus::PENDING_SUBMISSION);
$object = new ScheduleObject($request->input('etd'), $request->input('eta'), ApprovalStatus::PENDING_SUBMISSION);
$this->canCreateSchedule->passes($object);
@@ -16,7 +16,6 @@ class ScheduleValidation extends AbstractValidation
*/
protected function data($object): array {
return [
'transport_id' => $object->getTransportId(),
'etd' => $object->getETD(),
'eta' => $object->getETA(),
'status' => $object->getStatus(),
@@ -28,7 +27,6 @@ class ScheduleValidation extends AbstractValidation
*/
protected function rules(): array {
return [
'transport_id' => 'required',
'etd' => 'required',
'eta' => 'required',
];
@@ -7,7 +7,7 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Transports\Services\CreatesTransport;
use App\Classes\Modules\Transports\Standards\Rules\CanCreateTransport;
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Http\Resources\TransportResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
@@ -29,8 +29,8 @@ class CreateTransportLogic extends AbstractControllerLogic
/** @var CanCreateTransport */
private $canCreateTransport;
/** @var FetchesContainer */
private $fetchesContainer;
/** @var FetchesPackingList */
private $fetchesPackingList;
/** @var CreatesTransport */
private $createsTransport;
@@ -38,13 +38,13 @@ class CreateTransportLogic extends AbstractControllerLogic
/**
* CreateTransportLogic constructor.
* @param CanCreateTransport $canCreateTransport
* @param FetchesContainer $fetchesContainer
* @param FetchesPackingList $fetchesPackingList
* @param CreatesTransport $createsTransport
*/
public function __construct(CanCreateTransport $canCreateTransport, FetchesContainer $fetchesContainer, CreatesTransport $createsTransport)
public function __construct(CanCreateTransport $canCreateTransport, FetchesPackingList $fetchesPackingList, CreatesTransport $createsTransport)
{
$this->canCreateTransport = $canCreateTransport;
$this->fetchesContainer = $fetchesContainer;
$this->fetchesPackingList = $fetchesPackingList;
$this->createsTransport = $createsTransport;
}
@@ -58,11 +58,18 @@ class CreateTransportLogic extends AbstractControllerLogic
public function logic(Request $request) : JsonResponse
{
$object = new TransportObject($request->input('type'), $request->input('courier'), $request->input('tracking_number'), null, null, ApprovalStatus::PENDING_SUBMISSION);
$object = new TransportObject(
$request->input('type'),
$request->input('courier'),
$request->input('tracking_number'),
null,
null,
pprovalStatus::PENDING_SUBMISSION
);
$this->canCreateTransport->passes($object);
$query = $this->createsTransport->execute($this->fetchesContainer->execute(['id' => $request->input('container_id')]), $object);
$query = $this->createsTransport->execute($object, $this->fetchesPackingList->execute(['id' => $request->input('packing_list_id')]));
return $this->resourceResponse(new TransportResource($query));
@@ -58,7 +58,14 @@ class UpdateTransportLogic extends AbstractControllerLogic
{
$query = $this->fetchesTransport->execute(['id' => $request->route('id')]);
$object = new TransportObject($request->input('type'), $request->input('courier'), $request->input('tracking_number'), $request->input('dispatch_date'), $request->input('drop_date'), $request->input('status'));
$object = new TransportObject(
$request->input('type'),
$request->input('courier'),
$request->input('tracking_number'),
$request->input('dispatch_date'),
$request->input('drop_date'),
$request->input('status')
);
$this->canUpdateTransport->passes($object);
+2 -2
View File
@@ -31,7 +31,7 @@ class Kernel extends ConsoleKernel
{
$schedule->call(function(){
FetchWarehouseReceiveListFromVTPortalJob::withChain([
return FetchWarehouseReceiveListFromVTPortalJob::withChain([
new FetchLoadedContainersFromVTPortalJob,
new FetchPackingListFromVTPortalJob,
new FetchContainersStatusUpdateFromVTPortalJob,
@@ -40,7 +40,7 @@ class Kernel extends ConsoleKernel
})->dailyAt('15:00');
$schedule->call(function(){
FetchWarehouseReceiveListFromVTPortalJob::withChain([
return FetchWarehouseReceiveListFromVTPortalJob::withChain([
new FetchLoadedContainersFromVTPortalJob,
new FetchPackingListFromVTPortalJob,
new FetchContainersStatusUpdateFromVTPortalJob,
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Orders;
use App\Classes\Modules\Orders\ControllersLogic\ApproveChangeOrderAddressLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ApproveChangeOrderAddressController
{
/**
* @param Request $request
* @param ApproveChangeOrderAddressLogic $logic
* @return JsonResponse
*/
public function approve(Request $request, ApproveChangeOrderAddressLogic $logic): JsonResponse
{
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Orders;
use App\Classes\Modules\Orders\ControllersLogic\RequestChangeOrderAddressLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class RequestChangeOrderAddressController
{
/**
* @param Request $request
* @param ChangeOrderAddressLogic $logic
* @return JsonResponse
*/
public function request(Request $request, RequestChangeOrderAddressLogic $logic): JsonResponse
{
return $logic->execute($request);
}
}
@@ -10,7 +10,7 @@ class ListContainersController
{
/**
* @param Request $request
* @param ListContainerLogic $logic
* @param ListContainersLogic $logic
* @return JsonResponse
*/
public function list(Request $request, ListContainersLogic $logic): JsonResponse {
@@ -2,7 +2,7 @@
namespace App\Http\Controllers\PackingLists\Packages;
use App\Classes\Modules\ControllersLogic\Packages\CreatePackageLogic;
use App\Classes\Modules\PackingLists\ControllersLogic\Packages\CreatePackageLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -2,7 +2,7 @@
namespace App\Http\Controllers\PackingLists\Packages;
use App\Classes\Modules\ControllersLogic\Packages\DeletePackageLogic;
use App\Classes\Modules\PackingLists\ControllersLogic\Packages\DeletePackageLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -2,7 +2,7 @@
namespace App\Http\Controllers\PackingLists\Packages;
use App\Classes\Modules\ControllersLogic\Packages\FetchPackageLogic;
use App\Classes\Modules\PackingLists\ControllersLogic\Packages\FetchPackageLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -2,7 +2,7 @@
namespace App\Http\Controllers\PackingLists\Packages;
use App\Classes\Modules\ControllersLogic\Packages\ListPackagesLogic;
use App\Classes\Modules\PackingLists\ControllersLogic\Packages\ListPackagesLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -2,7 +2,7 @@
namespace App\Http\Controllers\PackingLists\Packages;
use App\Classes\Modules\ControllersLogic\Packages\UpdatePackageLogic;
use App\Classes\Modules\PackingLists\ControllersLogic\Packages\UpdatePackageLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\PackingLists;
use App\Classes\Modules\PackingLists\ControllersLogic\UpdatePackingListStatusLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdatePackingListStatusController
{
/**
* @param Request $request
* @param UpdatePackingListStatusLogic $logic
* @return JsonResponse
*/
public function update(Request $request, UpdatePackingListStatusLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
+2 -1
View File
@@ -23,7 +23,8 @@ class AddressResource extends JsonResource
'state' => $this->state,
'post_code' => $this->postcode,
'country' => $this->country,
'default' => (int) $this->default
'default' => (int) $this->default,
'owner' => new OrderResource($this->whenLoaded('owner'))
];
}
}
+1
View File
@@ -35,6 +35,7 @@ class CompanyResource extends JsonResource
'company_module' => new CompanyModuleResource($companyModule),
'last_order' => new OrderResource($companyModule ? $companyModule->orders()->orderBy('id', 'DESC')->first(): null),
'identification' => new DocumentResource($this->documents->whereIn('document_type', DocumentType::IDENTIFICATION_DOCUMENTS)->first()),
'created_at' => $this->created_at->format('d-m-Y')
];
+4
View File
@@ -21,6 +21,10 @@ class ContainerResource extends JsonResource
'container_number' => $this->container_number,
'seal_reference' => $this->seal_reference,
'transport' => new TransportResource($this->transports()->first()),
'packing_lists' => PackingListResource::collection($this->whenLoaded('packingLists', function(){
return $this->packingLists()->whereHas('packages')->get();
})),
'status' => $this->status
];
}
}
+2 -1
View File
@@ -27,7 +27,8 @@ class OrderResource extends JsonResource
'status' => (int) $this->status,
'company_module' => new CompanyModuleResource($this->companyModule),
'warehouse' => new CompanyModuleResource($this->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee),
'address' => new AddressResource($this->addresses()->first()),
'address' => new AddressResource($this->addresses()->where('status', '=', ApprovalStatus::APPROVED)->first()),
'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) {
+1 -1
View File
@@ -23,7 +23,7 @@ class PackageResource extends JsonResource
'length' => floatval($this->length),
'weight' => $this->weight,
'quantity' => $this->quantity,
'cbm' => (($this->width / 100) * ($this->width / 100) * ($this->width / 100)) * $this->quantity,
'cbm' => (($this->width / 100) * ($this->height / 100) * ($this->length / 100)) * $this->quantity,
'status' => $this->status,
'order' => new OrderResource($this->packingList->owner),
'container' => new ContainerResource($this->packingList->containers()->first()),
@@ -21,6 +21,7 @@ class PackingListResource extends JsonResource
'status' => $this->status,
'transport' => new TransportResource($this->transports()->first()),
'packages' => PackageResource::collection($this->packages),
'order' => New OrderResource($this->owner)
];
}
}
+11
View File
@@ -6,6 +6,7 @@ use App\Classes\General\Interfaces\Addressable;
use App\Classes\General\Interfaces\Contactable;
use App\Classes\General\Interfaces\Packable;
use App\Classes\ValueObjects\Constants\RoleTypes;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Scopes\CustomerOrdersScope;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
@@ -77,4 +78,14 @@ class Order extends AbstractModel implements Addressable, Packable
// static::addGlobalScope(new CustomerOrdersScope);
// }
}
public function addressesPendingVerification()
{
return $this->addresses()->where('status','=',ApprovalStatus::PENDING_VERIFICATION);
}
public function addressesApproved()
{
return $this->addresses()->where('status','=',ApprovalStatus::APPROVED);
}
}
+30 -30
View File
@@ -172,49 +172,49 @@ class CompaniesTableSeeder extends Seeder
}
if(true){
$companies = OldCompany::all();
// if(true){
// $companies = OldCompany::all();
foreach($companies as $company){
// foreach($companies as $company){
$marking = explode("CIEF/", $company->marking);
// $marking = explode("CIEF/", $company->marking);
if(count($marking) < 2){
continue;
}
// if(count($marking) < 2){
// continue;
// }
$marking = str_replace(' ', '', str_replace('/', '', $marking[1]));
// $marking = str_replace(' ', '', str_replace('/', '', $marking[1]));
/** @var Company $newCompany */
$newCompany = $this->createCompanyProcessor->execute($company->name, CompanyType::COMPANY_BUSINESS, ApprovalStatus::PENDING_SUBMISSION);
// /** @var Company $newCompany */
// $newCompany = $this->createCompanyProcessor->execute($company->name, CompanyType::COMPANY_BUSINESS, ApprovalStatus::PENDING_SUBMISSION);
$this->updatesCompanyStatus->execute($newCompany, ApprovalStatus::APPROVED);
// $this->updatesCompanyStatus->execute($newCompany, ApprovalStatus::APPROVED);
/** @var CompanyModule $companyModule */
$companyModule = $this->createCompanyModuleProcessor->execute($newCompany, BusinessType::IMPORTER);
// /** @var CompanyModule $companyModule */
// $companyModule = $this->createCompanyModuleProcessor->execute($newCompany, BusinessType::IMPORTER);
$connectionObject = new CompanyConnectionObject($companyModule, 'CIEF', $marking);
// $connectionObject = new CompanyConnectionObject($companyModule, 'CIEF', $marking);
$connection = $this->createsCompanyConnection->execute($connectionObject);
$this->approvesCompanyConnection->execute($connection);
// $connection = $this->createsCompanyConnection->execute($connectionObject);
// $this->approvesCompanyConnection->execute($connection);
$i = 0;
foreach($company->addresses as $address){
$this->createAddressFromOldAddressProcessor->execute($address, $companyModule);
$contact = preg_replace("/[^0-9.]/", "", $address->contact);
if($contact){
$i++;
if($i === 1) {
$contactObject = new ContactObject('', $contact, $company->email, '',);
$this->createContactProcessor->execute($contactObject, $newCompany);
}
}
// $i = 0;
// foreach($company->addresses as $address){
// $this->createAddressFromOldAddressProcessor->execute($address, $companyModule);
// $contact = preg_replace("/[^0-9.]/", "", $address->contact);
// if($contact){
// $i++;
// if($i === 1) {
// $contactObject = new ContactObject('', $contact, $company->email, '',);
// $this->createContactProcessor->execute($contactObject, $newCompany);
// }
// }
}
}
}
// }
// }
// }
}
+1 -1
View File
@@ -269,7 +269,7 @@ body.modal-open {
box-shadow: none;
}
.modal-dialog {
width: 600px;
width: 1140px;
}
.modal-sm {
width: 300px;
@@ -1,33 +0,0 @@
<template>
<div class="row">
<div class="col">
<loading-component style="height: 300px; top: 0;" key="1" color="success" v-show="isLoading" ></loading-component>
<div class="row justify-content-center" v-show="!isLoading">
<div class="col">
<div class="row m-b-20">
<div class="col">
<h3 class="all-caps">Are you Sure?</h3>
<div class="fs-11">Are you sure you want to delete this address?</div>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div class="btn btn-sm btn-success btn-block b-rad-none" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-sm btn-danger btn-block b-rad-none" @click="submit(route('api.address.delete', item.id), 'delete', section, true, true)">Delete</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
import ModalFormHandler from '../../../general/mixins/modalFormHandler';
export default {
mixins: [componentHandler, ModalFormHandler]
}
</script>
@@ -1,145 +0,0 @@
<template>
<div class="row p-t-25 text-left">
<div class="col">
<div class="shadow p-3 bg-white rounded">
<div class="d-flex flex-row align-items-center">
<input v-show="!isEdit" type="radio" name="answer" id="answer-2"
v-model="computeAddressId"
:value='-1'
:checked="new_address == true"
>
<label for="answer-2" data-question-number="2" class="mb-0 pl-2 pl-md-2 bold">{{isEdit?'Edit ':'Add New '}}Address</label>
</div>
<div class="col-0" v-if="computeAddressId==-1">
<div class="d-flex flex-column flex-sm-row">
<div class="col px-0 pr-sm-2">
<validation-wrapper-component selecatable :validator="$v.parameters.district_id">
<label class="text-primary fs-12">District</label>
<div class="controls">
<selectable-component :endpoint="route('api.address.district.list')" section="districtListSection" valueColumn="id" :labelColumn="['city']" v-model="parameters.district_id"></selectable-component>
</div>
</validation-wrapper-component>
</div>
<div class="col px-0 pl-sm-2">
<validation-wrapper-component :validator="$v.parameters.post_code">
<label class="text-primary fs-12">Post Code</label>
<div class="controls">
<input type="text" class="form-control fs-12" v-model="parameters.post_code">
</div>
</validation-wrapper-component>
</div>
</div>
<div class="d-flex flex-column flex-sm-row">
<div class="col px-0 pr-sm-2">
<validation-wrapper-component :validator="$v.parameters.street_one">
<label class="text-primary fs-12">Street one</label>
<div class="controls">
<input type="text" class="form-control fs-12"
v-model="parameters.street_one"
>
</div>
</validation-wrapper-component>
</div>
<div class="col px-0 pl-sm-2">
<validation-wrapper-component :validator="$v.parameters.street_two">
<label class="text-primary fs-12">Street two</label>
<div class="controls">
<input type="text" class="form-control fs-12"
v-model="parameters.street_two"
>
</div>
</validation-wrapper-component>
</div>
</div>
<div class="row m-t-25">
<div class="col">
<div class="row">
<div class="col text-right">
<button type="button" class="btn btn-sm btn-primary b-rad-none" @click="submitForm()">{{isEdit?'Update':'Create'}}</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { required ,requiredIf } from "vuelidate/lib/validators";
export default {
props: {
section: {
default: 'addressForm'
},
isEdit:{
default: false
},
populateWith: {
type: Object,
default: () => ({ empty: true })
},
address_id: null
},
watch: {
},
data() {
return {
parameters : {
company_module_id:this.$store.getters.getCompanyModuleId,
street_one: '',
street_two: '',
district_id: '',
post_code: '',
},
new_address:false
}
},
computed: {
computeAddressId:{
get() {
if (!this.populateWith.empty) {
this.parameters = this.populateWith;
this.parameters.district_id = this.populateWith.district.id;
this.parameters.id = this.populateWith.id;
}
return this.address_id;
},
set(val) {
this.$emit('input', val);
}
},
},
validations: {
parameters: {
street_one: { required:requiredIf(function () { return this.computeAddressId === -1 }) },
street_two: {},
district_id: { required },
post_code: { required },
}
},
methods:{
submitForm(){
if(!this.validate()){
return;
}
this.isLoading = true;
this.isEdit?this.submit(route('api.address.update', this.parameters.id), 'put', this.section, true, true):this.submit((this.route('api.address.create')), 'post', 'addressList', true, true);
},
successHandler(response){
this.$emit('input', response.payload.data.id);
this.resetForm();
this.closeModal();
this.isLoading = false;
this.updateList();
}
}
}
</script>
@@ -0,0 +1,135 @@
<template>
<div class="row m-b-10 bg-master-lightest">
<div class="col">
<loading-component style="height: 200px; top: 0;" key="1" color="success" v-show="isLoading"></loading-component>
<div class="row" v-show="!isLoading">
<div class="col">
<div class="row align-items-center">
<div class="col p-t-10 p-b-10">
<div class="row">
<div class="col">
<h5 class="text-primary no-margin"><a :href="route('order.show', item.owner.reference)">{{item.owner.reference}}</a></h5>
</div>
</div>
<div class="row align-items-center">
<div class="col">
<h6 class="no-margin"><a :href="route('customer.profile', item.owner.company_module.marking)">{{item.owner.company_module.marking}}</a></h6>
</div>
</div>
</div>
</div>
<div class="row b-t b-grey">
<div class="col p-t-10">
<div class="row m-b-15">
<div class="col">
<div class="row m-b-5">
<div class="col">
<div class="fs-8 all-caps muted">Original Address</div>
</div>
</div>
<div class="row">
<div class="col">
<div class="fs-11 bold">{{item.owner.address.street_one+' '+(item.owner.address.street_two ? item.owner.address.street_two : '')+', '+ item.owner.address.district.name+', '+item.owner.address.post_code+' '+item.owner.address.state.name+', '+item.owner.address.country.name}}</div>
</div>
</div>
</div>
</div>
<div class="row m-b-15">
<div class="col">
<div class="row m-b-5">
<div class="col">
<div class="fs-8 all-caps muted">New Address</div>
</div>
</div>
<div class="row">
<div class="col">
<div class="fs-11 bold">{{item.street_one+' '+(item.street_two ? item.street_two : '')+', '+ item.district.name+', '+item.post_code+' '+item.state.name+', '+item.country.name}}</div>
</div>
</div>
</div>
</div>
<div class="row m-t-20 parentContainer">
<div class="col">
<div class="row">
<div class="col no-padding">
<button class="btn btn-md btn-block btn-outline-danger b-rad-none p-t-10 p-b-10 requestModal" data-type="rejectAddress">
Reject
</button>
</div>
<modal-component small type="rejectAddress">
<div class="row">
<div class="col text-center">
<div class="row">
<div class="col text-center">
<div class="row m-b-20">
<div class="col">
<h5 class="all-caps">Reject Address Change Request</h5>
<div class="fs-11">Are you sure you want to reject order delivery address change request?</div>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div data-dismiss="modal" class="btn btn-sm btn-default bg-master-lighter btn-block b-rad-none">Cancel</div>
</div>
<div class="col p-l-5">
<div data-dismiss="modal" class="btn btn-sm btn-danger btn-block b-rad-none" @click="approveAddress(6)">Reject</div>
</div>
</div>
</div>
</div>
</div>
</div>
</modal-component>
<div class="col no-padding ml-auto">
<button class="btn btn-md btn-block btn-outline-success b-rad-none p-t-10 p-b-10 requestModal" data-type="approveAddress">
Approve
</button>
</div>
<modal-component small type="approveAddress">
<div class="row">
<div class="col text-center">
<div class="row">
<div class="col text-center">
<div class="row m-b-20">
<div class="col">
<h5 class="all-caps">Approve Address Change Request</h5>
<div class="fs-11">Are you sure you want to approve this order delivery address change request?</div>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div data-dismiss="modal" class="btn btn-sm btn-default bg-master-lighter btn-block b-rad-none">Cancel</div>
</div>
<div class="col p-l-5">
<div data-dismiss="modal" class="btn btn-sm btn-success btn-block b-rad-none" @click="approveAddress(2)">Approve</div>
</div>
</div>
</div>
</div>
</div>
</div>
</modal-component>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
import staticFormHandler from '../../../general/mixins/staticFormHandler'
export default {
methods: {
approveAddress(status){
this.isLoading = true;
this.submit((this.route('api.order.address.status.update', this.item.id, status)), 'put', 'addressVerificationSection', true, true);
},
},
mixins: [componentHandler, staticFormHandler]
}
</script>
@@ -5,10 +5,10 @@
<div class="col-auto p-r-0">
<i class="fa fs-20 p-t-5" :class="{'fa-circle-o': value !== item.id, 'fa-check-circle': value === item.id, 'text-primary': value === item.id}"></i>
</div>
<div class="col-2">
<div class="col-3">
<h6 class="no-margin bold fs-12">{{item.reference}}</h6>
</div>
<div class="col">
<div class="col text-left">
<h6 class="no-margin fs-12">{{item.street_one}} {{item.street_two}}, {{item.district.name}}, {{item.post_code}} {{item.state.name}}, {{item.country.name}}</h6>
</div>
<div class="col-auto">
@@ -20,13 +20,13 @@
</div>
</div>
<div class="row m-b-15">
<div class="col-12 col-md pl-md-2 pb-3 pb-md-0 ">
<div class="col-12 col-md p-r-5 pb-3 pb-md-0 ">
<validation-wrapper-component selecatable :validator="$v.parameters.district_id">
<label>District</label>
<selectable-component :endpoint="route('api.address.district.list')" section="districtListSection" valueColumn="id" :labelColumn="['city']" v-model="parameters.district_id"></selectable-component>
</validation-wrapper-component>
</div>
<div class="col-12 col-md pl-md-2">
<div class="col-12 col-md p-l-5">
<validation-wrapper-component :validator="$v.parameters.post_code">
<label>Post Code</label>
<input class="form-control" name="post_code" v-model="parameters.post_code">
@@ -10,8 +10,9 @@
<div class="font-heading all-caps fs-11">{{this.item.name}}</div>
<div class="font-heading all-caps fs-11">CIEF/{{this.item.company_module.marking}}</div>
</div>
<div class="col-auto text-center">
<div class="col-auto">
<div class="font-heading all-caps fs-11">Date</div>
<div class="font-heading all-caps fs-11">{{this.item.created_at}}</div>
</div>
<div class="col-auto text-center">
<div class="font-heading all-caps fs-11 p-l-15 p-r-15 p-t-5 p-b-5 bg-master-lighter btn-rounded"><i class="fa fa-circle m-r-10" :class="{'text-danger': item.status !==2, 'text-success': item.status ==2}"></i>{{this.item.status === 2 ? 'Active':'Inactive'}}</div>
File diff suppressed because one or more lines are too long
@@ -0,0 +1,22 @@
<template>
<i v-show="data.address_change_request&&$store.getters.isAdmin" class="fa fa-exclamation pointer requestModal" data-type="approveChangeAddress">
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="approveChangeAddress" size="large">
<approve-change-address-form-component :data="data" :section="section" class="text-center"></approve-change-address-form-component>
</modal-component>
</i>
</template>
<script>
export default {
props: {
data: {
type: Object,
required: true,
}
},
data() {
return {
section:"changeAddressSection"
}
},
}
</script>
@@ -27,7 +27,7 @@
<p class="no-margin all-caps fs-10 light">Width</p>
</div>
<div class="col-auto b-r b-grey p-t-10 p-b-10">
<p class="no-margin text-info bold">{{item.quantity}} <sup>CM</sup></p>
<p class="no-margin text-info bold">{{item.height}} <sup>CM</sup></p>
<p class="no-margin all-caps fs-10 light">Height</p>
</div>
<div class="col-auto b-r b-grey p-t-10 p-b-10">
@@ -52,6 +52,10 @@
<small class="fs-10 all-caps muted">Status</small>
<p class="no-margin bold">{{status}}</p>
</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>
</div>
</div>
<div class="row">
<div class="col-auto">
@@ -38,14 +38,6 @@
</div>
<div class="row" v-if="expanded" >
<div class="col bg-white p-t-15 p-b-15">
<div class="row m-b-5">
<div class="col-auto p-r-5">
<p class="no-margin all-caps fs-10 light">Order Number</p>
</div>
<div class="col p-l-5">
<p class="no-margin bold text-info fs-12">{{item.order.reference}}</p>
</div>
</div>
<div class="row m-b-5">
<div class="col-auto p-r-5">
<p class="no-margin all-caps fs-10 light">Description</p>
@@ -62,6 +54,30 @@
<p class="no-margin bold text-info fs-12">{{item.transport.tracking_number}}</p>
</div>
</div>
<div class="row m-b-5" v-if="$store.getters.isAdmin">
<div class="col-auto p-r-5">
<p class="no-margin all-caps fs-10 light">Marking</p>
</div>
<div class="col p-l-5">
<p class="no-margin bold text-info fs-12"><a :href="route('customer.profile', item.order.company_module.marking)">{{item.order.company_module.marking}}</a></p>
</div>
</div>
<div class="row m-b-5" v-if="$store.getters.isAdmin">
<div class="col-auto p-r-5">
<p class="no-margin all-caps fs-10 light">Order Number</p>
</div>
<div class="col p-l-5">
<p class="no-margin bold text-info fs-12"><a :href="route('order.show', item.order.reference)">{{item.order.reference}}</a></p>
</div>
</div>
<div class="row m-b-5" v-if="$store.getters.isAdmin">
<div class="col-auto p-r-5">
<p class="no-margin all-caps fs-10 light">Delivery Address</p>
</div>
<div class="col p-l-5">
<p class="no-margin bold text-info fs-12">{{item.order.address.street_one+' '+(item.order.address.street_two ? item.order.address.street_two : '')+', '+ item.order.address.district.name+', '+item.order.address.post_code+' '+item.order.address.state.name+', '+item.order.address.country.name}}</p>
</div>
</div>
</div>
</div>
</div>
@@ -0,0 +1,49 @@
<template>
<div class="row justify-content-center">
<div class="col col-md-10">
<div class="row m-b-20">
<div class="col">
<div class="row m-b-20 text-info">
<div class="col text-center">
<h3>Approve</h3>
</div>
</div>
</div>
</div>
<div class="row justify-content-center animate__animated animate__fadeInUpBig animate__delay-1 animate__fast">
<div class="col col-md-8 no-padding">
<div class="row">
<div class="col p-l-5">
<button type="button" class="btn btn-lg btn-block btn-primary b-rad-none" @click="approveChangeAddress()" >Approve</button>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
import ModalFormHandler from '../../../general/mixins/modalFormHandler';
export default {
props: {
data: {
type: Object,
required: true,
}
},
data() {
return {
parameters : {
order_id: this.data.id,
}
}
},
methods:{
approveChangeAddress(){
this.submit((this.route('api.order.address.change.approve')), 'post', 'orderListSection', true, true);
},
},
mixins: [componentHandler, ModalFormHandler]
}
</script>
@@ -0,0 +1,84 @@
<template>
<div class="row">
<div class="col">
<div class="row">
<div class="col">
<div class="row m-b-20 text-info">
<div class="col">
<h3 class="text-left">Delivery Address Update</h3>
<h6 class="text-left">Please select the address where you want to receive this order</h6>
</div>
</div>
<div class="row justify-content-center no-margin">
<div class="col">
<list-component style="min-height: 50px;" section="addressList" :emptyListSection=false :endpoint="route('api.address.list')" :options="{per_page: 10, HasMorphCompanyModule: data.company_module.id}">
<template slot="list" slot-scope="{data}">
<select-address-component :data="data" :value="parameters.address_id" v-model="parameters.address_id"></select-address-component>
</template>
</list-component>
<div class="row m-b-10 animate__animated animate__fadeInUpBig animate__delay-1 animate__fast">
<div class="col b-a p-t-15 p-b-15 pointer" :class="{ 'b-primary': !parameters.address_id, 'b-grey': parameters.address_id}" @click="parameters.address_id = null">
<div class="row align-items-center">
<div class="col-auto p-r-0">
<i class="fa fs-20 p-t-5" :class="{'fa-circle-o': parameters.address_id, 'fa-check-circle': !parameters.address_id, 'text-primary': !parameters.address_id}"></i>
</div>
<div class="col-auto semi-bold">New Address</div>
</div>
<div class="row" v-show="!parameters.address_id">
<div class="col">
<address-form-component :id="data.company_module.id" section="addressList" @input="parameters.address_id = $event"></address-form-component>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row animate__animated animate__fadeInUpBig animate__delay-1 animate__fast no-margin">
<div class="col no-padding">
<div class="row">
<div class="col"></div>
<div class="col-7">
<h6 class="text-right fs-12 text-danger m-b-15 text-right">**You delivery address change request will be approved after being reviewed, once it's approved your order delivery address will be updated.</h6>
</div>
</div>
<div class="row">
<div class="col text-left">
<button type="button" class="btn btn-md btn-default b-rad-none pointer" data-dismiss="modal" >Cancel</button>
</div>
<div class="col-auto">
<button type="button" class="btn btn-md btn-block btn-primary b-rad-none" @click="changeAddress()" v-if="parameters.address_id">Update Delivery Address</button>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
import ModalFormHandler from '../../../general/mixins/modalFormHandler';
export default {
props: {
data: {
type: Object,
required: true,
}
},
data() {
return {
parameters : {
address_id: '',
order_id: this.data.id,
}
}
},
methods:{
changeAddress(){
this.submit((this.route('api.order.address.change.request')), 'post', 'orderListSection', true, true);
},
},
mixins: [componentHandler, ModalFormHandler]
}
</script>
@@ -16,29 +16,71 @@
</div>
</div>
<div class="col">
<div class="row m-b-10">
<div class="row m-b-20">
<div class="col">
<h3 class="no-margin"><b>Order No.</b> {{order.reference}}</h3>
</div>
</div>
<div class="row m-b-10">
<div class="row m-b-20">
<div class="col-auto">
<h6 class="no-margin"><b>Delivery Address:</b> {{order.address.reference}} <i class="fa fa-info-circle m-l-10" v-tooltip:right="order.address.street_one+' '+(order.address.street_two ? order.address.street_two : '')+', '+ order.address.district.name+', '+order.address.post_code+' '+order.address.state.name+', '+order.address.country.name" ></i></h6>
<h6 class="no-margin"><b>Order Date:</b> {{order.created_at}}</h6>
</div>
<div class="col-auto">
<h6 class="no-margin"><b>Warehouse:</b> {{order.warehouse.id === 3 ? 'Guang Zhou' : 'Yiwu'}}</h6>
</div>
<div class="col-auto">
<h6 class="no-margin"><b>Order Date:</b> {{order.created_at}}</h6>
</div>
</div>
<div class="row m-b-10" v-if="$store.getters.isAdmin">
<div class="col" >
<div class="col" v-if="$store.getters.isAdmin">
<a :href="route('customer.profile', order.company_module.marking)">
<h6 class="no-margin"><b>Customer Marking:</b> {{order.company_module.marking}}</h6>
</a>
</div>
</div>
<div class="row m-b-10 align-items-center parentContainer" >
<div class="col-auto">
<h6 class="no-margin"><b>Delivery Address:</b> {{order.address.reference}} <i class="fa fa-info-circle m-l-10" v-tooltip:right="order.address.street_one+' '+(order.address.street_two ? order.address.street_two : '')+', '+ order.address.district.name+', '+order.address.post_code+' '+order.address.state.name+', '+order.address.country.name" ></i></h6>
</div>
<div class="col">
<div class="row" v-if="!order.address_change_request">
<div class="col">
<div class="btn btn-xs btn-outline-danger b-rad-none pointer requestModal" data-type="updateDeliveryAddress">Change Delivery Address</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="stick-up" type="updateDeliveryAddress" size="large">
<change-order-address-form-component :data="order" :section="section" class="text-center"></change-order-address-form-component>
</modal-component>
</div>
</div>
<div class="row parentContainer" v-if="order.address_change_request">
<div class="col-auto p-r-0">
<div class="p-t-10 p-b-10 p-l-15 p-r-15 b-a b-danger fs-10 text-danger requestModal" data-type="updateDeliveryAddress"><i class="fa fa-exclamation-circle m-r-10"></i>Your Delivery address change request is being reviewed</div>
</div>
<div class="col-auto bg-danger-light pointer requestModal" data-type="cancelAddressChangeRequest">
<i class="fa fa-times text-white lh-38"></i>
</div>
<modal-component small type="cancelAddressChangeRequest">
<div class="row">
<div class="col text-center">
<div class="row">
<div class="col text-center">
<div class="row m-b-20">
<div class="col">
<h5 class="all-caps">Cancel Address Change Request</h5>
<div class="fs-11">Are you sure you want to cancel your order delivery address change request?</div>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div data-dismiss="modal" class="btn btn-sm btn-default bg-master-lighter btn-block b-rad-none">Cancel</div>
</div>
<div class="col p-l-5">
<div data-dismiss="modal" class="btn btn-sm btn-danger btn-block b-rad-none" @click="submit(route('api.order.address.status.update', order.address_change_request.id, 6), 'put', section, true, true)">Confirm</div>
</div>
</div>
</div>
</div>
</div>
</div>
</modal-component>
</div>
</div>
</div>
<div class="row align-items-center">
<div class="col-10">
<h6 class="text-info"><span class="text-danger bold">Gentle reminder:</span> You need to send the QR code to your supplier to print and stick on your packages, this QR code is required for us to identify your packages when they arrives at our warehouse!</h6>
@@ -1,12 +0,0 @@
<template>
<div class="row">
<div class="col-5">
<list-component section="warehouseListSection" :endpoint="route('api.packing_list.list')" :options="{type: 1, status: 2, per_page: 20, order_by: {column: 'created_at', DESC: false}}">
<template slot="list" slot-scope="{data}">
<parcel-component v-for="packages in data.packages" :data="packages" :key="packages.id"></parcel-component>
</template>
</list-component>
</div>
</div>
</template>
@@ -19,6 +19,12 @@
@include('partials.header')
<div class="row no-margin p-b-50">
<div class="col p-t-15 p-b-25">
<div class="row m-b-20" v-if="$store.getters.isAdmin">
<div class="col"></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>
</div>
@yield('inner_content')
</div>
</div>
@@ -1,5 +1,5 @@
<div class="row d-none" :class="[{'d-flex': $store.getters.isAdmin}]" v-if="$store.getters.isAdmin">
<div class="col-6">
<div class="col-8">
<div class="row p-b-5 b-b b-grey m-b-10 m-l-0 m-r-0">
<div class="col no-padding">
<h6>Customers List</h6>
@@ -30,5 +30,19 @@
</list-component>
</div>
</div>
<div class="row p-b-5 b-b b-grey m-b-10 m-l-0 m-r-0">
<div class="col no-padding">
<h6>Address Change Verification</h6>
</div>
</div>
<div class="row no-margin">
<div class="col">
<list-component key="2" section="addressVerificationSection" :options="{'per_page': 5, 'status': 1, 'with_owner': true}" :endpoint="route('api.address.list')">
<template slot="list" slot-scope="{data}">
<address-verification-component section="addressVerificationSection" :data="data"></address-verification-component>
</template>
</list-component>
</div>
</div>
</div>
</div>
@@ -0,0 +1,17 @@
@extends('layouts.base_portal')
@section('inner_content')
<div class="row m-1 mt-3 mb-3 hide">
<div class="col col-10 m-r-5">
<div class="row border p-1">Search</div>
</div>
<div class="col col m-l-5">
<div class="row border p-1">Filter</div>
</div>
</div>
<!-- <list-component section="containerListSection" :endpoint="route('api.packing_list.container.list')"> -->
<list-component section="containerListSection" :endpoint="route('api.packing_list.container.list')" :options="{'with_packing_lists': true, order_by: {column: 'created_at', DESC: true}}">
<template slot="list" slot-scope="{data}">
<container-component :data="data"></container-component>
</template>
</list-component>
@endsection
@@ -0,0 +1,17 @@
@extends('layouts.base_portal')
@section('inner_content')
<div class="row m-1 mt-3 mb-3 hide">
<div class="col col-10 m-r-5">
<div class="row border p-1">Search</div>
</div>
<div class="col col m-l-5">
<div class="row border p-1">Filter</div>
</div>
</div>
<!-- <list-component section="containerListSection" :endpoint="route('api.packing_list.container.list')"> -->
<list-component section="containerListSection" :endpoint="route('api.address.district.list')">
<template slot="list" slot-scope="{data}">
<container-component :data="data"></container-component>
</template>
</list-component>
@endsection
@@ -1,4 +1,12 @@
@extends('layouts.base_portal')
@section('inner_content')
<warehouse-list-section-component></warehouse-list-section-component>
<div class="row">
<div class="col-7">
<list-component section="warehouseListSection" :endpoint="route('api.packing_list.list')" :options="{type: 1, status: 2, per_page: 20, order_by: {column: 'created_at', DESC: true}}">
<template slot="list" slot-scope="{data}">
<parcel-component v-for="packages in data.packages" :data="packages" :key="packages.id"></parcel-component>
</template>
</list-component>
</div>
</div>
@endsection
File diff suppressed because one or more lines are too long
+174 -28
View File
@@ -28,13 +28,17 @@
"name": "Order",
"description": "Endpoints related to order module."
},
{
"name": "Packing",
"description": "Endpoints related to packing module."
},
{
"name": "Package",
"description": "Endpoints related to package module."
},
{
"name": "Packing",
"description": "Endpoints related to packing module."
"name": "Container",
"description": "Endpoints related to container module."
},
{
"name": "Transport",
@@ -71,9 +75,9 @@
"description": "",
"parameters": [
{
"name": "package_id",
"name": "reference_number",
"in": "query",
"description": "Package Id",
"description": "Reference No",
"required": true,
"type": "integer"
}
@@ -221,7 +225,7 @@
"description": "Status",
"required": true,
"type": "integer"
},
}
],
"responses": {
"200": {
@@ -296,7 +300,7 @@
"/packing_list/container/create": {
"post": {
"tags": [
"Packing"
"Container"
],
"produces": [
"application/json"
@@ -362,7 +366,7 @@
"/packing_list/container/list": {
"get": {
"tags": [
"Packing"
"Container"
],
"produces": [
"application/json"
@@ -410,7 +414,7 @@
"/packing_list/container/{id}/show": {
"get": {
"tags": [
"Packing"
"Container"
],
"produces": [
"application/json"
@@ -455,7 +459,7 @@
"/packing_list/container/update/{id}": {
"put": {
"tags": [
"Packing"
"Container"
],
"produces": [
"application/json"
@@ -528,7 +532,7 @@
"/packing_list/container/delete/{id}": {
"delete": {
"tags": [
"Packing"
"Container"
],
"produces": [
"application/json"
@@ -826,7 +830,7 @@
}
}
},
"/package/create": {
"/packing_list/package/create": {
"post": {
"tags": [
"Package"
@@ -893,7 +897,7 @@
"description": "Quantity",
"required": true,
"type": "integer"
},
}
],
"responses": {
"200": {
@@ -920,7 +924,7 @@
}
}
},
"/package/list": {
"/packing_list/package/list": {
"get": {
"tags": [
"Package"
@@ -968,7 +972,7 @@
}
}
},
"/package/{id}/show": {
"/packing_list/package/{id}/show": {
"get": {
"tags": [
"Package"
@@ -1013,7 +1017,7 @@
}
}
},
"/package/update/{id}": {
"/packing_list/package/update/{id}": {
"put": {
"tags": [
"Package"
@@ -1087,7 +1091,7 @@
"description": "Status",
"required": true,
"type": "integer"
},
}
],
"responses": {
"200": {
@@ -1114,7 +1118,7 @@
}
}
},
"/package/delete/{id}": {
"/packing_list/package/delete/{id}": {
"delete": {
"tags": [
"Package"
@@ -1159,7 +1163,7 @@
}
}
},
"/package/item/create": {
"/packing_list/package/item/create": {
"post": {
"tags": [
"Package"
@@ -1219,7 +1223,7 @@
"description": "Total",
"required": true,
"type": "number"
},
}
],
"responses": {
"200": {
@@ -1246,7 +1250,7 @@
}
}
},
"/package/item/list": {
"/packing_list/package/item/list": {
"get": {
"tags": [
"Package"
@@ -1294,7 +1298,7 @@
}
}
},
"/package/item/{id}/show": {
"/packing_list/package/item/{id}/show": {
"get": {
"tags": [
"Package"
@@ -1339,7 +1343,7 @@
}
}
},
"/package/item/update/{id}": {
"/packing_list/package/item/update/{id}": {
"put": {
"tags": [
"Package"
@@ -1406,7 +1410,7 @@
"description": "Status",
"required": true,
"type": "integer"
},
}
],
"responses": {
"200": {
@@ -1433,7 +1437,7 @@
}
}
},
"/package/item/delete/{id}": {
"/packing_list/package/item/delete/{id}": {
"delete": {
"tags": [
"Package"
@@ -1490,7 +1494,7 @@
"summary": "Create transport",
"description": "",
"parameters": [
{
{
"name": "container_id",
"in": "query",
"description": "Container Id",
@@ -1697,7 +1701,7 @@
"description": "Status",
"required": true,
"type": "integer"
},
}
],
"responses": {
"200": {
@@ -2294,9 +2298,9 @@
"description": "",
"parameters": [
{
"name": "company_module_id",
"name": "company_id",
"in": "query",
"description": "Company Module ID",
"description": "Company ID",
"required": true,
"type": "integer"
},
@@ -2430,6 +2434,148 @@
}
}
},
"/order/show/{id}": {
"get": {
"tags": [
"Order"
],
"produces": [
"application/json"
],
"operationId": "showOrder",
"summary": "Show order",
"description": "",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Order Reference Id",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "successful operation",
"headers": {
"X-Expires-After": {
"type": "string",
"format": "date-time",
"description": "date in UTC when token expires"
},
"X-Rate-Limit": {
"type": "integer",
"format": "int32",
"description": "calls per hour allowed by the user"
}
},
"schema": {
"type": "string"
}
},
"422": {
"description": "Invalid input supplied"
}
}
}
},
"/order/address/change/request": {
"post": {
"tags": [
"Order"
],
"produces": [
"application/json"
],
"operationId": "requestChangeOrderAddress",
"summary": "Request Change Order Address",
"description": "",
"parameters": [
{
"name": "order_id",
"in": "query",
"description": "Order ID",
"required": true,
"type": "integer"
},
{
"name": "address_id",
"in": "query",
"description": "New Order Address ID",
"required": true,
"type": "integer"
},
],
"responses": {
"200": {
"description": "successful operation",
"headers": {
"X-Expires-After": {
"type": "string",
"format": "date-time",
"description": "date in UTC when token expires"
},
"X-Rate-Limit": {
"type": "integer",
"format": "int32",
"description": "calls per hour allowed by the user"
}
},
"schema": {
"type": "string"
}
},
"422": {
"description": "Invalid input supplied"
}
}
}
},
"/order/address/change/approve": {
"post": {
"tags": [
"Order"
],
"produces": [
"application/json"
],
"operationId": "approveChangeOrderAddress",
"summary": "Approve Change Order Address",
"description": "",
"parameters": [
{
"name": "order_id",
"in": "query",
"description": "Order ID",
"required": true,
"type": "integer"
}
],
"responses": {
"200": {
"description": "successful operation",
"headers": {
"X-Expires-After": {
"type": "string",
"format": "date-time",
"description": "date in UTC when token expires"
},
"X-Rate-Limit": {
"type": "integer",
"format": "int32",
"description": "calls per hour allowed by the user"
}
},
"schema": {
"type": "string"
}
},
"422": {
"description": "Invalid input supplied"
}
}
}
},
"/address/create": {
"post": {
"tags": [
+2
View File
@@ -9,4 +9,6 @@ Route::group(['prefix' => 'order', 'as' => 'order.', 'namespace' => 'Orders'], f
Route::put('/confirm/{id}', 'ConfirmOrderController@confirm')->name('confirm');
Route::put('/cancel/{id}', 'CancelOrderController@cancel')->name('cancel');
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');
});
+1
View File
@@ -7,6 +7,7 @@ Route::group(['namespace' => 'PackingLists', 'as' => 'packing_list.', 'prefix' =
Route::get('/list', 'ListPackingListsController@list')->name('list');
Route::post('/create', 'CreatePackingListController@create')->name('create');
Route::put('/update/{id}', 'UpdatePackingListController@update')->name('update');
Route::put('/status/{id}/update/{status}', 'UpdatePackingListStatusController@update')->name('status.update');
Route::delete('/delete/{id}', 'DeletePackingListController@delete')->name('delete');
Route::group(['namespace' => 'Containers', 'prefix' => 'container', 'as' => 'container.'], function () {
+46 -15
View File
@@ -1,10 +1,11 @@
<?php
use App\Classes\General\Services\GeneratesInitials;
use App\Classes\Jobs\FetchContainersStatusUpdateFromVTPortalJob;
use App\Classes\Jobs\FetchDeliveryListFromVTPortalJob;
use App\Classes\Jobs\FetchLoadedContainersFromVTPortalJob;
use App\Classes\Jobs\FetchPackingListFromVTPortalJob;
use App\Classes\Jobs\FetchWarehouseReceiveListFromVTPortalJob;
use App\Models\CompanyConnection;
use App\Models\OldCompany;
use App\Models\Order;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Route;
/*
@@ -65,23 +66,53 @@ Route::get('/warehouse-list', function () {
return view('pages.warehouse_list');
})->name('warehouse.list');
Route::get('/containers', function () {
return view('pages.containers');
})->name('containers');
Route::get('/customer/{marking}', function ($marking) {
$connection = CompanyConnection::where('invitee_reference', $marking)->first();
$id = $connection->invitee->company->id;
return view('pages.customers.profile', ['id' => $id]);
})->name('customer.profile');
Route::get('/orders/refresh', function(){
FetchWarehouseReceiveListFromVTPortalJob::withChain([
new FetchLoadedContainersFromVTPortalJob,
new FetchPackingListFromVTPortalJob,
new FetchContainersStatusUpdateFromVTPortalJob,
new FetchDeliveryListFromVTPortalJob
])->dispatch();
return redirect('orders');
})->name('orders.refresh');
Route::get('/containers/refresh', function(){
FetchContainersStatusUpdateFromVTPortalJob::dispatch();
return redirect('orders');
})->name('containers.refresh');
Route::get('/deliveries/refresh', function(){
FetchDeliveryListFromVTPortalJob::dispatch();
return redirect('orders');
})->name('deliveries.refresh');
Route::get('/order/{id}/download', 'Orders\DownloadOrderQrPdfController@download')->name('order.qr.download');
Route::get('/test', function(){
$addresses = \App\Models\Address::all();
foreach ($addresses as $address){
$address->street_one = (new \App\Classes\Modules\Addresses\Services\CleansOldAddress())->cleanAddress($address->street_one, $address->district, $address->postcode);
$address->street_two = (new \App\Classes\Modules\Addresses\Services\CleansOldAddress())->cleanAddress($address->street_two, $address->district, $address->postcode);
$address->save();
}
})->name('test');
//Route::get('/test', function(){
// $addresses = \App\Models\Address::all();
// foreach ($addresses as $address){
// $address->street_one = (new \App\Classes\Modules\Addresses\Services\CleansOldAddress())->cleanAddress($address->street_one, $address->district, $address->postcode);
// $address->street_two = (new \App\Classes\Modules\Addresses\Services\CleansOldAddress())->cleanAddress($address->street_two, $address->district, $address->postcode);
// $address->save();
// }
//})->name('test');
Route::get('/shipping-queue', function () {
return view('pages.templates.shippingQueue');
})->name('shipping-queue');