From f47e280b371631b0f2bdaee038dfed8a9034d193 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Mon, 13 Aug 2018 04:49:21 +0800 Subject: [PATCH] Display latest JO without rider rating in rider status api call #162 --- src/Controller/APIController.php | 70 +++++++++++++++++++++++++++++--- 1 file changed, 65 insertions(+), 5 deletions(-) diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index df345d5f..a64eea1c 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -1089,10 +1089,13 @@ class APIController extends Controller } // check if we have an ongoing job order + /* $ongoing_jos = $em->getRepository(JobOrder::class)->findBy([ 'customer' => $cust, 'status' => [JOStatus::PENDING, JOStatus::RIDER_ASSIGN, JOStatus::IN_TRANSIT, JOStatus::ASSIGNED, JOStatus::IN_PROGRESS], ]); + */ + $ongoing_jos = $this->getOngoingJobOrders($cust); // $res->setData(['here' => count($ongoing_jos)]); // return $res->getReturnResponse(); @@ -1101,12 +1104,55 @@ class APIController extends Controller error_log('No pending jo'); // check if the latest fulfilled jo they have needs rider rating - $query = $em->createQuery('select jo from JobOrder where jo.customer = :cust and jo.status = ' . JOStatus::FULFILLED . ' order by jo.date_fulfill desc'); - $fulfill_jos = $query->setParameters([ - 'cust' => $cust + $query = $em->createQuery('select jo from App\Entity\JobOrder jo where jo.customer = :cust and jo.status = :status order by jo.date_fulfill desc'); + $fulfill_jo = $query->setParameters([ + 'cust' => $cust, + 'status' => JOStatus::FULFILLED, ]) ->setMaxResults(1) - ->getResult(); + ->getSingleResult(); + + // we got a recently fulfilled job order + if ($fulfill_jo) + { + // check if the rider has been rated + if (!$fulfill_jo->hasRiderRating()) + { + $dest = $fulfill_jo->getCoordinates(); + + $data = [ + 'jo_id' => $fulfill_jo->getID(), + 'service_type' => $fulfill_jo->getServiceType(), + 'destination' => [ + 'long' => $dest->getLongitude(), + 'lat' => $dest->getLatitude(), + ], + 'delivery_address' => $fulfill_jo->getDeliveryAddress(), + 'delivery_instructions' => $fulfill_jo->getDeliveryInstructions(), + ]; + + $rider = $fulfill_jo->getRider(); + + // default image url + $url_prefix = $req->getSchemeAndHttpHost(); + $image_url = $url_prefix . '/assets/images/user.gif'; + if ($rider->getImageFile() != null) + $image_url = $url_prefix . '/uploads/' . $rider->getImageFile(); + + $data['status'] = APIRiderStatus::RIDER_RATING; + // default rider location to hub + $data['rider'] = [ + 'id' => $rider->getID(), + 'name' => $rider->getFullName(), + 'plate_num' => $rider->getPlateNumber(), + 'contact_num' => $rider->getContactNumber(), + 'image_url' => $image_url, + ]; + $res->setData($data); + return $res->getReturnResponse(); + } + } + // no pending $res->setData([ @@ -1178,6 +1224,17 @@ class APIController extends Controller return $res->getReturnResponse(); } + protected function getOngoingJobOrders($cust) + { + $em = $this->getDoctrine()->getManager(); + $ongoing_jos = $em->getRepository(JobOrder::class)->findBy([ + 'customer' => $cust, + 'status' => [JOStatus::PENDING, JOStatus::RIDER_ASSIGN, JOStatus::IN_TRANSIT, JOStatus::ASSIGNED, JOStatus::IN_PROGRESS], + ]); + + return $ongoing_jos; + } + public function getOngoing(Request $req) { $required_params = []; @@ -1195,11 +1252,14 @@ class APIController extends Controller return $res->getReturnResponse(); } + /* // check if we have an ongoing job order $ongoing_jos = $em->getRepository(JobOrder::class)->findBy([ 'customer' => $cust, - 'status' => [JOStatus::PENDING, JOStatus::RIDER_ASSIGN, JOStatus::ASSIGNED, JOStatus::IN_PROGRESS], + 'status' => [JOStatus::PENDING, JOStatus::RIDER_ASSIGN, JOStatus::IN_TRANSIT, JOStatus::ASSIGNED, JOStatus::IN_PROGRESS], ]); + */ + $ongoing_jos = $this->getOngoingJobOrders($cust); // initialize data $data = [];