From 4366f77a2e2e0535964f061063bb564db58ebf39 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 29 Jan 2020 07:25:23 +0000 Subject: [PATCH] Add rider availability interface and single JO rider availability service. #316 --- config/services.yaml | 6 ++++ src/Controller/JobOrderController.php | 11 +++--- .../JobOrderHandler/CMBJobOrderHandler.php | 14 +++++--- .../JobOrderHandler/ResqJobOrderHandler.php | 16 +++++---- src/Service/JobOrderHandlerInterface.php | 7 ++-- .../SingleJORiderAvailability.php | 36 +++++++++++++++++++ src/Service/RiderAvailabilityInterface.php | 11 ++++++ 7 files changed, 84 insertions(+), 17 deletions(-) create mode 100644 src/Service/RiderAvailability/SingleJORiderAvailability.php create mode 100644 src/Service/RiderAvailabilityInterface.php diff --git a/config/services.yaml b/config/services.yaml index 5364d19a..c3699c4d 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -196,6 +196,12 @@ services: # rider assignment interface App\Service\RiderAssignmentHandlerInterface: "@App\\Service\\RiderAssignmentHandler\\CMBRiderAssignmentHandler" + # rider availability + App\Service\RiderAvailability\SingleJORiderAvailability: ~ + + # rider availability interface + App\Service\RiderAvailabilityInterface: "@App\\Service\\RiderAvailability\\SingleJORiderAvailability" + # map manager #App\Service\GISManager\Bing: ~ App\Service\GISManager\OpenStreet: ~ diff --git a/src/Controller/JobOrderController.php b/src/Controller/JobOrderController.php index 5d6127e3..f3ea07e1 100644 --- a/src/Controller/JobOrderController.php +++ b/src/Controller/JobOrderController.php @@ -14,6 +14,7 @@ use App\Entity\JobOrder; use App\Service\InvoiceGeneratorInterface; use App\Service\JobOrderHandlerInterface; use App\Service\GISManagerInterface; +use App\Service\RiderAvailabilityInterface; use App\Service\MapTools; use App\Service\MQTTClient; use App\Service\APNSClient; @@ -295,13 +296,14 @@ class JobOrderController extends Controller /** * @Menu(selected="jo_proc") */ - public function processingForm(MapTools $map_tools, $id, JobOrderHandlerInterface $jo_handler, GISManagerInterface $gis) + public function processingForm(MapTools $map_tools, $id, JobOrderHandlerInterface $jo_handler, + GISManagerInterface $gis, RiderAvailabilityInterface $rider_avail_service) { $this->denyAccessUnlessGranted('jo_proc.list', null, 'No access.'); try { - $params = $jo_handler->initializeProcessingForm($id, $map_tools); + $params = $jo_handler->initializeProcessingForm($id, $map_tools, $rider_avail_service); } catch (AccessDeniedHttpException $e) { @@ -878,11 +880,12 @@ class JobOrderController extends Controller * @Menu(selected="jo_onestep_edit_form") */ public function oneStepEditForm($id, JobOrderHandlerInterface $jo_handler, - GISManagerInterface $gis, MapTools $map_tools) + GISManagerInterface $gis, MapTools $map_tools, + RiderAvailabilityInterface $rider_avail_service) { $this->denyAccessUnlessGranted('jo_onestep.edit', null, 'No access.'); - $params = $jo_handler->initializeOneStepEditForm($id, $map_tools); + $params = $jo_handler->initializeOneStepEditForm($id, $map_tools, $rider_avail_service); $params['submit_url'] = $this->generateUrl('jo_onestep_edit_submit', ['id' => $id]); $params['return_url'] = $this->generateUrl('jo_open'); $params['map_js_file'] = $gis->getJSJOFile(); diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index 50c504fc..ffa0f795 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -40,6 +40,7 @@ use App\Ramcar\JORejectionReason; use App\Service\InvoiceGeneratorInterface; use App\Service\JobOrderHandlerInterface; use App\Service\RiderAssignmentHandlerInterface; +use App\Service\RiderAvailabilityInterface; use App\Service\WarrantyHandler; use App\Service\MQTTClient; use App\Service\APNSClient; @@ -1292,7 +1293,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface return $params; } - public function initializeOneStepEditForm($id, $map_tools) + public function initializeOneStepEditForm($id, $map_tools, $rider_avail_service) { $em = $this->em; $obj = $em->getRepository(JobOrder::class)->find($id); @@ -1335,7 +1336,8 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface } // counters - $hub['rider_count'] = count($hub['hub']->getAvailableRiders()); + //$hub['rider_count'] = count($hub['hub']->getAvailableRiders()); + $hub['rider_count'] = count($rider_avail_service->getAvailableRiders($obj)); $hub['jo_count'] = count($hub['hub']->getForAssignmentJobOrders()); // check for rejection @@ -1460,7 +1462,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface } // initialize dispatch/processing job order form - public function initializeProcessingForm($id, $map_tools) + public function initializeProcessingForm($id, $map_tools, $rider_avail_service) { $em = $this->em; @@ -1555,6 +1557,8 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface } // counters + // TODO: clone the JO. store old value, set the hub id on the clone, + // call the service to getAvailableRiders $hub['rider_count'] = count($hub['hub']->getAvailableRiders()); $hub['jo_count'] = count($hub['hub']->getForAssignmentJobOrders()); @@ -1706,7 +1710,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface } // initialize hub form - public function initializeHubForm($id, $map_tools) + public function initializeHubForm($id, $map_tools, $rider_avail_service) { $em = $this->em; @@ -1760,6 +1764,8 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface } // counters + // TODO: clone the JO. store old value, set the hub id on the clone, + // call the service to getAvailableRiders $hub['rider_count'] = count($hub['hub']->getAvailableRiders()); $hub['jo_count'] = count($hub['hub']->getForAssignmentJobOrders()); diff --git a/src/Service/JobOrderHandler/ResqJobOrderHandler.php b/src/Service/JobOrderHandler/ResqJobOrderHandler.php index 3f6a336c..7e9f9f27 100644 --- a/src/Service/JobOrderHandler/ResqJobOrderHandler.php +++ b/src/Service/JobOrderHandler/ResqJobOrderHandler.php @@ -38,6 +38,7 @@ use App\Ramcar\JORejectionReason; use App\Service\InvoiceGeneratorInterface; use App\Service\JobOrderHandlerInterface; +use App\Service\RiderAvailabilityInterface; use App\Service\WarrantyHandler; use App\Service\MQTTClient; use App\Service\APNSClient; @@ -1308,7 +1309,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface return $params; } - public function initializeOneStepEditForm($id, $map_tools) + public function initializeOneStepEditForm($id, $map_tools, $rider_avail_service) { $em = $this->em; $obj = $em->getRepository(JobOrder::class)->find($id); @@ -1351,7 +1352,8 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface } // counters - $hub['rider_count'] = count($hub['hub']->getAvailableRiders()); + //$hub['rider_count'] = count($hub['hub']->getAvailableRiders()); + $hub['rider_count'] = count($rider_avail_service->getAvailableRiders($obj)); $hub['jo_count'] = count($hub['hub']->getForAssignmentJobOrders()); // check for rejection @@ -1476,7 +1478,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface } // initialize dispatch/processing job order form - public function initializeProcessingForm($id, $map_tools) + public function initializeProcessingForm($id, $map_tools, $rider_avail_service) { $em = $this->em; @@ -1571,7 +1573,8 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface } // counters - $hub['rider_count'] = count($hub['hub']->getAvailableRiders()); + //$hub['rider_count'] = count($hub['hub']->getAvailableRiders()); + $hub['rider_count'] = count($rider_avail_service->getAvailableRiders($obj)); $hub['jo_count'] = count($hub['hub']->getForAssignmentJobOrders()); // check for rejection @@ -1722,7 +1725,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface } // initialize hub form - public function initializeHubForm($id, $map_tools) + public function initializeHubForm($id, $map_tools, $rider_avail_service) { $em = $this->em; @@ -1776,7 +1779,8 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface } // counters - $hub['rider_count'] = count($hub['hub']->getAvailableRiders()); + //$hub['rider_count'] = count($hub['hub']->getAvailableRiders()); + $hub['rider_count'] = count($rider_avail_service->getAvailableRiders($obj)); $hub['jo_count'] = count($hub['hub']->getForAssignmentJobOrders()); // check for rejection diff --git a/src/Service/JobOrderHandlerInterface.php b/src/Service/JobOrderHandlerInterface.php index 0e38359d..72ad20d1 100644 --- a/src/Service/JobOrderHandlerInterface.php +++ b/src/Service/JobOrderHandlerInterface.php @@ -7,6 +7,7 @@ use Symfony\Component\HttpFoundation\Request; use App\Service\MQTTClient; use App\Service\APNSClient; use App\Service\MapTools; +use App\Service\RiderAvailability; interface JobOrderHandlerInterface { @@ -65,7 +66,7 @@ interface JobOrderHandlerInterface public function initializeAllForm(int $id); // initialize dispatch/processing job order form - public function initializeProcessingForm(int $id, MapTools $map_tools); + public function initializeProcessingForm(int $id, MapTools $map_tools, RiderAvailability $rider_avail_service); // initialize assign job order form public function initializeAssignForm(int $id); @@ -74,7 +75,7 @@ interface JobOrderHandlerInterface public function initializeFulfillmentForm(int $id); // initialize hub form - public function initializeHubForm(int $id, MapTools $map_tools); + public function initializeHubForm(int $id, MapTools $map_tools, RiderAvailability $rider_avail_service); // initialize rider form public function initializeRiderForm(int $id); @@ -83,7 +84,7 @@ interface JobOrderHandlerInterface public function initializeOneStepForm(); // initialize one step edit form - public function initializeOneStepEditForm(int $id, MapTools $map_tools); + public function initializeOneStepEditForm(int $id, MapTools $map_tools, RiderAvailability $rider_avail_service); // generate pdf form for job order public function generatePDFForm(Request $req, int $id, string $proj_path); diff --git a/src/Service/RiderAvailability/SingleJORiderAvailability.php b/src/Service/RiderAvailability/SingleJORiderAvailability.php new file mode 100644 index 00000000..1a912513 --- /dev/null +++ b/src/Service/RiderAvailability/SingleJORiderAvailability.php @@ -0,0 +1,36 @@ +em = $em; + } + + public function getAvailableRiders(JobOrder $jo) + { + // get hub from JO + $hub = $jo->getHub(); + + // get available riders from hub + // TODO: for now, as-is behavior but will change + // when we support multiple JOs per rider + $riders = []; + + if ($hub != null) + $riders = $hub->getAvailableRiders(); + + return $riders; + } + +} diff --git a/src/Service/RiderAvailabilityInterface.php b/src/Service/RiderAvailabilityInterface.php new file mode 100644 index 00000000..957fc063 --- /dev/null +++ b/src/Service/RiderAvailabilityInterface.php @@ -0,0 +1,11 @@ +