diff --git a/.gitignore b/.gitignore
index 95d268cf..9b34cbea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,4 +24,5 @@ db/*
docker-compose.yml
package-lock.json
public/*
-/public/*
\ No newline at end of file
+/public/*
+storage/framework/laravel-excel/*
diff --git a/app/Classes/General/Eloquent/AbstractListRecord.php b/app/Classes/General/Eloquent/AbstractListRecord.php
index c5d2e6e6..01e66c29 100644
--- a/app/Classes/General/Eloquent/AbstractListRecord.php
+++ b/app/Classes/General/Eloquent/AbstractListRecord.php
@@ -43,4 +43,4 @@ abstract class AbstractListRecord extends AbstractGetRecord
}
-}
\ No newline at end of file
+}
diff --git a/app/Classes/General/Eloquent/Filters/WithOwner.php b/app/Classes/General/Eloquent/Filters/WithOwner.php
new file mode 100644
index 00000000..7d31691e
--- /dev/null
+++ b/app/Classes/General/Eloquent/Filters/WithOwner.php
@@ -0,0 +1,20 @@
+with('owner');
+ }
+}
\ No newline at end of file
diff --git a/app/Classes/General/Eloquent/Filters/WithPackingLists.php b/app/Classes/General/Eloquent/Filters/WithPackingLists.php
new file mode 100644
index 00000000..927aa526
--- /dev/null
+++ b/app/Classes/General/Eloquent/Filters/WithPackingLists.php
@@ -0,0 +1,20 @@
+with('packingLists');
+ }
+}
\ No newline at end of file
diff --git a/app/Classes/Jobs/CurlContainerListJob.php b/app/Classes/Jobs/CurlContainerListJob.php
index abc93c1a..e65a1a18 100644
--- a/app/Classes/Jobs/CurlContainerListJob.php
+++ b/app/Classes/Jobs/CurlContainerListJob.php
@@ -45,7 +45,7 @@ class CurlContainerListJob implements ShouldQueue
$last_two_month = Carbon::now()->subMonth(2)->format('Y-m-d');
$client = new \GuzzleHttp\Client(['headers' => $headers]);
- $res = $client->post('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', [\GuzzleHttp\RequestOptions::JSON => json_decode('{"controller":"VCustomercontainer","view":"grid1","request":{"PageIndex":' . $this->page . ',"PageSize":10,"PageOffset":0,"SortExpression":"CreatedOn DESC","GroupExpression":"","Filter":["LoadedTime:<=%js%\"' . $last_two_month . 'T00:00:00.000\"\u0000"],"ContextKey":"view1","FilterIsExternal":false,"LookupContextFieldName":null,"LookupContextController":null,"LookupContextView":null,"LookupContext":null,"Inserting":false,"LastCommandName":null,"ExternalFilter":[],"DoesNotRequireData":false,"LastView":"grid1","Tag":null,"RequiresFirstLetters":false,"ViewType":"Grid","SupportsCaching":true,"SystemFilter":null,"RequiresRowCount":true,"QuickFindHint":null,"RequiresPivot":false,"PivotDefinitions":null,"RequiresMetaData":true}}')]);
+ $res = $client->post('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', [\GuzzleHttp\RequestOptions::JSON => json_decode('{"controller":"VCustomercontainer","view":"grid1","request":{"PageIndex":' . $this->page . ',"PageSize":10,"PageOffset":0,"SortExpression":"CreatedOn DESC","GroupExpression":"","Filter":["LoadedTime:<=%js%\"' . $last_two_month . 'T00:00:00.000\"\u0000"],"ContextKey":"view1","FilterIsExternal":false,"LookupContextFieldName":null,"LookupContextController":null,"LookupContextView":null,"LookupContext":null,"Inserting":false,"LastCommandName":null,"ExternalFilter":[],"DoesNotRequireData":false,"LastView":"grid1","Tag":null,"RequiresFirstLetters":false,"ViewType":"Grid","SupportsCaching":true,"SystemFilter":null,"RequiresRowCount":true,"QuickFindHint":null,"RequiresPivot":false,"PivotDefinitions":null,"RequiresMetaData":true}}')]);
$data = json_decode($res->getBody()->getContents());
@@ -63,7 +63,7 @@ class CurlContainerListJob implements ShouldQueue
{
// get latest cookies
$client = new \GuzzleHttp\Client(['cookies' => true]);
- $r = $client->request('GET', 'https://portalvt.azurewebsites.net');
+ $r = $client->request('GET', 'http://portal.vtnation.com.my');
$call_cookie = $client->getConfig('cookies');
$call_cookie = $call_cookie->toArray();
$latest_cookie = [];
@@ -79,7 +79,7 @@ class CurlContainerListJob implements ShouldQueue
'Cookie' => $latest_cookie,
];
$client = new \GuzzleHttp\Client(['headers' => $headers]);
- $res = $client->post('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/Login', [\GuzzleHttp\RequestOptions::JSON => [
+ $res = $client->post('http://portal.vtnation.com.my/Services/DataControllerService.asmx/Login', [\GuzzleHttp\RequestOptions::JSON => [
"username" => "CIEF",
"password" => "0122120880",
"createPersistentCookie" => true,
diff --git a/app/Classes/Modules/Accounts/ControllersLogic/CreateInvitedCustomerLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/CreateInvitedCustomerLogic.php
new file mode 100644
index 00000000..ebd4587e
--- /dev/null
+++ b/app/Classes/Modules/Accounts/ControllersLogic/CreateInvitedCustomerLogic.php
@@ -0,0 +1,105 @@
+ 'Created User',
+ 'message' => 'You have successfully created a new User'
+ ];
+ }
+
+ /** @var CreateUserProcessor */
+ private $createUserProcessor;
+
+ /** @var CreateContactProcessor */
+ private $createContactProcessor;
+
+ /** @var FetchesCompany */
+ private $fetchesCompany;
+
+ /** @var AssignEmployeeProcessor */
+ private $assignEmployeeProcessor;
+
+ /** @var AuthenticationProcessor */
+ private $authenticationProcessor;
+
+
+ /**
+ * CreateInvitedCustomerLogic constructor.
+ * @param CreateUserProcessor $createUserProcessor
+ * @param CreateContactProcessor $createContactProcessor
+ * @param FetchesCompany $fetchesCompany
+ * @param AssignEmployeeProcessor $assignEmployeeProcessor
+ * @param AuthenticationProcessor $authenticationProcessor
+ */
+ public function __construct(CreateUserProcessor $createUserProcessor, CreateContactProcessor $createContactProcessor, FetchesCompany $fetchesCompany, AssignEmployeeProcessor $assignEmployeeProcessor, AuthenticationProcessor $authenticationProcessor)
+ {
+ $this->createUserProcessor = $createUserProcessor;
+ $this->createContactProcessor = $createContactProcessor;
+ $this->fetchesCompany = $fetchesCompany;
+ $this->assignEmployeeProcessor = $assignEmployeeProcessor;
+ $this->authenticationProcessor = $authenticationProcessor;
+ }
+
+ /**
+ * @param Request $request
+ * @return JsonResponse
+ * @throws \App\Classes\Exceptions\AccessForbiddenException
+ * @throws \App\Classes\Exceptions\AccessUnauthorisedException
+ * @throws \App\Classes\Exceptions\MalformedRequestException
+ * @throws \App\Classes\Exceptions\RequestValidationException
+ */
+ public function logic(Request $request): JsonResponse
+ {
+ /** @var Company $company */
+ $company = $this->fetchesCompany->execute(['id' => $request->input('company_id')]);
+
+ /** @var CompanyModule $companyModule */
+ $companyModule = $company->companyModules()->first();
+
+ if($companyModule->employees()->exists()){
+ throw new AccessForbiddenException('This company\'s account has been claimed by another user already!');
+ }
+
+ /** @var User $user */
+ $user = $this->createUserProcessor->execute($request, RoleTypes::USER, !App::environment(['production']) ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION);
+
+ $contactObject = new ContactObject($request->input('name'), $request->input('phone'), $request->input('contact_email'), $request->input('wechat_id'));
+
+ $this->createContactProcessor->execute($contactObject, $company);
+
+ $Object = new EmploymentObject($companyModule, $user);
+
+ $this->assignEmployeeProcessor->execute($Object);
+
+ return $this->response($this->authenticationProcessor->execute($request));
+ }
+}
diff --git a/app/Classes/Modules/Accounts/ControllersLogic/LogoutUserLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/LogoutUserLogic.php
index bfa1f20a..aea1f932 100644
--- a/app/Classes/Modules/Accounts/ControllersLogic/LogoutUserLogic.php
+++ b/app/Classes/Modules/Accounts/ControllersLogic/LogoutUserLogic.php
@@ -37,7 +37,6 @@ class LogoutUserLogic extends AbstractControllerLogic
*/
protected function logic(Request $request): JsonResponse {
- logger("logout");
$this->invalidatesAuthenticationToken->execute();
return $this->response();
diff --git a/app/Classes/Modules/Addresses/DataTransferObjects/AddressObject.php b/app/Classes/Modules/Addresses/DataTransferObjects/AddressObject.php
index 76c66b52..b4453c3a 100644
--- a/app/Classes/Modules/Addresses/DataTransferObjects/AddressObject.php
+++ b/app/Classes/Modules/Addresses/DataTransferObjects/AddressObject.php
@@ -3,6 +3,7 @@
namespace App\Classes\Modules\Addresses\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
+use App\Classes\ValueObjects\Constants\ApprovalStatus;
class AddressObject implements DataTransferObject
{
@@ -38,7 +39,7 @@ class AddressObject implements DataTransferObject
* @param int $postCode
* @param null|string $reference
*/
- public function __construct(string $streetOne, ?string $streetTwo, int $countryId, int $stateId, int $districtId, int $postCode, ?string $reference = null)
+ public function __construct(string $streetOne, ?string $streetTwo, int $countryId, int $stateId, int $districtId, int $postCode, ?string $reference = null, ?int $status = ApprovalStatus::APPROVED)
{
$this->streetOne = $streetOne;
$this->streetTwo = $streetTwo;
@@ -47,6 +48,7 @@ class AddressObject implements DataTransferObject
$this->districtId = $districtId;
$this->postCode = $postCode;
$this->reference = $reference;
+ $this->status = $status;
}
/**
@@ -105,5 +107,13 @@ class AddressObject implements DataTransferObject
return $this->reference;
}
+ /**
+ * @return int
+ */
+ public function getStatus(): int
+ {
+ return $this->status;
+ }
+
}
\ No newline at end of file
diff --git a/app/Classes/Modules/Addresses/Processors/CreateAddressFromOldAddressProcessor.php b/app/Classes/Modules/Addresses/Processors/CreateAddressFromOldAddressProcessor.php
index 7cd04d1f..3e209927 100644
--- a/app/Classes/Modules/Addresses/Processors/CreateAddressFromOldAddressProcessor.php
+++ b/app/Classes/Modules/Addresses/Processors/CreateAddressFromOldAddressProcessor.php
@@ -7,6 +7,7 @@ use App\Classes\Modules\Addresses\Services\CleansOldAddress;
use App\Classes\Modules\Addresses\Services\CreatesAddress;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Models\OldAddress;
+use App\Models\Order;
use Illuminate\Database\Eloquent\Model;
class CreateAddressFromOldAddressProcessor
@@ -44,8 +45,8 @@ class CreateAddressFromOldAddressProcessor
}
- if($address = $addressable->addresses()->where('street_one', $object->getStreetOne())->first()){
- return $address;
+ if(!$addressable instanceof Order && $address = $addressable->addresses()->where('street_one', $object->getStreetOne())->first()) {
+ return $address;
}
return $this->createsAddress->execute($addressable, $object);
diff --git a/app/Classes/Modules/Addresses/Services/CreatesAddress.php b/app/Classes/Modules/Addresses/Services/CreatesAddress.php
index b6662a98..b9f2716c 100644
--- a/app/Classes/Modules/Addresses/Services/CreatesAddress.php
+++ b/app/Classes/Modules/Addresses/Services/CreatesAddress.php
@@ -28,6 +28,7 @@ class CreatesAddress extends AbstractUpdateRelationshipRecord
$model->state_id = $object->getStateId();
$model->district_id = $object->getDistrictId();
$model->postcode = $object->getPostCode();
+ $model->status = $object->getStatus();
return $this->handler($addressable->addresses(), $model);
diff --git a/app/Classes/Modules/Orders/ControllersLogic/ApproveChangeOrderAddressLogic.php b/app/Classes/Modules/Orders/ControllersLogic/ApproveChangeOrderAddressLogic.php
new file mode 100644
index 00000000..0b469fd1
--- /dev/null
+++ b/app/Classes/Modules/Orders/ControllersLogic/ApproveChangeOrderAddressLogic.php
@@ -0,0 +1,44 @@
+ 'Change Order Address Approval',
+ 'message' => 'You have successfully change the order address'
+ ];
+ }
+
+ /** @var ApproveChangeOrderAddressProcessor */
+ private $approveChangeOrderAddressProcessor;
+
+ /**
+ * ApproveChangeOrderAddressLogic constructor.
+ * @param ApproveChangeOrderAddressProcessor $approveChangeOrderAddressProcessor
+ */
+
+ public function __construct(ApproveChangeOrderAddressProcessor $approveChangeOrderAddressProcessor)
+ {
+ $this->approveChangeOrderAddressProcessor = $approveChangeOrderAddressProcessor;
+ }
+
+ public function logic(Request $request): JsonResponse
+ {
+ $address = $this->approveChangeOrderAddressProcessor->execute($request);
+
+ return $this->resourceResponse(new AddressResource($address));
+ }
+}
diff --git a/app/Classes/Modules/Orders/ControllersLogic/RequestChangeOrderAddressLogic.php b/app/Classes/Modules/Orders/ControllersLogic/RequestChangeOrderAddressLogic.php
new file mode 100644
index 00000000..b0c24f0b
--- /dev/null
+++ b/app/Classes/Modules/Orders/ControllersLogic/RequestChangeOrderAddressLogic.php
@@ -0,0 +1,49 @@
+ 'Request To Change Order Address',
+ 'message' => 'You have successfully request to change order address'
+ ];
+ }
+
+ /** @var RequestChangeOrderAddressProcessor */
+ private $requestChangeOrderAddressProcessor;
+
+ /**
+ * RequestChangeOrderAddressLogic constructor.
+ * @param RequestChangeOrderAddressProcessor $requestChangeOrderAddressProcessor
+ */
+
+ public function __construct(RequestChangeOrderAddressProcessor $requestChangeOrderAddressProcessor)
+ {
+ $this->requestChangeOrderAddressProcessor = $requestChangeOrderAddressProcessor;
+ }
+
+ /**
+ * @param Request $request
+ * @return JsonResponse
+ * @throws \App\Classes\Exceptions\MalformedRequestException
+ */
+
+ public function logic(Request $request): JsonResponse
+ {
+ $order = $this->requestChangeOrderAddressProcessor->execute($request);
+
+ return $this->resourceResponse(new OrderResource($order));
+ }
+}
diff --git a/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php b/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php
new file mode 100644
index 00000000..fbd84f90
--- /dev/null
+++ b/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php
@@ -0,0 +1,61 @@
+canApproveChangeOrderAddress = $canApproveChangeOrderAddress;
+ $this->fetchesAddress = $fetchesAddress;
+ $this->updatesOrdersAddress = $updatesOrdersAddress;
+ }
+
+
+ /**
+ * @param Request $request
+ * @return mixed
+ * @throws \App\Classes\Exceptions\AccessForbiddenException
+ * @throws \App\Classes\Exceptions\MalformedRequestException
+ * @throws \App\Classes\Exceptions\RequestValidationException
+ */
+ public function execute(Request $request)
+ {
+
+ $status = (int) $request->route('status');
+
+ $this->canApproveChangeOrderAddress->passes();
+
+ $address = $this->fetchesAddress->execute(['id' => $request->route('id')]);
+
+ if($status === ApprovalStatus::APPROVED){
+ $address->owner->addresses()->update(['status' => ApprovalStatus::EXPIRED]);
+ }
+
+ $this->updatesOrdersAddress->execute($address, $status);
+
+ return $address;
+ }
+}
diff --git a/app/Classes/Modules/Orders/Processors/CreateOrderRolesProcessor.php b/app/Classes/Modules/Orders/Processors/CreateOrderRolesProcessor.php
index 0d4b1860..24495752 100644
--- a/app/Classes/Modules/Orders/Processors/CreateOrderRolesProcessor.php
+++ b/app/Classes/Modules/Orders/Processors/CreateOrderRolesProcessor.php
@@ -79,6 +79,7 @@ class CreateOrderRolesProcessor
$roleObject = new OrderRoleObject($order, $destinationWarehouse, OrderRoleTypes::DESTINATION_WAREHOUSE);
$this->createsOrderRole->execute($roleObject);
+
$roleObject = new OrderRoleObject($order, $freightForwarder, OrderRoleTypes::LAST_MILE_DELIVERY_DRIVER);
$this->createsOrderRole->execute($roleObject);
diff --git a/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php b/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php
new file mode 100644
index 00000000..7f01726b
--- /dev/null
+++ b/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php
@@ -0,0 +1,66 @@
+canChangeOrderAddress = $canChangeOrderAddress;
+ $this->fetchesOrder = $fetchesOrder;
+ $this->createsAddress = $createsAddress;
+ $this->fetchesAddress = $fetchesAddress;
+ $this->deletesAddress = $deletesAddress;
+ }
+
+
+ public function execute(Request $request)
+ {
+
+ $this->canChangeOrderAddress->passes();
+
+ $order = $this->fetchesOrder->execute(['id' => $request->get('order_id')]);
+ foreach ($order->addressesPendingVerification as $address) {
+ $this->deletesAddress->execute($address);
+ }
+
+ $address = $this->fetchesAddress->execute(['id' => $request->get('address_id')]);
+ $addressObject = new AddressObject($address->street_one, $address->street_two, $address->country_id, $address->state_id, $address->district_id, $address->postcode, $address->reference, ApprovalStatus::PENDING_VERIFICATION);
+ $this->createsAddress->execute($order, $addressObject);
+
+ return $order;
+ }
+}
diff --git a/app/Classes/Modules/Orders/Services/FetchesDataFromVTPortal.php b/app/Classes/Modules/Orders/Services/FetchesDataFromVTPortal.php
index 6d77abce..0a6ed2b9 100644
--- a/app/Classes/Modules/Orders/Services/FetchesDataFromVTPortal.php
+++ b/app/Classes/Modules/Orders/Services/FetchesDataFromVTPortal.php
@@ -68,7 +68,7 @@ class FetchesDataFromVTPortal
$latest_cookie = [];
$cookieRequest = new \GuzzleHttp\Client(['cookies' => true]);
- $cookieRequest->get('https://portalvt.azurewebsites.net');
+ $cookieRequest->get('http://portal.vtnation.com.my');
foreach ($cookieRequest->getConfig('cookies')->toArray() as $key => $row) {
$latest_cookie[] = $row['Name'] . '=' . $row['Value'];
}
@@ -77,7 +77,7 @@ class FetchesDataFromVTPortal
/** @var $loginRequest */
- $loginRequest = $this->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/Login', 'POST', [
+ $loginRequest = $this->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/Login', 'POST', [
"username" => "CIEF",
"password" => "0122120880",
"createPersistentCookie" => true,
diff --git a/app/Classes/Modules/Orders/Services/UpdatesOrdersAddress.php b/app/Classes/Modules/Orders/Services/UpdatesOrdersAddress.php
new file mode 100644
index 00000000..352ce64d
--- /dev/null
+++ b/app/Classes/Modules/Orders/Services/UpdatesOrdersAddress.php
@@ -0,0 +1,21 @@
+status = $type;
+ return $this->handler($address);
+ }
+}
diff --git a/app/Classes/Modules/Orders/Standards/Rules/CanApproveChangeOrderAddress.php b/app/Classes/Modules/Orders/Standards/Rules/CanApproveChangeOrderAddress.php
new file mode 100644
index 00000000..24ce6418
--- /dev/null
+++ b/app/Classes/Modules/Orders/Standards/Rules/CanApproveChangeOrderAddress.php
@@ -0,0 +1,39 @@
+ 'Assign Packing List Container',
+ 'message' => 'You have successfully assign Packing List to Container'
+ ];
+ }
+
+ /** @var FetchesContainer */
+ private $fetchesContainer;
+
+ /** @var FetchesPackingList */
+ private $fetchesPackingList;
+
+ /**
+ * DeleteContainerControllersLogic constructor.
+ * @param FetchesContainer $fetchesContainer
+ * @param FetchesPackingList $fetchesPackingList
+ */
+ public function __construct(FetchesContainer $fetchesContainer, FetchesPackingList $fetchesPackingList)
+ {
+ $this->fetchesContainer = $fetchesContainer;
+ $this->fetchesPackingList = $fetchesPackingList;
+ }
+
+
+ /**
+ * @param Request $request
+ * @return JsonResponse
+ * @throws ErrorException
+ */
+ public function logic(Request $request) : JsonResponse
+ {
+ try {
+ $container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
+ $packing_list = $request->input('packing_list_id');
+
+ foreach ($packing_list as $key => $row) {
+ $packing_list_item = $this->fetchesPackingList->execute(['id' => $row]);
+ $container->packingLists()->attach($packing_list_item);
+ }
+
+ return $this->resourceResponse(new ContainerResource($container));
+
+ } catch (\Exception $exception){
+ throw new ErrorException($exception->getMessage(), $exception->getCode());
+ }
+
+ }
+
+}
diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerLogic.php
index cff8cbb6..40376b12 100644
--- a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerLogic.php
+++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerLogic.php
@@ -4,10 +4,12 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic\Containers;
use App\Classes\General\Abstracts\AbstractControllerLogic;
+use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
use App\Classes\Modules\PackingLists\Services\Containers\CreatesContainer;
use App\Classes\Modules\PackingLists\Standards\Rules\Containers\CanCreateContainer;
use App\Classes\Modules\PackingLists\DataTransferObjects\ContainerObject;
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
+
use App\Http\Resources\ContainerResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
@@ -32,13 +34,17 @@ class CreateContainerLogic extends AbstractControllerLogic
/** @var FetchesPackingList */
private $fetchesPackingList;
+ /** @var FetchesCompanyModule */
+ private $fetchesCompanyModule;
+
/** @var CreatesPackingList */
private $createsContainer;
- public function __construct(CanCreateContainer $canCreateContainer, FetchesPackingList $fetchesPackingList, CreatesContainer $createsContainer)
+ public function __construct(CanCreateContainer $canCreateContainer, FetchesPackingList $fetchesPackingList, FetchesCompanyModule $fetchesCompanyModule, CreatesContainer $createsContainer)
{
$this->canCreateContainer = $canCreateContainer;
$this->fetchesPackingList = $fetchesPackingList;
+ $this->fetchesCompanyModule = $fetchesCompanyModule;
$this->createsContainer = $createsContainer;
}
@@ -51,15 +57,21 @@ class CreateContainerLogic extends AbstractControllerLogic
*/
public function logic(Request $request) : JsonResponse
{
+ $object = new ContainerObject(
+ $request->input('container_reference'),
+ $request->input('container_number'),
+ $request->input('seal_reference'),
+ $request->input('container_type'),
+ $request->input('status')
+ );
- $object = new ContainerObject($request->input('container_reference'), $request->input('container_type'), $request->input('seal_reference'));
+ $company = $this->fetchesCompanyModule->execute(['id' => 2]);
$this->canCreateContainer->passes($object);
- $query = $this->createsContainer->execute($object);
+ $query = $this->createsContainer->execute($object, $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]));
return $this->resourceResponse(new ContainerResource($query));
-
}
}
diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/FetchContainerLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/FetchContainerLogic.php
index 8969126c..c8c8548d 100644
--- a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/FetchContainerLogic.php
+++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/FetchContainerLogic.php
@@ -53,7 +53,7 @@ class FetchContainerLogic extends AbstractControllerLogic
$this->canFetchContainer->passes();
- $query = $this->fetchesContainer->execute(['id' => $request->route('id')]);
+ $query = $this->fetchesContainer->execute(['id' => $request->route('id'), 'with_packing_lists' => true]);
return $this->resourceResponse(new ContainerResource($query));
diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/InboundCustomClearedLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/InboundCustomClearedLogic.php
new file mode 100644
index 00000000..1df92ffa
--- /dev/null
+++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/InboundCustomClearedLogic.php
@@ -0,0 +1,66 @@
+ 'Retrieved Containers',
+ 'message' => 'You have successfully retrieved a list of Containers'
+ ];
+ }
+
+ /** @var CanListContainers */
+ private $canListContainers;
+
+ /** @var ListsContainers */
+ private $listsContainers;
+
+ private $fetchInboundCustomCleared;
+
+ /**
+ * ListContainersLogic constructor.
+ * @param CanListContainers $canListContainers
+ * @param ListsContainers $listsContainers
+ */
+ public function __construct(CanListContainers $canListContainers, ListsContainers $listsContainers, FetchInboundCustomClearedProcessor $fetchInboundCustomCleared)
+ {
+ $this->canListContainers = $canListContainers;
+ $this->listsContainers = $listsContainers;
+ $this->fetchInboundCustomCleared = $fetchInboundCustomCleared;
+ }
+
+
+ /**
+ * @param Request $request
+ * @return JsonResponse
+ * @throws ErrorException
+ */
+ public function logic(Request $request) : JsonResponse
+ {
+ //$this->canListOrders->passes();
+
+ //$query = $this->listsOrders->execute(array_merge($this->listsOrders->deserializeFilters($request->input('filters')), ['with_parcels' => true]));
+
+ $d = $this->fetchInboundCustomCleared->execute();
+
+ return response()->json($d);
+
+ }
+}
diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/UpdateContainerLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/UpdateContainerLogic.php
index 3d1516f0..72537db2 100644
--- a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/UpdateContainerLogic.php
+++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/UpdateContainerLogic.php
@@ -58,8 +58,14 @@ class UpdateContainerLogic extends AbstractControllerLogic
{
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
-
- $object = new ContainerObject( $container->packing_list_id , $request->input('container_reference'), $request->input('container_type'), $request->input('seal_reference'));
+
+ $object = new ContainerObject(
+ $request->input('container_reference'),
+ $container->container_number,
+ $request->input('container_type'),
+ $request->input('seal_reference'),
+ $container->status,
+ );
$this->canUpdateContainer->passes($object);
diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/CreatePackingListLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/CreatePackingListLogic.php
index a06a6842..afd8f3d7 100644
--- a/app/Classes/Modules/PackingLists/ControllersLogic/CreatePackingListLogic.php
+++ b/app/Classes/Modules/PackingLists/ControllersLogic/CreatePackingListLogic.php
@@ -5,6 +5,7 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject;
use App\Classes\Modules\PackingLists\Processors\CreatePackingListProcessor;
+use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Classes\Modules\PackingLists\Services\Packages\FetchesPackage;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\General\Abstracts\AbstractControllerLogic;
@@ -13,6 +14,9 @@ use App\Classes\Modules\PackingLists\Services\CreatesPackingListPackage;
use App\Classes\Modules\PackingLists\Standards\Rules\CanCreatePackingList;
use App\Classes\Modules\PackingLists\Standards\Rules\CanCreatePackingListPackage;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
+use App\Classes\ValueObjects\Constants\OrderRoleTypes;
+use App\Classes\ValueObjects\Constants\PackingListType;
+
use App\Http\Resources\PackingListResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -34,13 +38,18 @@ class CreatePackingListLogic extends AbstractControllerLogic
/** @var CreatePackingListProcessor */
private $createPackingListProcessor;
+ /** @var FetchesOrder */
+ private $fetchesOrder;
+
/**
* CreatePackingListLogic constructor.
* @param CreatePackingListProcessor $createPackingListProcessor
+ * @param FetchesOrder $fetchesOrder
*/
- public function __construct(CreatePackingListProcessor $createPackingListProcessor)
+ public function __construct(CreatePackingListProcessor $createPackingListProcessor, FetchesOrder $fetchesOrder)
{
$this->createPackingListProcessor = $createPackingListProcessor;
+ $this->fetchesOrder = $fetchesOrder;
}
/**
@@ -50,11 +59,13 @@ class CreatePackingListLogic extends AbstractControllerLogic
public function logic(Request $request) : JsonResponse
{
- $object = new PackingListObject($request->input('reference_number'), ApprovalStatus::PENDING_SUBMISSION);
+ $order = $this->fetchesOrder->execute(['reference' => $request->input('reference_number')]);
- $query = $this->createPackingListProcessor->execute($object);
+ $packingListObject = new PackingListObject($request->input('reference_number'), $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id, PackingListType::WAREHOUSE_RECEIVE_LIST, ApprovalStatus::PENDING_SUBMISSION);
- return $this->resourceResponse(new PackingListResource($query));
+ $packingList = $this->createPackingListProcessor->execute($packingListObject, $order);
+
+ return $this->resourceResponse(new PackingListResource($packingList));
}
diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Packages/CreatePackageLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Packages/CreatePackageLogic.php
index c9eebc15..80a5ee5d 100644
--- a/app/Classes/Modules/PackingLists/ControllersLogic/Packages/CreatePackageLogic.php
+++ b/app/Classes/Modules/PackingLists/ControllersLogic/Packages/CreatePackageLogic.php
@@ -12,6 +12,7 @@ use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Http\Resources\PackageResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
+use App\Classes\ValueObjects\Constants\PackageType;
class CreatePackageLogic extends AbstractControllerLogic
{
@@ -61,23 +62,23 @@ class CreatePackageLogic extends AbstractControllerLogic
*/
public function logic(Request $request) : JsonResponse
{
-
+
$order = $this->fetchesOrder->execute(['id' => $request->input('order_id')]);
$object = new PackageObject(
- null,
$request->input('type'),
$request->input('description'),
$request->input('width'),
$request->input('height'),
$request->input('length'),
$request->input('weight'),
+ 0,
$request->input('quantity'),
ApprovalStatus::PENDING_VERIFICATION);
$this->canCreatePackage->passes($object);
- $query = $this->createsPackage->execute($object);
+ $query = $this->createsPackage->execute($object, $order->packingLists()->first());
return $this->resourceResponse(new PackageResource($query));
diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Packages/FetchPackageLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Packages/FetchPackageLogic.php
index d2e8be81..0dcb6b07 100644
--- a/app/Classes/Modules/PackingLists/ControllersLogic/Packages/FetchPackageLogic.php
+++ b/app/Classes/Modules/PackingLists/ControllersLogic/Packages/FetchPackageLogic.php
@@ -4,8 +4,8 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic\Packages;
use App\Classes\General\Abstracts\AbstractControllerLogic;
-use App\Classes\Modules\Packages\Services\FetchesPackage;
-use App\Classes\Modules\Packages\Standards\Rules\CanFetchPackage;
+use App\Classes\Modules\PackingLists\Services\Packages\FetchesPackage;
+use App\Classes\Modules\PackingLists\Standards\Rules\Packages\CanFetchPackage;
use App\Http\Resources\PackageResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Packages/ListPackagesLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Packages/ListPackagesLogic.php
index 48aee051..80d73e5b 100644
--- a/app/Classes/Modules/PackingLists/ControllersLogic/Packages/ListPackagesLogic.php
+++ b/app/Classes/Modules/PackingLists/ControllersLogic/Packages/ListPackagesLogic.php
@@ -4,8 +4,8 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic\Packages;
use App\Classes\General\Abstracts\AbstractControllerLogic;
-use App\Classes\Modules\Packages\Services\ListsPackages;
-use App\Classes\Modules\Packages\Standards\Rules\CanListPackages;
+use App\Classes\Modules\PackingLists\Services\Packages\ListsPackages;
+use App\Classes\Modules\PackingLists\Standards\Rules\Packages\CanListPackages;
use App\Http\Resources\PackageResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Packages/SwitchPackagePackingListLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Packages/SwitchPackagePackingListLogic.php
new file mode 100644
index 00000000..cdbc7917
--- /dev/null
+++ b/app/Classes/Modules/PackingLists/ControllersLogic/Packages/SwitchPackagePackingListLogic.php
@@ -0,0 +1,68 @@
+ 'Switched Package Packing List',
+ 'message' => 'You have successfully switched the Package Packing List'
+ ];
+ }
+
+ /** @var SwitchesPackagePackingList */
+ private $switchesPackagePackingList;
+
+ /** @var FetchesPackage */
+ private $fetchesPackage;
+
+ /** @var FetchesPackingList */
+ private $fetchesPackingList;
+
+ /**
+ * UpdatePackageLogic constructor.
+ * @param SwitchesPackagePackingList $switchesPackagePackingList
+ * @param FetchesPackage $fetchesPackage
+ * @param FetchesPackingList $fetchesPackingList
+ */
+ public function __construct(SwitchesPackagePackingList $switchesPackagePackingList, FetchesPackage $fetchesPackage, FetchesPackingList $fetchesPackingList)
+ {
+ $this->switchesPackagePackingList = $switchesPackagePackingList;
+ $this->fetchesPackage = $fetchesPackage;
+ $this->fetchesPackingList = $fetchesPackingList;
+ }
+
+
+ /**
+ * @param Request $request
+ * @return JsonResponse
+ * @throws ErrorException
+ */
+ public function logic(Request $request) : JsonResponse
+ {
+ $package = $this->fetchesPackage->execute(['id' => $request->route('id')]);
+
+ $packing_list = $this->fetchesPackingList->execute(['id' => $request->input('packing_list_id')]);
+
+ $query = $this->switchesPackagePackingList->execute($package, $packing_list);
+
+ return $this->resourceResponse(new PackageResource($query));
+ }
+
+}
diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Packages/UpdatePackageLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Packages/UpdatePackageLogic.php
index b96e6933..6b25e3a5 100644
--- a/app/Classes/Modules/PackingLists/ControllersLogic/Packages/UpdatePackageLogic.php
+++ b/app/Classes/Modules/PackingLists/ControllersLogic/Packages/UpdatePackageLogic.php
@@ -4,10 +4,10 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic\Packages;
use App\Classes\General\Abstracts\AbstractControllerLogic;
-use App\Classes\Modules\Packages\Services\UpdatesPackage;
-use App\Classes\Modules\Packages\Services\FetchesPackage;
-use App\Classes\Modules\Packages\Standards\Rules\CanUpdatePackage;
-use App\Classes\Modules\Packages\DataTransferObjects\PackageObject;
+use App\Classes\Modules\PackingLists\Services\Packages\UpdatesPackage;
+use App\Classes\Modules\PackingLists\Services\Packages\FetchesPackage;
+use App\Classes\Modules\PackingLists\Standards\Rules\Packages\CanUpdatePackage;
+use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject;
use App\Http\Resources\PackageResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
@@ -60,8 +60,6 @@ class UpdatePackageLogic extends AbstractControllerLogic
$package = $this->fetchesPackage->execute(['id' => $request->route('id')]);
$object = new PackageObject(
- $package->order_id,
- null,
$request->input('type'),
$request->input('description'),
$request->input('width'),
@@ -69,7 +67,9 @@ class UpdatePackageLogic extends AbstractControllerLogic
$request->input('length'),
$request->input('weight'),
$request->input('quantity'),
- $request->input('status'));
+ $request->input('status'),
+ $package->reference
+ );
$this->canUpdatePackage->passes($object);
diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListLogic.php
index 926b9873..7f5232dc 100644
--- a/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListLogic.php
+++ b/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListLogic.php
@@ -57,7 +57,7 @@ class UpdatePackingListLogic extends AbstractControllerLogic
{
$packingList = $this->fetchesPackingList->execute(['id' => $request->route('id')]);
- $object = new PackingListObject($packingList->reference, $request->input('status'));
+ $object = new PackingListObject($packingList->reference, $packingList->claimant_id, $packingList->type, $request->input('status'));
$this->canUpdatePackingList->passes($object);
diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php
new file mode 100644
index 00000000..67a1733c
--- /dev/null
+++ b/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php
@@ -0,0 +1,62 @@
+ 'Updated PackingList Status',
+ 'message' => 'You have successfully updated the PackingList status'
+ ];
+ }
+
+
+ /** @var FetchesPackingList */
+ private $fetchesPackingList;
+
+ /** @var UpdatesPackingListStatus */
+ private $updatesPackingListStatus;
+
+ /**
+ * UpdatePackingListStatusLogic constructor.
+ * @param FetchesPackingList $fetchesPackingList
+ * @param UpdatesPackingListStatus $updatesPackingListStatus
+ */
+ public function __construct(FetchesPackingList $fetchesPackingList, UpdatesPackingListStatus $updatesPackingListStatus)
+ {
+ $this->fetchesPackingList = $fetchesPackingList;
+ $this->updatesPackingListStatus = $updatesPackingListStatus;
+ }
+
+ /**
+ * @param Request $request
+ * @return JsonResponse
+ * @throws \App\Classes\Exceptions\MalformedRequestException
+ */
+ public function logic(Request $request) : JsonResponse
+ {
+ $packingList = $this->fetchesPackingList->execute(['id' => $request->route('id')]);
+
+ $query = $this->updatesPackingListStatus->execute($packingList, $request->route('status'));
+
+ return $this->resourceResponse(new PackingListResource($query));
+ }
+
+}
diff --git a/app/Classes/Modules/PackingLists/DataTransferObjects/ContainerObject.php b/app/Classes/Modules/PackingLists/DataTransferObjects/ContainerObject.php
index 92b0effa..3924102c 100644
--- a/app/Classes/Modules/PackingLists/DataTransferObjects/ContainerObject.php
+++ b/app/Classes/Modules/PackingLists/DataTransferObjects/ContainerObject.php
@@ -14,7 +14,7 @@ class ContainerObject implements DataTransferObject
private $containerNumber;
/** @var string */
- private $sealNumber;
+ private $sealReference;
/** @var int */
private $containerType;
@@ -26,15 +26,15 @@ class ContainerObject implements DataTransferObject
* ContainerObject constructor.
* @param string $reference
* @param string $containerNumber
- * @param string $sealNumber
+ * @param string $sealReference
* @param int $containerType
* @param int $status
*/
- public function __construct(string $reference, string $containerNumber, string $sealNumber, int $containerType, int $status)
+ public function __construct(string $reference, string $containerNumber, string $sealReference, int $containerType, int $status)
{
$this->reference = $reference;
$this->containerNumber = $containerNumber;
- $this->sealNumber = $sealNumber;
+ $this->sealReference = $sealReference;
$this->containerType = $containerType;
$this->status = $status;
}
@@ -58,9 +58,9 @@ class ContainerObject implements DataTransferObject
/**
* @return string
*/
- public function getSealNumber(): string
+ public function getSealReference(): string
{
- return $this->sealNumber;
+ return $this->sealReference;
}
/**
diff --git a/app/Classes/Modules/PackingLists/Processors/FetchContainersStatusUpdateFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchContainersStatusUpdateFromVTPortalProcessor.php
index a50bbfdf..955d68d0 100644
--- a/app/Classes/Modules/PackingLists/Processors/FetchContainersStatusUpdateFromVTPortalProcessor.php
+++ b/app/Classes/Modules/PackingLists/Processors/FetchContainersStatusUpdateFromVTPortalProcessor.php
@@ -65,7 +65,6 @@ class FetchContainersStatusUpdateFromVTPortalProcessor
/**
* @return array
- * @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(){
@@ -77,7 +76,7 @@ class FetchContainersStatusUpdateFromVTPortalProcessor
try {
$filter = '["RefNo:=%js%\"'.$container->reference.'\"\u0000"]';
- $containerDetailsRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VCustomercontainer","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"ModifiedOn DESC","Filter":'.$filter.'}}'), '');
+ $containerDetailsRequest = $this->fetchesDataFRomVTPortal->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VCustomercontainer","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"CreatedOn asc","Filter":'.$filter.'}}'), '');
$containerDetails = $this->fetchesDataFRomVTPortal->getResponseBody($containerDetailsRequest);
@@ -89,6 +88,8 @@ class FetchContainersStatusUpdateFromVTPortalProcessor
$eta = Carbon::parse($eta);
+ $etd = Carbon::parse($eta)->subDays(5);
+
$delayDate = $containerDetails[6];
$containerStatus = $containerDetails[9];
@@ -98,31 +99,37 @@ class FetchContainersStatusUpdateFromVTPortalProcessor
$transport = $container->transports()->first();
if(!$transport){
- $transportObject = new TransportObject(TransportType::SEA, null, null, $eta, null, ApprovalStatus::APPROVED);
+ $transportObject = new TransportObject(TransportType::SEA, null, null, $etd, null, ApprovalStatus::APPROVED);
/** @var Transport $transport */
$transport = $this->createsTransport->execute($transportObject, $container);
- $this->createsSchedule->execute($transport, new ScheduleObject($eta->subDays(5), $eta, ApprovalStatus::APPROVED));
+ $this->createsSchedule->execute($transport, new ScheduleObject($etd, $eta, ApprovalStatus::APPROVED));
}
if($delayDate){
+
$delayDate = Carbon::parse($delayDate);
$transport = $container->transports()->first();
- $schedule = $transport->schedules()->where('eta', '=', $delayDate)->first();
- $etd = $delayDate->subDays(5);
- if(!$schedule){
- $etd = $schedule->etd;
+
+ if(!$transport->schedules()->where('eta', '=', $delayDate)->first()) {
+ $etd = $transport->schedules()->where('status', '=', ApprovalStatus::APPROVED)->first()->etd;
$transport->schedules()->update(['status' => ApprovalStatus::EXPIRED]);
+ $this->createsSchedule->execute($transport, new ScheduleObject($etd, $delayDate, ApprovalStatus::APPROVED));
}
- $this->createsSchedule->execute($transport, new ScheduleObject($etd, $delayDate, ApprovalStatus::APPROVED));
}
if($containerStatus === 'Unstuffing'){
$container->update(['status' => ApprovalStatus::COMPLETED]);
$container->transports()->first()->update(['drop_date' => Carbon::parse($unstuffingDate)->subDay(), 'status' => ApprovalStatus::COMPLETED]);
- $container->packingLists()->update(['status' => ApprovalStatus::APPROVED]);
+
/** @var PackingList $packingList */
foreach($container->packingLists as $packingList){
+
+ if($packingList->status === ApprovalStatus::PENDING_VERIFICATION){
+ $packingList->status = ApprovalStatus::APPROVED;
+ $packingList->save();
+ }
+
$signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture;
foreach($packingList->steps()->where('reference', '!=', 'DELIVERY')->get() as $step){
$this->updatesContractObligations->execute($signature, $step->obligation_hash_id);
diff --git a/app/Classes/Modules/PackingLists/Processors/FetchDeliveryListFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchDeliveryListFromVTPortalProcessor.php
index 6714472b..3a9ebdea 100644
--- a/app/Classes/Modules/PackingLists/Processors/FetchDeliveryListFromVTPortalProcessor.php
+++ b/app/Classes/Modules/PackingLists/Processors/FetchDeliveryListFromVTPortalProcessor.php
@@ -3,8 +3,6 @@
namespace App\Classes\Modules\PackingLists\Processors;
use App\Classes\Modules\Orders\Services\FetchesDataFromVTPortal;
-use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject;
-use App\Classes\Modules\PackingLists\Services\ListsPackingLists;
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
use App\Classes\Modules\Schedules\Services\CreatesSchedule;
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
@@ -12,7 +10,6 @@ use App\Classes\Modules\Transports\Services\CreatesTransport;
use App\Classes\Modules\Unity\Services\UpdatesContractObligation;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
-use App\Classes\ValueObjects\Constants\PackageType;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Classes\ValueObjects\Constants\TransportType;
use App\Models\PackingList;
@@ -58,36 +55,37 @@ class FetchDeliveryListFromVTPortalProcessor
public function execute(){
try {
- $packingLists = PackingList::where('type', '=', PackingListType::SHIPPING_PACKING_LIST)->where('status', '=', ApprovalStatus::APPROVED)->get();
+ $packingLists = PackingList::where('type', '=', PackingListType::SHIPPING_PACKING_LIST)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::SUSPENDED])->get();
/** @var PackingList $packingList */
foreach($packingLists as $packingList){
try {
$filter = '["PoNumber:=%js%\"'.$packingList->reference.'\"\u0000"]';
- $shippingPackingListsRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VPodetailparcel","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"ModifiedOn DESC","Filter":'.$filter.'}}'), '');
+ $shippingPackingListsRequest = $this->fetchesDataFRomVTPortal->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VPodetailparcel","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"CreatedOn asc","Filter":'.$filter.'}}'), '');
$shippingPackingLists = $this->fetchesDataFRomVTPortal->getResponseBody($shippingPackingListsRequest);
- foreach($shippingPackingLists->Rows as $shippingPackingList){
- if(!$shippingPackingList[9] && !$shippingPackingList[10]) {
- continue;
- }
-
- $deliveryDate = Carbon::parse($shippingPackingList[9] ? $shippingPackingList[9]:$shippingPackingList[10]);
- $transportObject = new TransportObject(TransportType::LAND, null, null, $deliveryDate, $deliveryDate, ApprovalStatus::APPROVED);
- /** @var Transport $transport */
- $transport = $this->createsTransport->execute($transportObject, $packingList);
- $this->createsSchedule->execute($transport, new ScheduleObject($deliveryDate, $deliveryDate, ApprovalStatus::APPROVED));
-
- $deliveryStep = $packingList->steps()->where('reference', '=', 'LAST_MILE_DELIVERY')->first();
- $signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture;
- $this->updatesContractObligations->execute($signature, $deliveryStep->obligation_hash_id);
- $deliveryStep->update(['status' => ApprovalStatus::COMPLETED]);
-
+ $shippingPackingList = $shippingPackingLists->Rows[0];
+ if(!$shippingPackingList[9] && !$shippingPackingList[10]) {
+ continue;
}
+ $packingList->status = ApprovalStatus::COMPLETED;
+ $packingList->save();
+
+ $deliveryDate = Carbon::parse($shippingPackingList[9] ? $shippingPackingList[9]:$shippingPackingList[10]);
+ $transportObject = new TransportObject(TransportType::LAND, null, null, $deliveryDate, $deliveryDate, ApprovalStatus::APPROVED);
+ /** @var Transport $transport */
+ $transport = $this->createsTransport->execute($transportObject, $packingList);
+ $this->createsSchedule->execute($transport, new ScheduleObject($deliveryDate, $deliveryDate, ApprovalStatus::APPROVED));
+
+ $deliveryStep = $packingList->steps()->where('reference', '=', 'LAST_MILE_DELIVERY')->first();
+ $signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture;
+ $this->updatesContractObligations->execute($signature, $deliveryStep->obligation_hash_id);
+ $deliveryStep->update(['status' => ApprovalStatus::COMPLETED]);
+
} catch (GuzzleException $exception) {
continue;
}
diff --git a/app/Classes/Modules/PackingLists/Processors/FetchInboundCustomClearedProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchInboundCustomClearedProcessor.php
new file mode 100644
index 00000000..b4ea6395
--- /dev/null
+++ b/app/Classes/Modules/PackingLists/Processors/FetchInboundCustomClearedProcessor.php
@@ -0,0 +1,105 @@
+fetchesDataFRomVTPortal = $fetchesDataFRomVTPortal;
+ $this->createsTransport = $createsTransport;
+ $this->createsSchedule = $createsSchedule;
+ $this->updatesContractObligations = $updatesContractObligations;
+ }
+
+
+ /**
+ * @return array
+ */
+ public function execute(){
+
+ $packingLists = PackingList::query()->with(['steps' => function ($query) {
+ $query->where('steps.status', '<>', 3);
+ }])->first();
+ dd($packingLists);
+ /*
+ $packingLists = PackingList::where('type', '=', PackingListType::SHIPPING_PACKING_LIST)
+ ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::SUSPENDED])->get();
+
+ foreach($packingLists as $packingList){
+ try {
+ $filter = '["PoNumber:=%js%\"'.$packingList->reference.'\"\u0000"]';
+
+ $shippingPackingListsRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VPodetailparcel","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"CreatedOn asc","Filter":'.$filter.'}}'), '');
+
+ $shippingPackingLists = $this->fetchesDataFRomVTPortal->getResponseBody($shippingPackingListsRequest);
+
+ $shippingPackingList = $shippingPackingLists->Rows[0];
+
+ if(!$shippingPackingList[9] && !$shippingPackingList[10]) {
+ continue;
+ }
+
+ $packingList->status = ApprovalStatus::COMPLETED;
+ $packingList->save();
+
+ $deliveryDate = Carbon::parse($shippingPackingList[9] ? $shippingPackingList[9]:$shippingPackingList[10]);
+ $transportObject = new TransportObject(TransportType::LAND, null, null, $deliveryDate, $deliveryDate, ApprovalStatus::APPROVED);
+ $transport = $this->createsTransport->execute($transportObject, $packingList);
+ $this->createsSchedule->execute($transport, new ScheduleObject($deliveryDate, $deliveryDate, ApprovalStatus::APPROVED));
+
+ $deliveryStep = $packingList->steps()->where('reference', '=', 'LAST_MILE_DELIVERY')->first();
+ $signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture;
+ $this->updatesContractObligations->execute($signature, $deliveryStep->obligation_hash_id);
+ $deliveryStep->update(['status' => ApprovalStatus::COMPLETED]);
+
+ } catch (GuzzleException $exception) {
+ continue;
+ }
+
+ }*/
+
+
+ return [];
+
+ }
+
+
+}
diff --git a/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php
index 2776124d..23dc50ad 100644
--- a/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php
+++ b/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php
@@ -137,14 +137,14 @@ class FetchLoadedContainersFromVTPortalProcessor
$end = $end ? $end : Carbon::now();
$filter = '["LoadedTime:$between$%js%\"'.$start->format('Y-m-d').'T00:00:00.000\"$and$%js%\"'.$end->format('Y-m-d').'T00:00:00.000\"\u0000"]';
- $containersRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VCustomercontainer","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"ModifiedOn DESC","Filter":'.$filter.'}}'), '');
+ $containersRequest = $this->fetchesDataFRomVTPortal->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VCustomercontainer","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"LoadedTime asc","Filter":'.$filter.'}}'), '');
$containers = $this->fetchesDataFRomVTPortal->getResponseBody($containersRequest);
foreach ($containers->Rows as $container){
$filter = '["ContainerID:=%js%'.$container[11].'"]';
- $containerDetailRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VPodetailparcel","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"ModifiedOn DESC","Filter":'.$filter.'}}'), '');
+ $containerDetailRequest = $this->fetchesDataFRomVTPortal->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VPodetailparcel","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"CreatedOn asc","Filter":'.$filter.'}}'), '');
$containerDetail = $this->fetchesDataFRomVTPortal->getResponseBody($containerDetailRequest);
@@ -199,7 +199,10 @@ class FetchLoadedContainersFromVTPortalProcessor
$this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations);
- $packingListObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::SHIPPING_PACKING_LIST, ApprovalStatus::PENDING_VERIFICATION, $contractReference);
+ $connection = $order->companyModule->connections()->first();
+ $marking = $connection->invitee_reference;
+
+ $packingListObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::SHIPPING_PACKING_LIST, (int) filter_var($marking, FILTER_SANITIZE_NUMBER_INT) <= 1000 ? ApprovalStatus::PENDING_VERIFICATION : ApprovalStatus::SUSPENDED, $contractReference);
/** @var PackingList $packingList */
$packingList = $this->createPackingListProcessor->execute($packingListObject, $order);
diff --git a/app/Classes/Modules/PackingLists/Processors/FetchPackingListFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchPackingListFromVTPortalProcessor.php
index 715c61ba..00c3e112 100644
--- a/app/Classes/Modules/PackingLists/Processors/FetchPackingListFromVTPortalProcessor.php
+++ b/app/Classes/Modules/PackingLists/Processors/FetchPackingListFromVTPortalProcessor.php
@@ -46,7 +46,9 @@ class FetchPackingListFromVTPortalProcessor
*/
public function execute(){
- $packingLists = PackingList::where('type', '=', PackingListType::SHIPPING_PACKING_LIST)->where('status', '=', ApprovalStatus::PENDING_VERIFICATION)->get();
+ $packingLists = PackingList::where('type', '=', PackingListType::SHIPPING_PACKING_LIST)->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::SUSPENDED])->whereDoesntHave('containers', function($query){
+ $query->where('status', '=', ApprovalStatus::COMPLETED);
+ })->get();
foreach($packingLists as $packingList){
@@ -55,7 +57,7 @@ class FetchPackingListFromVTPortalProcessor
$filter = '["PoNumber:=%js%\"'.$packingList->reference.'\"\u0000"]';
- $shippingPackingListsRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VPodetailparcel","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"ModifiedOn DESC","Filter":'.$filter.'}}'), '');
+ $shippingPackingListsRequest = $this->fetchesDataFRomVTPortal->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VPodetailparcel","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"CreatedOn asc","Filter":'.$filter.'}}'), '');
$shippingPackingLists = $this->fetchesDataFRomVTPortal->getResponseBody($shippingPackingListsRequest);
diff --git a/app/Classes/Modules/PackingLists/Processors/FetchPackingListProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchPackingListProcessor.php
new file mode 100644
index 00000000..508e2293
--- /dev/null
+++ b/app/Classes/Modules/PackingLists/Processors/FetchPackingListProcessor.php
@@ -0,0 +1,64 @@
+listsPackingLists = $listsPackingLists;
+ }
+
+ /**
+ * @return array
+ * @throws \App\Classes\Exceptions\AccessForbiddenException
+ * @throws \App\Classes\Exceptions\RequestValidationException
+ */
+ public function execute($params){
+
+ $packingLists = PackingList::where('type', '=', PackingListType::SHIPPING_PACKING_LIST)
+ ->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::SUSPENDED])
+ ->whereDoesntHave('containers', function($query){
+ $query->where('status', '=', ApprovalStatus::COMPLETED);
+ })->orderBy('created_at','desc')->where('owner_id',$params['orderId'])->get();
+
+ //dd($packingLists);
+ $packingListsArray=[];
+ foreach($packingLists as $packingList){
+
+ $address = $packingList->owner->addresses()->first();
+ $packingList->fulladdress = $address->street_one.', '.$address->street_two.', '.$address->district->name.', '.$address->post_code.' '.$address->state->name.', '.$address->country->name;
+
+ $container = $packingList->containers()->first();
+ $packingList->container_reference = $container->reference;
+ $packingList->container_number = $container->container_number;
+
+ $packingListsArray[]=$packingList;
+
+ }
+
+ return $packingListsArray;
+
+ }
+
+
+}
diff --git a/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php
index 862fdb60..d1eb8516 100644
--- a/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php
+++ b/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php
@@ -125,13 +125,15 @@ class FetchWarehouseReceiveListFromVTPortalProcessor
}
$end = $end ? $end : Carbon::now();
+
$filter = '["ParcelDate:$between$%js%\"'.$start->format('Y-m-d').'T00:00:00.000\"$and$%js%\"'.$end->format('Y-m-d').'T00:00:00.000\"\u0000"]';
- $warehouseListRequest = $this->fetchesDataFRomVTPortal->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"WarehouseList","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"ModifiedOn DESC","Filter":'.$filter.'}}'), '');
+ $warehouseListRequest = $this->fetchesDataFRomVTPortal->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"WarehouseList","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"ParcelDate asc","Filter":'.$filter.'}}'), '');
$response = $this->fetchesDataFRomVTPortal->getResponseBody($warehouseListRequest);
foreach ($response->Rows as $parcel){
+
$marking = explode('/', explode('CIEF/', $parcel[5])[1]);
if(!array_key_exists(1, $marking)){
@@ -144,6 +146,7 @@ class FetchWarehouseReceiveListFromVTPortalProcessor
continue;
}
+
try {
$order = $this->fetchesOrder->execute(['reference' => $orderNumber]);
} catch (ResourceNotFoundException $exception) {
@@ -154,13 +157,16 @@ class FetchWarehouseReceiveListFromVTPortalProcessor
continue;
}
- $customerMarking = str_replace(' ', '', str_replace('/', '', str_replace('CIEF/', '', $oldOrder->company->marking)));
+
+ $customerMarking = str_replace('/', '', str_replace(' ', '', explode('CIEF/', $oldOrder->company->marking)[1]));
$companyModule = CompanyModule::whereHas('inviters', function($query) use ($customerMarking) {
return $query->where('invitee_reference', '=', $customerMarking);
})->first();
- if(!$companyModule) {
+
+ if(!$companyModule){
+ log::error('unknown customer: '.$customerMarking);
continue;
}
@@ -180,6 +186,10 @@ class FetchWarehouseReceiveListFromVTPortalProcessor
$originWarehouse = $this->fetchesCompanyModule->execute(['id' => $warehouseId === 11 ? 3 : 4]);
$order = $this->createOrderProcessor->execute($companyModule->company, $originWarehouse, $address, $orderNumber);
+
+ $order->created_at = Carbon::parse($parcel[1]);
+ $order->save();
+
}
$packingListReference = $parcel[17];
@@ -217,13 +227,13 @@ class FetchWarehouseReceiveListFromVTPortalProcessor
}
- return [];
+
} catch (\Exception $exception){
Log::error($exception->getMessage());
}
DB::commit();
-
+ return [];
}
diff --git a/app/Classes/Modules/PackingLists/Services/Containers/CreatesContainer.php b/app/Classes/Modules/PackingLists/Services/Containers/CreatesContainer.php
index d8d733b2..eb8ff4e0 100644
--- a/app/Classes/Modules/PackingLists/Services/Containers/CreatesContainer.php
+++ b/app/Classes/Modules/PackingLists/Services/Containers/CreatesContainer.php
@@ -22,7 +22,7 @@ class CreatesContainer extends AbstractUpdateRelationshipRecord
$model->reference = $object->getReference();
$model->container_number = $object->getContainerNumber();
$model->container_type = $object->getContainerType();
- $model->seal_reference = $object->getSealNumber();
+ $model->seal_reference = $object->getSealReference();
$model->status = $object->getStatus();
return $this->handler($owner->containers(), $model);
diff --git a/app/Classes/Modules/PackingLists/Services/Containers/UpdatesContainer.php b/app/Classes/Modules/PackingLists/Services/Containers/UpdatesContainer.php
index c3f6f1a4..d10102e1 100644
--- a/app/Classes/Modules/PackingLists/Services/Containers/UpdatesContainer.php
+++ b/app/Classes/Modules/PackingLists/Services/Containers/UpdatesContainer.php
@@ -17,7 +17,7 @@ class UpdatesContainer extends AbstractUpdateRecord
*/
public function execute(Container $model, ContainerObject $object) {
- $model->container_reference = $object->getContainerReference();
+ $model->reference = $object->getReference();
$model->container_type = $object->getContainerType();
$model->seal_reference = $object->getSealReference();
diff --git a/app/Classes/Modules/PackingLists/Services/Packages/SwitchesPackagePackingList.php b/app/Classes/Modules/PackingLists/Services/Packages/SwitchesPackagePackingList.php
new file mode 100644
index 00000000..9abedc0b
--- /dev/null
+++ b/app/Classes/Modules/PackingLists/Services/Packages/SwitchesPackagePackingList.php
@@ -0,0 +1,25 @@
+packing_list_id = $packing_list->id;
+
+ return $this->handler($model);
+
+ }
+}
diff --git a/app/Classes/Modules/PackingLists/Services/Packages/UpdatesPackage.php b/app/Classes/Modules/PackingLists/Services/Packages/UpdatesPackage.php
index 9cb265fd..b1903eb5 100644
--- a/app/Classes/Modules/PackingLists/Services/Packages/UpdatesPackage.php
+++ b/app/Classes/Modules/PackingLists/Services/Packages/UpdatesPackage.php
@@ -10,7 +10,6 @@ class UpdatesPackage extends AbstractUpdateRecord
{
public function execute(Package $model, PackageObject $object) {
- $model->claimant_id = $object->getClaimantId();
$model->type = $object->getType();
$model->description = $object->getDescription();
$model->width = $object->getWidth();
diff --git a/app/Classes/Modules/PackingLists/Services/UpdatesPackingListStatus.php b/app/Classes/Modules/PackingLists/Services/UpdatesPackingListStatus.php
new file mode 100644
index 00000000..e25b550f
--- /dev/null
+++ b/app/Classes/Modules/PackingLists/Services/UpdatesPackingListStatus.php
@@ -0,0 +1,24 @@
+status = $status;
+
+ return $this->handler($model);
+
+ }
+}
diff --git a/app/Classes/Modules/Reports/ControllersLogic/CustomcClearanceLogic.php b/app/Classes/Modules/Reports/ControllersLogic/CustomcClearanceLogic.php
new file mode 100644
index 00000000..c7fa2c0d
--- /dev/null
+++ b/app/Classes/Modules/Reports/ControllersLogic/CustomcClearanceLogic.php
@@ -0,0 +1,39 @@
+listsPackingListProcessor = $listsPackingListProcessor;
+ }
+
+ protected function notification():array {
+ return [];
+ }
+
+ public function logic(Request $request) : JsonResponse
+ {
+ $params = $request->all();
+ $packingLists = $this->listsPackingListProcessor->execute($params);
+ $excelExportLogic = new ExportExcelLogic(collect($packingLists));
+ $this->excelExportLogic = $excelExportLogic;
+
+ return response()->json(['success' => true]);
+ }
+
+ public function getExcelCollection(){
+ return $this->excelExportLogic;
+ }
+}
diff --git a/app/Classes/Modules/Reports/ControllersLogic/ExportExcelLogic.php b/app/Classes/Modules/Reports/ControllersLogic/ExportExcelLogic.php
new file mode 100644
index 00000000..c1d332a5
--- /dev/null
+++ b/app/Classes/Modules/Reports/ControllersLogic/ExportExcelLogic.php
@@ -0,0 +1,50 @@
+data=$data;
+ }
+ public function collection()
+ {
+ return $this->data;
+ }
+ public function map($order): array
+ {
+ return [
+ (string)$order->reference,
+ (string)$order->container_number,
+ (string)$order->fulladdress,
+ (string)$order->created_at,
+ "ssxxx"
+ ];
+ }
+
+ public function columnFormats(): array
+ {
+ return [
+ 'A'=>'@',
+ 'B' => NumberFormat::FORMAT_DATE_DDMMYYYY,
+
+ ];
+ }
+
+ public function headings(): array
+ {
+ return ["Reference", "Container", "Address", "Created", "Status"];
+ }
+
+}
diff --git a/app/Classes/Modules/Schedules/ControllersLogic/CreateScheduleLogic.php b/app/Classes/Modules/Schedules/ControllersLogic/CreateScheduleLogic.php
index 5bf9c7e9..aecff745 100644
--- a/app/Classes/Modules/Schedules/ControllersLogic/CreateScheduleLogic.php
+++ b/app/Classes/Modules/Schedules/ControllersLogic/CreateScheduleLogic.php
@@ -56,7 +56,7 @@ class CreateScheduleLogic extends AbstractControllerLogic
*/
public function logic(Request $request) : JsonResponse
{
- $object = new ScheduleObject($request->input('etd'), $request->input('eta'), $request->input('transport_id'), ApprovalStatus::PENDING_SUBMISSION);
+ $object = new ScheduleObject($request->input('etd'), $request->input('eta'), ApprovalStatus::PENDING_SUBMISSION);
$this->canCreateSchedule->passes($object);
diff --git a/app/Classes/Modules/Schedules/Standards/Validators/ScheduleValidation.php b/app/Classes/Modules/Schedules/Standards/Validators/ScheduleValidation.php
index 7d14a3f1..485dc833 100644
--- a/app/Classes/Modules/Schedules/Standards/Validators/ScheduleValidation.php
+++ b/app/Classes/Modules/Schedules/Standards/Validators/ScheduleValidation.php
@@ -16,7 +16,6 @@ class ScheduleValidation extends AbstractValidation
*/
protected function data($object): array {
return [
- 'transport_id' => $object->getTransportId(),
'etd' => $object->getETD(),
'eta' => $object->getETA(),
'status' => $object->getStatus(),
@@ -28,7 +27,6 @@ class ScheduleValidation extends AbstractValidation
*/
protected function rules(): array {
return [
- 'transport_id' => 'required',
'etd' => 'required',
'eta' => 'required',
];
diff --git a/app/Classes/Modules/Transports/ControllersLogic/CreateTransportLogic.php b/app/Classes/Modules/Transports/ControllersLogic/CreateTransportLogic.php
index af438830..edd5690f 100644
--- a/app/Classes/Modules/Transports/ControllersLogic/CreateTransportLogic.php
+++ b/app/Classes/Modules/Transports/ControllersLogic/CreateTransportLogic.php
@@ -7,7 +7,7 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Transports\Services\CreatesTransport;
use App\Classes\Modules\Transports\Standards\Rules\CanCreateTransport;
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
-use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
+use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Http\Resources\TransportResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
@@ -29,8 +29,8 @@ class CreateTransportLogic extends AbstractControllerLogic
/** @var CanCreateTransport */
private $canCreateTransport;
- /** @var FetchesContainer */
- private $fetchesContainer;
+ /** @var FetchesPackingList */
+ private $fetchesPackingList;
/** @var CreatesTransport */
private $createsTransport;
@@ -38,13 +38,13 @@ class CreateTransportLogic extends AbstractControllerLogic
/**
* CreateTransportLogic constructor.
* @param CanCreateTransport $canCreateTransport
- * @param FetchesContainer $fetchesContainer
+ * @param FetchesPackingList $fetchesPackingList
* @param CreatesTransport $createsTransport
*/
- public function __construct(CanCreateTransport $canCreateTransport, FetchesContainer $fetchesContainer, CreatesTransport $createsTransport)
+ public function __construct(CanCreateTransport $canCreateTransport, FetchesPackingList $fetchesPackingList, CreatesTransport $createsTransport)
{
$this->canCreateTransport = $canCreateTransport;
- $this->fetchesContainer = $fetchesContainer;
+ $this->fetchesPackingList = $fetchesPackingList;
$this->createsTransport = $createsTransport;
}
@@ -58,11 +58,18 @@ class CreateTransportLogic extends AbstractControllerLogic
public function logic(Request $request) : JsonResponse
{
- $object = new TransportObject($request->input('type'), $request->input('courier'), $request->input('tracking_number'), null, null, ApprovalStatus::PENDING_SUBMISSION);
+ $object = new TransportObject(
+ $request->input('type'),
+ $request->input('courier'),
+ $request->input('tracking_number'),
+ null,
+ null,
+ pprovalStatus::PENDING_SUBMISSION
+ );
$this->canCreateTransport->passes($object);
- $query = $this->createsTransport->execute($this->fetchesContainer->execute(['id' => $request->input('container_id')]), $object);
+ $query = $this->createsTransport->execute($object, $this->fetchesPackingList->execute(['id' => $request->input('packing_list_id')]));
return $this->resourceResponse(new TransportResource($query));
diff --git a/app/Classes/Modules/Transports/ControllersLogic/UpdateTransportLogic.php b/app/Classes/Modules/Transports/ControllersLogic/UpdateTransportLogic.php
index cab03419..6f6cfd4c 100644
--- a/app/Classes/Modules/Transports/ControllersLogic/UpdateTransportLogic.php
+++ b/app/Classes/Modules/Transports/ControllersLogic/UpdateTransportLogic.php
@@ -58,7 +58,14 @@ class UpdateTransportLogic extends AbstractControllerLogic
{
$query = $this->fetchesTransport->execute(['id' => $request->route('id')]);
- $object = new TransportObject($request->input('type'), $request->input('courier'), $request->input('tracking_number'), $request->input('dispatch_date'), $request->input('drop_date'), $request->input('status'));
+ $object = new TransportObject(
+ $request->input('type'),
+ $request->input('courier'),
+ $request->input('tracking_number'),
+ $request->input('dispatch_date'),
+ $request->input('drop_date'),
+ $request->input('status')
+ );
$this->canUpdateTransport->passes($object);
diff --git a/app/Console/Commands/CurlVTCommand.php b/app/Console/Commands/CurlVTCommand.php
new file mode 100644
index 00000000..e779cd5c
--- /dev/null
+++ b/app/Console/Commands/CurlVTCommand.php
@@ -0,0 +1,57 @@
+dispatch();
+ }
+}
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index bec96f83..2e082565 100644
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -17,9 +17,7 @@ class Kernel extends ConsoleKernel
*
* @var array
*/
- protected $commands = [
- //
- ];
+ protected $commands = [];
/**
* Define the application's command schedule.
@@ -29,11 +27,15 @@ class Kernel extends ConsoleKernel
*/
protected function schedule(Schedule $schedule)
{
- $schedule->job(FetchWarehouseReceiveListFromVTPortalJob::class)->dailyAt('21:00');
- $schedule->job(FetchLoadedContainersFromVTPortalJob::class)->dailyAt('21:15');
- $schedule->job(FetchPackingListFromVTPortalJob::class)->dailyAt('21:30');
- $schedule->job(FetchContainersStatusUpdateFromVTPortalJob::class)->dailyAt('21:45');
- $schedule->job(FetchDeliveryListFromVTPortalJob::class)->dailyAt('22:00');
+ $schedule->command('command:curlVTCommand')
+ ->dailyAt('15:00')
+ ->withoutOverlapping()
+ ->appendOutputTo (storage_path().'/logs/curlvt.log');
+
+ $schedule->command('command:curlVTCommand')
+ ->dailyAt('21:00')
+ ->withoutOverlapping()
+ ->appendOutputTo (storage_path().'/logs/curlvt.log');
}
/**
diff --git a/app/Http/Controllers/Accounts/CreateInvitedCustomerController.php b/app/Http/Controllers/Accounts/CreateInvitedCustomerController.php
new file mode 100644
index 00000000..dce70e1e
--- /dev/null
+++ b/app/Http/Controllers/Accounts/CreateInvitedCustomerController.php
@@ -0,0 +1,20 @@
+execute($request);
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Orders/ApproveChangeOrderAddressController.php b/app/Http/Controllers/Orders/ApproveChangeOrderAddressController.php
new file mode 100644
index 00000000..9443ad7b
--- /dev/null
+++ b/app/Http/Controllers/Orders/ApproveChangeOrderAddressController.php
@@ -0,0 +1,20 @@
+execute($request);
+ }
+}
diff --git a/app/Http/Controllers/Orders/RequestChangeOrderAddressController.php b/app/Http/Controllers/Orders/RequestChangeOrderAddressController.php
new file mode 100644
index 00000000..3fb8881f
--- /dev/null
+++ b/app/Http/Controllers/Orders/RequestChangeOrderAddressController.php
@@ -0,0 +1,20 @@
+execute($request);
+ }
+}
diff --git a/app/Http/Controllers/PackingLists/Containers/AssignPackingListContainerController.php b/app/Http/Controllers/PackingLists/Containers/AssignPackingListContainerController.php
new file mode 100644
index 00000000..7cda1111
--- /dev/null
+++ b/app/Http/Controllers/PackingLists/Containers/AssignPackingListContainerController.php
@@ -0,0 +1,20 @@
+execute($request);
+ }
+
+}
diff --git a/app/Http/Controllers/PackingLists/Containers/CreateContainerPackingListController.php b/app/Http/Controllers/PackingLists/Containers/CreateContainerController.php
similarity index 100%
rename from app/Http/Controllers/PackingLists/Containers/CreateContainerPackingListController.php
rename to app/Http/Controllers/PackingLists/Containers/CreateContainerController.php
diff --git a/app/Http/Controllers/PackingLists/Containers/DeleteContainerPackingListController.php b/app/Http/Controllers/PackingLists/Containers/DeleteContainerController.php
similarity index 100%
rename from app/Http/Controllers/PackingLists/Containers/DeleteContainerPackingListController.php
rename to app/Http/Controllers/PackingLists/Containers/DeleteContainerController.php
diff --git a/app/Http/Controllers/PackingLists/Containers/FetchContainerPackingListController.php b/app/Http/Controllers/PackingLists/Containers/FetchContainerController.php
similarity index 100%
rename from app/Http/Controllers/PackingLists/Containers/FetchContainerPackingListController.php
rename to app/Http/Controllers/PackingLists/Containers/FetchContainerController.php
diff --git a/app/Http/Controllers/PackingLists/Containers/InboundCustomClearedController.php b/app/Http/Controllers/PackingLists/Containers/InboundCustomClearedController.php
new file mode 100644
index 00000000..303ea5dc
--- /dev/null
+++ b/app/Http/Controllers/PackingLists/Containers/InboundCustomClearedController.php
@@ -0,0 +1,20 @@
+execute($request);
+ }
+
+}
diff --git a/app/Http/Controllers/PackingLists/Containers/ListContainerPackingListsController.php b/app/Http/Controllers/PackingLists/Containers/ListContainersController.php
similarity index 91%
rename from app/Http/Controllers/PackingLists/Containers/ListContainerPackingListsController.php
rename to app/Http/Controllers/PackingLists/Containers/ListContainersController.php
index 61084f53..8cff9f2e 100644
--- a/app/Http/Controllers/PackingLists/Containers/ListContainerPackingListsController.php
+++ b/app/Http/Controllers/PackingLists/Containers/ListContainersController.php
@@ -10,7 +10,7 @@ class ListContainersController
{
/**
* @param Request $request
- * @param ListContainerLogic $logic
+ * @param ListContainersLogic $logic
* @return JsonResponse
*/
public function list(Request $request, ListContainersLogic $logic): JsonResponse {
diff --git a/app/Http/Controllers/PackingLists/Containers/UpdateContainerPackingListController.php b/app/Http/Controllers/PackingLists/Containers/UpdateContainerController.php
similarity index 100%
rename from app/Http/Controllers/PackingLists/Containers/UpdateContainerPackingListController.php
rename to app/Http/Controllers/PackingLists/Containers/UpdateContainerController.php
diff --git a/app/Http/Controllers/PackingLists/Packages/CreatePackageController.php b/app/Http/Controllers/PackingLists/Packages/CreatePackageController.php
index a3f1ddbb..a540ca51 100644
--- a/app/Http/Controllers/PackingLists/Packages/CreatePackageController.php
+++ b/app/Http/Controllers/PackingLists/Packages/CreatePackageController.php
@@ -2,7 +2,7 @@
namespace App\Http\Controllers\PackingLists\Packages;
-use App\Classes\Modules\ControllersLogic\Packages\CreatePackageLogic;
+use App\Classes\Modules\PackingLists\ControllersLogic\Packages\CreatePackageLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
diff --git a/app/Http/Controllers/PackingLists/Packages/DeletePackageController.php b/app/Http/Controllers/PackingLists/Packages/DeletePackageController.php
index 455e550d..4e9235c9 100644
--- a/app/Http/Controllers/PackingLists/Packages/DeletePackageController.php
+++ b/app/Http/Controllers/PackingLists/Packages/DeletePackageController.php
@@ -2,7 +2,7 @@
namespace App\Http\Controllers\PackingLists\Packages;
-use App\Classes\Modules\ControllersLogic\Packages\DeletePackageLogic;
+use App\Classes\Modules\PackingLists\ControllersLogic\Packages\DeletePackageLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
diff --git a/app/Http/Controllers/PackingLists/Packages/FetchPackageController.php b/app/Http/Controllers/PackingLists/Packages/FetchPackageController.php
index 6ad30c56..0bb60451 100644
--- a/app/Http/Controllers/PackingLists/Packages/FetchPackageController.php
+++ b/app/Http/Controllers/PackingLists/Packages/FetchPackageController.php
@@ -2,7 +2,7 @@
namespace App\Http\Controllers\PackingLists\Packages;
-use App\Classes\Modules\ControllersLogic\Packages\FetchPackageLogic;
+use App\Classes\Modules\PackingLists\ControllersLogic\Packages\FetchPackageLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
diff --git a/app/Http/Controllers/PackingLists/Packages/ListPackagesController.php b/app/Http/Controllers/PackingLists/Packages/ListPackagesController.php
index fe834b6b..75bed1d5 100644
--- a/app/Http/Controllers/PackingLists/Packages/ListPackagesController.php
+++ b/app/Http/Controllers/PackingLists/Packages/ListPackagesController.php
@@ -2,7 +2,7 @@
namespace App\Http\Controllers\PackingLists\Packages;
-use App\Classes\Modules\ControllersLogic\Packages\ListPackagesLogic;
+use App\Classes\Modules\PackingLists\ControllersLogic\Packages\ListPackagesLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
diff --git a/app/Http/Controllers/PackingLists/Packages/SwitchPackagePackingListController.php b/app/Http/Controllers/PackingLists/Packages/SwitchPackagePackingListController.php
new file mode 100644
index 00000000..42c85cff
--- /dev/null
+++ b/app/Http/Controllers/PackingLists/Packages/SwitchPackagePackingListController.php
@@ -0,0 +1,20 @@
+execute($request);
+ }
+
+}
diff --git a/app/Http/Controllers/PackingLists/Packages/UpdatePackageController.php b/app/Http/Controllers/PackingLists/Packages/UpdatePackageController.php
index cfc2e248..bc334d11 100644
--- a/app/Http/Controllers/PackingLists/Packages/UpdatePackageController.php
+++ b/app/Http/Controllers/PackingLists/Packages/UpdatePackageController.php
@@ -2,7 +2,7 @@
namespace App\Http\Controllers\PackingLists\Packages;
-use App\Classes\Modules\ControllersLogic\Packages\UpdatePackageLogic;
+use App\Classes\Modules\PackingLists\ControllersLogic\Packages\UpdatePackageLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
diff --git a/app/Http/Controllers/PackingLists/UpdatePackingListStatusController.php b/app/Http/Controllers/PackingLists/UpdatePackingListStatusController.php
new file mode 100644
index 00000000..5d653449
--- /dev/null
+++ b/app/Http/Controllers/PackingLists/UpdatePackingListStatusController.php
@@ -0,0 +1,20 @@
+execute($request);
+ }
+
+}
diff --git a/app/Http/Controllers/Reports/CustomcClearanceReportController.php b/app/Http/Controllers/Reports/CustomcClearanceReportController.php
new file mode 100644
index 00000000..061f4a0b
--- /dev/null
+++ b/app/Http/Controllers/Reports/CustomcClearanceReportController.php
@@ -0,0 +1,18 @@
+merge(['orderId' => $orderId]);
+ $filename = date("Y-m-d H:i:s")." - Custom cleared report ";
+ $customClearancelogic->logic($request);
+ return Excel::download( $customClearancelogic->getExcelCollection(), $filename.'.xlsx');
+ }
+}
diff --git a/app/Http/Resources/AddressResource.php b/app/Http/Resources/AddressResource.php
index 3b4c465b..6f6a6237 100644
--- a/app/Http/Resources/AddressResource.php
+++ b/app/Http/Resources/AddressResource.php
@@ -2,6 +2,8 @@
namespace App\Http\Resources;
+use App\Classes\ValueObjects\Constants\ApprovalStatus;
+use App\Models\Order;
use Illuminate\Http\Resources\Json\JsonResource;
class AddressResource extends JsonResource
@@ -14,6 +16,7 @@ class AddressResource extends JsonResource
*/
public function toArray($request)
{
+
return [
'id' => $this->id,
'reference' => $this->reference,
@@ -23,7 +26,16 @@ class AddressResource extends JsonResource
'state' => $this->state,
'post_code' => $this->postcode,
'country' => $this->country,
- 'default' => (int) $this->default
+ 'default' => (int) $this->default,
+ 'status' => (int) $this->status,
+ $this->mergeWhen($this->relationLoaded('owner'), [
+ 'owner' => $this->when($this->owner instanceof Order, [
+ 'reference' => $this->owner->reference,
+ 'company_module' => new CompanyModuleResource($this->owner->companyModule),
+ 'address' => new AddressResource($this->owner->addresses()->where('status', '=', ApprovalStatus::APPROVED)->first())
+ ])
+ ])
+
];
}
}
diff --git a/app/Http/Resources/CompanyResource.php b/app/Http/Resources/CompanyResource.php
index f338d095..cae286b9 100644
--- a/app/Http/Resources/CompanyResource.php
+++ b/app/Http/Resources/CompanyResource.php
@@ -11,6 +11,7 @@ use App\Models\CompanyModule;
use App\Models\Currency;
use App\Models\SegmentConstant;
use Illuminate\Http\Resources\Json\JsonResource;
+use Illuminate\Support\Facades\Crypt;
class CompanyResource extends JsonResource
{
@@ -25,6 +26,7 @@ class CompanyResource extends JsonResource
$companyModule = $this->companyModules()->where('type', '=', BusinessType::IMPORTER)->first();
return [
'id' => $this->id,
+ 'hash_id' => Crypt::encryptString($this->id),
'name' => $this->name,
'reference' => $this->reference,
'type' => (int) $this->type,
@@ -35,6 +37,7 @@ class CompanyResource extends JsonResource
'company_module' => new CompanyModuleResource($companyModule),
'last_order' => new OrderResource($companyModule ? $companyModule->orders()->orderBy('id', 'DESC')->first(): null),
'identification' => new DocumentResource($this->documents->whereIn('document_type', DocumentType::IDENTIFICATION_DOCUMENTS)->first()),
+ 'created_at' => $this->created_at->format('d-m-Y')
];
diff --git a/app/Http/Resources/ContainerResource.php b/app/Http/Resources/ContainerResource.php
index 59c60916..bc6337cc 100644
--- a/app/Http/Resources/ContainerResource.php
+++ b/app/Http/Resources/ContainerResource.php
@@ -2,6 +2,7 @@
namespace App\Http\Resources;
+use App\Classes\ValueObjects\Constants\ContainerTypes;
use Illuminate\Http\Resources\Json\JsonResource;
class ContainerResource extends JsonResource
@@ -17,10 +18,14 @@ class ContainerResource extends JsonResource
return [
'id' => $this->id,
'container_reference' => $this->reference,
- 'container_type' => $this->container_type,
+ 'container_specification' => ContainerTypes::CONTAINER_SPECIFICATION[$this->container_type],
'container_number' => $this->container_number,
'seal_reference' => $this->seal_reference,
- 'transport' => TransportResource::collection($this->transports),
+ 'transport' => new TransportResource($this->transports()->first()),
+ 'packing_lists' => PackingListResource::collection($this->whenLoaded('packingLists', function(){
+ return $this->packingLists()->whereHas('packages')->get();
+ })),
+ 'status' => $this->status
];
}
}
diff --git a/app/Http/Resources/OrderResource.php b/app/Http/Resources/OrderResource.php
index 183536e3..e3a66981 100644
--- a/app/Http/Resources/OrderResource.php
+++ b/app/Http/Resources/OrderResource.php
@@ -19,65 +19,71 @@ class OrderResource extends JsonResource
*/
public function toArray($request)
{
- return [
- 'id' => $this->id,
- 'reference' => $this->reference,
- 'reference_contract' => (int) $this->type,
- 'type' => (int) $this->type,
- 'status' => (int) $this->status,
- 'company_module' => new CompanyModuleResource($this->companyModule),
- 'warehouse' => new CompanyModuleResource($this->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee),
- 'address' => new AddressResource($this->addresses()->first()),
- $this->mergeWhen($this->relationLoaded('parcels'), [
- 'origin_warehouse_packages' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){
- return $query->where('type', PackingListType::SHIPPING_PACKING_LIST)->whereDoesntHave('containers', function($query) {
- return $query->whereHas('transports', function($query){
- return $query->whereHas('schedules', function($query){
+ try {
+ return [
+ 'id' => $this->id,
+ 'reference' => $this->reference,
+ 'reference_contract' => (int) $this->type,
+ 'type' => (int) $this->type,
+ 'status' => (int) $this->status,
+ 'company_module' => new CompanyModuleResource($this->companyModule),
+ 'warehouse' => new CompanyModuleResource($this->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee),
+ 'address' => new AddressResource($this->addresses()->where('status', '=', ApprovalStatus::APPROVED)->first()),
+ 'address_change_request' => new AddressResource($this->addressesPendingVerification()->first()),
+ $this->mergeWhen($this->relationLoaded('parcels'), [
+ 'origin_warehouse_packages' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){
+ return $query->where('type', PackingListType::SHIPPING_PACKING_LIST)->whereDoesntHave('containers', function($query) {
+ return $query->whereHas('transports', function($query){
+ return $query->whereHas('schedules', function($query){
+ return $query->where('etd', '<', Carbon::now());
+ });
+ });
+ });
+ })->get()),
+ 'in_transit_packages' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){
+ return $query->where('type', PackingListType::SHIPPING_PACKING_LIST)->whereHas('containers', function($query) {
+ return $query->whereHas('transports', function($query){
+ return $query->where('status', '=', ApprovalStatus::APPROVED)->whereHas('schedules', function($query){
+ return $query->where('etd', '<', Carbon::now());
+ });
+ });
+ });
+ })->get()),
+ 'destination_warehouse_packages' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){
+ return $query->where('type', PackingListType::SHIPPING_PACKING_LIST)->whereHas('containers', function($query) {
+ return $query->whereHas('transports', function($query){
+ return $query->where('type', '=', TransportType::SEA)->where('status', '=', ApprovalStatus::COMPLETED)->whereHas('schedules', function($query){
+ return $query->where('etd', '<', Carbon::now());
+ });
+ });
+ })->whereDoesntHave('transports', function($query){
+ return $query->where('type', '=', TransportType::LAND)->where('status', '=', ApprovalStatus::APPROVED)->whereHas('schedules', function($query){
return $query->where('etd', '<', Carbon::now());
});
});
- });
- })->get()),
- 'in_transit_packages' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){
- return $query->where('type', PackingListType::SHIPPING_PACKING_LIST)->whereHas('containers', function($query) {
- return $query->whereHas('transports', function($query){
- return $query->where('status', '=', ApprovalStatus::APPROVED)->whereHas('schedules', function($query){
+ })->get()),
+ 'delivered_packages' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){
+ return $query->where('type', PackingListType::SHIPPING_PACKING_LIST)->whereHas('containers', function($query) {
+ return $query->whereHas('transports', function($query){
+ return $query->where('type', '=', TransportType::SEA)->where('status', '=', ApprovalStatus::COMPLETED)->whereHas('schedules', function($query){
+ return $query->where('etd', '<', Carbon::now());
+ });
+ });
+ })->whereHas('transports', function($query){
+ return $query->where('type', '=', TransportType::LAND)->where('status', '=', ApprovalStatus::APPROVED)->whereHas('schedules', function($query){
return $query->where('etd', '<', Carbon::now());
});
});
- });
- })->get()),
- 'destination_warehouse_packages' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){
- return $query->where('type', PackingListType::SHIPPING_PACKING_LIST)->whereHas('containers', function($query) {
- return $query->whereHas('transports', function($query){
- return $query->where('type', '=', TransportType::SEA)->where('status', '=', ApprovalStatus::COMPLETED)->whereHas('schedules', function($query){
- return $query->where('etd', '<', Carbon::now());
- });
- });
- })->whereDoesntHave('transports', function($query){
- return $query->where('type', '=', TransportType::LAND)->where('status', '=', ApprovalStatus::APPROVED)->whereHas('schedules', function($query){
- return $query->where('etd', '<', Carbon::now());
- });
- });
- })->get()),
- 'delivered_packages' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){
- return $query->where('type', PackingListType::SHIPPING_PACKING_LIST)->whereHas('containers', function($query) {
- return $query->whereHas('transports', function($query){
- return $query->where('type', '=', TransportType::SEA)->where('status', '=', ApprovalStatus::COMPLETED)->whereHas('schedules', function($query){
- return $query->where('etd', '<', Carbon::now());
- });
- });
- })->whereHas('transports', function($query){
- return $query->where('type', '=', TransportType::LAND)->where('status', '=', ApprovalStatus::APPROVED)->whereHas('schedules', function($query){
- return $query->where('etd', '<', Carbon::now());
- });
- });
- })->get()),
- 'parcels' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){
- return $query->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST);
- })->get()),
- ]),
- 'created_at' => $this->created_at->format('d-m-Y')
- ];
+ })->get()),
+ 'parcels' => PackageResource::collection($this->parcels()->whereHas('packingList', function($query){
+ return $query->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST);
+ })->get()),
+ ]),
+ 'created_at' => $this->created_at->format('d-m-Y')
+ ];
+ } catch (\Exception $exception){
+ $this->id;
+ }
+
}
}
diff --git a/app/Http/Resources/PackageResource.php b/app/Http/Resources/PackageResource.php
index 7a3209d1..d69ae652 100644
--- a/app/Http/Resources/PackageResource.php
+++ b/app/Http/Resources/PackageResource.php
@@ -23,7 +23,7 @@ class PackageResource extends JsonResource
'length' => floatval($this->length),
'weight' => $this->weight,
'quantity' => $this->quantity,
- 'cbm' => (($this->width / 100) * ($this->width / 100) * ($this->width / 100)) * $this->quantity,
+ 'cbm' => (($this->width / 100) * ($this->height / 100) * ($this->length / 100)) * $this->quantity,
'status' => $this->status,
'order' => new OrderResource($this->packingList->owner),
'container' => new ContainerResource($this->packingList->containers()->first()),
diff --git a/app/Http/Resources/PackingListResource.php b/app/Http/Resources/PackingListResource.php
index e75ce164..4024833d 100644
--- a/app/Http/Resources/PackingListResource.php
+++ b/app/Http/Resources/PackingListResource.php
@@ -21,6 +21,7 @@ class PackingListResource extends JsonResource
'status' => $this->status,
'transport' => new TransportResource($this->transports()->first()),
'packages' => PackageResource::collection($this->packages),
+ 'order' => New OrderResource($this->owner)
];
}
}
diff --git a/app/Http/Resources/TransportResource.php b/app/Http/Resources/TransportResource.php
index 6656721a..b931964d 100644
--- a/app/Http/Resources/TransportResource.php
+++ b/app/Http/Resources/TransportResource.php
@@ -24,7 +24,7 @@ class TransportResource extends JsonResource
'drop_date' => $this->drop_date ? $this->drop_date->format('d-m-Y') : $this->drop_date,
'status' => $this->status,
'current_schedule' => new ScheduleResource($this->schedules()->where('status', '=', ApprovalStatus::APPROVED)->first()),
- 'schedule_history' => ScheduleResource::collection($this->schedules()->where('status', '!=', ApprovalStatus::APPROVED)->get())
+ 'schedule_history' => ScheduleResource::collection($this->schedules()->where('status', '=', ApprovalStatus::EXPIRED)->get())
];
}
}
diff --git a/app/Models/Exchange/Company.php b/app/Models/Exchange/Company.php
new file mode 100644
index 00000000..fc85080c
--- /dev/null
+++ b/app/Models/Exchange/Company.php
@@ -0,0 +1,36 @@
+belongsToMany(User::class, (new Employee())->getTable(), 'company_id','user_id');
+ }
+
+}
+
+
+
diff --git a/app/Models/Exchange/Employee.php b/app/Models/Exchange/Employee.php
new file mode 100644
index 00000000..b310f078
--- /dev/null
+++ b/app/Models/Exchange/Employee.php
@@ -0,0 +1,37 @@
+HasMany(Company::class, 'company_id', 'id');
+ }
+
+ /**
+ * @return \Illuminate\Database\Eloquent\Relations\HasOne
+ **/
+ public function user(): HasOne
+ {
+ return $this->hasOne(User::class, 'user_id', 'id');
+ }
+}
diff --git a/app/Models/Exchange/User.php b/app/Models/Exchange/User.php
new file mode 100644
index 00000000..cc102ba2
--- /dev/null
+++ b/app/Models/Exchange/User.php
@@ -0,0 +1,19 @@
+belongsToMany(Company::class, (new Employee())->getTable(), 'user_id', 'company_id');
+ }
+}
diff --git a/app/Models/OldOrders.php b/app/Models/OldOrders.php
index 81041fab..c6901929 100644
--- a/app/Models/OldOrders.php
+++ b/app/Models/OldOrders.php
@@ -17,7 +17,7 @@ class OldOrders extends Model
*/
public function address(): hasOne
{
- return $this->hasOne(OldAddress::class, 'reference_id', 'address_id')->where('type', '=', 1);
+ return $this->hasOne(OldAddress::class, 'id', 'address_id')->where('type', '=', 1);
}
/**
diff --git a/app/Models/Order.php b/app/Models/Order.php
index 4d537646..9d3099a5 100644
--- a/app/Models/Order.php
+++ b/app/Models/Order.php
@@ -6,6 +6,7 @@ use App\Classes\General\Interfaces\Addressable;
use App\Classes\General\Interfaces\Contactable;
use App\Classes\General\Interfaces\Packable;
use App\Classes\ValueObjects\Constants\RoleTypes;
+use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Scopes\CustomerOrdersScope;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
@@ -77,4 +78,14 @@ class Order extends AbstractModel implements Addressable, Packable
// static::addGlobalScope(new CustomerOrdersScope);
// }
}
+
+ public function addressesPendingVerification()
+ {
+ return $this->addresses()->where('status','=',ApprovalStatus::PENDING_VERIFICATION);
+ }
+
+ public function addressesApproved()
+ {
+ return $this->addresses()->where('status','=',ApprovalStatus::APPROVED);
+ }
}
diff --git a/composer.json b/composer.json
index 824d2d3f..56ab4aac 100644
--- a/composer.json
+++ b/composer.json
@@ -17,6 +17,7 @@
"intervention/image": "^2.5",
"laravel/framework": "^8.40",
"laravel/tinker": "^2.5",
+ "maatwebsite/excel": "^3.1",
"rinvex/countries": "^6.1",
"spatie/laravel-activitylog": "^3.14",
"spatie/laravel-permission": "^4.2",
diff --git a/config/app.php b/config/app.php
index bad26462..df3e7a90 100644
--- a/config/app.php
+++ b/config/app.php
@@ -178,7 +178,8 @@ return [
// Third Parties
Spatie\Permission\PermissionServiceProvider::class,
Barryvdh\DomPDF\ServiceProvider::class,
- Meneses\LaravelMpdf\LaravelMpdfServiceProvider::class
+ Meneses\LaravelMpdf\LaravelMpdfServiceProvider::class,
+ Maatwebsite\Excel\ExcelServiceProvider::class,
],
/*
@@ -233,6 +234,7 @@ return [
'View' => Illuminate\Support\Facades\View::class,
'PDF' => Barryvdh\DomPDF\Facade::class,
'MPDF' => Meneses\LaravelMpdf\Facades\LaravelMpdf::class,
+ 'Excel' => Maatwebsite\Excel\Facades\Excel::class,
],
];
diff --git a/config/database.php b/config/database.php
index 4e8bc250..8b5c199f 100644
--- a/config/database.php
+++ b/config/database.php
@@ -82,7 +82,25 @@ return [
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
-
+ 'exchange_db' => [
+ 'driver' => 'mysql',
+ 'url' => env('DATABASE_URL'),
+ 'host' => env('DB_HOST', '127.0.0.1'),
+ 'port' => env('DB_PORT', '3306'),
+ 'database' => env('DB_DATABASE_EXCHANGE', 'forge'),
+ 'username' => env('DB_USERNAME', 'forge'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'unix_socket' => env('DB_SOCKET_IZYIM', ''),
+ 'charset' => 'utf8mb4',
+ 'collation' => 'utf8mb4_unicode_ci',
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ 'strict' => true,
+ 'engine' => null,
+ 'options' => extension_loaded('pdo_mysql') ? array_filter([
+ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
+ ]) : [],
+ ],
'pgsql' => [
'driver' => 'pgsql',
'url' => env('DATABASE_URL'),
diff --git a/config/excel.php b/config/excel.php
new file mode 100644
index 00000000..c3199b92
--- /dev/null
+++ b/config/excel.php
@@ -0,0 +1,328 @@
+ [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Chunk size
+ |--------------------------------------------------------------------------
+ |
+ | When using FromQuery, the query is automatically chunked.
+ | Here you can specify how big the chunk should be.
+ |
+ */
+ 'chunk_size' => 1000,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Pre-calculate formulas during export
+ |--------------------------------------------------------------------------
+ */
+ 'pre_calculate_formulas' => false,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Enable strict null comparison
+ |--------------------------------------------------------------------------
+ |
+ | When enabling strict null comparison empty cells ('') will
+ | be added to the sheet.
+ */
+ 'strict_null_comparison' => false,
+
+ /*
+ |--------------------------------------------------------------------------
+ | CSV Settings
+ |--------------------------------------------------------------------------
+ |
+ | Configure e.g. delimiter, enclosure and line ending for CSV exports.
+ |
+ */
+ 'csv' => [
+ 'delimiter' => ',',
+ 'enclosure' => '"',
+ 'line_ending' => PHP_EOL,
+ 'use_bom' => false,
+ 'include_separator_line' => false,
+ 'excel_compatibility' => false,
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Worksheet properties
+ |--------------------------------------------------------------------------
+ |
+ | Configure e.g. default title, creator, subject,...
+ |
+ */
+ 'properties' => [
+ 'creator' => '',
+ 'lastModifiedBy' => '',
+ 'title' => '',
+ 'description' => '',
+ 'subject' => '',
+ 'keywords' => '',
+ 'category' => '',
+ 'manager' => '',
+ 'company' => '',
+ ],
+ ],
+
+ 'imports' => [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Read Only
+ |--------------------------------------------------------------------------
+ |
+ | When dealing with imports, you might only be interested in the
+ | data that the sheet exists. By default we ignore all styles,
+ | however if you want to do some logic based on style data
+ | you can enable it by setting read_only to false.
+ |
+ */
+ 'read_only' => true,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Ignore Empty
+ |--------------------------------------------------------------------------
+ |
+ | When dealing with imports, you might be interested in ignoring
+ | rows that have null values or empty strings. By default rows
+ | containing empty strings or empty values are not ignored but can be
+ | ignored by enabling the setting ignore_empty to true.
+ |
+ */
+ 'ignore_empty' => false,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Heading Row Formatter
+ |--------------------------------------------------------------------------
+ |
+ | Configure the heading row formatter.
+ | Available options: none|slug|custom
+ |
+ */
+ 'heading_row' => [
+ 'formatter' => 'slug',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | CSV Settings
+ |--------------------------------------------------------------------------
+ |
+ | Configure e.g. delimiter, enclosure and line ending for CSV imports.
+ |
+ */
+ 'csv' => [
+ 'delimiter' => ',',
+ 'enclosure' => '"',
+ 'escape_character' => '\\',
+ 'contiguous' => false,
+ 'input_encoding' => 'UTF-8',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Worksheet properties
+ |--------------------------------------------------------------------------
+ |
+ | Configure e.g. default title, creator, subject,...
+ |
+ */
+ 'properties' => [
+ 'creator' => '',
+ 'lastModifiedBy' => '',
+ 'title' => '',
+ 'description' => '',
+ 'subject' => '',
+ 'keywords' => '',
+ 'category' => '',
+ 'manager' => '',
+ 'company' => '',
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Extension detector
+ |--------------------------------------------------------------------------
+ |
+ | Configure here which writer/reader type should be used when the package
+ | needs to guess the correct type based on the extension alone.
+ |
+ */
+ 'extension_detector' => [
+ 'xlsx' => Excel::XLSX,
+ 'xlsm' => Excel::XLSX,
+ 'xltx' => Excel::XLSX,
+ 'xltm' => Excel::XLSX,
+ 'xls' => Excel::XLS,
+ 'xlt' => Excel::XLS,
+ 'ods' => Excel::ODS,
+ 'ots' => Excel::ODS,
+ 'slk' => Excel::SLK,
+ 'xml' => Excel::XML,
+ 'gnumeric' => Excel::GNUMERIC,
+ 'htm' => Excel::HTML,
+ 'html' => Excel::HTML,
+ 'csv' => Excel::CSV,
+ 'tsv' => Excel::TSV,
+
+ /*
+ |--------------------------------------------------------------------------
+ | PDF Extension
+ |--------------------------------------------------------------------------
+ |
+ | Configure here which Pdf driver should be used by default.
+ | Available options: Excel::MPDF | Excel::TCPDF | Excel::DOMPDF
+ |
+ */
+ 'pdf' => Excel::DOMPDF,
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Value Binder
+ |--------------------------------------------------------------------------
+ |
+ | PhpSpreadsheet offers a way to hook into the process of a value being
+ | written to a cell. In there some assumptions are made on how the
+ | value should be formatted. If you want to change those defaults,
+ | you can implement your own default value binder.
+ |
+ | Possible value binders:
+ |
+ | [x] Maatwebsite\Excel\DefaultValueBinder::class
+ | [x] PhpOffice\PhpSpreadsheet\Cell\StringValueBinder::class
+ | [x] PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder::class
+ |
+ */
+ 'value_binder' => [
+ 'default' => Maatwebsite\Excel\DefaultValueBinder::class,
+ ],
+
+ 'cache' => [
+ /*
+ |--------------------------------------------------------------------------
+ | Default cell caching driver
+ |--------------------------------------------------------------------------
+ |
+ | By default PhpSpreadsheet keeps all cell values in memory, however when
+ | dealing with large files, this might result into memory issues. If you
+ | want to mitigate that, you can configure a cell caching driver here.
+ | When using the illuminate driver, it will store each value in a the
+ | cache store. This can slow down the process, because it needs to
+ | store each value. You can use the "batch" store if you want to
+ | only persist to the store when the memory limit is reached.
+ |
+ | Drivers: memory|illuminate|batch
+ |
+ */
+ 'driver' => 'memory',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Batch memory caching
+ |--------------------------------------------------------------------------
+ |
+ | When dealing with the "batch" caching driver, it will only
+ | persist to the store when the memory limit is reached.
+ | Here you can tweak the memory limit to your liking.
+ |
+ */
+ 'batch' => [
+ 'memory_limit' => 60000,
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Illuminate cache
+ |--------------------------------------------------------------------------
+ |
+ | When using the "illuminate" caching driver, it will automatically use
+ | your default cache store. However if you prefer to have the cell
+ | cache on a separate store, you can configure the store name here.
+ | You can use any store defined in your cache config. When leaving
+ | at "null" it will use the default store.
+ |
+ */
+ 'illuminate' => [
+ 'store' => null,
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Transaction Handler
+ |--------------------------------------------------------------------------
+ |
+ | By default the import is wrapped in a transaction. This is useful
+ | for when an import may fail and you want to retry it. With the
+ | transactions, the previous import gets rolled-back.
+ |
+ | You can disable the transaction handler by setting this to null.
+ | Or you can choose a custom made transaction handler here.
+ |
+ | Supported handlers: null|db
+ |
+ */
+ 'transactions' => [
+ 'handler' => 'db',
+ ],
+
+ 'temporary_files' => [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Local Temporary Path
+ |--------------------------------------------------------------------------
+ |
+ | When exporting and importing files, we use a temporary file, before
+ | storing reading or downloading. Here you can customize that path.
+ |
+ */
+ 'local_path' => storage_path('framework/laravel-excel'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Remote Temporary Disk
+ |--------------------------------------------------------------------------
+ |
+ | When dealing with a multi server setup with queues in which you
+ | cannot rely on having a shared local temporary path, you might
+ | want to store the temporary file on a shared disk. During the
+ | queue executing, we'll retrieve the temporary file from that
+ | location instead. When left to null, it will always use
+ | the local path. This setting only has effect when using
+ | in conjunction with queued imports and exports.
+ |
+ */
+ 'remote_disk' => null,
+ 'remote_prefix' => null,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Force Resync
+ |--------------------------------------------------------------------------
+ |
+ | When dealing with a multi server setup as above, it's possible
+ | for the clean up that occurs after entire queue has been run to only
+ | cleanup the server that the last AfterImportJob runs on. The rest of the server
+ | would still have the local temporary file stored on it. In this case your
+ | local storage limits can be exceeded and future imports won't be processed.
+ | To mitigate this you can set this config value to be true, so that after every
+ | queued chunk is processed the local temporary file is deleted on the server that
+ | processed it.
+ |
+ */
+ 'force_resync_remote' => null,
+ ],
+];
diff --git a/database/seeders/CompaniesTableSeeder.php b/database/seeders/CompaniesTableSeeder.php
index 01bb3801..c2ffdeb4 100644
--- a/database/seeders/CompaniesTableSeeder.php
+++ b/database/seeders/CompaniesTableSeeder.php
@@ -172,49 +172,49 @@ class CompaniesTableSeeder extends Seeder
}
- if(true){
- $companies = OldCompany::all();
+ // if(true){
+ // $companies = OldCompany::all();
- foreach($companies as $company){
+ // foreach($companies as $company){
- $marking = explode("CIEF/", $company->marking);
+ // $marking = explode("CIEF/", $company->marking);
- if(count($marking) < 2){
- continue;
- }
+ // if(count($marking) < 2){
+ // continue;
+ // }
- $marking = str_replace(' ', '', str_replace('/', '', $marking[1]));
+ // $marking = str_replace(' ', '', str_replace('/', '', $marking[1]));
- /** @var Company $newCompany */
- $newCompany = $this->createCompanyProcessor->execute($company->name, CompanyType::COMPANY_BUSINESS, ApprovalStatus::PENDING_SUBMISSION);
+ // /** @var Company $newCompany */
+ // $newCompany = $this->createCompanyProcessor->execute($company->name, CompanyType::COMPANY_BUSINESS, ApprovalStatus::PENDING_SUBMISSION);
- $this->updatesCompanyStatus->execute($newCompany, ApprovalStatus::APPROVED);
+ // $this->updatesCompanyStatus->execute($newCompany, ApprovalStatus::APPROVED);
- /** @var CompanyModule $companyModule */
- $companyModule = $this->createCompanyModuleProcessor->execute($newCompany, BusinessType::IMPORTER);
+ // /** @var CompanyModule $companyModule */
+ // $companyModule = $this->createCompanyModuleProcessor->execute($newCompany, BusinessType::IMPORTER);
- $connectionObject = new CompanyConnectionObject($companyModule, 'CIEF', $marking);
+ // $connectionObject = new CompanyConnectionObject($companyModule, 'CIEF', $marking);
- $connection = $this->createsCompanyConnection->execute($connectionObject);
- $this->approvesCompanyConnection->execute($connection);
+ // $connection = $this->createsCompanyConnection->execute($connectionObject);
+ // $this->approvesCompanyConnection->execute($connection);
- $i = 0;
- foreach($company->addresses as $address){
- $this->createAddressFromOldAddressProcessor->execute($address, $companyModule);
- $contact = preg_replace("/[^0-9.]/", "", $address->contact);
- if($contact){
- $i++;
- if($i === 1) {
- $contactObject = new ContactObject('', $contact, $company->email, '',);
- $this->createContactProcessor->execute($contactObject, $newCompany);
- }
- }
+ // $i = 0;
+ // foreach($company->addresses as $address){
+ // $this->createAddressFromOldAddressProcessor->execute($address, $companyModule);
+ // $contact = preg_replace("/[^0-9.]/", "", $address->contact);
+ // if($contact){
+ // $i++;
+ // if($i === 1) {
+ // $contactObject = new ContactObject('', $contact, $company->email, '',);
+ // $this->createContactProcessor->execute($contactObject, $newCompany);
+ // }
+ // }
- }
- }
- }
+ // }
+ // }
+ // }
}
diff --git a/database/seeders/CompanyEmployeesTableSeeder.php b/database/seeders/CompanyEmployeesTableSeeder.php
new file mode 100644
index 00000000..40473ed1
--- /dev/null
+++ b/database/seeders/CompanyEmployeesTableSeeder.php
@@ -0,0 +1,76 @@
+assignEmployeeProcessor = $assignEmployeeProcessor;
+ }
+
+
+ /**
+ * Run the database seeds.
+ *
+ * @return void
+ * @throws \App\Classes\Exceptions\AccessForbiddenException
+ * @throws \App\Classes\Exceptions\MalformedRequestException
+ * @throws \App\Classes\Exceptions\RequestValidationException
+ */
+ public function run()
+ {
+ DB::beginTransaction();
+ foreach(ExchangeCompany::all() as $company) {
+
+ if($connection = CompanyConnection::where('invitee_reference', $company->reference)->first()){
+
+ $companyModule = $connection->invitee;
+
+ if($companyModule->employees()->exists()) {
+ continue;
+ }
+
+ $exchangeUser = $company->employees()->first();
+
+ if(User::where('email', '=', $exchangeUser->email)->count()){
+ continue;
+ }
+
+ $user = new User();
+ $user->name = $exchangeUser->name;
+ $user->email = $exchangeUser->email;
+ $user->password = $exchangeUser->password;
+ $user->type = $exchangeUser->type;
+ $user->status = $exchangeUser->status;
+
+ $user->save();
+
+ $Object = new EmploymentObject($companyModule, $user);
+
+ $this->assignEmployeeProcessor->execute($Object);
+ }
+
+ }
+ DB::commit();
+
+
+ }
+
+}
diff --git a/database/seeders/DeleteOldOrdersSeeder.php b/database/seeders/DeleteOldOrdersSeeder.php
new file mode 100644
index 00000000..74afabf6
--- /dev/null
+++ b/database/seeders/DeleteOldOrdersSeeder.php
@@ -0,0 +1,54 @@
+reference)->first();
+ if($oldOrder){
+ $order->addresses()->forceDelete();
+ $order->packingLists()->forceDelete();
+ $order->OrderRoles()->forceDelete();
+ $order->orderSteps()->forceDelete();
+ $order->forceDelete();
+ }
+ }
+ }
+
+}
diff --git a/database/seeders/OrdersTableSeeder.php b/database/seeders/OrdersTableSeeder.php
index 60caa71c..0e881591 100644
--- a/database/seeders/OrdersTableSeeder.php
+++ b/database/seeders/OrdersTableSeeder.php
@@ -21,7 +21,6 @@ class OrdersTableSeeder extends Seeder
*/
public function run()
{
-
FetchWarehouseReceiveListFromVTPortalJob::withChain([
new FetchLoadedContainersFromVTPortalJob,
new FetchPackingListFromVTPortalJob,
diff --git a/resources/assets/sass/modules/_modals.scss b/resources/assets/sass/modules/_modals.scss
index 73272c57..1bafb1cd 100644
--- a/resources/assets/sass/modules/_modals.scss
+++ b/resources/assets/sass/modules/_modals.scss
@@ -269,7 +269,7 @@ body.modal-open {
box-shadow: none;
}
.modal-dialog {
- width: 600px;
+ width: 1140px;
}
.modal-sm {
width: 300px;
diff --git a/resources/assets/vue/components/accounts/forms/InviteRegistrationFormComponent.vue b/resources/assets/vue/components/accounts/forms/InviteRegistrationFormComponent.vue
new file mode 100644
index 00000000..9b8af5ea
--- /dev/null
+++ b/resources/assets/vue/components/accounts/forms/InviteRegistrationFormComponent.vue
@@ -0,0 +1,101 @@
+
+ Personal InformationReject Address Change Request
+ Approve Address Change Request
+
{{item.container_number}} / {{item.seal_reference}}
+ETD
+{{item.transport ? item.transport.current_schedule.etd : 'n/a'}}
+ETA
+{{item.transport ? item.transport.current_schedule.eta : 'n/a'}}
+Loaded CBM
+{{ (Math.ceil((item.packing_lists.reduce((total, obj) => total + obj.packages.reduce((total, obj) => obj.cbm + total, 0), 0)) * 1000) / 1000).toFixed(3) }}
+Status
+{{item.status === 3 ? 'Un-stuffed' : 'In Progress'}}
+{{container.container_number}}
+Container Type: {{container.container_type}}
+(Total 77 Package in this container)
+{{ containerFilledPercentage }}%
+Width
{{item.quantity}} CM
+{{item.height}} CM
Height
Total CBM
-{{status}}
{{item.container.container_reference}}
+Description
{{item.transport.tracking_number}}
Marking
+Order Number
+Delivery Address
+{{item.order.address.street_one+' '+(item.order.address.street_two ? item.order.address.street_two : '')+', '+ item.order.address.district.name+', '+item.order.address.post_code+' '+item.order.address.state.name+', '+item.order.address.country.name}}
+
+ Group my products with same destination
+You will get grouped package at once if possible
+