mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git
synced 2026-08-19 04:24:12 +00:00
fix the user ui, create delivery order, delivery customer dashboard
This commit is contained in:
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class TypeIn implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return Builder|mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->whereIn('type', $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -15,6 +15,7 @@ use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor;
|
|||||||
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
|
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
|
||||||
use App\Classes\Modules\Companies\Services\ApprovesCompanyConnection;
|
use App\Classes\Modules\Companies\Services\ApprovesCompanyConnection;
|
||||||
use App\Classes\Modules\Companies\Services\CreatesCompanyConnection;
|
use App\Classes\Modules\Companies\Services\CreatesCompanyConnection;
|
||||||
|
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
|
||||||
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
|
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
|
||||||
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
|
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
|
||||||
use App\Classes\Modules\Documents\Processors\UploadIdentityDocumentProcessor;
|
use App\Classes\Modules\Documents\Processors\UploadIdentityDocumentProcessor;
|
||||||
@@ -76,6 +77,9 @@ class CreateCustomerLogic extends AbstractControllerLogic
|
|||||||
/** @var GenerateEmailVerificationAttemptProcessor */
|
/** @var GenerateEmailVerificationAttemptProcessor */
|
||||||
private $generateEmailVerificationAttemptProcessor;
|
private $generateEmailVerificationAttemptProcessor;
|
||||||
|
|
||||||
|
/** @var FetchesCompanyModule */
|
||||||
|
private $fetchesCompanyModule;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CreateCustomerLogic constructor.
|
* CreateCustomerLogic constructor.
|
||||||
* @param CreateUserProcessor $createUserProcessor
|
* @param CreateUserProcessor $createUserProcessor
|
||||||
@@ -88,8 +92,9 @@ class CreateCustomerLogic extends AbstractControllerLogic
|
|||||||
* @param UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor
|
* @param UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor
|
||||||
* @param AuthenticationProcessor $authenticationProcessor
|
* @param AuthenticationProcessor $authenticationProcessor
|
||||||
* @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor
|
* @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor
|
||||||
|
* @param FetchesCompanyModule $fetchesCompanyModule
|
||||||
*/
|
*/
|
||||||
public function __construct(CreateUserProcessor $createUserProcessor, CreateCompanyProcessor $createCompanyProcessor, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, CreatesCompanyConnection $createsCompanyConnection, ApprovesCompanyConnection $approvesCompanyConnection, AssignEmployeeProcessor $assignEmployeeProcessor, UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor, AuthenticationProcessor $authenticationProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor)
|
public function __construct(CreateUserProcessor $createUserProcessor, CreateCompanyProcessor $createCompanyProcessor, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, CreatesCompanyConnection $createsCompanyConnection, ApprovesCompanyConnection $approvesCompanyConnection, AssignEmployeeProcessor $assignEmployeeProcessor, UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor, AuthenticationProcessor $authenticationProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor, FetchesCompanyModule $fetchesCompanyModule)
|
||||||
{
|
{
|
||||||
$this->createUserProcessor = $createUserProcessor;
|
$this->createUserProcessor = $createUserProcessor;
|
||||||
$this->createCompanyProcessor = $createCompanyProcessor;
|
$this->createCompanyProcessor = $createCompanyProcessor;
|
||||||
@@ -101,6 +106,7 @@ class CreateCustomerLogic extends AbstractControllerLogic
|
|||||||
$this->uploadIdentityDocumentProcessor = $uploadIdentityDocumentProcessor;
|
$this->uploadIdentityDocumentProcessor = $uploadIdentityDocumentProcessor;
|
||||||
$this->authenticationProcessor = $authenticationProcessor;
|
$this->authenticationProcessor = $authenticationProcessor;
|
||||||
$this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor;
|
$this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor;
|
||||||
|
$this->fetchesCompanyModule = $fetchesCompanyModule;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -128,7 +134,7 @@ class CreateCustomerLogic extends AbstractControllerLogic
|
|||||||
|
|
||||||
$inviter = $this->fetchesCompanyModule->execute(['reference'=>'CIEF']);
|
$inviter = $this->fetchesCompanyModule->execute(['reference'=>'CIEF']);
|
||||||
|
|
||||||
$connectionObject = new CompanyConnectionObject($companyModule, $inviter, 'CIEF', mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate());
|
$connectionObject = new CompanyConnectionObject($companyModule, $inviter, mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate(), 'CIEF');
|
||||||
|
|
||||||
$connection = $this->createsCompanyConnection->execute($connectionObject);
|
$connection = $this->createsCompanyConnection->execute($connectionObject);
|
||||||
|
|
||||||
|
|||||||
@@ -12,9 +12,11 @@ class AuthenticationRedirect
|
|||||||
public function url(User $user){
|
public function url(User $user){
|
||||||
|
|
||||||
if($user->type === RoleTypes::USER){
|
if($user->type === RoleTypes::USER){
|
||||||
if ($user->companyModule()->first()->type === BusinessType::ONLINE_SELLER) {
|
|
||||||
return route('delivery.dashboard');
|
if (in_array($user->companyModule()->first()->type, [BusinessType::ONLINE_SELLER, BusinessType::LAST_MILE_DELIVERY_AGENT])) {
|
||||||
|
return route('last_mile_delivery.dashboard');
|
||||||
}
|
}
|
||||||
|
|
||||||
return route('dashboard');
|
return route('dashboard');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,9 @@ class GeneratesAuthenticationToken {
|
|||||||
$companyModule = $user->companyModule()->first();
|
$companyModule = $user->companyModule()->first();
|
||||||
|
|
||||||
$claims = array_merge($claims, [
|
$claims = array_merge($claims, [
|
||||||
'company_id' => $companyModule->company_id
|
'company_id' => $companyModule->company_id,
|
||||||
|
'company_module_id' => $companyModule->id,
|
||||||
|
'company_module_type' => $companyModule->type
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
|
|||||||
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
|
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
|
||||||
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
|
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
|
||||||
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
|
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
|
||||||
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
use App\Http\Resources\AddressResource;
|
use App\Http\Resources\AddressResource;
|
||||||
use App\Models\Address;
|
use App\Models\Address;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
@@ -82,7 +83,7 @@ class CreateAddressLogic extends AbstractControllerLogic
|
|||||||
|
|
||||||
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
|
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
|
||||||
|
|
||||||
$object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'), $request->input('reference'));
|
$object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'), $request->input('type'), ApprovalStatus::APPROVED, $request->input('reference'));
|
||||||
|
|
||||||
$this->canCreateAddress->passes($object);
|
$this->canCreateAddress->passes($object);
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
|
|||||||
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
|
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
|
||||||
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
|
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
|
||||||
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
|
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
|
||||||
|
use App\Classes\ValueObjects\Constants\AddressType;
|
||||||
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
use App\Http\Resources\AddressResource;
|
use App\Http\Resources\AddressResource;
|
||||||
use App\Models\Address;
|
use App\Models\Address;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
@@ -79,7 +81,7 @@ class UpdateAddressLogic extends AbstractControllerLogic
|
|||||||
{
|
{
|
||||||
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
|
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
|
||||||
|
|
||||||
$object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'), $request->input('reference'));
|
$object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'), AddressType::DELIVERY, ApprovalStatus::APPROVED, $request->input('reference'));
|
||||||
|
|
||||||
$this->canUpdateAddress->passes($object);
|
$this->canUpdateAddress->passes($object);
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,12 @@ class AddressObject implements DataTransferObject
|
|||||||
/** @var int */
|
/** @var int */
|
||||||
private $postCode;
|
private $postCode;
|
||||||
|
|
||||||
|
/** @var int */
|
||||||
|
private $type;
|
||||||
|
|
||||||
|
/** @var int */
|
||||||
|
private $status;
|
||||||
|
|
||||||
/** @var string|null */
|
/** @var string|null */
|
||||||
private $reference;
|
private $reference;
|
||||||
|
|
||||||
@@ -37,9 +43,11 @@ class AddressObject implements DataTransferObject
|
|||||||
* @param int $stateId
|
* @param int $stateId
|
||||||
* @param int $districtId
|
* @param int $districtId
|
||||||
* @param int $postCode
|
* @param int $postCode
|
||||||
|
* @param int $type
|
||||||
|
* @param int $status
|
||||||
* @param null|string $reference
|
* @param null|string $reference
|
||||||
*/
|
*/
|
||||||
public function __construct(string $streetOne, ?string $streetTwo, int $countryId, int $stateId, int $districtId, int $postCode, ?string $reference = null, ?int $status = ApprovalStatus::APPROVED)
|
public function __construct(string $streetOne, ?string $streetTwo, int $countryId, int $stateId, int $districtId, int $postCode, int $type, int $status, ?string $reference = null)
|
||||||
{
|
{
|
||||||
$this->streetOne = $streetOne;
|
$this->streetOne = $streetOne;
|
||||||
$this->streetTwo = $streetTwo;
|
$this->streetTwo = $streetTwo;
|
||||||
@@ -47,8 +55,9 @@ class AddressObject implements DataTransferObject
|
|||||||
$this->stateId = $stateId;
|
$this->stateId = $stateId;
|
||||||
$this->districtId = $districtId;
|
$this->districtId = $districtId;
|
||||||
$this->postCode = $postCode;
|
$this->postCode = $postCode;
|
||||||
$this->reference = $reference;
|
$this->type = $type;
|
||||||
$this->status = $status;
|
$this->status = $status;
|
||||||
|
$this->reference = $reference;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -100,11 +109,11 @@ class AddressObject implements DataTransferObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return null|string
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function getReference(): ?string
|
public function getType(): int
|
||||||
{
|
{
|
||||||
return $this->reference;
|
return $this->type;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -115,5 +124,13 @@ class AddressObject implements DataTransferObject
|
|||||||
return $this->status;
|
return $this->status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return null|string
|
||||||
|
*/
|
||||||
|
public function getReference(): ?string
|
||||||
|
{
|
||||||
|
return $this->reference;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -10,6 +10,8 @@ namespace App\Classes\Modules\Addresses\Services;
|
|||||||
|
|
||||||
|
|
||||||
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
|
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
|
||||||
|
use App\Classes\ValueObjects\Constants\AddressType;
|
||||||
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
use App\Models\District;
|
use App\Models\District;
|
||||||
use App\Models\OldAddress;
|
use App\Models\OldAddress;
|
||||||
|
|
||||||
@@ -31,7 +33,7 @@ class CleansOldAddress
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new AddressObject($this->cleanAddress($address->street_one, $district, $address->post_code), $this->cleanAddress($address->street_two, $district, $address->post_code), $district->country_id, $district->state_id, $district->id, $address->post_code, 'Delivery Address');
|
return new AddressObject($this->cleanAddress($address->street_one, $district, $address->post_code), $this->cleanAddress($address->street_two, $district, $address->post_code), $district->country_id, $district->state_id, $district->id, $address->post_code, AddressType::DELIVERY, ApprovalStatus::APPROVED, 'Delivery Address');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ class CreatesAddress extends AbstractUpdateRelationshipRecord
|
|||||||
$model->district_id = $object->getDistrictId();
|
$model->district_id = $object->getDistrictId();
|
||||||
$model->postcode = $object->getPostCode();
|
$model->postcode = $object->getPostCode();
|
||||||
$model->status = $object->getStatus();
|
$model->status = $object->getStatus();
|
||||||
|
$model->type = $object->getType();
|
||||||
|
|
||||||
return $this->handler($addressable->addresses(), $model);
|
return $this->handler($addressable->addresses(), $model);
|
||||||
|
|
||||||
|
|||||||
@@ -132,9 +132,9 @@ class CreateDeliveryCustomerLogic extends AbstractControllerLogic
|
|||||||
/** @var CompanyModule $companyModule */
|
/** @var CompanyModule $companyModule */
|
||||||
$companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::ONLINE_SELLER);
|
$companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::ONLINE_SELLER);
|
||||||
|
|
||||||
$inviter = $this->fetchesCompanyModule->execute(['reference'=>'EXP']);
|
$inviter = $this->fetchesCompanyModule->execute(['reference'=>'LMD']);
|
||||||
|
|
||||||
$connectionObject = new CompanyConnectionObject($companyModule, $inviter, 'EXP', mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate());
|
$connectionObject = new CompanyConnectionObject($companyModule, $inviter, mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate(), 'LMD');
|
||||||
|
|
||||||
$connection = $this->createsCompanyConnection->execute($connectionObject);
|
$connection = $this->createsCompanyConnection->execute($connectionObject);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,178 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Delivery\ControllersLogic;
|
||||||
|
|
||||||
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
|
|
||||||
|
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
|
||||||
|
use App\Classes\Modules\Addresses\Services\CreatesAddress;
|
||||||
|
use App\Classes\Modules\Addresses\Services\FetchesAddress;
|
||||||
|
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
||||||
|
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
|
||||||
|
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
|
||||||
|
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
||||||
|
use App\Classes\Modules\Orders\Services\CreatesOrder;
|
||||||
|
use App\Classes\Modules\Orders\Services\GeneratesOrderNumber;
|
||||||
|
use App\Classes\Modules\Orders\Standards\Rules\CanCreateOrder;
|
||||||
|
use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject;
|
||||||
|
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
|
||||||
|
use App\Classes\Modules\PackingLists\Services\CreatesPackingList;
|
||||||
|
use App\Classes\Modules\PackingLists\Services\Packages\CreatesPackage;
|
||||||
|
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
|
||||||
|
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
|
||||||
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
use App\Classes\ValueObjects\Constants\BusinessType;
|
||||||
|
use App\Classes\ValueObjects\Constants\OrderType;
|
||||||
|
use App\Classes\ValueObjects\Constants\PackingListType;
|
||||||
|
use App\Http\Resources\DeliveryOrderResource;
|
||||||
|
use App\Models\Address;
|
||||||
|
use App\Models\CompanyModule;
|
||||||
|
use App\Models\Order;
|
||||||
|
use App\Models\PackingList;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class CreateDeliveryOrderLogic extends AbstractControllerLogic
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function notification(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'title' => 'Created Order',
|
||||||
|
'message' => 'You have successfully created a new Order'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var FetchesCompany */
|
||||||
|
private $fetchesCompany;
|
||||||
|
|
||||||
|
/** @var fetchesAddress */
|
||||||
|
private $fetchesAddress;
|
||||||
|
|
||||||
|
/** @var CanCreateOrder */
|
||||||
|
private $canCreateOrder;
|
||||||
|
|
||||||
|
/** @var CreatesOrder */
|
||||||
|
private $createsOrder;
|
||||||
|
|
||||||
|
/** @var CreatesAddress */
|
||||||
|
private $createAddress;
|
||||||
|
|
||||||
|
/** @var CreateContactProcessor */
|
||||||
|
private $createContactProcessor;
|
||||||
|
|
||||||
|
/** @var CreateRemarkProcessor */
|
||||||
|
private $createRemarkProcessor;
|
||||||
|
|
||||||
|
/** @var GeneratesOrderNumber */
|
||||||
|
private $generatesOrderNumber;
|
||||||
|
|
||||||
|
/** @var CreatesPackingList */
|
||||||
|
private $createsPackingList;
|
||||||
|
|
||||||
|
/** @var CreatesPackage */
|
||||||
|
private $createsPackage;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CreateDeliveryOrderLogic constructor.
|
||||||
|
* @param FetchesCompany $fetchesCompany
|
||||||
|
* @param FetchesAddress $fetchesAddress
|
||||||
|
* @param CanCreateOrder $canCreateOrder
|
||||||
|
* @param CreatesOrder $createsOrder
|
||||||
|
* @param CreatesAddress $createAddress
|
||||||
|
* @param CreateContactProcessor $createContactProcessor
|
||||||
|
* @param CreateRemarkProcessor $createRemarkProcessor
|
||||||
|
* @param GeneratesOrderNumber $generatesOrderNumber
|
||||||
|
* @param CreatesPackingList $createsPackingList
|
||||||
|
* @param CreatesPackage $createPackage
|
||||||
|
*/
|
||||||
|
public function __construct(FetchesCompany $fetchesCompany, FetchesAddress $fetchesAddress, CanCreateOrder $canCreateOrder, CreatesOrder $createsOrder, CreatesAddress $createAddress, CreateContactProcessor $createContactProcessor, CreateRemarkProcessor $createRemarkProcessor, GeneratesOrderNumber $generatesOrderNumber, CreatesPackingList $createsPackingList, CreatesPackage $createsPackage)
|
||||||
|
{
|
||||||
|
$this->fetchesCompany = $fetchesCompany;
|
||||||
|
$this->fetchesAddress = $fetchesAddress;
|
||||||
|
$this->canCreateOrder = $canCreateOrder;
|
||||||
|
$this->createsOrder = $createsOrder;
|
||||||
|
$this->createAddress = $createAddress;
|
||||||
|
$this->createContactProcessor = $createContactProcessor;
|
||||||
|
$this->createRemarkProcessor = $createRemarkProcessor;
|
||||||
|
$this->generatesOrderNumber = $generatesOrderNumber;
|
||||||
|
$this->createsPackingList = $createsPackingList;
|
||||||
|
$this->createsPackage = $createsPackage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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
|
||||||
|
{
|
||||||
|
$company = $this->fetchesCompany->execute(['id' => $request->input('company_id')]);
|
||||||
|
|
||||||
|
$senderAddress = $this->fetchesAddress->execute(['id' => $request->input('sender_address_id')]);
|
||||||
|
$deliveryAddress = $this->fetchesAddress->execute(['id' => $request->input('delivery_address_id')]);
|
||||||
|
|
||||||
|
/** @var CompanyModule $companyModule */
|
||||||
|
$companyModule = $company->companyModules()->where('type', BusinessType::ONLINE_SELLER)->first();
|
||||||
|
|
||||||
|
$orderObject = new OrderObject($this->generatesOrderNumber->execute(), OrderType::LAST_MILE_DELIVERY, ApprovalStatus::APPROVED);
|
||||||
|
|
||||||
|
$this->canCreateOrder->passes($orderObject);
|
||||||
|
|
||||||
|
/** @var Order $order */
|
||||||
|
$order = $this->createsOrder->execute($companyModule, $orderObject);
|
||||||
|
|
||||||
|
$senderAddressObject = new AddressObject($senderAddress->street_one, $senderAddress->street_two, $senderAddress->country_id, $senderAddress->state_id, $senderAddress->district_id, $senderAddress->postcode, $senderAddress->type, ApprovalStatus::APPROVED, $senderAddress->reference);
|
||||||
|
$deliveryAddressObject = new AddressObject($deliveryAddress->street_one, $deliveryAddress->street_two, $deliveryAddress->country_id, $deliveryAddress->state_id, $deliveryAddress->district_id, $deliveryAddress->postcode, $deliveryAddress->type, ApprovalStatus::APPROVED, $senderAddress->reference);
|
||||||
|
|
||||||
|
/** @var Address $orderSenderAddress */
|
||||||
|
$orderSenderAddress = $this->createAddress->execute($order, $senderAddressObject);
|
||||||
|
/** @var Address $orderDeliveryAddress */
|
||||||
|
$orderDeliveryAddress = $this->createAddress->execute($order, $deliveryAddressObject);
|
||||||
|
|
||||||
|
$senderContact = $senderAddress->contacts()->first();
|
||||||
|
$deliveryContact = $deliveryAddress->contacts()->first();
|
||||||
|
|
||||||
|
$contactObject = new ContactObject($senderContact->reference, $senderContact->phone, '','');
|
||||||
|
$this->createContactProcessor->execute($contactObject, $orderSenderAddress);
|
||||||
|
|
||||||
|
$contactObject = new ContactObject($deliveryContact->reference, $deliveryContact->phone, '','');
|
||||||
|
$this->createContactProcessor->execute($contactObject, $orderDeliveryAddress);
|
||||||
|
|
||||||
|
$senderRemark = $senderAddress->remarks()->first();
|
||||||
|
$deliveryRemark = $deliveryAddress->remarks()->first();
|
||||||
|
|
||||||
|
if ($senderRemark){
|
||||||
|
$remarkObject = new RemarkObject($senderRemark->content, Auth()->user()->id);
|
||||||
|
|
||||||
|
if($remarkObject->getContent()){
|
||||||
|
$this->createRemarkProcessor->execute($orderSenderAddress, $remarkObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($deliveryRemark){
|
||||||
|
$remarkObject = new RemarkObject($deliveryRemark->content, Auth()->user()->id);
|
||||||
|
|
||||||
|
if($remarkObject->getContent()){
|
||||||
|
$this->createRemarkProcessor->execute($orderDeliveryAddress, $remarkObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$packingListObject = new PackingListObject($order->reference, $companyModule->id, PackingListType::DELIVERY_PACKING_LIST, ApprovalStatus::PENDING_VERIFICATION);
|
||||||
|
|
||||||
|
/** @var PackingList $packingList */
|
||||||
|
$packingList = $this->createsPackingList->execute($packingListObject, $order);
|
||||||
|
|
||||||
|
$packageObject = new PackageObject($request->input('packing_list.type'), $request->input('packing_list.description'), (float) 1, (float) 1, (float) 1, $request->input('packing_list.weight'), (float) $request->input('packing_list.quantity'), ApprovalStatus::APPROVED);
|
||||||
|
$this->createsPackage->execute($packageObject, $packingList);
|
||||||
|
|
||||||
|
return $this->resourceResponse(new DeliveryOrderResource($order));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Delivery\ControllersLogic;
|
||||||
|
|
||||||
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
|
use App\Classes\Modules\Orders\Services\ListsOrders;
|
||||||
|
use App\Classes\Modules\Orders\Standards\Rules\CanListOrders;
|
||||||
|
use App\Classes\ValueObjects\Constants\OrderType;
|
||||||
|
use App\Http\Resources\DeliveryOrderResource;
|
||||||
|
use App\Http\Resources\OrderResource;
|
||||||
|
use ErrorException;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class ListOrdersLogic extends AbstractControllerLogic
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function notification():array {
|
||||||
|
return [
|
||||||
|
'title' => 'Retrieved Orders',
|
||||||
|
'message' => 'You have successfully retrieved a list of Orders'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var CanListOrders */
|
||||||
|
private $canListOrders;
|
||||||
|
|
||||||
|
/** @var ListsOrders */
|
||||||
|
private $listsOrders;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ListOrdersLogic constructor.
|
||||||
|
* @param CanListOrders $canListOrders
|
||||||
|
* @param ListsOrders $listsOrders
|
||||||
|
*/
|
||||||
|
public function __construct(CanListOrders $canListOrders, ListsOrders $listsOrders)
|
||||||
|
{
|
||||||
|
$this->canListOrders = $canListOrders;
|
||||||
|
$this->listsOrders = $listsOrders;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function logic(Request $request) : JsonResponse
|
||||||
|
{
|
||||||
|
$this->canListOrders->passes();
|
||||||
|
|
||||||
|
$query = $this->listsOrders->execute(array_merge($this->listsOrders->deserializeFilters($request->input('filters')), ['with_parcels' => true, 'type_in' => [OrderType::LAST_MILE_DELIVERY]]));
|
||||||
|
|
||||||
|
return $this->collectionResponse(DeliveryOrderResource::collection($query));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Exports\Services;
|
||||||
|
|
||||||
|
use App\Classes\ValueObjects\Constants\AddressType;
|
||||||
|
use App\Classes\ValueObjects\Constants\OrderType;
|
||||||
|
use App\Classes\ValueObjects\Constants\PackageType;
|
||||||
|
use App\Models\Order;
|
||||||
|
use Maatwebsite\Excel\Concerns\Exportable;
|
||||||
|
use Maatwebsite\Excel\Concerns\FromQuery;
|
||||||
|
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithHeadingRow;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithHeadings;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithMapping;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class ExportsDeliveryOrders implements FromQuery, WithHeadings, WithHeadingRow, WithMapping, ShouldAutoSize
|
||||||
|
{
|
||||||
|
use Exportable;
|
||||||
|
|
||||||
|
private $request;
|
||||||
|
|
||||||
|
public function __construct(Request $request)
|
||||||
|
{
|
||||||
|
$this->request = $request;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function headings(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'Types_Of_Services',
|
||||||
|
'Service_Type',
|
||||||
|
'Sender_Name',
|
||||||
|
'Sender_Company_Name',
|
||||||
|
'Sender_Building_Unit',
|
||||||
|
'Sender_Address',
|
||||||
|
'Sender_Address_2',
|
||||||
|
'Sender_Postal_Code',
|
||||||
|
'Sender_Phone_Number',
|
||||||
|
'Delivery_Name',
|
||||||
|
'Delivery Company Name',
|
||||||
|
'Delivery_Building_Unit',
|
||||||
|
'Delivery_Address',
|
||||||
|
'Delivery_Address_2',
|
||||||
|
'Delivery_Postal_Code',
|
||||||
|
'Delivery_Phone_Number',
|
||||||
|
'Shipment_Type',
|
||||||
|
'Mode',
|
||||||
|
'Pickup_Address_Type',
|
||||||
|
'Reference_Number',
|
||||||
|
'Quantity',
|
||||||
|
'Weight',
|
||||||
|
'Length',
|
||||||
|
'Width',
|
||||||
|
'Height',
|
||||||
|
'COD_Amount',
|
||||||
|
'DO_Numbers'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \Illuminate\Support\Collection|mixed
|
||||||
|
*/
|
||||||
|
public function query()
|
||||||
|
{
|
||||||
|
return Order::where('type', OrderType::LAST_MILE_DELIVERY);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Order $order
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function map($order): array
|
||||||
|
{
|
||||||
|
$senderAddress = $order->addresses()->where('type', AddressType::PICK_UP)->first();
|
||||||
|
$deliveryAddress = $order->addresses()->where('type', AddressType::DELIVERY)->first();
|
||||||
|
$package = $order->packingLists()->first()->packages()->first();
|
||||||
|
return [
|
||||||
|
'Standard Delivery',
|
||||||
|
'ST00000003',
|
||||||
|
$senderAddress->contacts()->first()->reference,
|
||||||
|
'',
|
||||||
|
'*',
|
||||||
|
$senderAddress->street_one.', '.$senderAddress->street_two.' '.$senderAddress->district->name.' '.$senderAddress->postcode.' '.$senderAddress->state->name.' '.$senderAddress->country->name,
|
||||||
|
'',
|
||||||
|
$senderAddress->postcode,
|
||||||
|
$senderAddress->contacts()->first()->phone,
|
||||||
|
$deliveryAddress->contacts()->first()->reference,
|
||||||
|
'',
|
||||||
|
'*',
|
||||||
|
$deliveryAddress->street_one.', '.$deliveryAddress->street_two.' '.$deliveryAddress->district->name.' '.$deliveryAddress->postcode.' '.$deliveryAddress->state->name.' '.$deliveryAddress->country->name,
|
||||||
|
'',
|
||||||
|
$deliveryAddress->postcode,
|
||||||
|
$deliveryAddress->contacts()->first()->phone,
|
||||||
|
$package->type === PackageType::CARTON ? 'Package' : ($package->type === PackageType::PALLET ? 'Pallet' : 'Documents'),
|
||||||
|
'Lodge In / Walk In',
|
||||||
|
'Sender',
|
||||||
|
$order->reference,
|
||||||
|
$package->quantity,
|
||||||
|
$package->weight,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
'',
|
||||||
|
''
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ namespace App\Classes\Modules\Orders\ControllersLogic;
|
|||||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
use App\Classes\Modules\Orders\Services\ListsOrders;
|
use App\Classes\Modules\Orders\Services\ListsOrders;
|
||||||
use App\Classes\Modules\Orders\Standards\Rules\CanListOrders;
|
use App\Classes\Modules\Orders\Standards\Rules\CanListOrders;
|
||||||
|
use App\Classes\ValueObjects\Constants\OrderType;
|
||||||
use App\Http\Resources\OrderResource;
|
use App\Http\Resources\OrderResource;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
@@ -44,7 +45,7 @@ class ListOrdersLogic extends AbstractControllerLogic
|
|||||||
{
|
{
|
||||||
$this->canListOrders->passes();
|
$this->canListOrders->passes();
|
||||||
|
|
||||||
$query = $this->listsOrders->execute(array_merge($this->listsOrders->deserializeFilters($request->input('filters')), ['with_parcels' => true]));
|
$query = $this->listsOrders->execute(array_merge($this->listsOrders->deserializeFilters($request->input('filters')), ['with_parcels' => true, 'type_in' => [OrderType::SHARED_CONTAINER, OrderType::DEDICATED_CONTAINER]]));
|
||||||
|
|
||||||
return $this->collectionResponse(OrderResource::collection($query));
|
return $this->collectionResponse(OrderResource::collection($query));
|
||||||
|
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ class CreateOrderProcessor
|
|||||||
/** @var Order $order */
|
/** @var Order $order */
|
||||||
$order = $this->createsOrder->execute($importer, $orderObject);
|
$order = $this->createsOrder->execute($importer, $orderObject);
|
||||||
|
|
||||||
$addressObject = new AddressObject($address->street_one, $address->street_two, $address->country_id, $address->state_id, $address->district_id, $address->postcode,$address->reference);
|
$addressObject = new AddressObject($address->street_one, $address->street_two, $address->country_id, $address->state_id, $address->district_id, $address->postcode, $address->type, ApprovalStatus::APPROVED, $address->reference);
|
||||||
|
|
||||||
/** @var Address $order_address */
|
/** @var Address $order_address */
|
||||||
$order_address = $this->createAddress->execute($order, $addressObject);
|
$order_address = $this->createAddress->execute($order, $addressObject);
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ use App\Classes\Modules\Addresses\Services\CreatesAddress;
|
|||||||
use App\Classes\Modules\Addresses\Services\FetchesAddress;
|
use App\Classes\Modules\Addresses\Services\FetchesAddress;
|
||||||
use App\Classes\Modules\Addresses\Services\DeletesAddress;
|
use App\Classes\Modules\Addresses\Services\DeletesAddress;
|
||||||
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
|
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
|
||||||
|
use App\Classes\ValueObjects\Constants\AddressType;
|
||||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
|
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
|
||||||
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
|
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
|
||||||
@@ -76,7 +77,7 @@ class RequestChangeOrderAddressProcessor
|
|||||||
}
|
}
|
||||||
|
|
||||||
$address = $this->fetchesAddress->execute(['id' => $request->get('address_id')]);
|
$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);
|
$addressObject = new AddressObject($address->street_one, $address->street_two, $address->country_id, $address->state_id, $address->district_id, $address->postcode, AddressType::DELIVERY, ApprovalStatus::PENDING_VERIFICATION, $address->reference);
|
||||||
$order_address = $this->createsAddress->execute($order, $addressObject);
|
$order_address = $this->createsAddress->execute($order, $addressObject);
|
||||||
|
|
||||||
$contact = $address->contacts()->first();
|
$contact = $address->contacts()->first();
|
||||||
|
|||||||
@@ -8,4 +8,6 @@ final class AddressType {
|
|||||||
|
|
||||||
public const DELIVERY = 2;
|
public const DELIVERY = 2;
|
||||||
|
|
||||||
|
public const PICK_UP = 3;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,4 +8,6 @@ final class OrderType {
|
|||||||
|
|
||||||
public const DEDICATED_CONTAINER = 1;
|
public const DEDICATED_CONTAINER = 1;
|
||||||
|
|
||||||
|
public const LAST_MILE_DELIVERY = 2;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,4 +10,6 @@ final class PackageType {
|
|||||||
|
|
||||||
public const OVER_WEIGHT = 2;
|
public const OVER_WEIGHT = 2;
|
||||||
|
|
||||||
|
public const DOCUMENT = 3;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Delivery;
|
||||||
|
|
||||||
|
use App\Classes\Modules\Delivery\ControllersLogic\CreateDeliveryOrderLogic;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class CreateDeliveryOrderController
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @param CreateDeliveryOrderLogic $createDeliveryOrderLogic
|
||||||
|
* @return JsonResponse
|
||||||
|
*/
|
||||||
|
public function create(Request $request, CreateDeliveryOrderLogic $createDeliveryOrderLogic): JsonResponse
|
||||||
|
{
|
||||||
|
return $createDeliveryOrderLogic->execute($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Delivery;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\Modules\Exports\Services\ExportsCustomers;
|
||||||
|
use App\Classes\Modules\Exports\Services\ExportsDeliveryOrders;
|
||||||
|
use App\Models\User;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use Maatwebsite\Excel\Excel;
|
||||||
|
|
||||||
|
class ExportDeliveryOrdersToExcelController
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ExportCustomersToExcelController constructor.
|
||||||
|
* @param Request $request
|
||||||
|
*/
|
||||||
|
public function __construct(Request $request)
|
||||||
|
{
|
||||||
|
$token = Auth::fromUser(User::find(1));
|
||||||
|
$request->headers->set('Authorization', 'Bearer '.$token);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function lineClear(Request $request){
|
||||||
|
$exportsTransactions = new ExportsDeliveryOrders($request);
|
||||||
|
$response = $exportsTransactions->download('line-clear-export.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
|
||||||
|
ob_end_clean();
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Delivery;
|
||||||
|
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Classes\Modules\Delivery\ControllersLogic\ListOrdersLogic;
|
||||||
|
|
||||||
|
|
||||||
|
class ListOrdersController
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @param ListOrdersLogic $logic
|
||||||
|
* @return JsonResponse
|
||||||
|
*/
|
||||||
|
|
||||||
|
public function list(Request $request, ListOrdersLogic $logic) : JsonResponse {
|
||||||
|
return $logic->execute($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,7 +18,7 @@ class CompanyResource extends JsonResource
|
|||||||
*/
|
*/
|
||||||
public function toArray($request)
|
public function toArray($request)
|
||||||
{
|
{
|
||||||
$companyModule = $this->companyModules()->where('type', '=', BusinessType::IMPORTER)->first();
|
$companyModule = $this->companyModules()->first();
|
||||||
return [
|
return [
|
||||||
'id' => $this->id,
|
'id' => $this->id,
|
||||||
'hash_id' => Crypt::encryptString($this->id),
|
'hash_id' => Crypt::encryptString($this->id),
|
||||||
@@ -30,8 +30,8 @@ class CompanyResource extends JsonResource
|
|||||||
'contact' => new ContactResource ($this->when($this->has('contacts'), $this->contacts->first())),
|
'contact' => new ContactResource ($this->when($this->has('contacts'), $this->contacts->first())),
|
||||||
'employee' => new UserResource($companyModule->employees()->first()),
|
'employee' => new UserResource($companyModule->employees()->first()),
|
||||||
'company_module' => new CompanyModuleResource($companyModule),
|
'company_module' => new CompanyModuleResource($companyModule),
|
||||||
'last_order' => new OrderResource($companyModule ? $companyModule->orders()->orderBy('id', 'DESC')->first(): null),
|
'last_order' => $companyModule->type === 7 ? new DeliveryOrderResource($companyModule->orders()->orderBy('id', 'DESC')->first()) : new OrderResource($companyModule->orders()->orderBy('id', 'DESC')->first()),
|
||||||
'order_count' => $this->orders()->count(),
|
'order_count' => $companyModule->orders()->count(),
|
||||||
'identification' => new DocumentResource($this->documents->whereIn('document_type', DocumentType::IDENTIFICATION_DOCUMENTS)->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED])->first()),
|
'identification' => new DocumentResource($this->documents->whereIn('document_type', DocumentType::IDENTIFICATION_DOCUMENTS)->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED])->first()),
|
||||||
'created_at' => $this->created_at->format('d-m-Y')
|
'created_at' => $this->created_at->format('d-m-Y')
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use App\Classes\ValueObjects\Constants\AddressType;
|
||||||
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class DeliveryOrderResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'id' => $this->id,
|
||||||
|
'reference' => $this->reference,
|
||||||
|
'type' => (int) $this->type,
|
||||||
|
'status' => (int) $this->status,
|
||||||
|
'company_module' => new CompanyModuleResource($this->companyModule),
|
||||||
|
'sender_address' => new AddressResource($this->addresses()->where('status', '=', ApprovalStatus::APPROVED)->where('type', AddressType::PICK_UP)->first()),
|
||||||
|
'delivery_address' => new AddressResource($this->addresses()->where('status', '=', ApprovalStatus::APPROVED)->where('type', AddressType::DELIVERY)->first()),
|
||||||
|
'packingList' => new DeliveryPackingListResource($this->packingLists()->first()),
|
||||||
|
'remarks' => RemarkResource::collection($this->remarks),
|
||||||
|
'created_at' => $this->created_at->format('d-m-Y')
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use App\Classes\ValueObjects\Constants\PackingListType;
|
||||||
|
use App\Classes\ValueObjects\Constants\TransactionType;
|
||||||
|
use App\Classes\ValueObjects\Constants\RoleTypes;
|
||||||
|
use App\Models\Order;
|
||||||
|
use App\Models\PackingList;
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class DeliveryPackingListResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function toArray($request)
|
||||||
|
{
|
||||||
|
$package = $this->packages()->first();
|
||||||
|
|
||||||
|
return [
|
||||||
|
'id' => $this->id,
|
||||||
|
'claimant_id' => $this->claimant_id,
|
||||||
|
'reference' => $this->reference,
|
||||||
|
'status' => $this->status,
|
||||||
|
'transport' => new TransportResource($this->transports()->first()),
|
||||||
|
'type' => $package->type,
|
||||||
|
'description' => $package->description,
|
||||||
|
'weight' => (float) $package->weight,
|
||||||
|
'quantity' => (float) $package->quantity,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use App\Classes\General\Interfaces\Steppable;
|
||||||
|
use App\Classes\General\Interfaces\Transportable;
|
||||||
|
use App\Classes\General\Interfaces\Packable;
|
||||||
|
use App\Classes\General\Interfaces\Transactionable;
|
||||||
|
|
||||||
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\MorphMany;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||||
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
use Staudenmeir\EloquentHasManyDeep\HasManyDeep;
|
||||||
|
use Staudenmeir\EloquentHasManyDeep\HasRelationships;
|
||||||
|
use Staudenmeir\EloquentHasManyDeep\HasTableAlias;
|
||||||
|
|
||||||
|
class Addon extends AbstractModel
|
||||||
|
{
|
||||||
|
use SoftDeletes;
|
||||||
|
|
||||||
|
protected $table = 'addons';
|
||||||
|
|
||||||
|
protected $fillable = ['status'];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \Illuminate\Database\Eloquent\Relations\MorphTo
|
||||||
|
*/
|
||||||
|
public function owner(): morphTo
|
||||||
|
{
|
||||||
|
return $this->morphTo();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -58,6 +58,14 @@ class Order extends AbstractModel implements Addressable, Packable, Remarkable,
|
|||||||
return $this->morphMany(PackingList::class, 'owner');
|
return $this->morphMany(PackingList::class, 'owner');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return MorphMany
|
||||||
|
*/
|
||||||
|
public function addons(): morphMany
|
||||||
|
{
|
||||||
|
return $this->morphMany(Addon::class, 'owner');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return MorphMany
|
* @return MorphMany
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -36,6 +36,14 @@ class PackingList extends AbstractModel implements Transportable, Steppable, Pac
|
|||||||
return $this->morphTo();
|
return $this->morphTo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return MorphMany
|
||||||
|
*/
|
||||||
|
public function addons(): morphMany
|
||||||
|
{
|
||||||
|
return $this->morphMany(Addon::class, 'owner');
|
||||||
|
}
|
||||||
|
|
||||||
public function containers(): BelongsToMany
|
public function containers(): BelongsToMany
|
||||||
{
|
{
|
||||||
return $this->BelongsToMany(Container::class, ContainerPackingList::class);
|
return $this->BelongsToMany(Container::class, ContainerPackingList::class);
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class CreateAddonsTables extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table('addons', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->morphs('owner');
|
||||||
|
$table->string('reference',200);
|
||||||
|
$table->integer('type')->default(0);
|
||||||
|
$table->integer('quantity')->default(1);
|
||||||
|
$table->integer('status')->default(0);
|
||||||
|
$table->softDeletes();
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('order_addons');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,6 +16,7 @@ use App\Classes\Modules\Companies\Services\UpdatesCompanyStatus;
|
|||||||
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
|
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
|
||||||
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
|
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
|
||||||
use App\Classes\Modules\Contacts\Services\CreatesContact;
|
use App\Classes\Modules\Contacts\Services\CreatesContact;
|
||||||
|
use App\Classes\ValueObjects\Constants\AddressType;
|
||||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
use App\Classes\ValueObjects\Constants\CompanyType;
|
use App\Classes\ValueObjects\Constants\CompanyType;
|
||||||
use App\Classes\ValueObjects\Constants\BusinessType;
|
use App\Classes\ValueObjects\Constants\BusinessType;
|
||||||
@@ -112,7 +113,7 @@ class CompaniesTableSeeder extends Seeder
|
|||||||
/** @var CompanyModule $companyModule */
|
/** @var CompanyModule $companyModule */
|
||||||
$companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::FREIGHT_FORWARDER);
|
$companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::FREIGHT_FORWARDER);
|
||||||
|
|
||||||
$address = new AddressObject('Malaysian Global Innovation & Creativity Center Level 1 CWS', 'Block 3730,Persiaran APEC', 1, 15, 402, 63000);
|
$address = new AddressObject('Malaysian Global Innovation & Creativity Center Level 1 CWS', 'Block 3730,Persiaran APEC', 1, 15, 402, 63000, AddressType::BILLING, ApprovalStatus::APPROVED);
|
||||||
$this->createsAddress->execute($companyModule, $address);
|
$this->createsAddress->execute($companyModule, $address);
|
||||||
|
|
||||||
$contact = new ContactObject('Office Number', '0182909252', '', '');
|
$contact = new ContactObject('Office Number', '0182909252', '', '');
|
||||||
@@ -131,22 +132,22 @@ class CompaniesTableSeeder extends Seeder
|
|||||||
|
|
||||||
if ($name === 'Guangzhou'){
|
if ($name === 'Guangzhou'){
|
||||||
$companyModule->update(['name' => $name, 'reference' => 'GZ-V01']);
|
$companyModule->update(['name' => $name, 'reference' => 'GZ-V01']);
|
||||||
$address = new AddressObject('白云区,大朗南路 白云湖大道自编13号 7号仓库', '高德地图导航:广州市世通行', 2, 35, 633, 510450);
|
$address = new AddressObject('白云区,大朗南路 白云湖大道自编13号 7号仓库', '高德地图导航:广州市世通行', 2, 35, 633, 510450, AddressType::DELIVERY, ApprovalStatus::APPROVED);
|
||||||
$contact = new ContactObject('杨维民', '13600055019', '', '');
|
$contact = new ContactObject('杨维民', '13600055019', '', '');
|
||||||
} elseif ($name === 'Yiwu') {
|
} elseif ($name === 'Yiwu') {
|
||||||
$companyModule->update(['name' => $name, 'reference' => 'YW-V01']);
|
$companyModule->update(['name' => $name, 'reference' => 'YW-V01']);
|
||||||
$address = new AddressObject('义乌市诚信大道义乌港A区2楼194号', '', 2, 27, 532, 322000);
|
$address = new AddressObject('义乌市诚信大道义乌港A区2楼194号', '', 2, 27, 532, 322000, AddressType::DELIVERY, ApprovalStatus::APPROVED);
|
||||||
$contact = new ContactObject('小曾', '13575982901', '', '');
|
$contact = new ContactObject('小曾', '13575982901', '', '');
|
||||||
} elseif ($name === 'Klang') {
|
} elseif ($name === 'Klang') {
|
||||||
$companyModule->update(['name' => $name, 'reference' => 'KL-V01']);
|
$companyModule->update(['name' => $name, 'reference' => 'KL-V01']);
|
||||||
$address = new AddressObject('LOT 1357 A, JALAN TANJUNG SHAWAL', 'KAMPUNG SUNGAI PINANG', 1, 15, 412, 41400);
|
$address = new AddressObject('LOT 1357 A, JALAN TANJUNG SHAWAL', 'KAMPUNG SUNGAI PINANG', 1, 15, 412, 41400, AddressType::DELIVERY, ApprovalStatus::APPROVED);
|
||||||
$contact = new ContactObject('Mr. Yang', '0162237680', '', '');
|
$contact = new ContactObject('Mr. Yang', '0162237680', '', '');
|
||||||
} elseif ($name === 'Sabah') {
|
} elseif ($name === 'Sabah') {
|
||||||
$companyModule->update(['name' => $name, 'reference' => 'SB-V01']);
|
$companyModule->update(['name' => $name, 'reference' => 'SB-V01']);
|
||||||
$address = new AddressObject('Warehouse A & B, No. 2, Lorong Kacang Tanah 1', 'Jalan Kolombong, Kolombong', 1, 13, 316, 88450);
|
$address = new AddressObject('Warehouse A & B, No. 2, Lorong Kacang Tanah 1', 'Jalan Kolombong, Kolombong', 1, 13, 316, 88450, AddressType::DELIVERY, ApprovalStatus::APPROVED);
|
||||||
} elseif ($name === 'Sarawak') {
|
} elseif ($name === 'Sarawak') {
|
||||||
$companyModule->update(['name' => $name, 'reference' => 'SRW-V01']);
|
$companyModule->update(['name' => $name, 'reference' => 'SRW-V01']);
|
||||||
$address = new AddressObject('OPPOSITE HT POLE 51, LT 664 JALAN SUNGAI SALIM', '', 1, 14, 381, 96000);
|
$address = new AddressObject('OPPOSITE HT POLE 51, LT 664 JALAN SUNGAI SALIM', '', 1, 14, 381, 96000, AddressType::DELIVERY, ApprovalStatus::APPROVED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -161,7 +162,7 @@ class CompaniesTableSeeder extends Seeder
|
|||||||
/** @var CompanyModule $companyModule */
|
/** @var CompanyModule $companyModule */
|
||||||
$companyModule = $this->createCompanyModuleProcessor->execute($company, $businessType);
|
$companyModule = $this->createCompanyModuleProcessor->execute($company, $businessType);
|
||||||
|
|
||||||
$address = new AddressObject('2, Jalan TSB 6, Taman Industri Sungai Buloh', '', 1, 15, 419, 47000);
|
$address = new AddressObject('2, Jalan TSB 6, Taman Industri Sungai Buloh', '', 1, 15, 419, 47000, AddressType::BILLING, ApprovalStatus::APPROVED);
|
||||||
$this->createsAddress->execute($companyModule, $address);
|
$this->createsAddress->execute($companyModule, $address);
|
||||||
|
|
||||||
$contact = new ContactObject('Office Number', '036148 8108', '', '');
|
$contact = new ContactObject('Office Number', '036148 8108', '', '');
|
||||||
|
|||||||
@@ -0,0 +1,123 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database\Seeders;
|
||||||
|
|
||||||
|
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
|
||||||
|
use App\Classes\Modules\Addresses\Processors\CreateAddressFromOldAddressProcessor;
|
||||||
|
use App\Classes\Modules\Addresses\Services\CreatesAddress;
|
||||||
|
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
|
||||||
|
use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor;
|
||||||
|
use App\Classes\Modules\Companies\Processors\CreateCompanyProcessor;
|
||||||
|
use App\Classes\Modules\Companies\Services\ApprovesCompanyConnection;
|
||||||
|
use App\Classes\Modules\Companies\Services\CreatesCompany;
|
||||||
|
use App\Classes\Modules\Companies\Services\CreatesCompanyConnection;
|
||||||
|
use App\Classes\Modules\Companies\Services\UpdatesCompanyStatus;
|
||||||
|
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
|
||||||
|
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
|
||||||
|
use App\Classes\Modules\Contacts\Services\CreatesContact;
|
||||||
|
use App\Classes\ValueObjects\Constants\AddressType;
|
||||||
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
use App\Classes\ValueObjects\Constants\CompanyType;
|
||||||
|
use App\Classes\ValueObjects\Constants\BusinessType;
|
||||||
|
|
||||||
|
use App\Models\CompanyModule;
|
||||||
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
|
use App\Models\Company;
|
||||||
|
|
||||||
|
class LastMileDeliveryTableSeeder extends Seeder
|
||||||
|
{
|
||||||
|
|
||||||
|
/** @var CreateCompanyProcessor */
|
||||||
|
private $createCompanyProcessor;
|
||||||
|
|
||||||
|
/** @var UpdatesCompanyStatus*/
|
||||||
|
private $updatesCompanyStatus;
|
||||||
|
|
||||||
|
/** @var CreateCompanyModuleProcessor */
|
||||||
|
private $createCompanyModuleProcessor;
|
||||||
|
|
||||||
|
/** @var CreateContactProcessor */
|
||||||
|
private $createContactProcessor;
|
||||||
|
|
||||||
|
/** @var CreatesCompanyConnection */
|
||||||
|
private $createsCompanyConnection;
|
||||||
|
|
||||||
|
/** @var ApprovesCompanyConnection */
|
||||||
|
private $approvesCompanyConnection;
|
||||||
|
|
||||||
|
/** @var CreateAddressFromOldAddressProcessor */
|
||||||
|
private $createAddressFromOldAddressProcessor;
|
||||||
|
|
||||||
|
/** @var CreatesAddress */
|
||||||
|
private $createsAddress;
|
||||||
|
|
||||||
|
/** @var CreatesCompany */
|
||||||
|
private $createsCompany;
|
||||||
|
|
||||||
|
/** @var CreatesContact */
|
||||||
|
private $createsContact;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CompaniesTableSeeder constructor.
|
||||||
|
* @param CreateCompanyProcessor $createCompanyProcessor
|
||||||
|
* @param UpdatesCompanyStatus $updatesCompanyStatus
|
||||||
|
* @param CreateCompanyModuleProcessor $createCompanyModuleProcessor
|
||||||
|
* @param CreateContactProcessor $createContactProcessor
|
||||||
|
* @param CreatesCompanyConnection $createsCompanyConnection
|
||||||
|
* @param ApprovesCompanyConnection $approvesCompanyConnection
|
||||||
|
* @param CreateAddressFromOldAddressProcessor $createAddressFromOldAddressProcessor
|
||||||
|
* @param CreatesAddress $createsAddress
|
||||||
|
* @param CreatesCompany $createsCompany
|
||||||
|
* @param CreatesContact $createsContact
|
||||||
|
*/
|
||||||
|
public function __construct(CreateCompanyProcessor $createCompanyProcessor, UpdatesCompanyStatus $updatesCompanyStatus, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, CreatesCompanyConnection $createsCompanyConnection, ApprovesCompanyConnection $approvesCompanyConnection, CreateAddressFromOldAddressProcessor $createAddressFromOldAddressProcessor, CreatesAddress $createsAddress, CreatesCompany $createsCompany, CreatesContact $createsContact)
|
||||||
|
{
|
||||||
|
$this->createCompanyProcessor = $createCompanyProcessor;
|
||||||
|
$this->updatesCompanyStatus = $updatesCompanyStatus;
|
||||||
|
$this->createCompanyModuleProcessor = $createCompanyModuleProcessor;
|
||||||
|
$this->createContactProcessor = $createContactProcessor;
|
||||||
|
$this->createsCompanyConnection = $createsCompanyConnection;
|
||||||
|
$this->approvesCompanyConnection = $approvesCompanyConnection;
|
||||||
|
$this->createAddressFromOldAddressProcessor = $createAddressFromOldAddressProcessor;
|
||||||
|
$this->createsAddress = $createsAddress;
|
||||||
|
$this->createsCompany = $createsCompany;
|
||||||
|
$this->createsContact = $createsContact;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run the database seeds.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||||
|
*/
|
||||||
|
public function run()
|
||||||
|
{
|
||||||
|
|
||||||
|
$companies = [
|
||||||
|
new CompanyObject('Last Mile Delivery', 'LMD', CompanyType::COMPANY_BUSINESS, ApprovalStatus::APPROVED),
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
foreach ($companies as $companyObject) {
|
||||||
|
|
||||||
|
/** @var Company $company */
|
||||||
|
$company = $this->createsCompany->execute($companyObject);
|
||||||
|
|
||||||
|
/** @var CompanyModule $companyModule */
|
||||||
|
$companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::LAST_MILE_DELIVERY_AGENT);
|
||||||
|
|
||||||
|
$address = new AddressObject('Malaysian Global Innovation & Creativity Center Level 1 CWS', 'Block 3730,Persiaran APEC', 1, 15, 402, 63000, AddressType::BILLING, ApprovalStatus::APPROVED);
|
||||||
|
$this->createsAddress->execute($companyModule, $address);
|
||||||
|
|
||||||
|
$contact = new ContactObject('Office Number', '0182909252', '', '');
|
||||||
|
$this->createsContact->execute($companyModule, $contact);
|
||||||
|
|
||||||
|
continue;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,6 +17,7 @@ use App\Classes\Modules\Companies\Services\UpdatesCompanyStatus;
|
|||||||
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
|
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
|
||||||
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
|
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
|
||||||
use App\Classes\Modules\Contacts\Services\CreatesContact;
|
use App\Classes\Modules\Contacts\Services\CreatesContact;
|
||||||
|
use App\Classes\ValueObjects\Constants\AddressType;
|
||||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
use App\Classes\ValueObjects\Constants\CompanyType;
|
use App\Classes\ValueObjects\Constants\CompanyType;
|
||||||
use App\Classes\ValueObjects\Constants\BusinessType;
|
use App\Classes\ValueObjects\Constants\BusinessType;
|
||||||
@@ -106,7 +107,7 @@ class ModernWarehouseTableSeeder extends Seeder
|
|||||||
$companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::WAREHOUSE);
|
$companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::WAREHOUSE);
|
||||||
$companyModule->update(['name' => 'Yiwu', 'reference' => 'YW-V02']);
|
$companyModule->update(['name' => 'Yiwu', 'reference' => 'YW-V02']);
|
||||||
|
|
||||||
$address = new AddressObject('义乌市 后宅街道 起航路233号百汇科创园园区里面', '(进口处进来第一个路口左转至出口处右手边国际物流仓库)', 2, 27, 532, 322000);
|
$address = new AddressObject('义乌市 后宅街道 起航路233号百汇科创园园区里面', '(进口处进来第一个路口左转至出口处右手边国际物流仓库)', 2, 27, 532, 322000, AddressType::BILLING, ApprovalStatus::APPROVED);
|
||||||
$contact = new ContactObject('韩成名', '18058489899 / 18058929899', '', '');
|
$contact = new ContactObject('韩成名', '18058489899 / 18058929899', '', '');
|
||||||
|
|
||||||
$this->createsAddress->execute($companyModule, $address);
|
$this->createsAddress->execute($companyModule, $address);
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 8.1 KiB |
Vendored
+4
@@ -14,6 +14,10 @@ import vuelidate from 'vuelidate';
|
|||||||
/** Input Mask **/
|
/** Input Mask **/
|
||||||
import VueTheMask from 'vue-the-mask';
|
import VueTheMask from 'vue-the-mask';
|
||||||
|
|
||||||
|
import VueEasytable from "vue-easytable"; // import library
|
||||||
|
|
||||||
|
Vue.use(VueEasytable);
|
||||||
|
|
||||||
|
|
||||||
/** Mixins */
|
/** Mixins */
|
||||||
import request from './general/mixins/request';
|
import request from './general/mixins/request';
|
||||||
|
|||||||
@@ -67,11 +67,11 @@
|
|||||||
this.submit(this.route('api.account.authentication.logout'), 'get', this.section, false, false)
|
this.submit(this.route('api.account.authentication.logout'), 'get', this.section, false, false)
|
||||||
},
|
},
|
||||||
successHandler(){
|
successHandler(){
|
||||||
this.$store.dispatch('userAuthentication', {access_token: '', redirect_url: this.route('login')});
|
this.$store.dispatch('userAuthentication', {access_token: '', redirect_url: [7, 8].includes(this.$store.getters.getCompanyModuleType) ? this.route('last_mile_delivery.login') : this.route('login') });
|
||||||
this.$store.dispatch('updateIfCreateNewOrder','');
|
this.$store.dispatch('updateIfCreateNewOrder','');
|
||||||
},
|
},
|
||||||
errorHandler(){
|
errorHandler(){
|
||||||
this.$store.dispatch('userAuthentication', {access_token: '', redirect_url: this.route('login')});
|
this.$store.dispatch('userAuthentication', {access_token: '', redirect_url: [7, 8].includes(this.$store.getters.getCompanyModuleType) ? this.route('last_mile_delivery.login') : this.route('login') });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row m-t-15 align-items-center justify-content-center">
|
<div class="row m-t-15 align-items-center justify-content-center">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="btn btn-block btn-lg btn-primary b-rad-none no-border" @click="submitForm">Sign In</div>
|
<div class="btn btn-block btn-lg b-rad-none no-border" :class="[{'btn-primary': currentUrl.indexOf('last_mile_delivery') === -1 }, {'btn-info': currentUrl.indexOf('last_mile_delivery') > -1 }]" @click="submitForm">Sign In</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row m-t-15">
|
<div class="row m-t-15">
|
||||||
@@ -55,7 +55,8 @@
|
|||||||
parameters: {
|
parameters: {
|
||||||
email: this.email,
|
email: this.email,
|
||||||
password: ''
|
password: ''
|
||||||
}
|
},
|
||||||
|
currentUrl: window.location.href,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|||||||
@@ -55,7 +55,7 @@
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="col text-right">
|
<div class="col text-right">
|
||||||
<button type="button" class="btn btn-sm btn-block p-t-10 p-b-10 p-r-35 p-l-35 btn-primary b-rad-none p-r-30" @click="submitForm()">
|
<button type="button" class="btn btn-sm btn-block p-t-10 p-b-10 p-r-35 p-l-35 b-rad-none p-r-30" :class="[{'btn-primary': currentUrl.indexOf('last_mile_delivery') === -1 }, {'btn-info': currentUrl.indexOf('last_mile_delivery') > -1 }]" @click="submitForm()">
|
||||||
<div class="row align-items-center">
|
<div class="row align-items-center">
|
||||||
<div class="col p-r-5">Sign Up</div>
|
<div class="col p-r-5">Sign Up</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -85,6 +85,7 @@
|
|||||||
password: '',
|
password: '',
|
||||||
password_confirmation: '',
|
password_confirmation: '',
|
||||||
},
|
},
|
||||||
|
currentUrl: window.location.href,
|
||||||
status:{
|
status:{
|
||||||
direction:null,
|
direction:null,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -36,10 +36,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="deleteAddress">
|
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="deleteAddress">
|
||||||
<delete-address-form-component :data="item" section="addressList" class="text-center"></delete-address-form-component>
|
<delete-address-form-component :data="item" :section="section" class="text-center"></delete-address-form-component>
|
||||||
</modal-component>
|
</modal-component>
|
||||||
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="defaultAddress">
|
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="defaultAddress">
|
||||||
<set-default-address-form-component :data="item" section="addressList" class="text-center"></set-default-address-form-component>
|
<set-default-address-form-component :data="item" :section="section" class="text-center"></set-default-address-form-component>
|
||||||
</modal-component>
|
</modal-component>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -51,7 +51,11 @@
|
|||||||
props: {
|
props: {
|
||||||
value: {
|
value: {
|
||||||
required: false
|
required: false
|
||||||
|
},
|
||||||
|
'section': {
|
||||||
|
type: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
data(){
|
data(){
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row m-b-15">
|
<div class="row m-b-15">
|
||||||
<div class="col-12 col-md pr-md-1 pb-3 pb-md-0">
|
<div class="col-12 col-md pr-md-1 pb-3 pb-md-0">
|
||||||
<validation-wrapper-component selecatable :validator="$v.parameters.district_id">
|
<validation-wrapper-component selectable :validator="$v.parameters.district_id">
|
||||||
<label>District</label>
|
<label>District</label>
|
||||||
<selectable-component :endpoint="route('api.address.district.list')" section="districtListSection" valueColumn="id" :labelColumn="['city']" v-model="parameters.district_id"></selectable-component>
|
<selectable-component :endpoint="route('api.address.district.list')" section="districtListSection" valueColumn="id" :labelColumn="['city']" v-model="parameters.district_id"></selectable-component>
|
||||||
</validation-wrapper-component>
|
</validation-wrapper-component>
|
||||||
@@ -93,6 +93,10 @@
|
|||||||
id: {
|
id: {
|
||||||
type: Number,
|
type: Number,
|
||||||
required: true
|
required: true
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
type: Number,
|
||||||
|
default: 2
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@@ -104,6 +108,7 @@
|
|||||||
street_two: '',
|
street_two: '',
|
||||||
district_id: '',
|
district_id: '',
|
||||||
post_code: '',
|
post_code: '',
|
||||||
|
type: this.type,
|
||||||
remark: '',
|
remark: '',
|
||||||
phone: '',
|
phone: '',
|
||||||
person_in_charge: '',
|
person_in_charge: '',
|
||||||
@@ -118,6 +123,7 @@
|
|||||||
this.parameters.street_two = this.data.street_two;
|
this.parameters.street_two = this.data.street_two;
|
||||||
this.parameters.district_id = this.data.district.id;
|
this.parameters.district_id = this.data.district.id;
|
||||||
this.parameters.post_code = this.data.post_code;
|
this.parameters.post_code = this.data.post_code;
|
||||||
|
this.parameters.type = this.data.type;
|
||||||
this.parameters.phone = this.data.contact ? this.data.contact.phone : '';
|
this.parameters.phone = this.data.contact ? this.data.contact.phone : '';
|
||||||
this.parameters.person_in_charge = this.data.contact ? this.data.contact.reference : '';
|
this.parameters.person_in_charge = this.data.contact ? this.data.contact.reference : '';
|
||||||
this.parameters.remark = this.data.remark ? this.data.remark.content : '';
|
this.parameters.remark = this.data.remark ? this.data.remark.content : '';
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<template>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<p class="no-margin bold">{{item.contact.reference}}</p>
|
||||||
|
<p class="no-margin">{{item.contact.phone}}</p>
|
||||||
|
<p class="no-margin">{{item.street_one+' '+(item.street_two ? item.street_two : '')+', '+ item.district.name+', '+item.post_code+' '+item.state.name+', '+item.country.name}}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import componentHandler from '../../../general/mixins/componentHandler';
|
||||||
|
export default {
|
||||||
|
mixins: [componentHandler]
|
||||||
|
}
|
||||||
|
</script>
|
||||||
+111
File diff suppressed because one or more lines are too long
-238
@@ -1,238 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="row justify-content-center" @keyup.enter="submitForm">
|
|
||||||
<div class="col col-md-8">
|
|
||||||
<div class="row m-b-0 text-info">
|
|
||||||
<div class="col">
|
|
||||||
<h3 class="text-center">Create Order</h3>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<error-message-component class="m-b-0" :error="error"></error-message-component>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col">
|
|
||||||
<div class="row" v-if="step === 1">
|
|
||||||
<div class="col">
|
|
||||||
<div class="row m-b-20">
|
|
||||||
<div class="col">
|
|
||||||
<div class="row m-b-20 text-info">
|
|
||||||
<div class="col text-center">
|
|
||||||
<h5 class="m-b-0 m-t-0">Select Mode</h5>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row text-center justify-content-center">
|
|
||||||
<div class="col col-md-3 p-r-5">
|
|
||||||
<div class="b-a b-thick p-t-15 p-b-15 p-l-35 p-r-35 pointer" :class="{ 'b-primary': parameters.selectedMode === 'Lodge In / Walk In', 'b-grey': parameters.selectedMode !== 'Lodge In / Walk In' }" @click="updateMode('Lodge In / Walk In')">
|
|
||||||
<div class="row m-b-15 justify-content-center">
|
|
||||||
<div class="col-8">
|
|
||||||
<img src="/images/guangzhou-map.png" class="w-100">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col">
|
|
||||||
<h5 class="no-margin" :class="{ 'text-primary': parameters.selectedMode === 'Lodge In / Walk In', 'semi-bold': parameters.selectedMode === 'Lodge In / Walk In' }">Lodge In / Walk In</h5>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col col-md-3 p-l-5">
|
|
||||||
<div class="b-a b-thick p-t-15 p-b-15 p-l-35 p-r-35 pointer" :class="{ 'b-primary': parameters.selectedMode === 'Pick Up', 'b-grey': parameters.selectedMode !== 'Pick Up' }" @click="updateMode('Pick Up')">
|
|
||||||
<div class="row m-b-15 justify-content-center">
|
|
||||||
<div class="col-8">
|
|
||||||
<img src="/images/yiwu-map.png" class="w-100">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col">
|
|
||||||
<h5 class="no-margin" :class="{ 'text-primary': parameters.selectedMode === 'Pick Up', 'semi-bold': parameters.selectedMode === 'Pick Up'}">Pick Up</h5>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row m-b-20" v-if="parameters.selectedMode === 'Pick Up'">
|
|
||||||
<div class="col">
|
|
||||||
<div class="row m-b-20 p-t-5 p-b-5 text-info b-a b-grey pointer" @click="expandPickUpAddress = !expandPickUpAddress">
|
|
||||||
<div class="col text-center">
|
|
||||||
<h3>Please select your Pick Up address</h3>
|
|
||||||
</div>
|
|
||||||
<div class="col-auto d-flex justify-content-center align-items-center">
|
|
||||||
<i class="fa fs-30 lightest" :class="{'fa-angle-down': !expandPickUpAddress, 'fa-angle-up': expandPickUpAddress}"></i>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row justify-content-center m-b-15" v-if="error">
|
|
||||||
<div class="col-10">
|
|
||||||
<small class="text-danger">{{error}}</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row justify-content-center b-l b-r b-b b-grey" v-if="expandPickUpAddress">
|
|
||||||
<div class="col col-md-10">
|
|
||||||
<list-component style="min-height: 50px;" section="addressList" :emptyListSection=false :endpoint="route('api.address.list')" :options="{per_page: 5, HasMorphCompanyModule: parameters.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-t-10 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="0" section="addressList" @input="parameters.address_id = $event"></address-form-component>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row m-t-15 align-items-center justify-content-center">
|
|
||||||
<div class="col">
|
|
||||||
<div class="btn btn-block btn-lg btn-default b-rad-none" @click="$store.dispatch('toggleSection', {name: 'createOrderFormSection', status: false})">Cancel</div>
|
|
||||||
</div>
|
|
||||||
<div class="col">
|
|
||||||
<div class="btn btn-block btn-lg btn-primary b-rad-none" @click="step++">Next</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row m-t-20" v-if="step === 2">
|
|
||||||
<div class="col">
|
|
||||||
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.container_reference">
|
|
||||||
<label class="text-primary">Shipment Type</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_reference">
|
|
||||||
<label class="text-primary">Quantity</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_reference">
|
|
||||||
<label class="text-primary">Weight</label>
|
|
||||||
<input type="text" class="form-control fs-12" v-model.trim="parameters.container_reference">
|
|
||||||
</validation-wrapper-component>
|
|
||||||
|
|
||||||
<div class="row m-b-20">
|
|
||||||
<div class="col">
|
|
||||||
<div class="row m-b-20 text-info">
|
|
||||||
<div class="col text-center">
|
|
||||||
<h3>Please select your delivery address</h3>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row justify-content-center m-b-15" v-if="error">
|
|
||||||
<div class="col-10">
|
|
||||||
<small class="text-danger">{{error}}</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row justify-content-center">
|
|
||||||
<div class="col col-md-10">
|
|
||||||
<list-component style="min-height: 50px;" section="addressList" :emptyListSection=false :endpoint="route('api.address.list')" :options="{per_page: 5, HasMorphCompanyModule: parameters.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-t-10 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="0" section="addressList" @input="parameters.address_id = $event"></address-form-component>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row m-t-15 align-items-center justify-content-center">
|
|
||||||
<div class="col">
|
|
||||||
<div class="btn btn-block btn-lg btn-default b-rad-none" @click="step--">Back</div>
|
|
||||||
</div>
|
|
||||||
<div class="col">
|
|
||||||
<div class="btn btn-block btn-lg btn-primary b-rad-none" @click="submitForm">Submit</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<script>
|
|
||||||
import componentHandler from '../../../general/mixins/componentHandler';
|
|
||||||
import modalFormHandler from '../../../general/mixins/modalFormHandler';
|
|
||||||
import { required } from "vuelidate/lib/validators";
|
|
||||||
|
|
||||||
export default {
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
error: '',
|
|
||||||
step: 1,
|
|
||||||
expandPickUpAddress: false,
|
|
||||||
parameters: {
|
|
||||||
address_id: null,
|
|
||||||
selectedMode: 'Lodge In / Walk In',
|
|
||||||
container_reference: this.container_reference,
|
|
||||||
container_number: this.container_number,
|
|
||||||
seal_reference: this.seal_reference,
|
|
||||||
container_type: 1,
|
|
||||||
company_module_id: this.company_module_id,
|
|
||||||
etd: this.etd,
|
|
||||||
eta: this.eta,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
},
|
|
||||||
validations: {
|
|
||||||
parameters: {
|
|
||||||
etd: {
|
|
||||||
required
|
|
||||||
},
|
|
||||||
eta: {
|
|
||||||
required
|
|
||||||
},
|
|
||||||
company_module_id: {
|
|
||||||
required
|
|
||||||
},
|
|
||||||
container_reference: {
|
|
||||||
required
|
|
||||||
},
|
|
||||||
container_number: {
|
|
||||||
required
|
|
||||||
},
|
|
||||||
seal_reference: {
|
|
||||||
required
|
|
||||||
},
|
|
||||||
container_type: {
|
|
||||||
required
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
submitForm(){
|
|
||||||
this.submit(this.route('api.packing_list.container.create.load'), 'post', this.section, true, true)
|
|
||||||
},
|
|
||||||
updateMode(mode){
|
|
||||||
this.parameters.selectedMode = mode;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mixins: [componentHandler, modalFormHandler]
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
|
||||||
-244
@@ -1,244 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="row justify-content-center" @keyup.enter="submitForm">
|
|
||||||
<div class="col">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col">
|
|
||||||
<div class="row m-b-10">
|
|
||||||
<div class="col">
|
|
||||||
<div class="row m-b-0 text-primary">
|
|
||||||
<div class="col">
|
|
||||||
<label class="text-primary fs-11 all-caps">Select the delivery type</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row text-center justify-content-center">
|
|
||||||
<div class="col p-r-5">
|
|
||||||
<div class="b-a b-thick p-t-15 p-b-15 p-l-35 p-r-35 pointer" :class="{ 'b-primary': parameters.company_module_id === 'driver', 'b-grey': parameters.company_module_id !== 'driver'}" @click="parameters.company_module_id = 'driver'">
|
|
||||||
<div class="row m-b-15 justify-content-center">
|
|
||||||
<div class="col-8">
|
|
||||||
<img src="/images/guangzhou-map.png" class="w-100">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col">
|
|
||||||
<h5 class="no-margin" :class="{ 'text-primary': parameters.company_module_id === 'driver', 'semi-bold': parameters.company_module_id === 'driver'}">Driver</h5>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col p-l-5">
|
|
||||||
<div class="b-a b-thick p-t-15 p-b-15 p-l-35 p-r-35 pointer" :class="{ 'b-primary': parameters.company_module_id === 'courierService', 'b-grey': parameters.company_module_id !== 'courierService' }" @click="parameters.company_module_id = 'courierService'">
|
|
||||||
<div class="row m-b-15 justify-content-center">
|
|
||||||
<div class="col-8">
|
|
||||||
<img src="/images/yiwu-map.png" class="w-100">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col">
|
|
||||||
<h5 class="no-margin" :class="{ 'text-primary': parameters.company_module_id === 'courierService', 'semi-bold': parameters.company_module_id === 'courierService'}">Courier Service</h5>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row" v-show="parameters.company_module_id === 'courierService'">
|
|
||||||
<div class="col">
|
|
||||||
<div class="row m-b-10">
|
|
||||||
<div class="col">
|
|
||||||
<div class="btn btn-xs btn-primary no-border btn-block text-left b-rad-none p-t-0 p-b-0 p-l-15 p-r-15" @click="courierService.status = !courierService.status">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col p-t-10 p-b-10">
|
|
||||||
{{courierService.name ? courierService.name : 'Please Select'}}
|
|
||||||
</div>
|
|
||||||
<div class="col-auto bg-primary-light">
|
|
||||||
<div class="row h-100 align-items-center">
|
|
||||||
<div class="col">
|
|
||||||
<i class="fa" :class="[{'fa-angle-down': !courierService.status}, {'fa-angle-up': courierService.status}]"></i>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="relative w-100">
|
|
||||||
<div class="absolute w-100 b-l b-b b-r b-primary" :class="[{'hide': !courierService.status}]" style="top: 100%; right: 0; z-index: 1;">
|
|
||||||
<div class="row text-left no-margin bg-white">
|
|
||||||
<div class="col no-padding">
|
|
||||||
<div class="row no-margin" :class="[{'bg-primary-light': courierService.name === 'Pos Laju'}, {'text-white': courierService.name === 'Pos Laju'}, {'hover-primary': courierService.name !== 'Pos Laju'}]" @click="updateCourierService({name: 'Pos Laju', id: 'pos_laju'})">
|
|
||||||
<div class="col b-b b-grey p-t-10 p-b-10 pointer hover-t-10 p-b-10">
|
|
||||||
<div class="row align-items-center justify-content-center">
|
|
||||||
<div class="col">
|
|
||||||
<div class="font-heading fs-10">Pos Laju</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row no-margin" :class="[{'bg-primary-light': courierService.name === 'GD Express'}, {'text-white': courierService.name === 'GD Express'}, {'hover-primary': courierService.name !== 'GD Express'}]" @click="updateCourierService({name: 'GD Express', id: 'gd_express'})">
|
|
||||||
<div class="col b-b b-grey p-t-10 p-b-10 pointer hover-t-10 p-b-10">
|
|
||||||
<div class="row align-items-center justify-content-center">
|
|
||||||
<div class="col">
|
|
||||||
<div class="font-heading fs-10">GD Express</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row no-margin" :class="[{'bg-primary-light': courierService.name === 'City-Link'}, {'text-white': courierService.name === 'City-Link'}, {'hover-primary': courierService.name !== 'City-Link'}]" @click="updateCourierService({name: 'City-Link', id: 'city_link'})">
|
|
||||||
<div class="col b-b b-grey p-t-10 p-b-10 pointer hover-t-10 p-b-10">
|
|
||||||
<div class="row align-items-center justify-content-center">
|
|
||||||
<div class="col">
|
|
||||||
<div class="font-heading fs-10">City-Link Express</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.container_reference">
|
|
||||||
<label class="text-primary">Tracking Number</label>
|
|
||||||
<input type="text" class="form-control fs-12" v-model.trim="parameters.container_reference">
|
|
||||||
</validation-wrapper-component>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row" v-show="parameters.company_module_id === 'driver'">
|
|
||||||
<div class="col m-b-10">
|
|
||||||
<div class="btn btn-xs btn-primary no-border btn-block text-left b-rad-none p-t-0 p-b-0 p-l-15 p-r-15" @click="driver.status = !driver.status">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col p-t-10 p-b-10">
|
|
||||||
{{driver.name ? driver.name : 'Please Select'}}
|
|
||||||
</div>
|
|
||||||
<div class="col-auto bg-primary-light">
|
|
||||||
<div class="row h-100 align-items-center">
|
|
||||||
<div class="col">
|
|
||||||
<i class="fa" :class="[{'fa-angle-down': !driver.status}, {'fa-angle-up': driver.status}]"></i>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="relative w-100">
|
|
||||||
<div class="absolute w-100 b-l b-b b-r b-primary" :class="[{'hide': !driver.status}]" style="top: 100%; right: 0; z-index: 1;">
|
|
||||||
<div class="row text-left no-margin bg-white">
|
|
||||||
<div class="col no-padding">
|
|
||||||
<div class="row no-margin" :class="[{'bg-primary-light': driver.name === 'Driver1'}, {'text-white': driver.name === 'Driver1'}, {'hover-primary': driver.name !== 'Driver1'}]" @click="updateDriver({name: 'Driver1', id: 'driver1'})">
|
|
||||||
<div class="col b-b b-grey p-t-10 p-b-10 pointer hover-t-10 p-b-10">
|
|
||||||
<div class="row align-items-center justify-content-center">
|
|
||||||
<div class="col">
|
|
||||||
<div class="font-heading fs-10">Driver 1</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row no-margin" :class="[{'bg-primary-light': driver.name === 'Driver2'}, {'text-white': driver.name === 'Driver2'}, {'hover-primary': driver.name !== 'Driver2'}]" @click="updateDriver({name: 'Driver2', id: 'driver2'})">
|
|
||||||
<div class="col b-b b-grey p-t-10 p-b-10 pointer hover-t-10 p-b-10">
|
|
||||||
<div class="row align-items-center justify-content-center">
|
|
||||||
<div class="col">
|
|
||||||
<div class="font-heading fs-10">Driver 2</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row no-margin" :class="[{'bg-primary-light': driver.name === 'Driver 3'}, {'text-white': driver.name === 'Driver 3'}, {'hover-primary': driver.name !== 'Driver 3'}]" @click="updateDriver({name: 'Driver 3', id: 'driver3'})">
|
|
||||||
<div class="col b-b b-grey p-t-10 p-b-10 pointer hover-t-10 p-b-10">
|
|
||||||
<div class="row align-items-center justify-content-center">
|
|
||||||
<div class="col">
|
|
||||||
<div class="font-heading fs-10">Driver 3</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>{{item.length}}</p>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-12 col-md-6 pr-md-1">
|
|
||||||
<validation-wrapper-component class="m-b-10" :validator="$v.parameters.etd">
|
|
||||||
<label class="text-primary">ETD</label>
|
|
||||||
<date-picker-component :parameters="parameters" :value="'etd'"></date-picker-component>
|
|
||||||
</validation-wrapper-component>
|
|
||||||
</div>
|
|
||||||
<div class="col-12 col-md-6 pl-md-1">
|
|
||||||
<validation-wrapper-component class="m-b-10" :validator="$v.parameters.eta">
|
|
||||||
<label class="text-primary">ETA</label>
|
|
||||||
<date-picker-component :parameters="parameters" :value="'eta'"></date-picker-component>
|
|
||||||
</validation-wrapper-component>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row m-t-15 align-items-center justify-content-end">
|
|
||||||
<div class="col-auto">
|
|
||||||
<div class="btn btn-default b-rad-none btn-lg" @click="$store.dispatch('toggleSection', {name: 'createDeliveryPackingListFormSection', status: false})">Cancel</div>
|
|
||||||
<div class="btn rounded btn-primary btn-lg" @click="submitForm">Submit</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<script>
|
|
||||||
import componentHandler from '../../../general/mixins/componentHandler';
|
|
||||||
import modalFormHandler from '../../../general/mixins/modalFormHandler';
|
|
||||||
import { required } from "vuelidate/lib/validators";
|
|
||||||
|
|
||||||
export default {
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
parameters: {
|
|
||||||
company_module_id: this.company_module_id,
|
|
||||||
packing_list_id: [160, 161],
|
|
||||||
etd: this.etd,
|
|
||||||
eta: this.eta,
|
|
||||||
},
|
|
||||||
courierService: {
|
|
||||||
name: '',
|
|
||||||
id: '',
|
|
||||||
status: false
|
|
||||||
},
|
|
||||||
driver: {
|
|
||||||
name: '',
|
|
||||||
id: '',
|
|
||||||
status: false
|
|
||||||
},
|
|
||||||
};
|
|
||||||
},
|
|
||||||
validations: {
|
|
||||||
parameters: {
|
|
||||||
etd: { required },
|
|
||||||
eta: { required },
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
updateCourierService(courierService){
|
|
||||||
this.courierService = {
|
|
||||||
name: courierService.name,
|
|
||||||
id: courierService.id,
|
|
||||||
status: false,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
updateDriver(driver){
|
|
||||||
this.driver = {
|
|
||||||
name: driver.name,
|
|
||||||
id: driver.id,
|
|
||||||
status: false,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
submitForm(){
|
|
||||||
this.submit(this.route('api.packing_list.create.deliver'), 'post', this.section, true, true)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
mixins: [componentHandler, modalFormHandler]
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
<div class="animate__animated" :class="[{'animate__shake': validator.$error}]">
|
<div class="animate__animated" :class="[{'animate__shake': validator.$error}]">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="form-group no-margin form-group-default" :class="[{' has-error': validator.$error}, {'form-group-default-select2': selecatable}, {'p-b-5': selecatable}]">
|
<div class="form-group no-margin form-group-default" :class="[{' has-error': validator.$error}, {'form-group-default-select2': selectable}, {'p-b-5': selectable}]">
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
validator: {
|
validator: {
|
||||||
required: true
|
required: true
|
||||||
},
|
},
|
||||||
selecatable: {
|
selectable: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
default: false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,366 @@
|
|||||||
|
<template>
|
||||||
|
<div class="row justify-content-center" @keyup.enter="submitForm">
|
||||||
|
<div class="col">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col col-md-8">
|
||||||
|
<div class="row m-b-20">
|
||||||
|
<div class="col-7">
|
||||||
|
<div class="row m-b-10 text-info">
|
||||||
|
<div class="col">
|
||||||
|
<h5 class="m-b-0 m-t-0 bold">Service Type</h5>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row text-center justify-content-center">
|
||||||
|
<div class="col p-r-5">
|
||||||
|
<div class="b-a b-thick p-t-15 p-b-15 p-l-35 p-r-35 pointer" :class="{ 'b-info': parameters.type === 0, 'b-grey': parameters.type !== 0 }" @click="parameters.type = 0">
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col-8">
|
||||||
|
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABmJLR0QA/wD/AP+gvaeTAAAG00lEQVR4nO2caYwURRSAv4VhOWRBZEEFQgAFFVFARcEjyEpQMCggCoZA/IEHcoioARUNlxKjiTEeqIhRJFFBEQHxwPgDMYCcaqIEMSDBoKKcyyEsO/54r1O9Pd09Bz073UN/yaSnql7XvC6qq1699xaIiYmJiYmJiYmJiSlKWgIzgc1AJXAY2ATMAFoUUK9IMBQ4BCQ9PgeBwQXTLuQMBaqRgVoM9AbO0s+NwKfadop4EFNoiZl5j/nITVGZA0B5LegVGWYiA/NJBrJLVXZ6XjWKGFuQQemdgWwfld2UV40ixmFkUBpnIFumsofyqpEHdQrxoxmQzEK2JId7AiOsA/ibXq/KQNaS2Z4nXXwJ6wAu0+vDGchOctwTg5wwDiKv5RQfuSdVZj/QvBb0ihRDECM5iZgqfZBNpQyoAJZjDOnbC6Rj6BmMGMleR7n9xIOXlnLEcbARMW8OARuAacSvbUxQVABzga2Iy8rtdT0AfAX0K5COoaQDsArvNc7r80QhlA0b/TAbxF/AVKAr4q5yozkycFWIm6uiFnQMLfcAJ5DBWwQ0zeLeSXrfijzoFQmexjhKZ2POsplSrvf+G7BeoScBzEMevgp4IMd+mmkfJ4AmwagWDeYjD14JDHRp7wQsAK5P089NmM3kpSAVDDMjMSeHHi7tfYF9KvNymr6ewgxgFXBlcGqGF8tUGenS9iBwEjMo96bpa4XK/ajX9UDdwDQNIQ2RmXJSv1skgFeQQajGbCyX+/RVBzNTLwJ26vfxgWsdInogD/mTra4e8KXWHwMm6vfD+M+mzir3u5YHYuLDrQLVOkNqw6HaTa9bbHW3IIb034ibyvImb0DcU15cq9c1el2GRO6aAKsR/2Cb01c5c2pjALvq9QdbnTWo84G1wDVaXpemr14uchOAbUB7YBbyWn8O3AnUz03lcLEaec362uoWa90ILa/U8qA0fW1VuY1Aqa2+jvY/HzhCTX/hG0R4py7BuObtiUDbta4L8vD7tey3jp2D2WiSwDM+cuOROLHdAbEJ8XJHigsQ5f+w1ZUhA3Ec2UwuUZldafq6FbOBVOn3j4ABeG883RBj+x/Mbn9HDs9RMIYgin9mq7sO8xqCOBYsp4IfszDn59HI7m3Nrj3AC8BlHvfWR7zaSWpuZqFnOqL0s7a6sVo3T8tztPxomr6+UbnbtNwKidj9TOqrOhFJULLTFHOUjAxLEKWH2ere1LoJWv5eyzf49JNAHrwa96TKqxGj3HpVLWfDUuSVLUN8iUnS7/ShYgei9MW2unXUTBzaQ+om4+QKldmW5vdKkUjeEoy/0f6pBvpn9QQF5iiiuOVlTiBmRjVwNmIAW7HfRj79jFOZd7L47RbILF+PrJdridjggZltjyNrkLWQW8e6fpjZ0dmnnwUqMyZvmoaUAdS03ZyZBNNs9X4pHK+pzEqy92BHngHITKxEdkj7acM6gSSRc3Ezjz7Kgb0qNypvmkaMupg86M2ktwVHqcxe4j9vAKA7MiC/IicWK8Q51kO+BDNj36sNBcOOc2cdquXjiNniRjtM5sIZn6HwPqku/Fe1bjveseLJKrMD7yD8GcEuUs2X+sgZOQks9LgvgfG0PJdPBcNMG2QA9pHq1LXiJH52Xw9MnKV7nnQMNcNI9dKA7Mx/YgbQbz18kTMkKuekHsaBMNnRVoE5886xfXfLQGiMicplkoxeNFh/xrWLVMPZ8tTMoOZ6+KFHX/21/QgSEyl6eiHrVhWp7qtGmNOG5RjtiDG27/fo8wPcl4OiowwTC5nt0m5tHhsc9cMx8eOuzpuAczHB9uFBKRtG3sZ4jEsdbTdj4iRug/Q65tTith6OxhzzivLPXgdhZlEXR1s5xqn6iMf9DTC2n9t6WAJ8re1vBaBvqGiFcbW7nXMXadsq/M2RCzEhUrcEpI7IP1A1kgJXFJQgi3sSyYVx+vLuwwTA22bQ312YmexmQE/FmD4NclM5XDyEWZvOd7R1wOywd2fRp2XquNmHCcwfa8/MQd+88h3wbRblTkhMZA+pKRsJJEEoibjrs+m/IZJnY7/XTi/ENfYfcOlp6J8R2SQXWa75TMtjkId9HomS2ZkK9ESM6XFZ9n8MeZUrkdya0Y6+1yBZrKXUPKFkq3/BsXZWZ75LT8SYPoX89yW5MkL7P0pqRkJbbdt9Gv0XHGvHtOfrNUZsuaBcUXMxOTL1bPWtMXGWyPIx8hDLkUFsB3yBiYE4jelcaIjJlV4GnIecTKyd3+sMHQk6UTPVwvrsRGy2oGgP/OLyO/uQnT7StEZmwUHE1nsXmSVB0xyJHe9GTKaFFMHgxcTExMTExMTExBQt/wPtRjB5yTmw/QAAAABJRU5ErkJggg==" class="w-100">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<h5 class="no-margin" :class="{ 'text-info': parameters.type === 0, 'semi-bold': parameters.type === 0 }">Walk In</h5>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col p-l-5">
|
||||||
|
<div class="b-a b-thick p-t-15 p-b-15 p-l-35 p-r-35 pointer" :class="{ 'b-info': parameters.type === 1, 'b-grey': parameters.type !== 1 }" @click="parameters.type = 1">
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col-8">
|
||||||
|
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABmJLR0QA/wD/AP+gvaeTAAAEJklEQVR4nO3aS6hVVRzH8c8tsUKvjWoQBGGPSZFGg0ot8+YgMBoKEQhBBBFNokFkUhOzGjSoUVnUMIugUQ8pe4gVRhFISpMI7UpGpuiN3vc0WOt0ttt93nufvW93fWFxNov9/6///p211l7rvzaJRCKRSCQSiUQikUgkEolEIpFIJBY5S/E0jqJVUZnDAWzHpZN5rMnxlOqEKyqncM9EnmxCzAoPdtOQdm1BBmEZbsbr0WYe9w7ZXmMZRogy7O4XBPwT60awbxyTFpAw57bwIy4Z0UdjqEPAc/FetP9UeJEtWOoQEC7Gkejj2TH81E5dAsIN+D362Tymr9qoU0B4IPo5jatL8Ddx6hYQXom+vsWFJfmcGE0Q8AJ8Gf29hamS/E6EJggIl+F49PlwiX4rpykCwp3CIvsvzJTpeEr5wS4EvsP7sbwrvGhGYjEK+Kuwh27zG/ZidywHhnVYxZAhBPXJBO0GZSk2YIfwgvnHmVmdo3gVdwuL8r5UJeBC4SLcJSx52hmkdpnHV0JqbgbnFTlY7ALmuQYP4R1huGcF/QlbsSRrUJScPIzbxwxknzAcx7XbWxDfKH5H4XxsxDP4OtP+m0LigoLgsiKOQ1lzYJGAVc6RvVgrpMpa2NKuLBrCaVh3Z7OgzWftiiRgbzZhP/5w9hkMqhvCZc2BdbJJ74Ms53QxPIL7xmx83mi9eFS7Kngi/j4iLGGmFCQk0nDtzilBm+W5+r49MBHYH38f1ON8paoe+H+YA2fwtxHmwG5sxE4hwzuHk8Lm+0XhLDY7PzRxDszHPxevd+K2gvv34A58IZw3FzJID7xc8YI2X3YLCcymMWj8H2PlAP7O0KyfgOuEntYSVuGPYpWQElqG1cL+sL1CP4HrB32yCTBs/Cexpo/PgQW8ShCkhdec/TbKMo1d8d6f8bn658BR4/8FV3SJZ5+OZqvoLuCU0KXbjQ9yIDOl86FPC28PYJOnrHzguPHv6RJPdir4nu4C3qrT7Xv9c3mmcSzarh/CrmzKiP+WHve10Or1Fm5nG54T3lZtsh9OzgqZ3ewa6TSez/mog4nF387C5ifOg7H+2lx90YeTT+buWR3rDw4SQI6y5sAy4v+mh///Ru6OAofZku/+WcHXxuvZ3D3TfXxOslQZ/+EleDwabTHcN3XZSbmqhW+VjBt/34RLtyFQ1GO35+4ZZAhUTe3xvxydbM3VL41BzOKH2Hh+o70t2r40TgBjUnv863WWAdND2K0QTq9awgfgddGI+D+KjnYZfCH6RrT5YNzGS6D2+K8UtjUtYYXe659ckWn8uLCBr5tGxL9GZz95DI/hOmF5sDxeb9Pp9idwY1mNl0Aj4l+pMxx6lQ81M53VmPhn8AIO6SQkD8W6DVU2XBILPf5EIpFIJBKJRCKRSCQSiUQiUSP/AlkkSdKJddQ3AAAAAElFTkSuQmCC" class="w-100">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<h5 class="no-margin" :class="{ 'text-info': parameters.type === 1, 'semi-bold': parameters.type === 1}">Pick Up</h5>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row m-b-20">
|
||||||
|
<div class="col">
|
||||||
|
<div class="row m-b-10 text-info">
|
||||||
|
<div class="col">
|
||||||
|
<h5 class="m-b-0 m-t-0 bold">Parcel Details</h5>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">
|
||||||
|
<validation-wrapper-component selectable class="m-b-15" :validator="$v.parameters.packing_list.type">
|
||||||
|
<label class="text-primary">Goods Type</label>
|
||||||
|
<select-component :options="[{'id': 0, 'text': 'Package'}, {'id': 3, 'text': 'Documents'}, {'id': 1, 'text': 'Pallet'}]" v-model="parameters.packing_list.type"></select-component>
|
||||||
|
</validation-wrapper-component>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.packing_list.description">
|
||||||
|
<label class="text-primary">Goods Name</label>
|
||||||
|
<input type="text" class="form-control fs-12" v-model.trim="parameters.packing_list.description">
|
||||||
|
</validation-wrapper-component>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.packing_list.value">
|
||||||
|
<label class="text-primary">Goods Value</label>
|
||||||
|
<input type="text" class="form-control fs-12" v-model.trim="parameters.packing_list.value" v-money="money">
|
||||||
|
</validation-wrapper-component>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.packing_list.weight">
|
||||||
|
<label class="text-primary">Weight (KG)</label>
|
||||||
|
<input type="text" class="form-control fs-12" v-model.trim="parameters.packing_list.weight" v-money="weight">
|
||||||
|
</validation-wrapper-component>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.packing_list.quantity">
|
||||||
|
<label class="text-primary">Parcel Quantity</label>
|
||||||
|
<input type="text" class="form-control fs-12" v-model.trim="parameters.packing_list.quantity" v-money="integer">
|
||||||
|
</validation-wrapper-component>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row m-b-50" v-if="itemDone">
|
||||||
|
<div class="col">
|
||||||
|
<div class="row m-b-10 text-info">
|
||||||
|
<div class="col">
|
||||||
|
<h5 class="m-b-0 m-t-0 bold">Sender Address</h5>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row justify-content-center" v-if="error">
|
||||||
|
<div class="col">
|
||||||
|
<small class="text-danger">{{error}}</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<div class="row no-margin">
|
||||||
|
<div class="col">
|
||||||
|
<list-component style="min-height: 10px;" section="senderAddressList" :emptyListSection=false :endpoint="route('api.address.list')" :options="{per_page: 5, HasMorphCompanyModule: company.company_module.id, type: 3}">
|
||||||
|
<template slot="list" slot-scope="{data}">
|
||||||
|
<select-address-component :data="data" section="senderAddressList" :value="parameters.sender_address_id" v-model="parameters.sender_address_id"></select-address-component>
|
||||||
|
</template>
|
||||||
|
</list-component>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row m-t-10 m-b-10 animate__animated animate__fadeInUpBig animate__delay-1 animate__fast no-margin">
|
||||||
|
<div class="col b-a p-t-15 p-b-15 pointer" :class="{ 'b-primary': !parameters.sender_address_id, 'b-grey': parameters.sender_address_id}" @click="parameters.sender_address_id = ''">
|
||||||
|
<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.sender_address_id, 'fa-check-circle': !parameters.sender_address_id, 'text-primary': !parameters.sender_address_id}"></i>
|
||||||
|
</div>
|
||||||
|
<div class="col-auto semi-bold">New Address</div>
|
||||||
|
</div>
|
||||||
|
<div class="row" v-show="!parameters.sender_address_id">
|
||||||
|
<div class="col">
|
||||||
|
<address-form-component :id="company.company_module.id" section="senderAddressList" @input="parameters.sender_address_id = $event" :type="3"></address-form-component>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row m-b-20" v-if="itemDone && parameters.sender_address_id">
|
||||||
|
<div class="col">
|
||||||
|
<div class="row m-b-10 text-info">
|
||||||
|
<div class="col">
|
||||||
|
<h5 class="m-b-0 m-t-0 bold">Delivery Address</h5>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row justify-content-center" v-if="error">
|
||||||
|
<div class="col">
|
||||||
|
<small class="text-danger">{{error}}</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<div class="row no-margin">
|
||||||
|
<div class="col">
|
||||||
|
<list-component style="min-height: 10px;" section="deliveryAddressList" :emptyListSection=false :endpoint="route('api.address.list')" :options="{per_page: 5, HasMorphCompanyModule: company.company_module.id, type: 2}">
|
||||||
|
<template slot="list" slot-scope="{data}">
|
||||||
|
<select-address-component :data="data" section="deliveryAddressList" :value="parameters.delivery_address_id" v-model="parameters.delivery_address_id"></select-address-component>
|
||||||
|
</template>
|
||||||
|
</list-component>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row m-t-10 m-b-10 animate__animated animate__fadeInUpBig animate__delay-1 animate__fast no-margin">
|
||||||
|
<div class="col b-a p-t-15 p-b-15 pointer" :class="{ 'b-primary': !parameters.delivery_address_id, 'b-grey': parameters.delivery_address_id}" @click="parameters.delivery_address_id = ''">
|
||||||
|
<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.delivery_address_id, 'fa-check-circle': !parameters.delivery_address_id, 'text-primary': !parameters.delivery_address_id}"></i>
|
||||||
|
</div>
|
||||||
|
<div class="col-auto semi-bold">New Address</div>
|
||||||
|
</div>
|
||||||
|
<div class="row" v-show="!parameters.delivery_address_id">
|
||||||
|
<div class="col">
|
||||||
|
<address-form-component :id="company.company_module.id" section="deliveryAddressList" @input="parameters.delivery_address_id = $event"></address-form-component>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-4">
|
||||||
|
<div class="row m-b-50">
|
||||||
|
<div class="col bg-master-lightest">
|
||||||
|
<div class="row b-b b-grey m-b-15">
|
||||||
|
<div class="col">
|
||||||
|
<h6>Order Summary</h6>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row b-b b-grey m-b-15 p-b-15">
|
||||||
|
<div class="col">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<p class="muted no-margin bold">Items</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<div class="row m-l-0 m-r-0 m-t-10" v-if="itemDone">
|
||||||
|
<div class="col p-t-10 p-b-10 bg-white">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<P class="bold no-margin">{{parameters.packing_list.description}}</P>
|
||||||
|
</div>
|
||||||
|
<div class="col-auto">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<p class="muted no-margin">{{ parameters.packing_list.type === '0' ? 'Package' : parameters.packing_list.type === '1' ? 'Pallet' : 'Documents'}} X {{parameters.packing_list.quantity}} - {{parameters.packing_list.weight}}KG</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row" v-if="!itemDone">
|
||||||
|
<div class="col">
|
||||||
|
<p class="muted">There are no items added yet!</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row b-b b-grey m-b-15">
|
||||||
|
<div class="col">
|
||||||
|
<div class="row m-b-15">
|
||||||
|
<div class="col">
|
||||||
|
<div class="row m-b-5">
|
||||||
|
<div class="col">
|
||||||
|
<p class="muted no-margin bold">From</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<list-component v-if="parameters.sender_address_id" style="min-height: 10px;" section="senderAddressSummary" :emptyListSection=false :endpoint="route('api.address.list')" :options="{id: parameters.sender_address_id}">
|
||||||
|
<template slot="list" slot-scope="{data}">
|
||||||
|
<address-profile-section-component :data="data"></address-profile-section-component>
|
||||||
|
</template>
|
||||||
|
</list-component>
|
||||||
|
<div class="row" v-if="!parameters.sender_address_id">
|
||||||
|
<div class="col">
|
||||||
|
<p class="muted">There are no address selected yet!</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row m-b-15">
|
||||||
|
<div class="col">
|
||||||
|
<div class="row m-b-5">
|
||||||
|
<div class="col">
|
||||||
|
<p class="muted no-margin bold">To</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<list-component v-if="parameters.delivery_address_id" style="min-height: 10px;" section="deliveryAddressSummary" :emptyListSection=false :endpoint="route('api.address.list')" :options="{id: parameters.delivery_address_id}">
|
||||||
|
<template slot="list" slot-scope="{data}">
|
||||||
|
<address-profile-section-component :data="data"></address-profile-section-component>
|
||||||
|
</template>
|
||||||
|
</list-component>
|
||||||
|
<div class="row" v-if="!parameters.delivery_address_id">
|
||||||
|
<div class="col">
|
||||||
|
<p class="muted">There are no address selected yet!</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row b-b b-grey m-b-15 p-b-15">
|
||||||
|
<div class="col">
|
||||||
|
<h6 class="bold no-margin">Total Weight</h6>
|
||||||
|
</div>
|
||||||
|
<div class="col-auto">
|
||||||
|
<h6 class="bold no-margin">{{parameters.packing_list.weight}}KG</h6>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row m-b-5">
|
||||||
|
<div class="col">
|
||||||
|
<div class="btn btn-block btn-lg btn-success" v-if="itemDone && parameters.sender_address_id && parameters.delivery_address_id" @click="submit(route('api.delivery.order.create'), 'post', section, true, true)">Create Order</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row m-b-15">
|
||||||
|
<div class="col">
|
||||||
|
<div class="btn btn-block btn-lg btn-default bg-master-lighter no-border" @click="$store.dispatch('toggleSection', {name: 'createOrderForm', status: false})">Cancel</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { required, minValue, number } from "vuelidate/lib/validators";
|
||||||
|
import formHandler from "../../../general/mixins/formHandler";
|
||||||
|
import AddressProfileSectionComponent from "../../addresses/sections/AddressProfileSectionComponent";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {AddressProfileSectionComponent},
|
||||||
|
props: {
|
||||||
|
company: {
|
||||||
|
type: Object,
|
||||||
|
required: true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
step: 1,
|
||||||
|
error: '',
|
||||||
|
parameters : {
|
||||||
|
type: 0,
|
||||||
|
sender_address_id: '',
|
||||||
|
delivery_address_id: '',
|
||||||
|
company_id: this.company.id,
|
||||||
|
packing_list: {
|
||||||
|
description: '',
|
||||||
|
type: '0',
|
||||||
|
value: 0.00,
|
||||||
|
weight: 0.0,
|
||||||
|
quantity: 1,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
validations: {
|
||||||
|
parameters : {
|
||||||
|
packing_list: {
|
||||||
|
description: {
|
||||||
|
required: required
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
required: required
|
||||||
|
},
|
||||||
|
value: {
|
||||||
|
required: required,
|
||||||
|
},
|
||||||
|
weight: {
|
||||||
|
required: required,
|
||||||
|
minValue: minValue(0.1)
|
||||||
|
},
|
||||||
|
quantity: {
|
||||||
|
required: required,
|
||||||
|
minValue: minValue(1)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
itemDone(){
|
||||||
|
return this.validate();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
createOrder(){
|
||||||
|
this.step++;
|
||||||
|
this.submit((this.route('api.order.create')), 'post', 'orderListSection', false, false)
|
||||||
|
},
|
||||||
|
cancelOrder(){
|
||||||
|
this.parameters.sender_address_id = '';
|
||||||
|
this.parameters.delivery_address_id = '';
|
||||||
|
this.$store.dispatch('toggleSection', {name: this.section, status: false})
|
||||||
|
},
|
||||||
|
successHandler(){
|
||||||
|
window.location.reload();
|
||||||
|
},
|
||||||
|
errorHandler(response){
|
||||||
|
this.error = response.message;
|
||||||
|
this.step--;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mixins: [formHandler]
|
||||||
|
}
|
||||||
|
</script>
|
||||||
+176
@@ -0,0 +1,176 @@
|
|||||||
|
<template>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col no-margin">
|
||||||
|
<loading-component style="height: 200px; top: 0;" key="1" color="success" v-show="$store.getters.isLoading(section)"></loading-component>
|
||||||
|
<div class="row" v-show="!$store.getters.isLoading(section)">
|
||||||
|
<div class="col">
|
||||||
|
<div class="row m-b-15">
|
||||||
|
<div class="col-auto p-r-5">
|
||||||
|
<a :href="route('last_mile_delivery.order.export')" target="_blank">
|
||||||
|
<button type="button" class="btn btn-sm btn-block p-t-10 p-b-10 p-r-35 p-l-35 btn-complete b-rad-none">
|
||||||
|
<div class="row align-items-center">
|
||||||
|
<div class="col-auto p-r-0 p-l-0">
|
||||||
|
<i class="fa fa-file-excel-o fs-16"></i>
|
||||||
|
</div>
|
||||||
|
<div class="col p-r-5">Export To Excel</div>
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row overflow-hidden" key="2" v-show="!$store.getters.isLoading(section)">
|
||||||
|
<div class="col">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<div class="row scrollable">
|
||||||
|
<div class="col">
|
||||||
|
<table class="table" style="width: 2500px">
|
||||||
|
<thead class="thead-dark">
|
||||||
|
<tr>
|
||||||
|
<th scope="col"><input type="checkbox" /></th>
|
||||||
|
<th scope="col">Order Number</th>
|
||||||
|
<th scope="col">Marking</th>
|
||||||
|
<th scope="col">Service Type</th>
|
||||||
|
<th scope="col">Parcel Type</th>
|
||||||
|
<th scope="col">Item Content</th>
|
||||||
|
<th scope="col">Quantity</th>
|
||||||
|
<th scope="col">Weight</th>
|
||||||
|
<th scope="col">Sender Name</th>
|
||||||
|
<th scope="col">Sender Address</th>
|
||||||
|
<th scope="col">Sender Phone</th>
|
||||||
|
<th scope="col">Receiver Name</th>
|
||||||
|
<th scope="col">Receiver Address</th>
|
||||||
|
<th scope="col">Receiver Phone</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr v-for="data in $store.getters.getListData(section)">
|
||||||
|
<th scope="col"><input type="checkbox" /></th>
|
||||||
|
<td><a :href="'https://www.tracking.my/lineclear/'+data.reference" target="_blank">{{data.reference}}</a></td>
|
||||||
|
<td>{{data.company_module.marking}}</td>
|
||||||
|
<td>Walk In</td>
|
||||||
|
<td>{{data.packingList.type === 0 ? 'Package' : data.packingList.type === 1 ? 'Pallet' : 'Documents'}}</td>
|
||||||
|
<td>{{data.packingList.description}}</td>
|
||||||
|
<td>{{data.packingList.quantity}}</td>
|
||||||
|
<td>{{(Math.ceil(parseFloat((data.packingList.weight * 10))) / 10).toFixed(1)}}KG</td>
|
||||||
|
<td>{{data.sender_address.contact.reference}}</td>
|
||||||
|
<td>{{data.sender_address.street_one+' '+(data.sender_address.street_two ? data.sender_address.street_two : '')+', '+ data.sender_address.district.name+', '+data.sender_address.post_code+' '+data.sender_address.state.name+', '+data.sender_address.country.name}}</td>
|
||||||
|
<td>{{data.sender_address.contact.phone}}</td>
|
||||||
|
<td>{{data.delivery_address.contact.reference}}</td>
|
||||||
|
<td>{{data.delivery_address.street_one+' '+(data.delivery_address.street_two ? data.delivery_address.street_two : '')+', '+ data.delivery_address.district.name+', '+data.delivery_address.post_code+' '+data.delivery_address.state.name+', '+data.delivery_address.country.name}}</td>
|
||||||
|
<td>{{data.delivery_address.contact.phone}}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row m-t-20">
|
||||||
|
<div class="col"></div>
|
||||||
|
<div class="col-auto p-r-0" v-show="filters.per_page < metaData.total">
|
||||||
|
<pagination-component :section="section" class="mb-5" ref="pagination"></pagination-component>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data(){
|
||||||
|
return {
|
||||||
|
section: 'ListOrderTableSection',
|
||||||
|
emptyListSection: false,
|
||||||
|
filters: {
|
||||||
|
per_page: 20,
|
||||||
|
order_by: {
|
||||||
|
column: 'id',
|
||||||
|
DESC: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
metaData: {
|
||||||
|
from: null,
|
||||||
|
to: null,
|
||||||
|
total: null,
|
||||||
|
current_page: null,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created(){
|
||||||
|
this.setDecoratorDefault();
|
||||||
|
this.$store.dispatch('updateListQueue', {'name': this.section, 'page': 1, 'filters': this.filters});
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
pendingList () {
|
||||||
|
return this.$store.getters.isInCompleteQueue(this.section);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
pendingList(inComplete){
|
||||||
|
if(inComplete){
|
||||||
|
this.fetchList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
fetchList(){
|
||||||
|
let listDecorators = this.$store.getters.getListDetails(this.section);
|
||||||
|
this.submit(this.route('api.delivery.order.list') + '?page=' + listDecorators.page + '&filters=' + JSON.stringify(listDecorators.filters), 'get', this.section, false, false)
|
||||||
|
},
|
||||||
|
updateOrderBy(field) {
|
||||||
|
field === this.filters.order_by.column ? this.filters.order_by.DESC = !this.filters.order_by.DESC : '';
|
||||||
|
this.filters.order_by.column = field;
|
||||||
|
this.updateFilters(this.filters);
|
||||||
|
},
|
||||||
|
updateOrderStatusFilter(status) {
|
||||||
|
this.orderStatusFilterDropDownStatus = false;
|
||||||
|
this.orderStatus = status;
|
||||||
|
|
||||||
|
switch(status) {
|
||||||
|
case 'Active':
|
||||||
|
this.filters.status_in = [2];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'Complete':
|
||||||
|
this.filters.status_in = [3];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'Pending Verification':
|
||||||
|
this.filters.status_in = [1];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'Cancelled':
|
||||||
|
this.filters.status_in = [4, 5, 6];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.updateFilters(this.filters);
|
||||||
|
},
|
||||||
|
updatePerPageFilter(number) {
|
||||||
|
this.perPageFilterDropDownStatus = false;
|
||||||
|
this.filters.per_page = parseInt(number);
|
||||||
|
this.updateFilters(this.filters);
|
||||||
|
},
|
||||||
|
updateFilters(filters){
|
||||||
|
this.filters = filters;
|
||||||
|
this.setDecoratorDefault();
|
||||||
|
this.submit(this.route('api.delivery.order.list') + '?page=' + this.metaData.current_page + '&filters=' + JSON.stringify(this.filters), 'get', this.section, false, false)
|
||||||
|
},
|
||||||
|
successHandler(response){
|
||||||
|
this.$store.dispatch('completeList', {'name': this.section, 'data': response.payload.data});
|
||||||
|
this.$refs.pagination.makePagination(response.payload.meta, response.payload.links);
|
||||||
|
this.metaData = response.payload.meta;
|
||||||
|
},
|
||||||
|
resetFilter() {
|
||||||
|
this.filters.order_by.column = 'id';
|
||||||
|
this.filters.order_by.DESC = false;
|
||||||
|
this.filters.reference_like = '';
|
||||||
|
this.updateFilters(this.filters);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
+1
-1
@@ -26,7 +26,7 @@
|
|||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col p-r-0">
|
<div class="col p-r-0">
|
||||||
<validation-wrapper-component selecatable :validator="$v.model">
|
<validation-wrapper-component selectable :validator="$v.model">
|
||||||
<label>Model</label>
|
<label>Model</label>
|
||||||
<select-component :options="[{id: 1, text: 'Fixed Measurement'}, {id: 3, text: 'Fixed CBM'}, {id: 2, text: 'Ratio Measurement'}, {id: 4, text: 'Ratio CBM'}]" v-model="model"></select-component>
|
<select-component :options="[{id: 1, text: 'Fixed Measurement'}, {id: 3, text: 'Fixed CBM'}, {id: 2, text: 'Ratio Measurement'}, {id: 4, text: 'Ratio CBM'}]" v-model="model"></select-component>
|
||||||
</validation-wrapper-component>
|
</validation-wrapper-component>
|
||||||
|
|||||||
@@ -43,7 +43,7 @@
|
|||||||
<div class="col p-l-5 p-r-5">
|
<div class="col p-l-5 p-r-5">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-5 p-r-0">
|
<div class="col-5 p-r-0">
|
||||||
<validation-wrapper-component selecatable :validator="$v.custom_field">
|
<validation-wrapper-component selectable :validator="$v.custom_field">
|
||||||
<label>Custom Fields</label>
|
<label>Custom Fields</label>
|
||||||
<select-component :options="inActiveFields" v-model="custom_field"></select-component>
|
<select-component :options="inActiveFields" v-model="custom_field"></select-component>
|
||||||
</validation-wrapper-component>
|
</validation-wrapper-component>
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
</validation-wrapper-component>
|
</validation-wrapper-component>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-7 p-l-5 p-r-5" v-show="custom_fields.bank_id.active">
|
<div class="col-7 p-l-5 p-r-5" v-show="custom_fields.bank_id.active">
|
||||||
<validation-wrapper-component selecatable :validator="$v.parameters.configurations.bank_id" >
|
<validation-wrapper-component selectable :validator="$v.parameters.configurations.bank_id" >
|
||||||
<label>Receivable Bank Account</label>
|
<label>Receivable Bank Account</label>
|
||||||
<selectable-component :endpoint="route('api.bank.list')+'?filters={%22company_id%22:1}'" section="BankAccountListSection" valueColumn="id" :labelColumn="['bank_name', 'account_no']" v-model="parameters.configurations.bank_id"></selectable-component>
|
<selectable-component :endpoint="route('api.bank.list')+'?filters={%22company_id%22:1}'" section="BankAccountListSection" valueColumn="id" :labelColumn="['bank_name', 'account_no']" v-model="parameters.configurations.bank_id"></selectable-component>
|
||||||
<div class="absolute lh-10" style="top: 0; right: 0;">
|
<div class="absolute lh-10" style="top: 0; right: 0;">
|
||||||
|
|||||||
@@ -103,7 +103,7 @@
|
|||||||
</validation-wrapper-component>
|
</validation-wrapper-component>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<validation-wrapper-component selecatable :validator="$v.parameters.configurations.bank_id">
|
<validation-wrapper-component selectable :validator="$v.parameters.configurations.bank_id">
|
||||||
<label>Receivable Bank Account</label>
|
<label>Receivable Bank Account</label>
|
||||||
<selectable-component :endpoint="route('api.bank.list')+'?filters={%22company_id%22:1}'" section="BankAccountListSection" valueColumn="id" :labelColumn="['bank_name', 'account_no']" v-model="parameters.configurations.bank_id"></selectable-component>
|
<selectable-component :endpoint="route('api.bank.list')+'?filters={%22company_id%22:1}'" section="BankAccountListSection" valueColumn="id" :labelColumn="['bank_name', 'account_no']" v-model="parameters.configurations.bank_id"></selectable-component>
|
||||||
</validation-wrapper-component>
|
</validation-wrapper-component>
|
||||||
|
|||||||
+2
-2
@@ -9,8 +9,8 @@ export default {
|
|||||||
district_id: { required },
|
district_id: { required },
|
||||||
post_code: { required },
|
post_code: { required },
|
||||||
remark: {},
|
remark: {},
|
||||||
phone: {numeric},
|
phone: {required, numeric},
|
||||||
person_in_charge: {},
|
person_in_charge: { required },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mixins: [addressFormHandler]
|
mixins: [addressFormHandler]
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ export default {
|
|||||||
isLoading: false,
|
isLoading: false,
|
||||||
error: '',
|
error: '',
|
||||||
money: {decimal: '.',thousands: ',', precision: 2},
|
money: {decimal: '.',thousands: ',', precision: 2},
|
||||||
|
weight: {decimal: '.',thousands: ',', precision: 1},
|
||||||
productPrice: {decimal: '.',thousands: ',', precision: 3},
|
productPrice: {decimal: '.',thousands: ',', precision: 3},
|
||||||
exchangeRate: {decimal: '.', thousands: '', precision: 5},
|
exchangeRate: {decimal: '.', thousands: '', precision: 5},
|
||||||
percentage: {decimal: '.', thousands: '', precision: 2, suffix: '%'},
|
percentage: {decimal: '.', thousands: '', precision: 2, suffix: '%'},
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@ export default {
|
|||||||
(this.$store.getters.isAuthenticated && !this.isProtectedRoute()&& this.isWithTokenRoute()) ? window.location.href = this.route('dashboard') : '';
|
(this.$store.getters.isAuthenticated && !this.isProtectedRoute()&& this.isWithTokenRoute()) ? window.location.href = this.route('dashboard') : '';
|
||||||
},
|
},
|
||||||
isProtectedRoute(){
|
isProtectedRoute(){
|
||||||
const unprotectedRoutes = [this.route('login'), this.route('account.email.verification'), this.route('company.claim'), this.route('signup')];
|
const unprotectedRoutes = [this.route('login'), this.route('account.email.verification'), this.route('company.claim'), this.route('last_mile_delivery.login')];
|
||||||
if(window.location.href.indexOf(this.route('company.claim')) === 0) {
|
if(window.location.href.indexOf(this.route('company.claim')) === 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ export default {
|
|||||||
getUserEmail: (state, getters) => getters.getDecodedAccessToken.user.email,
|
getUserEmail: (state, getters) => getters.getDecodedAccessToken.user.email,
|
||||||
getCompanyId: (state, getters) => getters.getDecodedAccessToken.user.company_id,
|
getCompanyId: (state, getters) => getters.getDecodedAccessToken.user.company_id,
|
||||||
getCompanyModuleId: (state, getters) => getters.getDecodedAccessToken.user.company_module_id,
|
getCompanyModuleId: (state, getters) => getters.getDecodedAccessToken.user.company_module_id,
|
||||||
|
getCompanyModuleType: (state, getters) => getters.getDecodedAccessToken.user.company_module_type,
|
||||||
getOrder: (state, getters) => getters.getDecodedAccessToken.user.order,
|
getOrder: (state, getters) => getters.getDecodedAccessToken.user.order,
|
||||||
|
|
||||||
getDecodedAccessToken(state) {
|
getDecodedAccessToken(state) {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<div class="col-3 bg-master-lightest d-none d-md-inline" >
|
<div class="col-3 bg-master-lightest d-none d-md-inline" >
|
||||||
@include('partials.menu')
|
@include('partials.menu')
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col-9">
|
||||||
<div class="absolute bg-master w-100 h-100" style="opacity: 0.3; z-index:9998; left:0;" v-if="$store.getters.isShowing('sideMenu')"></div>
|
<div class="absolute bg-master w-100 h-100" style="opacity: 0.3; z-index:9998; left:0;" v-if="$store.getters.isShowing('sideMenu')"></div>
|
||||||
@include('partials.header')
|
@include('partials.header')
|
||||||
<div class="row no-margin p-b-50">
|
<div class="row no-margin p-b-50">
|
||||||
|
|||||||
@@ -12,12 +12,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row m-b-20">
|
<div class="row m-b-20">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<h3 class="text-white ">Spend less time managing your logistics and more time optimizing your operations.</h3>
|
<h3 class="text-white ">Spend less time managing your delivery and more time optimizing your operations.</h3>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row m-b-20">
|
<div class="row m-b-20">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<h4 class="text-white ">You know how to run your operations, let us help you streamline your logistic supply chain management.</h4>
|
<h4 class="text-white ">You know how to run your operations, let us help you streamline your delivery management.</h4>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row ">
|
<div class="row ">
|
||||||
|
|||||||
@@ -1,16 +1,5 @@
|
|||||||
<div class="row d-none" :class="[{'d-flex': !$store.getters.isAdmin}]" v-if="!$store.getters.isAdmin">
|
<div class="row d-none" :class="[{'d-flex': !$store.getters.isAdmin}]" v-if="!$store.getters.isAdmin">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="row">
|
<delivery-customer-profile-section-component :company_id="$store.getters.getCompanyId"></delivery-customer-profile-section-component>
|
||||||
<div class="col">
|
|
||||||
<div class="row m-b-15" v-show="!$store.getters.isShowing('createOrderFormSection')">
|
|
||||||
<div class="col">
|
|
||||||
<div data-type="createContainer" class="btn btn-sm btn-primary all-caps b-rad-none pointer m-l-5 rounded btn-lg" @click="$store.dispatch('toggleSection', {name: 'createOrderFormSection', status: true})"><i class="fa fa-plus m-r-10"></i>Create Order</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<create-delivery-order-form-component section="deliveryOrderComponent" v-show="$store.getters.isShowing('createOrderFormSection')"></create-delivery-order-form-component>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- <customer-profile-section-component :company_id="$store.getters.getCompanyId"></customer-profile-section-component> -->
|
|
||||||
<p>orders list</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -4,8 +4,8 @@
|
|||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col d-inline d-md-none">
|
<div class="col d-inline d-md-none">
|
||||||
<a href="{{route('dashboard')}}">
|
<a :href="[7,8].includes($store.getters.getCompanyModuleType) ? route('last_mile_delivery.dashboard') : route('dashboard')">
|
||||||
<img src="{{asset('images/cief-izyim-logo.png')}}" style="height: 30px;">
|
<img :src="[7,8].includes($store.getters.getCompanyModuleType) ? '/images/lineclear.png' : '/images/cief-izyim-logo.png'" style="height: 30px;">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
+4
-1
@@ -3,5 +3,8 @@
|
|||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
Route::group(['prefix' => 'delivery', 'namespace' => 'Delivery', 'as' => 'delivery.'], function () {
|
Route::group(['prefix' => 'delivery', 'namespace' => 'Delivery', 'as' => 'delivery.'], function () {
|
||||||
Route::post('/delivery/registration', 'CreateDeliveryCustomerController@create')->name('account.registration.register');
|
Route::post('/signup', 'CreateDeliveryCustomerController@create')->name('account.registration.register');
|
||||||
|
Route::post('/order/create', 'CreateDeliveryOrderController@create')->name('order.create');
|
||||||
|
Route::get('/orders/list', 'ListOrdersController@list')->name('order.list');
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
+15
-6
@@ -31,13 +31,22 @@ Route::get('', function () {
|
|||||||
return view('pages.accounts.login');
|
return view('pages.accounts.login');
|
||||||
})->name('login');
|
})->name('login');
|
||||||
|
|
||||||
Route::get('/delivery', function () {
|
|
||||||
return view('pages.accounts.signup');
|
|
||||||
})->name('signup');
|
|
||||||
|
|
||||||
Route::get('/delivery/dashboard', function () {
|
Route::group(['prefix' => 'last_mile_delivery', 'as' => 'last_mile_delivery.'], function () {
|
||||||
return view('pages.delivery.dashboard');
|
Route::get('/', function () {
|
||||||
})->name('delivery.dashboard');
|
return view('pages.accounts.signup');
|
||||||
|
})->name('login');
|
||||||
|
|
||||||
|
Route::get('/dashboard', function () {
|
||||||
|
return view('pages.delivery.dashboard');
|
||||||
|
})->name('dashboard');
|
||||||
|
|
||||||
|
Route::get('/orders/export', 'Delivery\ExportDeliveryOrdersToExcelController@lineClear')->name('order.export');
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Route::group(['prefix' => 'swagger'], function () {
|
Route::group(['prefix' => 'swagger'], function () {
|
||||||
Route::get('/', function () {
|
Route::get('/', function () {
|
||||||
|
|||||||
Reference in New Issue
Block a user