From 973c56ae85ff3890de84077c0d9be4ab353a09e1 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 11 Aug 2021 10:20:53 +0000 Subject: [PATCH] Add new API calls. #612 --- config/routes/rider_api.yaml | 31 +++ src/Ramcar/JOEventType.php | 28 ++- .../RiderAPIHandler/ResqRiderAPIHandler.php | 206 +++++++++++++++++- 3 files changed, 254 insertions(+), 11 deletions(-) diff --git a/config/routes/rider_api.yaml b/config/routes/rider_api.yaml index bd38c492..b38cd6ae 100644 --- a/config/routes/rider_api.yaml +++ b/config/routes/rider_api.yaml @@ -64,3 +64,34 @@ rapi_available: path: /rapi/available controller: App\Controller\RAPIController::available methods: [POST] + +rapi_hub_depart: + path: /rapi/hub_depart + controller: App\Controller\RAPIController::hubDepart + methods: [POST] + +rapi_pre_hub_depart: + path: /rapi/pre_hub_depart + controller: App\Controller\RAPIController::preHubDepart + methods: [POST] + +rapi_pre_hub_arrive: + path: /rapi/pre_hub_arrive + controller: App\Controller\RAPIController::preHubArrive + methods: [POST] + +rapi_post_hub_depart: + path: /rapi/post_hub_depart + controller: App\Controller\RAPIController::postHubDepart + methods: [POST] + +rapi_post_hub_arrive: + path: /rapi/post_hub_arrive + controller: App\Controller\RAPIController::postHubArrive + methods: [POST] + +rapi_jo_start: + path: /rapi/start + controller: App\Controller\RAPIController::startJobOrder + methods: [POST] + diff --git a/src/Ramcar/JOEventType.php b/src/Ramcar/JOEventType.php index 3929c24e..e530679d 100644 --- a/src/Ramcar/JOEventType.php +++ b/src/Ramcar/JOEventType.php @@ -4,16 +4,24 @@ namespace App\Ramcar; class JOEventType extends NameValue { - const CREATE = 'create'; - const HUB_ASSIGN = 'hub_assign'; - const RIDER_ASSIGN = 'rider_assign'; - const CANCEL = 'cancel'; - const FULFILL = 'fulfill'; - const OPEN_EDIT = 'open_edit'; - const REQUEUE = 'requeue'; - const RIDER_ACCEPT = 'accept'; - const RIDER_ARRIVE = 'arrive'; - const RIDER_EDIT = 'rider_edit'; + const CREATE = 'create'; + const HUB_ASSIGN = 'hub_assign'; + const RIDER_ASSIGN = 'rider_assign'; + const CANCEL = 'cancel'; + const FULFILL = 'fulfill'; + const OPEN_EDIT = 'open_edit'; + const REQUEUE = 'requeue'; + const RIDER_ACCEPT = 'accept'; + const RIDER_ARRIVE = 'arrive'; + const RIDER_EDIT = 'rider_edit'; + const RIDER_DEPART_HUB = 'rider_depart_hub'; + const RIDER_ARRIVE_HUB_PRE_JO = 'rider_arrive_hub_pre_jo'; + const RIDER_DEPART_HUB_PRE_JO = 'rider_depart_hub_pre_jo'; + const RIDER_START = 'rider_start'; + const RIDER_END = 'rider_end'; + const RIDER_ARRIVE_HUB_POST_JO = 'rider_arrive_hub_post_jo'; + const RIDER_DEPART_HUB_POST_JO = 'rider_depart_hub_post_jo'; + const RIDER_ARRIVE_HUB = 'rider_arrive_hub'; const COLLECTION = [ 'create' => 'Created', diff --git a/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php b/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php index 10678139..d7cc762d 100644 --- a/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php +++ b/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php @@ -544,8 +544,20 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface ->setTypeID(JOEventType::FULFILL) ->setJobOrder($jo) ->setRider($rider); - $this->em->persist($event); + $timestamp_event = new JOEvent(); + $timestamp_event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_END) + ->setJobOrder($jo) + ->setRider($rider); + + $this->em->persist($event); + $this->em->persist($timestamp_event); + + // NOTE: fix for the rider being assigned to other JO + // while on another JO. + // TODO: comment this out. Rider needs to be set to unavailable + // when rider accepts the JO // tag rider as unavailable $rider->setAvailable(false); @@ -845,6 +857,198 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface return $data; } + public function hubDepart(Request $req) + { + $required_params = [ + 'jo_id' + ]; + $data = $this->checkParamsAndKey($req, $required_params); + if (isset($data['error'])) + return $data; + + // find job order. + // NOTE: Not using getActiveJobOrder since unsure if it is really being set + $jo_id = $req->request->get('jo_id'); + $jo = $this->em->getRepository(JobOrder::class)->find($jo_id); + if ($jo == null) + { + $data = [ + 'error' => 'No job order found.' + ]; + return $data; + } + + // create time stamp event for JO event + $rider = $this->session->getRider(); + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_DEPART_HUB) + ->setJobOrder($jo) + ->setRider($rider); + + return $data; + } + + public function preHubArrive(Request $req) + { + $required_params = [ + 'jo_id' + ]; + $data = $this->checkParamsAndKey($req, $required_params); + if (isset($data['error'])) + return $data; + + // find job order. + // NOTE: Not using getActiveJobOrder since unsure if it is really being set + $jo_id = $req->request->get('jo_id'); + $jo = $this->em->getRepository(JobOrder::class)->find($jo_id); + if ($jo == null) + { + $data = [ + 'error' => 'No job order found.' + ]; + return $data; + } + + // create time stamp event for JO event + $rider = $this->session->getRider(); + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_ARRIVE_HUB_PRE_JO) + ->setJobOrder($jo) + ->setRider($rider); + + return $data; + } + + public function preHubDepart(Request $req) + { + $required_params = [ + 'jo_id' + ]; + $data = $this->checkParamsAndKey($req, $required_params); + if (isset($data['error'])) + return $data; + + // find job order. + // NOTE: Not using getActiveJobOrder since unsure if it is really being set + $jo_id = $req->request->get('jo_id'); + $jo = $this->em->getRepository(JobOrder::class)->find($jo_id); + if ($jo == null) + { + $data = [ + 'error' => 'No job order found.' + ]; + return $data; + } + + // create time stamp event for JO event + $rider = $this->session->getRider(); + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_DEPART_HUB_PRE_JO) + ->setJobOrder($jo) + ->setRider($rider); + + return $data; + } + + public function startJobOrder(Request $req) + { + $required_params = [ + 'jo_id' + ]; + $data = $this->checkParamsAndKey($req, $required_params); + if (isset($data['error'])) + return $data; + + // find job order. + // NOTE: Not using getActiveJobOrder since unsure if it is really being set + $jo_id = $req->request->get('jo_id'); + $jo = $this->em->getRepository(JobOrder::class)->find($jo_id); + if ($jo == null) + { + $data = [ + 'error' => 'No job order found.' + ]; + return $data; + } + + // create time stamp event for JO event + $rider = $this->session->getRider(); + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_START) + ->setJobOrder($jo) + ->setRider($rider); + + return $data; + } + + public function postHubArrive(Request $req) + { + $required_params = [ + 'jo_id' + ]; + $data = $this->checkParamsAndKey($req, $required_params); + if (isset($data['error'])) + return $data; + + // find job order. + // NOTE: Not using getActiveJobOrder since unsure if it is really being set + $jo_id = $req->request->get('jo_id'); + $jo = $this->em->getRepository(JobOrder::class)->find($jo_id); + if ($jo == null) + { + $data = [ + 'error' => 'No job order found.' + ]; + return $data; + } + + // create time stamp event for JO event + $rider = $this->session->getRider(); + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_ARRIVE_HUB_POST_JO) + ->setJobOrder($jo) + ->setRider($rider); + + return $data; + } + + public function postHubDepart(Request $req) + { + $required_params = [ + 'jo_id' + ]; + $data = $this->checkParamsAndKey($req, $required_params); + if (isset($data['error'])) + return $data; + + // find job order. + // NOTE: Not using getActiveJobOrder since unsure if it is really being set + $jo_id = $req->request->get('jo_id'); + $jo = $this->em->getRepository(JobOrder::class)->find($jo_id); + if ($jo == null) + { + $data = [ + 'error' => 'No job order found.' + ]; + return $data; + } + + // create time stamp event for JO event + $rider = $this->session->getRider(); + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_DEPART_HUB_POST_JO) + ->setJobOrder($jo) + ->setRider($rider); + + return $data; + } + protected function checkMissingParameters(Request $req, $params = []) { $missing = [];