From 9152370300fd1fe4af02dd625cce35c05851f5a2 Mon Sep 17 00:00:00 2001 From: Ramon Gutierrez Date: Tue, 19 Mar 2024 15:22:34 +0800 Subject: [PATCH 1/2] Add checks to prevent JO progression if cancelled #793 --- src/Controller/CAPI/RiderAppController.php | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/src/Controller/CAPI/RiderAppController.php b/src/Controller/CAPI/RiderAppController.php index ad99e56c..487133a6 100644 --- a/src/Controller/CAPI/RiderAppController.php +++ b/src/Controller/CAPI/RiderAppController.php @@ -411,6 +411,9 @@ class RiderAppController extends ApiController if (!empty($msg)) return new APIResponse(false, $msg); + // check if JO can be modified first + $this->allowJOProgress($jo, $rider); + // TODO: refactor this into a jo handler class, so we don't have to repeat for control center // set jo status to in transit @@ -461,6 +464,9 @@ class RiderAppController extends ApiController // TODO: this is a workaround for requeue, because rider app gets stuck in accept / decline screen return new APIResponse(true, $msg); + // check if JO can be modified first + $this->allowJOProgress($jo, $rider); + // requeue it, instead of cancelling it $jo->requeue(); @@ -519,6 +525,9 @@ class RiderAppController extends ApiController // get rider's current job order $jo = $rider->getCurrentJobOrder(); + // check if JO can be modified first + $this->allowJOProgress($jo, $rider); + // set delivery status $jo->setDeliveryStatus(DeliveryStatus::RIDER_DEPART_HUB); @@ -559,6 +568,9 @@ class RiderAppController extends ApiController // get rider's current job order $jo = $rider->getCurrentJobOrder(); + // check if JO can be modified first + $this->allowJOProgress($jo, $rider); + // set delivery status $jo->setDeliveryStatus(DeliveryStatus::RIDER_ARRIVE_HUB_PRE_JO); @@ -599,6 +611,9 @@ class RiderAppController extends ApiController // get rider's current job order $jo = $rider->getCurrentJobOrder(); + // check if JO can be modified first + $this->allowJOProgress($jo, $rider); + // set delivery status $jo->setDeliveryStatus(DeliveryStatus::RIDER_DEPART_HUB_PRE_JO); @@ -639,6 +654,9 @@ class RiderAppController extends ApiController // get rider's current job order $jo = $rider->getCurrentJobOrder(); + // check if JO can be modified first + $this->allowJOProgress($jo, $rider); + // set delivery status $jo->setDeliveryStatus(DeliveryStatus::RIDER_START); @@ -680,6 +698,9 @@ class RiderAppController extends ApiController // set jo status to in progress $jo->setStatus(JOStatus::IN_PROGRESS); + // check if JO can be modified first + $this->allowJOProgress($jo, $rider); + // set delivery status $jo->setDeliveryStatus(DeliveryStatus::RIDER_ARRIVE); @@ -738,6 +759,9 @@ class RiderAppController extends ApiController // get rider's current job order $jo = $rider->getCurrentJobOrder(); + // check if JO can be modified first + $this->allowJOProgress($jo, $rider); + // set delivery status $jo->setDeliveryStatus(DeliveryStatus::RIDER_ARRIVE_HUB); @@ -828,6 +852,9 @@ class RiderAppController extends ApiController if (!empty($msg)) return new APIResponse(false, $msg); + // check if JO can be modified first + $this->allowJOProgress($jo, $rider); + // need to check if service type is battery sales // if so, serial is a required parameter $serial = $req->request->get('serial', ''); @@ -973,6 +1000,9 @@ class RiderAppController extends ApiController // get rider's current job order $jo = $rider->getCurrentJobOrder(); + // check if JO can be modified first + $this->allowJOProgress($jo, $rider); + // set delivery status $jo->setDeliveryStatus(DeliveryStatus::RIDER_ARRIVE_HUB_POST_JO); @@ -1014,6 +1044,9 @@ class RiderAppController extends ApiController // get rider's current job order $jo = $rider->getCurrentJobOrder(); + // check if JO can be modified first + $this->allowJOProgress($jo, $rider); + // set delivery status $jo->setDeliveryStatus(DeliveryStatus::RIDER_DEPART_HUB_POST_JO); @@ -1217,9 +1250,22 @@ class RiderAppController extends ApiController if (empty($jo_id) || $jo_id == null) return new APIResponse(false, 'Missing parameter(s): jo_id'); + // get capi user + $capi_user = $this->getUser(); + if ($capi_user == null) + return new APIResponse(false, 'User not found.'); + + // get rider id from capi user metadata + $rider = $this->getRiderFromCAPI($capi_user, $em); + if ($rider == null) + return new APIResponse(false, 'No rider found.'); + // get the job order $jo = $em->getRepository(JobOrder::class)->find($jo_id); + // check if JO can be modified first + $this->allowJOProgress($jo, $rider); + // check if we have trade in items $ti_items = []; if (isset($items['trade_in_items'])) @@ -1328,6 +1374,9 @@ class RiderAppController extends ApiController if (!empty($msg)) return new APIResponse(false, $msg); + // check if JO can be modified first + $this->allowJOProgress($jo, $rider); + // check service type $stype_id = $req->request->get('stype_id'); if (!ServiceType::validate($stype_id)) @@ -1690,6 +1739,24 @@ class RiderAppController extends ApiController return $msg; } + protected function allowJOProgress($rider, JobOrder $jo) + { + // TODO: add more statuses to block if needed, hence. this is a failsafe in case MQTT is not working. + 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.'); + break; + default: + return true; + } + } + protected function debugRequest(Request $req) { $all = $req->request->all(); From ca513355fe74970e377e02de9c058e3560a0a869 Mon Sep 17 00:00:00 2001 From: Ramon Gutierrez Date: Tue, 19 Mar 2024 15:25:32 +0800 Subject: [PATCH 2/2] Switch parameters of allowJOProgress to fix error #793 --- src/Controller/CAPI/RiderAppController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Controller/CAPI/RiderAppController.php b/src/Controller/CAPI/RiderAppController.php index 487133a6..e54ed55c 100644 --- a/src/Controller/CAPI/RiderAppController.php +++ b/src/Controller/CAPI/RiderAppController.php @@ -1739,7 +1739,7 @@ class RiderAppController extends ApiController return $msg; } - protected function allowJOProgress($rider, JobOrder $jo) + protected function allowJOProgress(JobOrder $jo, $rider) { // TODO: add more statuses to block if needed, hence. this is a failsafe in case MQTT is not working. switch ($jo->getStatus())