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 @@
[清明节仓库放假通知 Qing Ming Warehouse Holiday Notice]
+
+ 尊敬的客户们:
+
+ 仓库将为 2022年清明节假期做出如下安排 :
+
+ 广州仓库 : 2022 年 4月 4日 - 2022 年 4月 5日 (4月6日复工)
+ 义乌仓库 : 2022 年 4月 3日 - 2022 年 4月 4日 (4月5日复工)
+
+ *放假期间没有仓库人员值班, 请大家安排好送货时间, 感谢
+
+ Dear Customers :
+
+ Our warehouse holiday for Qing Ming is as below :
+
+ Guangzhou : 4 April 2022 - 5 April 2022 (Resume date : 6 April)
+ Yiwu : 3 April 2022 - 4 April 2022 (Resume date : 5 April)
+
+ *Warehouse personnel are on leave during the holiday period, please arrange delivery date in advance, thank you
{{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'}}
Arrival Date
{{data.transport ? data.transport.drop_date : 'n/a'}}