From 94116a2958f9c4b82d8fad1e68ea8f44ba51839c Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Sat, 27 Jun 2020 07:42:04 +0800 Subject: [PATCH] Add time restriction in analytics #409 --- src/Controller/AnalyticsController.php | 29 +++++++++++++++++---- templates/analytics/forecast_form.html.twig | 20 ++++++++++++-- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/Controller/AnalyticsController.php b/src/Controller/AnalyticsController.php index a14c0581..0ead06cf 100644 --- a/src/Controller/AnalyticsController.php +++ b/src/Controller/AnalyticsController.php @@ -107,6 +107,9 @@ class AnalyticsController extends Controller $hub_list = $req->request->get('hub_ids', []); $distances = $req->request->get('distances', []); + $time_start = $req->request->get('time_from'); + $time_end = $req->request->get('time_to'); + $date_from = DateTime::createFromFormat('d M Y', $req->request->get('date_from')); $date_to = DateTime::createFromFormat('d M Y', $req->request->get('date_to')); @@ -123,7 +126,7 @@ class AnalyticsController extends Controller $hub = $em->getRepository(Hub::class)->find($hub_id); $coords = $hub->getCoordinates(); - $hub_data[$hub_id] = $this->generateHubData($em, $hub, $dist, $date_from, $date_to, $overlaps); + $hub_data[$hub_id] = $this->generateHubData($em, $hub, $dist, $date_from, $date_to, $time_start, $time_end, $overlaps); $hub_coverage[] = [ 'longitude' => $coords->getLongitude(), @@ -328,14 +331,14 @@ class AnalyticsController extends Controller return $data; } - protected function generateHubData($em, $hub, $distance_limit, DateTime $date_start, DateTime $date_end, &$overlaps) + protected function generateHubData($em, $hub, $distance_limit, DateTime $date_start, DateTime $date_end, $time_start, $time_end, &$overlaps) { // get hub to analyze // $hub = $em->getRepository(Hub::class)->find($hub_id); $conn = $em->getConnection(); // get job order data (job orders within coverage area) - $jos = $this->generateJobOrderData($conn, $hub, $distance_limit, $date_start, $date_end); + $jos = $this->generateJobOrderData($conn, $hub, $distance_limit, $date_start, $date_end, $time_start, $time_end); // initialize counters $c_weekday = []; @@ -409,19 +412,35 @@ class AnalyticsController extends Controller return $params; } - protected function generateJobOrderData($conn, $hub, $distance_limit, DateTime $date_start, DateTime $date_end) + protected function generateJobOrderData($conn, $hub, $distance_limit, DateTime $date_start, DateTime $date_end, $time_start, $time_end) { $hub_coord = $hub->getCoordinates(); // create query // formula to convert to km is 111195 * st_distance - $sql = "select id, round(st_distance(coordinates, Point(:lng, :lat)) * 111195) as dist, date_schedule from job_order where st_distance(coordinates, Point(:lng, :lat)) * 111195 <= :distance_limit and status <> 'cancelled' and date_schedule >= :date_start and date_schedule <= :date_end order by date_schedule asc"; + $sql = "select id, round(st_distance(coordinates, Point(:lng, :lat)) * 111195) as dist, date_schedule from job_order where st_distance(coordinates, Point(:lng, :lat)) * 111195 <= :distance_limit and status <> 'cancelled' and date_schedule >= :date_start and date_schedule <= :date_end"; + // check if time is specified + if (!empty($time_start)) + $sql .= ' and time(date_schedule) >= :time_start'; + if (!empty($time_end)) + $sql .= ' and time(date_schedule) <= :time_end'; + $sql .= " order by date_schedule asc"; + + + + $stmt = $conn->prepare($sql); $stmt->bindValue('lng', $hub_coord->getLongitude()); $stmt->bindValue('lat', $hub_coord->getLatitude()); $stmt->bindValue('distance_limit', $distance_limit); $stmt->bindValue('date_start', $date_start->format('Y-m-d H:i:s')); $stmt->bindValue('date_end', $date_end->format('Y-m-d H:i:s')); + + if (!empty($time_start)) + $stmt->bindValue('time_start', $time_start); + if (!empty($time_end)) + $stmt->bindValue('time_end', $time_end); + $stmt->execute(); $jos = $stmt->fetchAll(); diff --git a/templates/analytics/forecast_form.html.twig b/templates/analytics/forecast_form.html.twig index 4940d311..d2c6108a 100644 --- a/templates/analytics/forecast_form.html.twig +++ b/templates/analytics/forecast_form.html.twig @@ -30,11 +30,27 @@
+
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
- + @@ -44,7 +60,7 @@
- +