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/FetchContainersStatusUpdateFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchContainersStatusUpdateFromVTPortalProcessor.php index a50bbfdf..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,23 +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/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/Console/Kernel.php b/app/Console/Kernel.php index bec96f83..83b805ad 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -29,11 +29,26 @@ 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('15:00'); + + $schedule->call(function(){ + FetchWarehouseReceiveListFromVTPortalJob::withChain([ + new FetchLoadedContainersFromVTPortalJob, + new FetchPackingListFromVTPortalJob, + new FetchContainersStatusUpdateFromVTPortalJob, + new FetchDeliveryListFromVTPortalJob + ])->dispatch(); + })->dailyAt('21:00'); + + } /** 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/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(); + } + } + } + +} 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/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 @@
- + 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/resources/views/partials/menu.blade.php b/resources/views/partials/menu.blade.php index abd5c4bb..61420e0b 100644 --- a/resources/views/partials/menu.blade.php +++ b/resources/views/partials/menu.blade.php @@ -41,6 +41,17 @@
Orders
+
+
+ +
+ +
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;