diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index b5bc3c47..c31f4df1 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -1089,17 +1089,68 @@ 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(); if (count($ongoing_jos) <= 0) { - // TODO: check if the latest jo they have needs rider rating - // $query = $em->createQuery('select + // 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([ + 'cust' => $cust, + 'status' => JOStatus::FULFILLED, + ]) + ->setMaxResults(1) + ->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([ @@ -1171,6 +1222,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 = []; @@ -1188,11 +1250,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 = []; @@ -1279,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(); @@ -1458,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); 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;