Add checks to prevent JO progression if cancelled #793

This commit is contained in:
Ramon Gutierrez 2024-03-19 15:22:34 +08:00
parent bff89a6817
commit 9152370300

View file

@ -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();