From 1a44d28290f08c8a2b936e45b7044a704da1928d Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Mon, 13 Aug 2018 04:13:50 +0800 Subject: [PATCH 1/4] Create query for last fulfilled job order for rider status api call #162 --- src/Controller/APIController.php | 11 +++++++++-- src/Entity/JobOrder.php | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index 50dc320d..3f5e056c 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -1095,8 +1095,15 @@ class APIController extends Controller ]); if (count($ongoing_jos) <= 0) { - // TODO: check if the latest jo they have needs rider rating - // $query = $em->createQuery('select + 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 + ]) + ->setMaxResults(1) + ->getResult(); // no pending $res->setData([ diff --git a/src/Entity/JobOrder.php b/src/Entity/JobOrder.php index 0e9d34e4..4a1ee90d 100644 --- a/src/Entity/JobOrder.php +++ b/src/Entity/JobOrder.php @@ -700,7 +700,7 @@ class JobOrder return $this; } - public function HasRiderRating() + public function hasRiderRating() { if ($this->flag_rider_rating == null) return false; From f47e280b371631b0f2bdaee038dfed8a9034d193 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Mon, 13 Aug 2018 04:49:21 +0800 Subject: [PATCH 2/4] 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 = []; From fa659226bc509a47e4f3ff17b3b419e2dd4c2440 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Mon, 13 Aug 2018 05:01:33 +0800 Subject: [PATCH 3/4] Mark JO as rider rated when post rider rating api call is used #162 --- src/Controller/APIController.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index a64eea1c..344f5c03 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -1101,8 +1101,6 @@ class APIController extends Controller // return $res->getReturnResponse(); if (count($ongoing_jos) <= 0) { - error_log('No pending jo'); - // check if the latest fulfilled jo they have needs rider rating $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([ @@ -1346,6 +1344,9 @@ class APIController extends Controller if (!empty($comment)) $rating->setComment($comment); + // mark jo as rider rated already + $jo->setHasRiderRating(); + $em->persist($rating); $em->flush(); From 051521679e29e05a8e0b70e478b187ac6c359139 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Mon, 13 Aug 2018 05:08:09 +0800 Subject: [PATCH 4/4] Disable sending of MQTT message to user app when user cancels via api #162 --- src/Controller/APIController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index 344f5c03..c31f4df1 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -1526,7 +1526,7 @@ class APIController extends Controller 'reason' => $cancel_reason, 'jo_id' => $jo->getID(), ]; - $mclient->sendEvent($jo, $payload); + // $mclient->sendEvent($jo, $payload); $mclient->sendRiderEvent($jo, $payload);