diff --git a/src/Controller/CAPI/RiderController.php b/src/Controller/CAPI/RiderController.php index e779bd35..fb947b74 100644 --- a/src/Controller/CAPI/RiderController.php +++ b/src/Controller/CAPI/RiderController.php @@ -38,6 +38,7 @@ use App\Ramcar\InvoiceStatus; use App\Ramcar\ModeOfPayment; use App\Ramcar\InvoiceCriteria; use App\Ramcar\WarrantySource; +use App\Ramcar\DeliveryStatus; use DateTime; @@ -430,8 +431,55 @@ class RiderController extends APIController } - public function cancelJobOrder(Request $req, EntityManagerInterface $em) + public function cancelJobOrder(Request $req, EntityManagerInterface $em, MQTTClient $mclient) { + $required_params = ['jo_id']; + + // get capi user to link to rider api user + $capi_user_id = $this->getUser()->getID(); + + // check if capi user already has a rider api user + $rapi_session = $em->getRepository(RiderAPISession::class)->findOneBy(['capi_user_id' => $capi_user_id]); + + // are we logged in? + if (!$rapi_session->hasRider()) + return new APIResponse(false, 'No logged in rider.'); + + $rider = $rapi_session->getRider(); + + $msg = $this->checkJO($req, $required_params, $jo, $rider); + if (!empty($msg)) + return new APIResponse(false, $msg); + + // requeue it, instead of cancelling it + $jo->requeue(); + + // set delivery status to requeued + $jo->setDeliveryStatus(DeliveryStatus::REQUEUE); + + // set rider's current job order to null + $rider->setCurrentJobOrder(); + + // add event log + $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 = []; + return new APIResponse(true, 'Job order requeued.', $data); } public function arrive(Request $req, EntityManagerInterface $em)