From 4b19cff996620938bee047d2782d82afb4aeb7b5 Mon Sep 17 00:00:00 2001 From: Ramon Gutierrez Date: Thu, 30 May 2024 17:15:47 +0800 Subject: [PATCH] Add checks to rider app API for JO status and delivery status #802 --- src/Controller/CAPI/RiderAppController.php | 88 ++++++++++++++++------ 1 file changed, 66 insertions(+), 22 deletions(-) diff --git a/src/Controller/CAPI/RiderAppController.php b/src/Controller/CAPI/RiderAppController.php index 694ffdd0..bb9c8546 100644 --- a/src/Controller/CAPI/RiderAppController.php +++ b/src/Controller/CAPI/RiderAppController.php @@ -413,7 +413,9 @@ class RiderAppController extends ApiController return new APIResponse(false, $msg); // check if JO can be modified first - $this->checkJOProgressionAllowed($jo, $rider); + if (!$this->checkJOProgressionAllowed($em, $jo, $rider)) { + return new APIResponse(false, 'Job order can no longer be modified.'); + } // TODO: refactor this into a jo handler class, so we don't have to repeat for control center @@ -466,7 +468,9 @@ class RiderAppController extends ApiController return new APIResponse(true, $msg); // check if JO can be modified first - $this->checkJOProgressionAllowed($jo, $rider); + if (!$this->checkJOProgressionAllowed($em, $jo, $rider)) { + return new APIResponse(false, 'Job order can no longer be modified.'); + } // requeue it, instead of cancelling it $jo->requeue(); @@ -527,7 +531,9 @@ class RiderAppController extends ApiController $jo = $rider->getCurrentJobOrder(); // check if JO can be modified first - $this->checkJOProgressionAllowed($jo, $rider); + if (!$this->checkJOProgressionAllowed($em, $jo, $rider)) { + return new APIResponse(false, 'Job order can no longer be modified.'); + } // set delivery status $jo->setDeliveryStatus(DeliveryStatus::RIDER_DEPART_HUB); @@ -570,7 +576,9 @@ class RiderAppController extends ApiController $jo = $rider->getCurrentJobOrder(); // check if JO can be modified first - $this->checkJOProgressionAllowed($jo, $rider); + if (!$this->checkJOProgressionAllowed($em, $jo, $rider)) { + return new APIResponse(false, 'Job order can no longer be modified.'); + } // set delivery status $jo->setDeliveryStatus(DeliveryStatus::RIDER_ARRIVE_HUB_PRE_JO); @@ -613,7 +621,9 @@ class RiderAppController extends ApiController $jo = $rider->getCurrentJobOrder(); // check if JO can be modified first - $this->checkJOProgressionAllowed($jo, $rider); + if (!$this->checkJOProgressionAllowed($em, $jo, $rider)) { + return new APIResponse(false, 'Job order can no longer be modified.'); + } // set delivery status $jo->setDeliveryStatus(DeliveryStatus::RIDER_DEPART_HUB_PRE_JO); @@ -656,7 +666,9 @@ class RiderAppController extends ApiController $jo = $rider->getCurrentJobOrder(); // check if JO can be modified first - $this->checkJOProgressionAllowed($jo, $rider); + if (!$this->checkJOProgressionAllowed($em, $jo, $rider)) { + return new APIResponse(false, 'Job order can no longer be modified.'); + } // set delivery status $jo->setDeliveryStatus(DeliveryStatus::RIDER_START); @@ -700,7 +712,9 @@ class RiderAppController extends ApiController $jo->setStatus(JOStatus::IN_PROGRESS); // check if JO can be modified first - $this->checkJOProgressionAllowed($jo, $rider); + if (!$this->checkJOProgressionAllowed($em, $jo, $rider)) { + return new APIResponse(false, 'Job order can no longer be modified.'); + } // set delivery status $jo->setDeliveryStatus(DeliveryStatus::RIDER_ARRIVE); @@ -761,7 +775,9 @@ class RiderAppController extends ApiController $jo = $rider->getCurrentJobOrder(); // check if JO can be modified first - $this->checkJOProgressionAllowed($jo, $rider); + if (!$this->checkJOProgressionAllowed($em, $jo, $rider)) { + return new APIResponse(false, 'Job order can no longer be modified.'); + } // set delivery status $jo->setDeliveryStatus(DeliveryStatus::RIDER_ARRIVE_HUB); @@ -854,7 +870,9 @@ class RiderAppController extends ApiController return new APIResponse(false, $msg); // check if JO can be modified first - $this->checkJOProgressionAllowed($jo, $rider); + if (!$this->checkJOProgressionAllowed($em, $jo, $rider)) { + return new APIResponse(false, 'Job order can no longer be modified.'); + } // need to check if service type is battery sales // if so, serial is a required parameter @@ -1002,7 +1020,9 @@ class RiderAppController extends ApiController $jo = $rider->getCurrentJobOrder(); // check if JO can be modified first - $this->checkJOProgressionAllowed($jo, $rider); + if (!$this->checkJOProgressionAllowed($em, $jo, $rider)) { + return new APIResponse(false, 'Job order can no longer be modified.'); + } // set delivery status $jo->setDeliveryStatus(DeliveryStatus::RIDER_ARRIVE_HUB_POST_JO); @@ -1046,7 +1066,9 @@ class RiderAppController extends ApiController $jo = $rider->getCurrentJobOrder(); // check if JO can be modified first - $this->checkJOProgressionAllowed($jo, $rider); + if (!$this->checkJOProgressionAllowed($em, $jo, $rider)) { + return new APIResponse(false, 'Job order can no longer be modified.'); + } // set delivery status $jo->setDeliveryStatus(DeliveryStatus::RIDER_DEPART_HUB_POST_JO); @@ -1265,7 +1287,9 @@ class RiderAppController extends ApiController $jo = $em->getRepository(JobOrder::class)->find($jo_id); // check if JO can be modified first - $this->checkJOProgressionAllowed($jo, $rider); + if (!$this->checkJOProgressionAllowed($em, $jo, $rider)) { + return new APIResponse(false, 'Job order can no longer be modified.'); + } // check if we have trade in items $ti_items = []; @@ -1376,7 +1400,9 @@ class RiderAppController extends ApiController return new APIResponse(false, $msg); // check if JO can be modified first - $this->checkJOProgressionAllowed($jo, $rider); + if (!$this->checkJOProgressionAllowed($em, $jo, $rider)) { + return new APIResponse(false, 'Job order can no longer be modified.'); + } // check service type $stype_id = $req->request->get('stype_id'); @@ -1740,22 +1766,40 @@ class RiderAppController extends ApiController return $msg; } - protected function checkJOProgressionAllowed(JobOrder $jo, $rider) + protected function checkJOProgressionAllowed(EntityManagerInterface $em, JobOrder $jo, &$rider) { + $allowed = true; + + error_log("JO delivery status is " . $jo->getDeliveryStatus() . " (not allowed: " . DeliveryStatus::CANCELLED . ")"); + error_log("JO status is " . $jo->getStatus() . " (not allowed: " . JOStatus::CANCELLED . ")"); + // TODO: add more statuses to block if needed, hence. this is a failsafe in case MQTT is not working. + // check delivery status + switch ($jo->getDeliveryStatus()) + { + case DeliveryStatus::CANCELLED: + $allowed = false; + break; + } + + // check JO status as well switch ($jo->getStatus()) { case JOStatus::CANCELLED: - // if this is the rider's current JO, set to null - if ($rider->getCurrentJobOrder() === $jo) { - $rider->setCurrentJobOrder(); - } - - return new APIResponse(false, 'Job order can no longer be modified.'); + $allowed = false; break; - default: - return true; } + + // if this is the rider's current JO, set to null + if (!$allowed) { + if ($rider->getCurrentJobOrder() === $jo) { + $rider->setCurrentJobOrder(); + $em->persist($rider); + $em->flush(); + } + } + + return $allowed; } protected function debugRequest(Request $req)