diff --git a/src/Controller/CAPI/RiderController.php b/src/Controller/CAPI/RiderController.php index 5507f8c4..b66b20c6 100644 --- a/src/Controller/CAPI/RiderController.php +++ b/src/Controller/CAPI/RiderController.php @@ -30,6 +30,17 @@ use App\Service\InvoiceGeneratorInterface; use App\Service\RisingTideGateway; use App\Service\RiderTracker; +use App\Ramcar\ServiceType; +use App\Ramcar\TradeInType; +use App\Ramcar\JOStatus; +use App\Ramcar\JOEventType; +use App\Ramcar\InvoiceStatus; +use App\Ramcar\ModeOfPayment; +use App\Ramcar\InvoiceCriteria; +use App\Ramcar\WarrantySource; + +use DateTime; + // third party API for rider class RiderController extends APIController { @@ -372,6 +383,50 @@ class RiderController extends APIController public function acceptJobOrder(Request $req, EntityManagerInterface $em) { + $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 transit + $jo->setStatus(JOStatus::IN_TRANSIT); + + // TODO: send mqtt event (?) + + // set rider's current job order + $rider->setCurrentJobOrder($jo); + + // set rider to unavailable + $rider->setAvailable(false); + + // add event log + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_ACCEPT) + ->setJobOrder($jo) + ->setRider($rider); + $em->persist($event); + + $em->flush(); + + $data = []; + return new APIResponse(true, 'Job order accepted.', $data); + } public function cancelJobOrder(Request $req, EntityManagerInterface $em) @@ -455,4 +510,35 @@ class RiderController extends APIController return $missing; } + + protected function checkJO(Request $req, $required_params, &$jo = null, $rider) + { + // set jo status to in transit + $msg = ''; + $missing = $this->checkMissingParameters($req, $required_params); + if (count($missing) > 0) + { + $params = implode(', ', $missing); + $msg = 'Missing parameter(s): ' . $params; + return $msg; + } + + // check if we have an active JO + $jo = $rider->getActiveJobOrder(); + if ($jo == null) + { + $msg = 'No active job order.'; + return $msg; + } + + // check if the jo_id sent is the same as our active jo + if ($req->request->get('jo_id') != $jo->getID()) + { + $msg = 'Job order selected is not active job order.'; + return $msg; + } + + return $msg; + } + }