diff --git a/.env.example b/.env.example index a75778c8..5ae78676 100644 --- a/.env.example +++ b/.env.example @@ -53,3 +53,5 @@ MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" UNITY_APP_URL="https://unity.izyim.com" EXCHANGE_URL=https://dev.exchange.cief-malaysia.com/ MIX_EXCHANGE_URL="${EXCHANGE_URL}" + +YD_API_CODE='' diff --git a/app/Classes/Jobs/CurlYdOrderListJob.php b/app/Classes/Jobs/CurlYdOrderListJob.php index 462f2b3f..ee5fba54 100644 --- a/app/Classes/Jobs/CurlYdOrderListJob.php +++ b/app/Classes/Jobs/CurlYdOrderListJob.php @@ -29,6 +29,7 @@ class CurlYdOrderListJob implements ShouldQueue * Execute the job. * * @return void + * @throws \Illuminate\Contracts\Container\BindingResolutionException */ public function handle() { diff --git a/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php index 8b7a6fb8..91f5c42e 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php @@ -89,15 +89,13 @@ class CreateAddressLogic extends AbstractControllerLogic /** @var Address $address */ $address = $this->createsAddress->execute($this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]), $object); - $contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', ''); - - if($contactObject->getPhone()){ + if($request->input('phone')){ + $contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', ''); $this->createContactProcessor->execute($contactObject, $address); } - $remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id); - - if($remarkObject->getContent()){ + if($request->input('remark')){ + $remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id); $this->createRemarkProcessor->execute($address, $remarkObject); } diff --git a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php index 25fb6054..95b8bf64 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php @@ -90,15 +90,13 @@ class UpdateAddressLogic extends AbstractControllerLogic $address->contacts()->delete(); $address->remarks()->delete(); - $contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', ''); - - if($contactObject->getPhone()){ + if($request->input('phone')){ + $contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', ''); $this->createContactProcessor->execute($contactObject, $address); } - $remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id); - - if($remarkObject->getContent()){ + if($request->input('remark')){ + $remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id); $this->createRemarkProcessor->execute($address, $remarkObject); } diff --git a/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php b/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php index 40112301..c7d17487 100644 --- a/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php +++ b/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php @@ -40,8 +40,10 @@ class ApproveChangeOrderAddressProcessor * @param Request $request * @return mixed * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\InternalServerErrorException * @throws \App\Classes\Exceptions\MalformedRequestException * @throws \App\Classes\Exceptions\RequestValidationException + * @throws \GuzzleHttp\Exception\GuzzleException */ public function execute(Request $request) { @@ -53,12 +55,11 @@ class ApproveChangeOrderAddressProcessor if($status === ApprovalStatus::APPROVED){ $address->owner->addresses()->update(['status' => ApprovalStatus::EXPIRED]); + $this->updateDoFromVTPortalProcessor->execute($address); } $address = $this->updatesOrdersAddress->execute($address, $status); - $vt_do_update = $this->updateDoFromVTPortalProcessor->execute($address); - return $address; } } diff --git a/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php b/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php index 994803e3..81b31026 100644 --- a/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php +++ b/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php @@ -59,6 +59,13 @@ class RequestChangeOrderAddressProcessor } + /** + * @param Request $request + * @return mixed + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ public function execute(Request $request) { $this->canChangeOrderAddress->passes(); @@ -70,31 +77,33 @@ class RequestChangeOrderAddressProcessor $address = $this->fetchesAddress->execute(['id' => $request->get('address_id')]); $addressObject = new AddressObject($address->street_one, $address->street_two, $address->country_id, $address->state_id, $address->district_id, $address->postcode, $address->reference, ApprovalStatus::PENDING_VERIFICATION); - $order_address = $this->createsAddress->execute($order, $addressObject); + $order_address = $this->createsAddress->execute($order, $addressObject); $contact = $address->contacts()->first(); - $contactObject = new ContactObject( - $contact->reference, - $contact->phone, - '', - '' - ); + if($contact){ + $contactObject = new ContactObject( + $contact->reference, + $contact->phone, + '', + '' + ); + + $this->createContactProcessor->execute($contactObject, $order_address); - if($contactObject->getPhone()){ - $order_remark = $this->createContactProcessor->execute($contactObject, $order_address); } $remark = $address->remarks()->first(); - $remarkObject = new RemarkObject( - $remark->content, - Auth()->user()->id - ); + if($remark){ + $remarkObject = new RemarkObject( + $remark->content, + Auth()->user()->id + ); - if($remarkObject->getContent()){ $this->createRemarkProcessor->execute($order_address, $remarkObject); } + return $order; } } diff --git a/app/Classes/Modules/Orders/Processors/UpdateDoFromVTPortalProcessor.php b/app/Classes/Modules/Orders/Processors/UpdateDoFromVTPortalProcessor.php index 8b3faeb2..55eae21a 100644 --- a/app/Classes/Modules/Orders/Processors/UpdateDoFromVTPortalProcessor.php +++ b/app/Classes/Modules/Orders/Processors/UpdateDoFromVTPortalProcessor.php @@ -2,6 +2,7 @@ namespace App\Classes\Modules\Orders\Processors; +use App\Classes\Exceptions\InternalServerErrorException; use App\Classes\Modules\Orders\Services\FetchesDataFromVTPortal; use App\Classes\Modules\Addresses\Services\FetchesAddress; @@ -33,9 +34,7 @@ class UpdateDoFromVTPortalProcessor /** * FetchDeliveryListFromVTPortalProcessor constructor. * @param FetchesDataFromVTPortal $fetchesDataFRomVTPortal - * @param CreatesTransport $createsTransport - * @param CreatesSchedule $createsSchedule - * @param UpdatesContractObligation $updatesContractObligations + * @param FetchesAddress $fetchesAddress */ public function __construct(FetchesDataFromVTPortal $fetchesDataFRomVTPortal, FetchesAddress $fetchesAddress) { @@ -44,7 +43,10 @@ class UpdateDoFromVTPortalProcessor } /** + * @param $address * @return array + * @throws GuzzleException + * @throws InternalServerErrorException */ public function execute($address) { @@ -56,147 +58,88 @@ class UpdateDoFromVTPortalProcessor $contact = $address->contacts()->first(); $remark = $address->remarks()->first(); - $status = 'Release'; + $remark = $remark ? $remark->content : 'URGENT!!! PLEASE CALL BEFORE ONE DAY DELIVERY.'; + $phone = $contact ? $contact->phone : null; + $reference = $contact ? $contact->reference : null; - if ($packing_list->status == ApprovalStatus::PENDING_VERIFICATION) { + $status = 'On Hold'; + + if (in_array($packing_list->status, [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])) { $status = 'Release'; } - else if($packing_list->status == ApprovalStatus::SUSPENDED) { - $status = 'On Hold'; - } - - $vt_do = $this->fetchesDataFRomVTPortal->clientRequest( - 'http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', - 'POST', - json_decode('{ - "controller": "Do", - "view": "grid1", - "request": { - "PageIndex": -2, - "PageSize": 10, - "PageOffset": 0, - "SortExpression": "", - "GroupExpression": "", - "Filter": [ - "FullMarking:$contains$%js%\"' . $order->reference . '\"\u0000" - ], - "ContextKey": "view2", - "FilterIsExternal": true, - "LookupContextFieldName": null, - "LookupContextController": null, - "LookupContextView": null, - "LookupContext": null, - "Inserting": false, - "LastCommandName": null, - - "DoesNotRequireData": false, - "LastView": "grid1", - "Tag": null, - "RequiresFirstLetters": false, - "ViewType": "Grid", - "SupportsCaching": true, - "SystemFilter": null, - "RequiresRowCount": true, - "QuickFindHint": null, - "RequiresPivot": false, - "PivotDefinitions": null, - "RequiresMetaData": true - } - }' - ), ''); + $vt_do = $this->fetchesDataFRomVTPortal->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"Do","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"Filter": ["FullMarking:$contains$%js%\"' . $order->reference . '\"\u0000"]}}'), ''); $vt_do = $this->fetchesDataFRomVTPortal->getResponseBody($vt_do); if ($vt_do) { foreach ($vt_do->Rows as $key => $row) { - $vt_do_update = $this->fetchesDataFRomVTPortal->clientRequest( 'http://portal.vtnation.com.my/Services/DataControllerService.asmx/Execute', 'POST', json_decode('{ - "controller": "Do", - "view": "editForm1", - "args": { + "controller": "Do", + "view": "editForm1", + "args": { "CommandName": "Update", "CommandArgument": "Save", "Path": "ag2/a4", "LastCommandName": "Edit", "Values": [ - { - "Name": "ShippingAddress", - "NewValue": "' . $address->street_one . ' ' . $address->street_two . '", - "Modified": true, - "ReadOnly": false, - "Error": null - }, - { - "Name": "Attn", - "NewValue": "' . $contact->reference . '", - "Modified": true, - "ReadOnly": false, - "Error": null - }, - { - "Name": "Tel", - "NewValue": "' . $contact->phone . '", - "Modified": true, - "ReadOnly": false, - "Error": null - }, - { - "Name": "Status", - "NewValue": "' . $status . '", - "Modified": true, - "ReadOnly": false, - "Error": null - }, - { - "Name": "Doremarks", - "NewValue": "' . $remark->content . '", - "Modified": true, - "ReadOnly": false, - "Error": null - }, - { - "Name": "ModifiedBy", - "OldValue": "CIEF", - "NewValue": "CIEF", - "Modified": false, - "ReadOnly": false, - "Error": null - }, - { - "Name": "DoID", - "OldValue": 1471, - "NewValue": ' . $row[0] . ', - "Modified": false, - "ReadOnly": true, - "Error": null - } + { + "Name": "ShippingAddress", + "NewValue": "' . $address->street_one . ' ' . $address->street_two . ' '. $address->district->name.' '. $address->post_code.' '.$address->state->name.' '.$address->country->name.'", + "Modified": true, + "ReadOnly": false, + "Error": null + }, + { + "Name": "Attn", + "NewValue": "'.$reference.'", + "Modified": true, + "ReadOnly": false, + "Error": null + }, + { + "Name": "Tel", + "NewValue": "'.$phone.'", + "Modified": true, + "ReadOnly": false, + "Error": null + }, + { + "Name": "Status", + "NewValue": "' . $status . '", + "Modified": true, + "ReadOnly": false, + "Error": null + }, + { + "Name": "Doremarks", + "NewValue": "'. $remark .'", + "Modified": true, + "ReadOnly": false, + "Error": null + }, + { + "Name": "DoID", + "OldValue": '.$row[0].', + "NewValue": '.$row[0].', + "Modified": false, + "ReadOnly": true, + "Error": null + } ], - "ContextKey": "do", - "Controller": "Do", - "View": "editForm1", - "LastView": "grid1", - "Tag": null, - "Filter": [ - "DoID:=%js%' . $row[0] . '", - "ContainerID:=%js%' . $row[1] . '" - ], - "SortExpression": "", - "GroupExpression": "", - "SelectedValues": [] - } + "Controller": "Do" + } }'), ''); } } } } catch (\Exception $exception){ - Log::error($exception); + throw new InternalServerErrorException('failed to approve address due to an error related to VT portal'); } - return []; } } diff --git a/app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php b/app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php index 37b1c295..387a2b24 100644 --- a/app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php +++ b/app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php @@ -11,14 +11,14 @@ class FetchesDataFromYDPortal * @param string $url * @param string $method * @param $body - * @param bool $requiresAuthentication * @return \Psr\Http\Message\ResponseInterface - * @throws \GuzzleHttp\Exception\GuzzleException */ public function clientRequest(string $url, string $method, $body){ $client = new \GuzzleHttp\Client(); + $body['apicode'] = env('YD_API_CODE'); + $request = $client->requestAsync($method, $url, ['query' => $body]); return $request->wait(); diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php index c4266dc1..9bf1735a 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php @@ -53,7 +53,9 @@ class UpdatePackingListStatusLogic extends AbstractControllerLogic /** * @param Request $request * @return JsonResponse + * @throws \App\Classes\Exceptions\InternalServerErrorException * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \GuzzleHttp\Exception\GuzzleException */ public function logic(Request $request) : JsonResponse { @@ -62,7 +64,7 @@ class UpdatePackingListStatusLogic extends AbstractControllerLogic $packing_list = $this->updatesPackingListStatus->execute($packingList, $request->route('status')); $address = $packing_list->owner()->first()->addresses()->first(); - $vt_do_update = $this->updateDoFromVTPortalProcessor->execute($address); + $this->updateDoFromVTPortalProcessor->execute($address); return $this->resourceResponse(new PackingListResource($packing_list)); } diff --git a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php index c65b8ee9..4718a874 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php @@ -4,6 +4,8 @@ namespace App\Classes\Modules\PackingLists\Processors; use App\Classes\Modules\Orders\Services\FetchesDataFromYDPortal; +use App\Models\Order; +use Carbon\Carbon; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; @@ -21,20 +23,42 @@ class FetchOrderListsFromYdPortalProcessor /** * @param Carbon|null $start * @param Carbon|null $end - * @return array - * @throws GuzzleException + * @return void */ - public function execute(?Carbon $start = null, ?Carbon $end = null) { + public function execute(?Carbon $start = null, ?Carbon $end = null) + { + $start = $start ? $start : Carbon::now()->subMonths(2); + $startLimit = Carbon::parse('01-12-2021'); - $orderRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/GetOrderList.ashx', 'GET', [ - 'apicode' => '393b1cb4b8b37d09', - 'begintime' => '1633968000', - 'endtime' => '1639308222', - ]); + if($start->isBefore($startLimit)){ + $start = $startLimit; + } - $order = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest); + $end = $end ? $end : Carbon::now(); + + $orderRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/GetOrderList.ashx', 'GET', [ + 'begintime' => $start->timestamp, + 'endtime' => $end->timestamp, + ]); + + $rows = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest); + + foreach($rows->data as $row){ + if (strpos($row->customerno, '/') !== false) { $customerno = explode('/', explode('CIEF/', $row->customerno)[1]); } + if(strpos($row->customerno, '-') !== false){ $customerno = explode('-', explode('CIEF-', $row->customerno)[1]); } + + $marking = $customerno[0]; + $orderNumber = $customerno[1]; + + $order = Order::where('reference', $orderNumber)->first(); + + if(!$order){ + continue; + } + + dump($order); + } - dd($order); } } diff --git a/routes/web.php b/routes/web.php index 73f7841b..8234457f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -5,6 +5,7 @@ use App\Classes\Jobs\FetchDeliveryListFromVTPortalJob; use App\Classes\Jobs\FetchLoadedContainersFromVTPortalJob; use App\Classes\Jobs\FetchPackingListFromVTPortalJob; use App\Classes\Jobs\FetchWarehouseReceiveListFromVTPortalJob; +use App\Classes\Modules\PackingLists\Processors\FetchOrderListsFromYdPortalProcessor; use App\Models\CompanyConnection; use Illuminate\Support\Facades\Crypt; use App\Models\Container; @@ -177,3 +178,7 @@ Route::get('/debug', function (){ dd($issues); }); + +Route::get('/yd', function (){ + (App()->make(FetchOrderListsFromYdPortalProcessor::class))->execute();; +});