diff --git a/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php b/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php index 3cb0f307..49fec3bc 100644 --- a/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php +++ b/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php @@ -251,6 +251,17 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface // make rider unavailable $rider = $this->session->getRider(); + // check if rider has assigned JOs + $assigned_jos = $this->em->getRepository(JobOrder::class)->findBy(['rider' => $rider->getID(), 'status' => JOStatus::ASSIGNED]); + if ($assigned_jos != null) + { + $data = [ + 'title' => 'Failed Logout', + 'error' => 'Rider has assigned job orders.' + ]; + return $data; + } + $rider->setAvailable(false); $rider->setActive(false); @@ -314,6 +325,17 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface // set rider to unavailable to take on JOs $rider = $this->session->getRider(); + // check if rider has assigned JOs + $assigned_jos = $this->em->getRepository(JobOrder::class)->findBy(['rider' => $rider->getID(), 'status' => JOStatus::ASSIGNED]); + if ($assigned_jos != null) + { + $data = [ + 'title' => 'Failed Go Offline', + 'error' => 'Rider has assigned job orders.' + ]; + return $data; + } + $rider->setAvailable(false); $this->em->flush(); @@ -1007,7 +1029,7 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface $jo->requeue(); - // TODO: do we leave JO as assigned to rider? + $jo->clearRider(); // add event log $rider = $this->session->getRider(); @@ -1018,6 +1040,9 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface ->setRider($rider); $this->em->persist($event); + // set rider's active JO to null + $rider->setActiveJobOrder(); + $this->em->flush(); // send mqtt event @@ -1028,6 +1053,13 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface ]; $this->mclient->sendEvent($jo, $payload); + // need to send another mqtt event saying rider is available + // to change icon on dashboard + $channel = 'rider/' . $rider->getID() . '/status'; + $rider_status = 'available'; + + $this->mclient->publish($channel, $rider_status); + return $data; }