diff --git a/src/Controller/AnalyticsController.php b/src/Controller/AnalyticsController.php index ed492600..71b1e971 100644 --- a/src/Controller/AnalyticsController.php +++ b/src/Controller/AnalyticsController.php @@ -28,37 +28,32 @@ class AnalyticsController extends Controller */ public function forecast(EntityManagerInterface $em) { - + $hub_list = [ 6, 4, 36, 7, 8, 126, 127, 18, 12, 9, 60, 10, 21, 135 ]; + + $hub_data = []; + foreach ($hub_list as $hub_id) + { + $hub_data[$hub_id] = $this->generateHubData($em, $hub_id, 5000, new DateTime()); + } + + $params = [ + 'hub_list' => $hub_data, + ]; + + return $this->render('analytics/forecast.html.twig', $params); + } + + protected function generateHubData($em, $hub_id, $distance_limit, DateTime $today) + { $date_start = DateTime::createFromFormat('Y-m-d H:i:s', '2018-01-01 00:00:00'); - $date_end = DateTime::createFromFormat('Y-m-d H:i:s', '2020-04-31 23:59:59'); + $date_end = new DateTime(); // get hub to analyze - $hub = $em->getRepository(Hub::class)->find(86); - $hub_coord = $hub->getCoordinates(); - - // distance limit in meters - $distance = 5000; - + $hub = $em->getRepository(Hub::class)->find($hub_id); $conn = $em->getConnection(); - // 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 date_schedule >= :date_start and date_schedule <= :date_end and status <> 'cancelled' order by date_schedule asc"; - // $query = $em->createQuery('select jo from App\\Entity\\JobOrder jo where st_distance(jo.coordinates, point(:lng, :lat)) * 111195 <= :distance_limit and jo.date_schedule >= :date_start and jo.date_schedule <= :date_end'); - $stmt = $conn->prepare($sql); - $stmt->bindValue('lng', $hub_coord->getLongitude()); - $stmt->bindValue('lat', $hub_coord->getLatitude()); - $stmt->bindValue('distance_limit', $distance); - $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')); - $stmt->execute(); - $jos = $stmt->fetchAll(); - - error_log(count($jos)); - - // get 'today' - $today = new DateTime(); - $today = DateTime::createFromFormat('Ymd', '20201101'); + // get job order data + $jos = $this->generateJobOrderData($conn, $hub, $distance_limit); // initialize counters $c_weekday = []; @@ -85,8 +80,46 @@ class AnalyticsController extends Controller $c_weekday[$year][$month][$weekday][$hour]++; } - error_log(print_r($c_weekday, true)); + // error_log(print_r($c_weekday, true)); + $chart_year = $this->generateYearData($date_start, $date_end, $c_day); + $chart_weekday = $this->generateWeekdayData($c_weekday, $today); + + // error_log(print_r($chart_weekday, true)); + + $params = [ + 'id' => $hub->getID(), + 'label' => $hub->getName(), + 'data_year' => $chart_year, + 'data_weekday' => $chart_weekday, + ]; + + return $params; + } + + protected function generateJobOrderData($conn, $hub, $distance_limit) + { + $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' 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')); + $stmt->execute(); + $jos = $stmt->fetchAll(); + + error_log(count($jos)); + + return $jos; + } + + protected function generateYearData($date_start, $date_end, $c_day) + { $res_year = []; $date_loop = clone $date_start; for (; $date_loop <= $date_end; $date_loop->add(new DateInterval('P1D'))) @@ -98,6 +131,7 @@ class AnalyticsController extends Controller $id = $date_loop->format('m-d'); // NOTE: toss aside feb 29 + // TODO: handle april 29 if ($id == '02-29') continue; @@ -117,20 +151,7 @@ class AnalyticsController extends Controller foreach ($res_year as $day => $day_data) $chart_year[] = $day_data; - // error_log(print_r($chart_year, true)); - - // error_log(print_r($c_day, true)); - - $chart_weekday = $this->generateWeekdayData($c_weekday, $today); - - error_log(print_r($chart_weekday, true)); - - $params = [ - 'data_year' => $chart_year, - 'data_weekday' => $chart_weekday, - ]; - - return $this->render('analytics/forecast.html.twig', $params); + return $chart_year; } protected function generateWeekdayData($all_weekday_data, $today) diff --git a/templates/analytics/forecast.html.twig b/templates/analytics/forecast.html.twig index cee5b87f..109f9799 100644 --- a/templates/analytics/forecast.html.twig +++ b/templates/analytics/forecast.html.twig @@ -12,6 +12,7 @@