diff --git a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php index dd367eea..7ee21e47 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php @@ -7,7 +7,6 @@ use App\Classes\Modules\Companies\Services\FetchesCompanyModule; use App\Classes\Modules\Orders\Services\FetchesDataFromYDPortal; use App\Classes\Modules\Orders\Services\FetchesOrder; - use App\Classes\Modules\PackingLists\DataTransferObjects\ContainerObject; use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject; use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject; @@ -131,7 +130,6 @@ class FetchOrderListsFromYdPortalProcessor * @param Carbon|null $start * @param Carbon|null $end * @return void - * @throws \GuzzleHttp\Exception\GuzzleException */ public function execute(?Carbon $start = null, ?Carbon $end = null) { @@ -152,22 +150,25 @@ class FetchOrderListsFromYdPortalProcessor ]); $rows = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest); - + foreach($rows->data as $row){ - DB::beginTransaction(); $containerReference = null; $loadingDate = null; $unstuffingDate = null; + $deliveryDate = null; $etd = null; $eta = null; + $delayDate = null; $trackingRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/ApiTracking.ashx', 'GET', [ 'trakingno' => $row->expressno ]); + $rows = $this->fetchesDataFRomYDPortal->getResponseBody($trackingRequest); - foreach ($rows->data as $trackingRow) { - if($trackingRow->tracking === '货物已送达仓库准备入库中'){ + + foreach (array_reverse($rows->data) as $trackingRow) { + if ($trackingRow->tracking === '货物已送达仓库准备入库中') { $receiveDate = Carbon::parse($trackingRow->trackingtime); } @@ -179,40 +180,63 @@ class FetchOrderListsFromYdPortalProcessor $eta = Carbon::parse($tracking[2]); } - if($trackingRow->tracking === '货物已进目的港仓库'){ + if (strpos($trackingRow->tracking, '预计船时间为') !== false) { + $tracking = explode('预计船时间为', $trackingRow->tracking); + $delayDate = Carbon::parse(explode('日', $tracking[1])[0]); + } + + if (strpos($trackingRow->tracking, '预计开船为') !== false) { + $tracking = explode('预计开船为', $trackingRow->tracking); + $delayDate = Carbon::parse(explode('日', $tracking[1])[0]); + } + + if ($trackingRow->tracking === '货物已进目的港仓库') { $unstuffingDate = Carbon::parse($trackingRow->trackingtime); } - } - $customerno = preg_split('/(-|\/)/', $row->customerno); - - if (!array_key_exists(2, $customerno)){ - if (!array_key_exists(1, $customerno)){ - continue; + if ($trackingRow->tracking === '货物已派送完成') { + $deliveryDate = Carbon::parse($trackingRow->trackingtime); } - $customerno[2] = substr($customerno[1], -9); } + $customerno = preg_split('(-|\(|\)|\/)', $row->customerno); - $orderNumber = $customerno[2]; + $orderNumber = $customerno[array_key_last($customerno)]; $allow_contract = true; + try { $order = $this->fetchesOrder->execute(['reference' => $orderNumber]); } catch (ResourceNotFoundException $exception) { - $order = $this->fetchesCompanyModule->execute(['id' => 1]); - $allow_contract = false; + try { + $order = $this->fetchesOrder->execute(['reference' => substr($orderNumber, -9)]); + } catch (ResourceNotFoundException $exception) { + $order = $this->fetchesCompanyModule->execute(['id' => 1]); + $allow_contract = false; + } + } + DB::beginTransaction(); + $packingListReference = $row->expressno; try{ - $packingList = $this->fetchesPackingList->execute(['reference' => $row->expressno]); - } catch (ResourceNotFoundException $exception){ + $packingList = $this->fetchesPackingList->execute(['reference' => $row->expressno, 'type' => PackingListType::SHIPPING_PACKING_LIST]); + + $packingList->packages()->delete(); + $replica = $packingList->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST_REPLICA)->first(); + if($replica) $replica->packages()->delete(); + + $warehouseReceiveList = $this->fetchesPackingList->execute(['reference' => $row->expressno, 'type' => PackingListType::WAREHOUSE_RECEIVE_LIST]); + $warehouseReceiveList->packages()->delete(); + $replica = $warehouseReceiveList->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST_REPLICA)->first(); + if($replica) $replica->packages()->delete(); + + } catch (ResourceNotFoundException $exception) { if (!$allow_contract) { $appointee_id = 2037; - } - else { + } else { $appointee_id = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id; } @@ -244,24 +268,41 @@ class FetchOrderListsFromYdPortalProcessor $this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations); } - $packingListObject = new PackingListObject($packingListReference, $appointee_id, PackingListType::SHIPPING_PACKING_LIST, ApprovalStatus::PENDING_VERIFICATION , !$allow_contract ? null : $contractReference); + $packingListObject = new PackingListObject($packingListReference, $appointee_id, PackingListType::SHIPPING_PACKING_LIST, ApprovalStatus::PENDING_VERIFICATION, !$allow_contract ? null : $contractReference); /** @var PackingList $packingList */ $packingList = $this->createPackingListProcessor->execute($packingListObject, $order); if ($allow_contract) { - foreach($contractObligations as $obligation) { + foreach ($contractObligations as $obligation) { $stepObject = new StepsObject($order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, $obligation->reference, $obligation->sequence, $obligation->hash_id); $this->createsStep->execute($packingList, $stepObject); } } + } - foreach($row->deliverysize as $package) { - $packageObject = new PackageObject(PackageType::CARTON, $row->goodname, (float) $package->width, (float) $package->height, (float) $package->length, 0, (float) $package->num, ApprovalStatus::APPROVED); + foreach($row->deliverysize as $package) { + $packageObject = new PackageObject(PackageType::CARTON, $row->goodname, (float) $package->width, (float) $package->height, (float) $package->length, 0, (float) $package->num, ApprovalStatus::APPROVED); + $this->createPackageProcessor->execute($packageObject, $warehouseReceiveList); + $this->createPackageProcessor->execute($packageObject, $packingList); + } - $package = $this->createPackageProcessor->execute($packageObject, $warehouseReceiveList); - $package = $this->createPackageProcessor->execute($packageObject, $packingList); - } + $weightCbm = (float) $row->weight / 500; + $overWeightCbm = $weightCbm - $packingList->packages()->sum(DB::raw('(width/100) * (height/100) * (length/100) * quantity')); + + if($overWeightCbm > 0){ + $measurement = round($overWeightCbm ** (1/3) * 100, 2); + $packageObject = new PackageObject(PackageType::OVER_WEIGHT, 'Overweight CBM', (float) $measurement, (float) $measurement, (float) $measurement, 0, 1, ApprovalStatus::APPROVED); + $this->createPackageProcessor->execute($packageObject, $packingList); + } + + DB::commit(); + + $marking = $order->companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference; + if(!in_array($marking, ['2192KAA', '2353GFE', '6866DTR', '153DSR', '1291NSC', '8288MIB'])){ + $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/confirmsendorder.ashx', 'GET', [ + 'expressno' => $row->expressno + ]); } if($containerReference) { @@ -315,9 +356,27 @@ class FetchOrderListsFromYdPortalProcessor } } - DB::commit(); + if($deliveryDate){ + + if($packingList->transports){ + continue; + } + + $packingList->status = ApprovalStatus::COMPLETED; + $packingList->save(); + + $deliveryDate = Carbon::parse($deliveryDate); + $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]); + } - dump('added'); } } catch (\Exception $exception) { Log::debug($exception); @@ -325,4 +384,4 @@ class FetchOrderListsFromYdPortalProcessor } -} \ No newline at end of file +} diff --git a/resources/assets/vue/components/companies/sections/CustomerProfileSectionComponent.vue b/resources/assets/vue/components/companies/sections/CustomerProfileSectionComponent.vue index 7a60dbea..60466864 100644 --- a/resources/assets/vue/components/companies/sections/CustomerProfileSectionComponent.vue +++ b/resources/assets/vue/components/companies/sections/CustomerProfileSectionComponent.vue @@ -13,7 +13,6 @@