diff --git a/src/Controller/RAPIController.php b/src/Controller/RAPIController.php index 75eaa796..a3c0558b 100644 --- a/src/Controller/RAPIController.php +++ b/src/Controller/RAPIController.php @@ -291,40 +291,27 @@ class RAPIController extends Controller return $res->getReturnResponse(); } - public function cancelJobOrder(Request $req, MQTTClient $mclient) + public function cancelJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler) { - $em = $this->getDoctrine()->getManager(); - $required_params = ['jo_id']; - $res = $this->checkJO($req, $required_params, $jo); - if ($res->isError()) - return $res->getReturnResponse(); + $res = new APIResult(); - // $jo->cancel("rider cancelled"); - // requeue it, instead of cancelling it - $jo->requeue(); - - // add event log - $rider = $this->session->getRider(); - $event = new JOEvent(); - $event->setDateHappen(new DateTime()) - ->setTypeID(JOEventType::REQUEUE) - ->setJobOrder($jo) - ->setRider($rider); - $em->persist($event); - - $em->flush(); - - // send mqtt event - // send outlet assign since order should go back to hub and await reassignment to another rider - $payload = [ - 'event' => 'outlet_assign', - 'jo_id' => $jo->getID(), - ]; - $mclient->sendEvent($jo, $payload); + $data = $rapi_handler->cancelJobOrder($req); + if (isset($data['error'])) + { + $message = $data['error']; + $res->setError(true) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + // response return $res->getReturnResponse(); + } public function arrive(Request $req, MQTTClient $mclient) diff --git a/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php b/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php index 1d796e3f..684db09d 100644 --- a/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php +++ b/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php @@ -14,6 +14,7 @@ use App\Ramcar\JOEventType; use App\Service\RiderAPIHandlerInterface; use App\Service\RedisClientProvider; use App\Service\RiderCache; +use App\Service\MQTTClient; use App\Entity\RiderSession; use App\Entity\Rider; @@ -29,17 +30,19 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface protected $ef; protected $rcache; protected $country_code; + protected $mclient; protected $session; public function __construct(EntityManagerInterface $em, RedisClientProvider $redis, EncoderFactoryInterface $ef, RiderCache $rcache, - string $country_code) + string $country_code, MQTTClient $mclient) { $this->em = $em; $this->redis = $redis; $this->ef = $ef; $this->rcache = $rcache; $this->country_code = $country_code; + $this->mclient = $mclient; // one device = one session, since we have control over the devices // when a rider logs in, we just change the rider assigned to the device @@ -370,7 +373,39 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface $this->em->flush(); return $data; + } + public function cancelJobOrder(Request $req) + { + $required_params = ['jo_id']; + $data = $this->checkJO($req, $required_params, $jo); + if (isset($data['error'])) + return $data; + + // $jo->cancel("rider cancelled"); + // requeue it, instead of cancelling it + $jo->requeue(); + + // add event log + $rider = $this->session->getRider(); + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::REQUEUE) + ->setJobOrder($jo) + ->setRider($rider); + $this->em->persist($event); + + $this->em->flush(); + + // send mqtt event + // send outlet assign since order should go back to hub and await reassignment to another rider + $payload = [ + 'event' => 'outlet_assign', + 'jo_id' => $jo->getID(), + ]; + $this->mclient->sendEvent($jo, $payload); + + return $data; } protected function checkMissingParameters(Request $req, $params = []) diff --git a/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php b/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php index d45a7e9d..85bb90d7 100644 --- a/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php +++ b/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php @@ -370,7 +370,39 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface $this->em->flush(); return $data; + } + public function cancelJobOrder(Request $req) + { + $required_params = ['jo_id']; + $data = $this->checkJO($req, $required_params, $jo); + if (isset($data['error'])) + return $data; + + // $jo->cancel("rider cancelled"); + // requeue it, instead of cancelling it + $jo->requeue(); + + // add event log + $rider = $this->session->getRider(); + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::REQUEUE) + ->setJobOrder($jo) + ->setRider($rider); + $this->em->persist($event); + + $this->em->flush(); + + // send mqtt event + // send outlet assign since order should go back to hub and await reassignment to another rider + $payload = [ + 'event' => 'outlet_assign', + 'jo_id' => $jo->getID(), + ]; + $this->mclient->sendEvent($jo, $payload); + + return $data; } protected function checkMissingParameters(Request $req, $params = [])