From 2b4c289ba9960807ff0be272b0e2b5cdd79422f0 Mon Sep 17 00:00:00 2001 From: Ramon Gutierrez Date: Tue, 30 Jan 2018 19:47:39 +0800 Subject: [PATCH] Filter nearest outlets by open and close times --- src/Controller/JobOrderController.php | 2 +- src/Service/MapTools.php | 20 +++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/Controller/JobOrderController.php b/src/Controller/JobOrderController.php index edd32a95..c9e7eeef 100644 --- a/src/Controller/JobOrderController.php +++ b/src/Controller/JobOrderController.php @@ -261,7 +261,7 @@ class JobOrderController extends BaseController $params['statuses'] = JOStatus::getCollection(); // get closest outlets - $outlets = $map_tools->getClosestOutlets($obj->getCoordinates(), 10); + $outlets = $map_tools->getClosestOutlets($obj->getCoordinates(), 10, date("H:i:s")); $params['outlets'] = []; diff --git a/src/Service/MapTools.php b/src/Service/MapTools.php index 435a60dd..0805d47d 100644 --- a/src/Service/MapTools.php +++ b/src/Service/MapTools.php @@ -48,7 +48,7 @@ class MapTools 'destinations' => $dests_value, ]; - error_log(print_r($gmaps_params, true)); + //error_log(print_r($gmaps_params, true)); // query google maps api @@ -57,13 +57,19 @@ class MapTools return $res->getBody(); } - public function getClosestOutlets(Point $point, $limit) + public function getClosestOutlets(Point $point, $limit, $time = false) { // get closest outlets based on st_distance function from db - $query = $this->em->createQuery('SELECT o, st_distance(o.coordinates, point(:lng, :lat)) as dist FROM App\Entity\Outlet o ORDER BY dist') + $query = $this->em->createQuery('SELECT o, st_distance(o.coordinates, point(:lng, :lat)) as dist FROM App\Entity\Outlet o' . ($time ? ' WHERE :time BETWEEN o.time_open AND o.time_close' : '') . ' ORDER BY dist') ->setParameter('lat', $point->getLatitude()) - ->setParameter('lng', $point->getLongitude()) - ->setMaxResults($limit); + ->setParameter('lng', $point->getLongitude()); + + if ($time) { + $query->setParameter('time', $time); + } + + $query->setMaxResults($limit); + // error_log($query->getSql()); $result = $query->getResult(); @@ -71,7 +77,7 @@ class MapTools $final_data = []; foreach ($result as $row) { - error_log($row[0]->getName() . ' - ' . $row['dist']); + //error_log($row[0]->getName() . ' - ' . $row['dist']); $outlets[] = $row[0]; $final_data[] = [ 'outlet' => $row[0], @@ -84,7 +90,7 @@ class MapTools // get actual distance details with eta from google maps api $raw_res = $this->mapGetDistances($point, $outlets); $res = json_decode($raw_res, true); - error_log(print_r($res, true)); + //error_log(print_r($res, true)); // check if status is ok if ($res['status'] != 'OK')