From 7008a01b117cb1549ac4cfb455ff4db1d54cebeb Mon Sep 17 00:00:00 2001 From: omair saleh Date: Thu, 2 Sep 2021 12:27:40 +0800 Subject: [PATCH 1/8] fix reschedule containers etd bug --- .../FetchContainersStatusUpdateFromVTPortalProcessor.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Classes/Modules/PackingLists/Processors/FetchContainersStatusUpdateFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchContainersStatusUpdateFromVTPortalProcessor.php index a50bbfdf..208c8b31 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchContainersStatusUpdateFromVTPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchContainersStatusUpdateFromVTPortalProcessor.php @@ -107,9 +107,11 @@ class FetchContainersStatusUpdateFromVTPortalProcessor if($delayDate){ $delayDate = Carbon::parse($delayDate); $transport = $container->transports()->first(); + $schedule = $transport->schedules()->where('eta', '=', $delayDate)->first(); $etd = $delayDate->subDays(5); - if(!$schedule){ + + if($schedule){ $etd = $schedule->etd; $transport->schedules()->update(['status' => ApprovalStatus::EXPIRED]); } From 842fc52b4e4505aa9f89d3c929bd05819bef5fe9 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Thu, 2 Sep 2021 16:51:10 +0800 Subject: [PATCH 2/8] fix warehouse list bugs --- .../CreateAddressFromOldAddressProcessor.php | 5 +- ...ehouseReceiveListFromVTPortalProcessor.php | 18 +++++-- app/Models/OldOrders.php | 2 +- database/seeders/DeleteOldOrdersSeeder.php | 54 +++++++++++++++++++ 4 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 database/seeders/DeleteOldOrdersSeeder.php 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/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php index 862fdb60..476b1426 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php @@ -125,6 +125,7 @@ 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.'}}'), ''); @@ -132,6 +133,7 @@ class FetchWarehouseReceiveListFromVTPortalProcessor $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/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/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(); + } + } + } + +} From 050dc8ac7ba2dba80b267f7ca6e0780ffd813b8e Mon Sep 17 00:00:00 2001 From: omair saleh Date: Thu, 2 Sep 2021 22:20:01 +0800 Subject: [PATCH 3/8] frontend suggested changes --- ...inersStatusUpdateFromVTPortalProcessor.php | 16 ++--- app/Http/Resources/ContainerResource.php | 2 +- app/Http/Resources/TransportResource.php | 2 +- database/seeders/OrdersTableSeeder.php | 1 - .../elements/CustomerProfileComponent.vue | 66 +++++++++++-------- .../orders/elements/PackageComponent.vue | 50 +++++++++++--- .../orders/elements/ParcelComponent.vue | 10 ++- .../WarehouseListSectionComponent.vue | 12 ++++ .../views/pages/warehouse_list.blade.php | 4 ++ routes/web.php | 4 ++ 10 files changed, 118 insertions(+), 49 deletions(-) create mode 100644 resources/assets/vue/components/orders/sections/WarehouseListSectionComponent.vue create mode 100644 resources/views/pages/warehouse_list.blade.php diff --git a/app/Classes/Modules/PackingLists/Processors/FetchContainersStatusUpdateFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchContainersStatusUpdateFromVTPortalProcessor.php index 208c8b31..cddc41ea 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchContainersStatusUpdateFromVTPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchContainersStatusUpdateFromVTPortalProcessor.php @@ -89,6 +89,8 @@ class FetchContainersStatusUpdateFromVTPortalProcessor $eta = Carbon::parse($eta); + $etd = Carbon::parse($eta)->subDays(5); + $delayDate = $containerDetails[6]; $containerStatus = $containerDetails[9]; @@ -98,25 +100,23 @@ 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'){ diff --git a/app/Http/Resources/ContainerResource.php b/app/Http/Resources/ContainerResource.php index 59c60916..f1d3671f 100644 --- a/app/Http/Resources/ContainerResource.php +++ b/app/Http/Resources/ContainerResource.php @@ -20,7 +20,7 @@ class ContainerResource extends JsonResource 'container_type' => $this->container_type, 'container_number' => $this->container_number, 'seal_reference' => $this->seal_reference, - 'transport' => TransportResource::collection($this->transports), + 'transport' => new TransportResource($this->transports()->first()), ]; } } 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/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/vue/components/companies/elements/CustomerProfileComponent.vue b/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue index 5584ec86..59d0dd1e 100644 --- a/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue +++ b/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue @@ -30,25 +30,29 @@ -
+
-
+
Account Owner
{{item.employee.name}}
+
+
+
Account Owner
+
{{item.employee.email}}
+
+
-
+
Contact Number
{{item.contact.phone}}
-
-
WeChat ID
@@ -57,35 +61,39 @@
-
-
-
+
+
+
-
{{ item.type === 0 ? 'Identification Card' : 'SSM Registration' }}
-
{{item.identification.reference}}
-
-
- - - +
+
+
{{ item.type === 0 ? 'Identification Card' : 'SSM Registration' }}
+
{{item.identification.reference}}
+
+
+ + + +
+
-
-
-
-
-
-
- +
+
+
+
+ +
+
+ + +
- - -
diff --git a/resources/assets/vue/components/orders/elements/PackageComponent.vue b/resources/assets/vue/components/orders/elements/PackageComponent.vue index f9a1da89..f1465b7c 100644 --- a/resources/assets/vue/components/orders/elements/PackageComponent.vue +++ b/resources/assets/vue/components/orders/elements/PackageComponent.vue @@ -66,15 +66,29 @@
-
-
-
- +
+
+
+
+
+ +
+
+
+
+
+
+
-
+ +
+
+
+
+
@@ -84,11 +98,31 @@
+
+
+
+
+ Etd +
{{schedule.etd}}
+
+
+ Eta +
{{schedule.eta}}
+
+
+
+
-
- Shipping Date -
{{item.container ? item.container.transport[0].current_schedule.etd : 'n/a'}}
+
+
+ Etd +
{{item.container ? item.container.transport.current_schedule.etd : 'n/a'}}
+
+
+ {{!item.container.transport.schedule_history.length ? 'Eta' : 'Rescheduled Eta' }} +
{{item.container ? item.container.transport.current_schedule.eta : 'n/a'}}
+
diff --git a/resources/assets/vue/components/orders/elements/ParcelComponent.vue b/resources/assets/vue/components/orders/elements/ParcelComponent.vue index 6c037efc..74c2be6d 100644 --- a/resources/assets/vue/components/orders/elements/ParcelComponent.vue +++ b/resources/assets/vue/components/orders/elements/ParcelComponent.vue @@ -38,7 +38,15 @@
-
+
+
+

Order Number

+
+
+

{{item.order.reference}}

+
+
+

Description

diff --git a/resources/assets/vue/components/orders/sections/WarehouseListSectionComponent.vue b/resources/assets/vue/components/orders/sections/WarehouseListSectionComponent.vue new file mode 100644 index 00000000..a56afe24 --- /dev/null +++ b/resources/assets/vue/components/orders/sections/WarehouseListSectionComponent.vue @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/resources/views/pages/warehouse_list.blade.php b/resources/views/pages/warehouse_list.blade.php new file mode 100644 index 00000000..b12f825a --- /dev/null +++ b/resources/views/pages/warehouse_list.blade.php @@ -0,0 +1,4 @@ +@extends('layouts.base_portal') +@section('inner_content') + +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 0281ac90..b1370bfe 100644 --- a/routes/web.php +++ b/routes/web.php @@ -61,6 +61,10 @@ Route::get('/address', function () { return view('pages.addresses.index'); })->name('address'); +Route::get('/warehouse-list', function () { + return view('pages.warehouse_list'); +})->name('warehouse.list'); + Route::get('/customer/{marking}', function ($marking) { $connection = CompanyConnection::where('invitee_reference', $marking)->first(); $id = $connection->invitee->company->id; From 8e05c287b88d3937112801fffb1eaff2df1359ab Mon Sep 17 00:00:00 2001 From: omair saleh Date: Thu, 2 Sep 2021 22:25:03 +0800 Subject: [PATCH 4/8] frontend suggested changes --- resources/views/partials/menu.blade.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/resources/views/partials/menu.blade.php b/resources/views/partials/menu.blade.php index 90d7d4d2..73f727b9 100644 --- a/resources/views/partials/menu.blade.php +++ b/resources/views/partials/menu.blade.php @@ -41,6 +41,17 @@
Orders
+
+
+ +
+ +
Date: Thu, 2 Sep 2021 22:32:01 +0800 Subject: [PATCH 5/8] change scheduled jobs into a chain --- app/Console/Kernel.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index bec96f83..5dd79445 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -29,11 +29,14 @@ 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->call(function(){ + FetchWarehouseReceiveListFromVTPortalJob::withChain([ + new FetchLoadedContainersFromVTPortalJob, + new FetchPackingListFromVTPortalJob, + new FetchContainersStatusUpdateFromVTPortalJob, + new FetchDeliveryListFromVTPortalJob + ])->dispatch(); + })->dailyAt('21:00'); } /** From 1edcb296f3947da811c257408158695e5238ad6a Mon Sep 17 00:00:00 2001 From: omair saleh Date: Thu, 2 Sep 2021 22:39:37 +0800 Subject: [PATCH 6/8] sort orders by latest --- .../vue/components/orders/sections/OrderSectionComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/orders/sections/OrderSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderSectionComponent.vue index 18df2ac5..840e5ecf 100644 --- a/resources/assets/vue/components/orders/sections/OrderSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderSectionComponent.vue @@ -170,7 +170,7 @@
- + From 3ee8afc4a4a8768261354a7f33fad8efd539a6bc Mon Sep 17 00:00:00 2001 From: omair saleh Date: Fri, 3 Sep 2021 13:07:31 +0800 Subject: [PATCH 7/8] add new schedule for fetching from vt at 11:30 am --- app/Console/Kernel.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 5dd79445..795f9ab6 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -29,6 +29,16 @@ class Kernel extends ConsoleKernel */ protected function schedule(Schedule $schedule) { + + $schedule->call(function(){ + FetchWarehouseReceiveListFromVTPortalJob::withChain([ + new FetchLoadedContainersFromVTPortalJob, + new FetchPackingListFromVTPortalJob, + new FetchContainersStatusUpdateFromVTPortalJob, + new FetchDeliveryListFromVTPortalJob + ])->dispatch(); + })->dailyAt('11:30'); + $schedule->call(function(){ FetchWarehouseReceiveListFromVTPortalJob::withChain([ new FetchLoadedContainersFromVTPortalJob, @@ -37,6 +47,8 @@ class Kernel extends ConsoleKernel new FetchDeliveryListFromVTPortalJob ])->dispatch(); })->dailyAt('21:00'); + + } /** From b049c95ca25ea69398aaec7abe061b8d867b30ad Mon Sep 17 00:00:00 2001 From: omair saleh Date: Fri, 3 Sep 2021 17:25:17 +0800 Subject: [PATCH 8/8] change schedule for vt portal fetch --- app/Console/Kernel.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 795f9ab6..83b805ad 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -37,7 +37,7 @@ class Kernel extends ConsoleKernel new FetchContainersStatusUpdateFromVTPortalJob, new FetchDeliveryListFromVTPortalJob ])->dispatch(); - })->dailyAt('11:30'); + })->dailyAt('15:00'); $schedule->call(function(){ FetchWarehouseReceiveListFromVTPortalJob::withChain([