diff --git a/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php b/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php index 5623e4db..83ce0057 100644 --- a/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php +++ b/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php @@ -7,6 +7,7 @@ use App\Classes\Modules\Orders\Standards\Rules\CanApproveChangeOrderAddress; use App\Classes\Modules\Orders\Services\UpdatesOrdersAddress; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\OrderRoleTypes; +use App\Classes\ValueObjects\Constants\PackingListType; use Illuminate\Http\Request; class ApproveChangeOrderAddressProcessor @@ -65,7 +66,11 @@ class ApproveChangeOrderAddressProcessor $address->owner->addresses()->update(['status' => ApprovalStatus::EXPIRED]); $appointee = $address->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id; - $appointee === 2 ? $this->updateDoFromVTPortalProcessor->execute($address) : $this->updateDoFromYDPortalProcessor->execute($address); + if($appointee === 2) { + foreach($address->owner->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST) as $packingList){ + $this->updateDoFromVTPortalProcessor->execute($packingList); + } + } } diff --git a/app/Classes/Modules/Orders/Processors/UpdateDoFromVTPortalProcessor.php b/app/Classes/Modules/Orders/Processors/UpdateDoFromVTPortalProcessor.php index 9485b1c6..da77ca4a 100644 --- a/app/Classes/Modules/Orders/Processors/UpdateDoFromVTPortalProcessor.php +++ b/app/Classes/Modules/Orders/Processors/UpdateDoFromVTPortalProcessor.php @@ -6,23 +6,9 @@ use App\Classes\Exceptions\InternalServerErrorException; use App\Classes\Modules\Orders\Services\FetchesDataFromVTPortal; use App\Classes\Modules\Addresses\Services\FetchesAddress; -use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject; -use App\Classes\Modules\Schedules\Services\CreatesSchedule; -use App\Classes\Modules\Transports\DataTransferObjects\TransportObject; -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\PackingListType; -use App\Classes\ValueObjects\Constants\TransportType; use App\Models\PackingList; -use App\Models\Transport; -use Carbon\Carbon; use GuzzleHttp\Exception\GuzzleException; -use Illuminate\Support\Facades\Log; - -use Illuminate\Http\Request; - class UpdateDoFromVTPortalProcessor { /** @var FetchesDataFromVTPortal */ @@ -43,19 +29,20 @@ class UpdateDoFromVTPortalProcessor } /** - * @param $address + * @param PackingList $packing_list * @return array * @throws GuzzleException + * @throws InternalServerErrorException */ - public function execute($address) { + public function execute(PackingList $packing_list) { if(!app()->environment(['production'])){ return []; } try { - $order = $address->owner()->orderBy('id', 'desc')->first(); - $packing_list = $order->packingLists()->orderBy('id', 'desc')->first(); + $address= $packing_list->owner->addresses()->where('status', ApprovalStatus::APPROVED)->first(); + $order = $packing_list->owner; if ($packing_list) { $contact = $address->contacts()->first(); @@ -67,7 +54,7 @@ class UpdateDoFromVTPortalProcessor $status = 'On Hold'; - if (in_array($packing_list->status, [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])) { + if (in_array($packing_list->status, [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])) { $status = 'Release'; } @@ -77,6 +64,7 @@ class UpdateDoFromVTPortalProcessor if ($vt_do) { foreach ($vt_do->Rows as $key => $row) { + if($row[4] !== $packing_list->containers()->first()->reference) continue; $vt_do_update = $this->fetchesDataFRomVTPortal->clientRequest( 'http://portal.vtnation.com.my/Services/DataControllerService.asmx/Execute', 'POST', @@ -141,7 +129,7 @@ class UpdateDoFromVTPortalProcessor } } catch (\Exception $exception){ - return []; + throw new InternalServerErrorException('failed to approve address due to an error related to VT portal: '.$exception->getMessage()); } } diff --git a/app/Classes/Modules/Orders/Processors/UpdateDoFromYDPortalProcessor.php b/app/Classes/Modules/Orders/Processors/UpdateDoFromYDPortalProcessor.php index 1404f149..9e9e6fe6 100644 --- a/app/Classes/Modules/Orders/Processors/UpdateDoFromYDPortalProcessor.php +++ b/app/Classes/Modules/Orders/Processors/UpdateDoFromYDPortalProcessor.php @@ -8,6 +8,7 @@ use App\Classes\Modules\Addresses\Services\FetchesAddress; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\PackingListType; +use App\Models\PackingList; use Illuminate\Support\Facades\Log; class UpdateDoFromYDPortalProcessor @@ -30,36 +31,34 @@ class UpdateDoFromYDPortalProcessor } /** - * @param $address + * @param PackingList $packingList * @return void * @throws InternalServerErrorException */ - public function execute($address) { + public function execute(PackingList $packingList) { + if(!app()->environment(['production'])){ + return; + } + try { - $order = $address->owner()->orderBy('id', 'desc')->first(); - $packing_lists = $order->packingLists() - ->where('type', PackingListType::SHIPPING_PACKING_LIST) - ->where('status', '!=', ApprovalStatus::SUSPENDED) - ->orderBy('id', 'desc')->get(); + $address = $packingList->owner->addresses()->where('status', ApprovalStatus::APPROVED)->first(); + if (!in_array($packingList->status, [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])) { + return; + } - foreach ($packing_lists as $key => $row) { - if ($row->status === ApprovalStatus::SUSPENDED) { - continue; - } + $contact = $address->contacts()->first(); + $remark = $address->remarks()->first(); - $contact = $address->contacts()->first(); - $remark = $address->remarks()->first(); + $phone = $contact ? $contact->phone : null; + $reference = $contact ? $contact->reference : null; + $remark = $remark ? $remark->content : 'URGENT!!! PLEASE CALL BEFORE ONE DAY DELIVERY.'; - $phone = $contact ? $contact->phone : null; - $reference = $contact ? $contact->reference : null; - $remark = $remark ? $remark->content : 'URGENT!!! PLEASE CALL BEFORE ONE DAY DELIVERY.'; - - $this->fetchesDataFRomYDPortal->clientRequest( - 'http://www.yd-wl.com/api/UpdateOrderAddress.ashx', - 'POST', + $this->fetchesDataFRomYDPortal->clientRequest( + 'http://www.yd-wl.com/api/UpdateOrderAddress.ashx', + 'POST', [ - 'expressno' => $row->reference, + 'expressno' => $packingList->reference, 'customers_name' => $reference, 'cellphone' => $phone, 'postcode' => $address->postcode, @@ -68,8 +67,6 @@ class UpdateDoFromYDPortalProcessor ]); - } - } catch (\Exception $exception){ throw new InternalServerErrorException('failed to approve address due to an error related to YD portal'); } diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php index 19b70a55..306866aa 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php @@ -14,6 +14,7 @@ use App\Classes\Modules\Orders\Processors\UpdateDoFromVTPortalProcessor; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\OrderRoleTypes; use App\Http\Resources\PackingListResource; +use App\Models\PackingList; use ErrorException; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -70,16 +71,16 @@ class UpdatePackingListStatusLogic extends AbstractControllerLogic { $packingList = $this->fetchesPackingList->execute(['id' => $request->route('id')]); - $packing_list = $this->updatesPackingListStatus->execute($packingList, $request->route('status')); - $address = $packing_list->owner()->first()->addresses()->where('status', ApprovalStatus::APPROVED)->first(); + /** @var PackingList $packingList */ + $packingList = $this->updatesPackingListStatus->execute($packingList, $request->route('status')); // $appointee = $address->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id; - $this->updateDoFromVTPortalProcessor->execute($address); - $this->updateDoFromYDPortalProcessor->execute($address); + $this->updateDoFromVTPortalProcessor->execute($packingList); + $this->updateDoFromYDPortalProcessor->execute($packingList); - return $this->resourceResponse(new PackingListResource($packing_list)); + return $this->resourceResponse(new PackingListResource($packingList)); } } diff --git a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php index 4cd92f9d..1b409fc2 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php @@ -36,6 +36,7 @@ use App\Models\Transport; use Carbon\Carbon; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; +use Illuminate\Support\Str; class FetchOrderListsFromYdPortalProcessor { @@ -153,7 +154,6 @@ class FetchOrderListsFromYdPortalProcessor $rows = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest); foreach($rows->data as $row){ - $containerReference = null; $loadingDate = null; $unstuffingDate = null; @@ -168,6 +168,11 @@ class FetchOrderListsFromYdPortalProcessor $rows = $this->fetchesDataFRomYDPortal->getResponseBody($trackingRequest); + if(!$rows){ + Log::debug($row->expressno); + continue; + } + foreach (array_reverse($rows->data) as $trackingRow) { if ($trackingRow->tracking === '货物已送达仓库准备入库中') { $receiveDate = Carbon::parse($trackingRow->trackingtime); @@ -217,7 +222,7 @@ class FetchOrderListsFromYdPortalProcessor $unstuffingDate = Carbon::parse($trackingRow->trackingtime); } - if ($trackingRow->tracking === '货物已派送完成') { + if (Str::contains($trackingRow->tracking, ['派送中'])) { $deliveryDate = Carbon::parse($trackingRow->trackingtime); } } @@ -310,6 +315,13 @@ class FetchOrderListsFromYdPortalProcessor $this->createPackageProcessor->execute($packageObject, $packingList); } + if(!count($row->deliverysize)){ + $measurement = round(((float) $row->volume / (float) $row->goodcount) ** (1/3) * 100, 2); + $packageObject = new PackageObject(PackageType::CARTON, $row->goodname, (float) $measurement, (float) $measurement, (float) $measurement, 0, (float) $row->goodcount, ApprovalStatus::APPROVED); + $this->createPackageProcessor->execute($packageObject, $warehouseReceiveList); + $this->createPackageProcessor->execute($packageObject, $packingList); + } + $weightCbm = (float) $row->weight / 500; $overWeightCbm = $weightCbm - $packingList->packages()->sum(DB::raw('(width/100) * (height/100) * (length/100) * quantity')); @@ -395,7 +407,7 @@ class FetchOrderListsFromYdPortalProcessor } } - if($deliveryDate && !$packingList->transports){ + if($deliveryDate && !$packingList->transports()->exists()){ $packingList->status = ApprovalStatus::COMPLETED; $packingList->save(); diff --git a/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php index fc15e580..c8d126a5 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php @@ -135,14 +135,12 @@ class FetchWarehouseReceiveListFromVTPortalProcessor foreach ($response->Rows as $parcel){ $marking = preg_split('(-|\(|\)|\/)', str_replace("/YW","", $parcel[5])); - $orderNumber = $marking[array_key_last($marking)]; if(!$parcel[9]){ continue; } - try { $order = $this->fetchesOrder->execute(['reference' => $orderNumber]); } catch (ResourceNotFoundException $exception) { diff --git a/app/Http/Resources/TransportResource.php b/app/Http/Resources/TransportResource.php index b931964d..2677782f 100644 --- a/app/Http/Resources/TransportResource.php +++ b/app/Http/Resources/TransportResource.php @@ -3,6 +3,7 @@ namespace App\Http\Resources; use App\Classes\ValueObjects\Constants\ApprovalStatus; +use Carbon\Carbon; use Illuminate\Http\Resources\Json\JsonResource; class TransportResource extends JsonResource @@ -24,7 +25,8 @@ 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::EXPIRED)->get()) + 'schedule_history' => ScheduleResource::collection($this->schedules()->where('status', '=', ApprovalStatus::EXPIRED)->get()), + 'dropped_days' => Carbon::now()->diffInDays($this->drop_date, false) ]; } } diff --git a/resources/assets/vue/components/companies/sections/CustomerProfileSectionComponent.vue b/resources/assets/vue/components/companies/sections/CustomerProfileSectionComponent.vue index 749e7ef8..b10344e3 100644 --- a/resources/assets/vue/components/companies/sections/CustomerProfileSectionComponent.vue +++ b/resources/assets/vue/components/companies/sections/CustomerProfileSectionComponent.vue @@ -6,6 +6,37 @@ +
diff --git a/resources/assets/vue/components/containers/elements/PackingListComponent.vue b/resources/assets/vue/components/containers/elements/PackingListComponent.vue index 89747c80..1139f971 100644 --- a/resources/assets/vue/components/containers/elements/PackingListComponent.vue +++ b/resources/assets/vue/components/containers/elements/PackingListComponent.vue @@ -23,7 +23,8 @@
-

{{item.transport ? item.transport.current_schedule.eta : 'n/a'}}

+

{{ item.transport.current_schedule.eta }}

+

{{ item.packages[0].container.transport ? item.packages[0].container.transport.dropped_days+' Days': 'n/a'}}

diff --git a/resources/assets/vue/components/orders/elements/UnclaimedPackinglistComponent.vue b/resources/assets/vue/components/orders/elements/UnclaimedPackinglistComponent.vue index eef618d7..ab09f62a 100644 --- a/resources/assets/vue/components/orders/elements/UnclaimedPackinglistComponent.vue +++ b/resources/assets/vue/components/orders/elements/UnclaimedPackinglistComponent.vue @@ -22,17 +22,18 @@

Arrival Date

{{data.transport ? data.transport.drop_date : 'n/a'}}

-
+
+ + +
- - - + diff --git a/resources/views/pages/admin/dashboard.blade.php b/resources/views/pages/admin/dashboard.blade.php index ead4eed8..62a6df6b 100644 --- a/resources/views/pages/admin/dashboard.blade.php +++ b/resources/views/pages/admin/dashboard.blade.php @@ -44,6 +44,20 @@
+
+
+
+
+
Unclaimed Packing Lists
+
+
+ + + +
+
diff --git a/resources/views/pages/delivery_list.blade.php b/resources/views/pages/delivery_list.blade.php index 41c6d8e8..2f27f146 100644 --- a/resources/views/pages/delivery_list.blade.php +++ b/resources/views/pages/delivery_list.blade.php @@ -75,55 +75,69 @@
-
-
Marking
-
Quantity
-
CBM
-
Overweight CBM
-
Total CBM
-
status
-
Delivery Date
-
Action
+
+
+
+
Marking
+
Quantity
+
CBM
+
Overweight CBM
+
Total CBM
+
status
+
Delivery Details
+
Delivery Date
+
+
- +
-
-
Marking
-
Quantity
-
CBM
-
Overweight CBM
-
Total CBM
-
status
-
Delivery Date
+
+
+
+
Marking
+
Quantity
+
CBM
+
Overweight CBM
+
Total CBM
+
status
+
Delivery Details
+
Delivery Date
+
+
- +
-
-
Marking
-
Quantity
-
CBM
-
Overweight CBM
-
Total CBM
-
status
-
Delivery Date
+
+
+
+
Marking
+
Quantity
+
CBM
+
Overweight CBM
+
Total CBM
+
status
+
Delivery Details
+
Delivery Date
+
+
- +
diff --git a/routes/web.php b/routes/web.php index 9bcda09f..98a630ec 100644 --- a/routes/web.php +++ b/routes/web.php @@ -125,7 +125,7 @@ Route::get('/orders/refresh', function(){ Route::get('/containers/refresh', function(){ - (App()->make(\App\Classes\Modules\PackingLists\Processors\FetchPackingListFromVTPortalProcessor::class))->execute(); + (App()->make(\App\Classes\Modules\PackingLists\Processors\FetchWarehouseReceiveListFromVTPortalProcessor::class))->execute(); // FetchLoadedContainersFromVTPortalJob::dispatch(); // FetchContainersStatusUpdateFromVTPortalJob::dispatch(); @@ -241,7 +241,7 @@ Route::get('/settings', function () { Route::get('/customer/summary/monthly', function () { // $containers = Container::whereMonth('loading_date', 1)->where('owner_id', 3)->get(); - $containers = Container::whereIn('reference', ['SM21-166', 'SM21-168', 'SM21-170', 'SM21-171', 'SM21-172', 'SM21-173', 'EPS-3833'])->get(); + $containers = Container::whereIn('reference', ['EPS-3850', 'EPS-3863', 'WP-1331', 'EPS-3856'])->get(); foreach ($containers as $container){ $packingLists = $container->packingLists()->get()->filter(function ($packingList) { return $packingList->owner->company_module_id === 248;