diff --git a/src/Controller/JobOrderController.php b/src/Controller/JobOrderController.php index 61630861..0e0e6d8e 100644 --- a/src/Controller/JobOrderController.php +++ b/src/Controller/JobOrderController.php @@ -956,24 +956,38 @@ class JobOrderController extends BaseController if (empty($obj)) throw $this->createNotFoundException('The item does not exist'); + // check if cancelled already + if (!$obj->canDispatch()) + { + throw $this->createNotFoundException('Could not dispatch. Job Order is not pending.'); + // TODO: have this handled better, so UI shows the error + // $error_array['dispatch'] = 'Could not dispatch. Job Order is not pending.'; + } + // check if lat and lng are provided - if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) { + if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) + { $error_array['coordinates'] = 'No map coordinates provided. Please click on a location on the map.'; } // check if hub is set - if (empty($req->request->get('hub'))) { + if (empty($req->request->get('hub'))) + { $error_array['hub'] = 'No hub selected.'; - } else { + } + else + { // get hub $hub = $em->getRepository(Hub::class)->find($req->request->get('hub')); - if (empty($hub)) { + if (empty($hub)) + { $error_array['hub'] = 'Invalid hub specified.'; } } - if (empty($error_array)) { + if (empty($error_array)) + { // coordinates $point = new Point($req->request->get('coord_lng'), $req->request->get('coord_lat')); @@ -1001,7 +1015,8 @@ class JobOrderController extends BaseController } // check if any errors were found - if (!empty($error_array)) { + if (!empty($error_array)) + { // return validation failure response return $this->json([ 'success' => false, @@ -1127,6 +1142,11 @@ class JobOrderController extends BaseController if (empty($obj)) throw $this->createNotFoundException('The item does not exist'); + // check if we can assign + if (!$obj->canAssign()) + throw $this->createNotFoundException('Cannot assign rider to this job order.'); + + // check if lat and lng are provided if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) { $error_array['coordinates'] = 'No map coordinates provided. Please click on a location on the map.'; diff --git a/src/Entity/JobOrder.php b/src/Entity/JobOrder.php index cd4f14fb..ddc9d299 100644 --- a/src/Entity/JobOrder.php +++ b/src/Entity/JobOrder.php @@ -726,4 +726,20 @@ class JobOrder return $this->flag_coolant; } + public function canDispatch() + { + if ($this->status == JOStatus::PENDING) + return true; + + return false; + } + + public function canAssign() + { + if ($this->status == JOStatus::ASSIGNED) + return true; + + return false; + } + } diff --git a/src/Ramcar/TicketType.php b/src/Ramcar/TicketType.php index 3edc9c89..400b7a55 100644 --- a/src/Ramcar/TicketType.php +++ b/src/Ramcar/TicketType.php @@ -12,6 +12,9 @@ class TicketType extends NameValue const FOR_FOLLOW_UP = 'for_follow_up'; const RESQ_INQUIRY = 'resq_inquiry'; + const BATTERY_QUEUE = 'battery_queue'; + const RESQ_QUEUE = 'resq_queue'; + const COLLECTION = [ 'complaint' => 'Complaint', 'inquiry' => 'Inquiry', @@ -20,5 +23,7 @@ class TicketType extends NameValue 'other' => 'Other', 'for_follow_up' => 'For follow-up', 'resq_inquiry' => 'RESQ Inquiry', + 'battery_queue' => 'Battery Queue (XFER)', + 'resq_queue' => 'Resq Queue (XFER)', ]; }