From bea3836df8d2e3d33a7632f4ea009e0cc045f04d Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sun, 29 Aug 2021 19:33:04 +0800 Subject: [PATCH] update packinglists from vt portal jobs and schedule --- ...hContainersStatusUpdateFromVTPortalJob.php | 2 + .../Jobs/FetchDeliveryListFromVTPortalJob.php | 2 + .../FetchLoadedContainersFromVTPortalJob.php | 8 +- .../Jobs/FetchPackingListFromVTPortalJob.php | 2 + ...tchWarehouseReceiveListFromVTPortalJob.php | 8 +- .../ControllersLogic/ListOrdersLogic.php | 2 +- .../Services/FetchesDataFromVTPortal.php | 6 +- ...hLoadedContainersFromVTPortalProcessor.php | 7 + ...ehouseReceiveListFromVTPortalProcessor.php | 156 +++++++++--------- database/seeders/OrdersTableSeeder.php | 8 +- .../orders/elements/OrderComponent.vue | 6 +- 11 files changed, 115 insertions(+), 92 deletions(-) diff --git a/app/Classes/Jobs/FetchContainersStatusUpdateFromVTPortalJob.php b/app/Classes/Jobs/FetchContainersStatusUpdateFromVTPortalJob.php index bae43fbd..f885d5d2 100644 --- a/app/Classes/Jobs/FetchContainersStatusUpdateFromVTPortalJob.php +++ b/app/Classes/Jobs/FetchContainersStatusUpdateFromVTPortalJob.php @@ -14,6 +14,8 @@ class FetchContainersStatusUpdateFromVTPortalJob implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; + public $timeout = 3600; + /** * Execute the job. * diff --git a/app/Classes/Jobs/FetchDeliveryListFromVTPortalJob.php b/app/Classes/Jobs/FetchDeliveryListFromVTPortalJob.php index 60dc27bd..100fd52d 100644 --- a/app/Classes/Jobs/FetchDeliveryListFromVTPortalJob.php +++ b/app/Classes/Jobs/FetchDeliveryListFromVTPortalJob.php @@ -15,6 +15,8 @@ class FetchDeliveryListFromVTPortalJob implements ShouldQueue use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; + public $timeout = 3600; + /** * Execute the job. * diff --git a/app/Classes/Jobs/FetchLoadedContainersFromVTPortalJob.php b/app/Classes/Jobs/FetchLoadedContainersFromVTPortalJob.php index 33665682..4b128d8e 100644 --- a/app/Classes/Jobs/FetchLoadedContainersFromVTPortalJob.php +++ b/app/Classes/Jobs/FetchLoadedContainersFromVTPortalJob.php @@ -16,16 +16,16 @@ class FetchLoadedContainersFromVTPortalJob implements ShouldQueue use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; + public $timeout = 3600; + /** * Execute the job. * - * @param Carbon|null $start - * @param Carbon|null $end * @return void * @throws \Illuminate\Contracts\Container\BindingResolutionException */ - public function handle(?Carbon $start = null, ?Carbon $end = null) + public function handle() { - (App()->make(FetchLoadedContainersFromVTPortalProcessor::class))->execute($start, $end); + (App()->make(FetchLoadedContainersFromVTPortalProcessor::class))->execute(); } } diff --git a/app/Classes/Jobs/FetchPackingListFromVTPortalJob.php b/app/Classes/Jobs/FetchPackingListFromVTPortalJob.php index e578a687..05888453 100644 --- a/app/Classes/Jobs/FetchPackingListFromVTPortalJob.php +++ b/app/Classes/Jobs/FetchPackingListFromVTPortalJob.php @@ -15,6 +15,8 @@ class FetchPackingListFromVTPortalJob implements ShouldQueue use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; + public $timeout = 3600; + /** * Execute the job. * diff --git a/app/Classes/Jobs/FetchWarehouseReceiveListFromVTPortalJob.php b/app/Classes/Jobs/FetchWarehouseReceiveListFromVTPortalJob.php index aaf4208b..757a899f 100644 --- a/app/Classes/Jobs/FetchWarehouseReceiveListFromVTPortalJob.php +++ b/app/Classes/Jobs/FetchWarehouseReceiveListFromVTPortalJob.php @@ -16,16 +16,16 @@ class FetchWarehouseReceiveListFromVTPortalJob implements ShouldQueue use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; + public $timeout = 3600; + /** * Execute the job. * - * @param Carbon|null $start - * @param Carbon|null $end * @return void * @throws \Illuminate\Contracts\Container\BindingResolutionException */ - public function handle(?Carbon $start = null, ?Carbon $end = null) + public function handle() { - (App()->make(FetchWarehouseReceiveListFromVTPortalProcessor::class))->execute($start, $end); + (App()->make(FetchWarehouseReceiveListFromVTPortalProcessor::class))->execute(); } } diff --git a/app/Classes/Modules/Orders/ControllersLogic/ListOrdersLogic.php b/app/Classes/Modules/Orders/ControllersLogic/ListOrdersLogic.php index bf960049..da0eb033 100644 --- a/app/Classes/Modules/Orders/ControllersLogic/ListOrdersLogic.php +++ b/app/Classes/Modules/Orders/ControllersLogic/ListOrdersLogic.php @@ -44,7 +44,7 @@ class ListOrdersLogic extends AbstractControllerLogic { $this->canListOrders->passes(); - $query = $this->listsOrders->execute($this->listsOrders->deserializeFilters($request->input('filters'))); + $query = $this->listsOrders->execute(array_merge($this->listsOrders->deserializeFilters($request->input('filters')), ['with_parcels' => true])); return $this->collectionResponse(OrderResource::collection($query)); diff --git a/app/Classes/Modules/Orders/Services/FetchesDataFromVTPortal.php b/app/Classes/Modules/Orders/Services/FetchesDataFromVTPortal.php index bd807d02..6d77abce 100644 --- a/app/Classes/Modules/Orders/Services/FetchesDataFromVTPortal.php +++ b/app/Classes/Modules/Orders/Services/FetchesDataFromVTPortal.php @@ -54,9 +54,10 @@ class FetchesDataFromVTPortal ] ); - $request = $client->request($method, $url, [\GuzzleHttp\RequestOptions::JSON => $body]); + $request = $client->requestAsync($method, $url, [\GuzzleHttp\RequestOptions::JSON => $body, 'timeout' => 1200]); + + return $request->wait(); - return $request; } /** @@ -66,6 +67,7 @@ class FetchesDataFromVTPortal $latest_cookie = []; $cookieRequest = new \GuzzleHttp\Client(['cookies' => true]); + $cookieRequest->get('https://portalvt.azurewebsites.net'); foreach ($cookieRequest->getConfig('cookies')->toArray() as $key => $row) { $latest_cookie[] = $row['Name'] . '=' . $row['Value']; diff --git a/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php index ccf1b5f0..25eca299 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchLoadedContainersFromVTPortalProcessor.php @@ -128,6 +128,13 @@ class FetchLoadedContainersFromVTPortalProcessor DB::beginTransaction(); $start = $start ? $start : Carbon::now()->subMonth(); + + $startLimit = Carbon::parse('11-08-2021'); + + if($start->isBefore($startLimit)){ + $start = $startLimit; + } + $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"]'; diff --git a/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php index 28a696a8..dfc39838 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php @@ -30,6 +30,7 @@ use App\Models\Transport; use Carbon\Carbon; use GuzzleHttp\Exception\GuzzleException; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Log; class FetchWarehouseReceiveListFromVTPortalProcessor { @@ -108,110 +109,117 @@ class FetchWarehouseReceiveListFromVTPortalProcessor * @param Carbon|null $end * @return array * @throws GuzzleException - * @throws \App\Classes\Exceptions\AccessForbiddenException - * @throws \App\Classes\Exceptions\MalformedRequestException - * @throws \App\Classes\Exceptions\RequestValidationException */ public function execute(?Carbon $start = null, ?Carbon $end = null){ - DB::beginTransaction(); - $start = $start ? $start : Carbon::now()->subMonth(); - $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"]'; + try { - $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.'}}'), ''); + $start = $start ? $start : Carbon::now()->subMonth(); - $response = $this->fetchesDataFRomVTPortal->getResponseBody($warehouseListRequest); + $startLimit = Carbon::parse('11-08-2021'); - foreach ($response->Rows as $parcel){ - $marking = explode('/', explode('CIEF/', $parcel[5])[1]); - - if(!array_key_exists(1, $marking)){ - continue; + if($start->isBefore($startLimit)){ + $start = $startLimit; } - $orderNumber = $marking[1]; + $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"]'; - if(!$parcel[9]){ - continue; - } + $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.'}}'), ''); - try { - $order = $this->fetchesOrder->execute(['reference' => $orderNumber]); - } catch (ResourceNotFoundException $exception) { + $response = $this->fetchesDataFRomVTPortal->getResponseBody($warehouseListRequest); - $oldOrder = OldOrders::where('marking', '=', $orderNumber)->first(); + foreach ($response->Rows as $parcel){ + $marking = explode('/', explode('CIEF/', $parcel[5])[1]); - if(!$oldOrder){ + if(!array_key_exists(1, $marking)){ continue; } - $customerMarking = str_replace(' ', '', str_replace('/', '', str_replace('CIEF/', '', $oldOrder->company->marking))); + $orderNumber = $marking[1]; - $companyModule = CompanyModule::whereHas('inviters', function($query) use ($customerMarking) { - return $query->where('invitee_reference', '=', $customerMarking); - })->first(); - - if(!$companyModule) { + if(!$parcel[9]){ continue; } - if(!$oldOrder->address) { - continue; + try { + $order = $this->fetchesOrder->execute(['reference' => $orderNumber]); + } catch (ResourceNotFoundException $exception) { + + $oldOrder = OldOrders::where('marking', '=', $orderNumber)->first(); + + if(!$oldOrder){ + continue; + } + + $customerMarking = str_replace(' ', '', str_replace('/', '', str_replace('CIEF/', '', $oldOrder->company->marking))); + + $companyModule = CompanyModule::whereHas('inviters', function($query) use ($customerMarking) { + return $query->where('invitee_reference', '=', $customerMarking); + })->first(); + + if(!$companyModule) { + continue; + } + + if(!$oldOrder->address) { + continue; + } + + /** @var Address $address */ + $address = $this->createAddressFromOldAddressProcessor->execute($oldOrder->address, $companyModule); + + if(!$address){ + continue; + } + + + $warehouseId = $parcel[0]; + $originWarehouse = $this->fetchesCompanyModule->execute(['id' => $warehouseId === 11 ? 3 : 4]); + + $order = $this->createOrderProcessor->execute($companyModule->company, $originWarehouse, $address, $orderNumber); } - /** @var Address $address */ - $address = $this->createAddressFromOldAddressProcessor->execute($oldOrder->address, $companyModule); + $packingListReference = $parcel[17]; + $quantity = $parcel[9]; + $measurement = round(($parcel[10]/$quantity) ** (1/3) * 100, 2); + $description = $parcel[7]; + $tracking = $parcel[6]; + $receiveDate = $parcel[1]; - if(!$address){ - continue; + $packingListObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id, PackingListType::WAREHOUSE_RECEIVE_LIST, ApprovalStatus::APPROVED); + + /** @var PackingList $packingList */ + $packingList = $order->packingLists()->where('reference', '=', $packingListReference)->first(); + + if(!$packingList) { + $packingList = $this->createPackingListProcessor->execute($packingListObject, $order); + + $transportObject = new TransportObject(TransportType::LAND, null, $tracking, Carbon::parse($receiveDate), Carbon::parse($receiveDate), ApprovalStatus::APPROVED); + + + $this->createsTransport->execute($transportObject, $packingList); } + /** @var Transport $transport */ + $transport = $packingList->transports()->first(); - $warehouseId = $parcel[0]; - $originWarehouse = $this->fetchesCompanyModule->execute(['id' => $warehouseId === 11 ? 3 : 4]); + $transport->schedules()->update(['status' => ApprovalStatus::EXPIRED]); + + $this->createsSchedule->execute($transport, new ScheduleObject(Carbon::parse($receiveDate), Carbon::parse($receiveDate), ApprovalStatus::APPROVED)); + + $packingList->packages()->delete(); + + $packageObject = new PackageObject(PackageType::CARTON, $description, $measurement, $measurement, $measurement, 0, $quantity, ApprovalStatus::APPROVED); + $this->createPackageProcessor->execute($packageObject, $packingList); - $order = $this->createOrderProcessor->execute($companyModule->company, $originWarehouse, $address, $orderNumber); } - - $packingListReference = $parcel[17]; - $quantity = $parcel[9]; - $measurement = round(($parcel[10]/$quantity) ** (1/3) * 100, 2); - $description = $parcel[7]; - $tracking = $parcel[6]; - $receiveDate = $parcel[1]; - - $packingListObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id, PackingListType::WAREHOUSE_RECEIVE_LIST, ApprovalStatus::APPROVED); - - /** @var PackingList $packingList */ - $packingList = $order->packingLists()->where('reference', '=', $packingListReference)->first(); - - if(!$packingList) { - $packingList = $this->createPackingListProcessor->execute($packingListObject, $order); - - $transportObject = new TransportObject(TransportType::LAND, null, $tracking, Carbon::parse($receiveDate), Carbon::parse($receiveDate), ApprovalStatus::APPROVED); - - - $this->createsTransport->execute($transportObject, $packingList); - } - - /** @var Transport $transport */ - $transport = $packingList->transports()->first(); - - $transport->schedules()->update(['status' => ApprovalStatus::EXPIRED]); - - $this->createsSchedule->execute($transport, new ScheduleObject(Carbon::parse($receiveDate), Carbon::parse($receiveDate), ApprovalStatus::APPROVED)); - - $packingList->packages()->delete(); - - $packageObject = new PackageObject(PackageType::CARTON, $description, $measurement, $measurement, $measurement, 0, $quantity, ApprovalStatus::APPROVED); - $this->createPackageProcessor->execute($packageObject, $packingList); - + return []; + } catch (\Exception $exception){ + Log::error($exception->getMessage()); } - DB::commit(); - return []; } diff --git a/database/seeders/OrdersTableSeeder.php b/database/seeders/OrdersTableSeeder.php index b4984055..c9fb6667 100644 --- a/database/seeders/OrdersTableSeeder.php +++ b/database/seeders/OrdersTableSeeder.php @@ -22,10 +22,10 @@ class OrdersTableSeeder extends Seeder public function run() { FetchWarehouseReceiveListFromVTPortalJob::dispatch(); - FetchLoadedContainersFromVTPortalJob::dispatch()->delay(now()->addMinutes(20)); - FetchPackingListFromVTPortalJob::dispatch()->delay(now()->addMinutes(40)); - FetchContainersStatusUpdateFromVTPortalJob::dispatch()->delay(now()->addMinutes(60)); - FetchDeliveryListFromVTPortalJob::dispatch()->delay(now()->addMinutes(80)); + FetchLoadedContainersFromVTPortalJob::dispatch()->delay(now()->addMinutes(5)); + FetchPackingListFromVTPortalJob::dispatch()->delay(now()->addMinutes(10)); + FetchContainersStatusUpdateFromVTPortalJob::dispatch()->delay(now()->addMinutes(15)); + FetchDeliveryListFromVTPortalJob::dispatch()->delay(now()->addMinutes(20)); } } diff --git a/resources/assets/vue/components/orders/elements/OrderComponent.vue b/resources/assets/vue/components/orders/elements/OrderComponent.vue index d87533f1..d7add0c4 100644 --- a/resources/assets/vue/components/orders/elements/OrderComponent.vue +++ b/resources/assets/vue/components/orders/elements/OrderComponent.vue @@ -39,15 +39,15 @@
Received -
0
+
{{item.parcels.reduce((total, obj) => obj.quantity + total, 0)}}
In Transit -
0
+
{{item.in_transit_packages.reduce((total, obj) => obj.quantity + total, 0)}}
Delivered -
0
+
{{item.delivered_packages.reduce((total, obj) => obj.quantity + total, 0)}}