From 5eef2df4e0ea685faad1a0152a21d295c19ae997 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Wed, 15 Apr 2020 13:11:04 +0800 Subject: [PATCH 1/3] Check advance orders within 2 hours of order coming in before auto assigning #378 --- src/Controller/APIController.php | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index 038ac73b..9b5fd28c 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -51,6 +51,7 @@ use App\Entity\PrivacyPolicy; use App\Entity\Hub; use DateTime; +use DateInterval; use Exception; // mobile API @@ -2289,8 +2290,7 @@ class APIController extends Controller implements LoggedController return $cust; } - protected function findNearestHub($jo, EntityManagerInterface $em, - MapTools $map_tools) + protected function findNearestHub($jo, EntityManagerInterface $em, MapTools $map_tools) { // get the nearest 10 hubs $selected_hub = null; @@ -2314,7 +2314,33 @@ class APIController extends Controller implements LoggedController $nearest = null; foreach ($nearest_hubs_with_distance as $nhd) { - if (count($nhd['hub']->getAvailableRiders()) > 0) + // get number of available riders + $count_riders = count($nhd['hub']->getAvailableRiders()); + + // get number of advance orders in the next 3 hours + $time_now = new DateTime(); + $date_end = new DateTime(); + $date_end->add(new DateInterval('PT2H')); + + // NOTE: get advance orders via query + // get JOs assigned to hub that are advance orders and scheduled within 3 hours with + // for rider assignment status + $query = $em->createQuery('select count(jo) from App\Entity\JobOrder jo where jo.hub = :hub and jo.flag_advance = true and jo.date_schedule <= :date_end and jo.status = :status'); + $count_advance_orders = $query->setParameters([ + 'hub' => $nhd['hub'], + 'date_end' => $date_end, + 'status' => JOStatus::RIDER_ASSIGN, + ]) + ->setMaxResults(1) + ->getSingleScalarResult(); + + error_log('HUB - ' . $nhd['hub']->getID()); + error_log('RIDER COUNT - ' . $count_riders); + error_log('ADVANCE ORDER COUNT - ' . $count_advance_orders); + + // if (count($nhd['hub']->getAvailableRiders()) > 0) + // if we have more riders than we have advance orders + if ($count_riders - $count_advance_orders > 0) { if (empty($nearest)) $nearest = $nhd; From 7aebe13d1fa80dd1c789024b002c34caeb668ba9 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Wed, 15 Apr 2020 13:12:23 +0800 Subject: [PATCH 2/3] Have battery services use the findNearestHub method without inventory check #378 --- src/Controller/APIController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index 9b5fd28c..a0841841 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -994,7 +994,8 @@ class APIController extends Controller implements LoggedController ($jo->getServicetype() == ServiceType::BATTERY_REPLACEMENT_WARRANTY)) { // get nearest hub - $nearest_hub = $this->findNearestHubWithInventory($jo, $batt, $em, $map_tools, $im); + // $nearest_hub = $this->findNearestHubWithInventory($jo, $batt, $em, $map_tools, $im); + $nearest_hub = $this->findNearestHub($jo, $em, $map_tools); } else { From b7b38d138b2099c5b6e956af8dfaba611ee03a7c Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Wed, 15 Apr 2020 15:17:12 +0800 Subject: [PATCH 3/3] Fix comment for checking advance order #378 --- src/Controller/APIController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index a0841841..eec92bf7 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -2324,7 +2324,7 @@ class APIController extends Controller implements LoggedController $date_end->add(new DateInterval('PT2H')); // NOTE: get advance orders via query - // get JOs assigned to hub that are advance orders and scheduled within 3 hours with + // get JOs assigned to hub that are advance orders and scheduled within X hours with // for rider assignment status $query = $em->createQuery('select count(jo) from App\Entity\JobOrder jo where jo.hub = :hub and jo.flag_advance = true and jo.date_schedule <= :date_end and jo.status = :status'); $count_advance_orders = $query->setParameters([