From bcd55901d324acec2ae0c9d1d28cf2f5518b7dff Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 18 Aug 2021 09:03:39 +0000 Subject: [PATCH] Add arrive and hubDepart. #617 --- src/Controller/CAPI/RiderController.php | 127 ++++++++++++++++++++---- 1 file changed, 110 insertions(+), 17 deletions(-) diff --git a/src/Controller/CAPI/RiderController.php b/src/Controller/CAPI/RiderController.php index fb947b74..4e4f3f86 100644 --- a/src/Controller/CAPI/RiderController.php +++ b/src/Controller/CAPI/RiderController.php @@ -408,6 +408,9 @@ class RiderController extends APIController // set jo status to in transit $jo->setStatus(JOStatus::IN_TRANSIT); + // set delivery status + $jo->setDeliveryStatus(DeliveryStatus::RIDER_ACCEPT); + // TODO: send mqtt event (?) // set rider's current job order @@ -482,8 +485,114 @@ class RiderController extends APIController return new APIResponse(true, 'Job order requeued.', $data); } - public function arrive(Request $req, EntityManagerInterface $em) + public function hubDepart(Request $req, EntityManagerInterface $em) { + $required_params = []; + $missing = $this->checkMissingParameters($req, $required_params); + if (count($missing) > 0) + { + $params = implode(', ', $missing); + return new APIResponse(false, 'Missing parameter(s): ' . $params); + } + + // 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(); + + // get rider's current job order + $jo = $rider->getCurrentJobOrder(); + + // set delivery status + $jo->setDeliveryStatus(DeliveryStatus::RIDER_DEPART_HUB); + + // create time stamp event for JO event + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_DEPART_HUB) + ->setJobOrder($jo) + ->setRider($rider); + + $em->persist($event); + $em->flush(); + + $data = []; + return new APIResponse(true, 'Rider leave hub.', $data); + } + + public function preHubArrive(Request $req, EntityManagerInterface $em) + { + } + + public function preHubDepart(Request $req, EntityManagerInterface $em) + { + } + + public function startJobOrder(Request $req, EntityManagerInterface $em) + { + } + + public function arrive(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); + + // TODO: refactor this into a jo handler class, so we don't have to repeat for control center + + // set jo status to in progress + $jo->setStatus(JOStatus::IN_PROGRESS); + + // set delivery status + $jo->setDeliveryStatus(DeliveryStatus::RIDER_ARRIVE); + + // add event log + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_ARRIVE) + ->setJobOrder($jo) + ->setRider($rider); + $em->persist($event); + + $em->flush(); + + // send mqtt event + $image_url = $req->getScheme() . '://' . $req->getHttpHost() . $req->getBasePath() . '/assets/images/user.gif'; + if ($rider->getImageFile() != null) + $image_url = $req->getScheme() . '://' . $req->getHttpHost() . $req->getBasePath() . '/uploads/' . $rider->getImageFile(); + + $payload = [ + 'event' => 'driver_arrived', + 'jo_id' => $jo->getID(), + 'driver_image' => $image_url, + 'driver_name' => $rider->getFullName(), + 'driver_id' => $rider->getID(), + ]; + $mclient->sendEvent($jo, $payload); + + $data = []; + return new APIResponse(true, 'Rider arrived at customer location.', $data); } public function hubArrive(Request $req, EntityManagerInterface $em) @@ -510,22 +619,6 @@ class RiderController extends APIController { } - public function hubDepart(Request $req, EntityManagerInterface $em) - { - } - - public function preHubArrive(Request $req, EntityManagerInterface $em) - { - } - - public function preHubDepart(Request $req, EntityManagerInterface $em) - { - } - - public function startJobOrder(Request $req, EntityManagerInterface $em) - { - } - public function postHubArrive(Request $req, EntityManagerInterface $em) { }