diff --git a/config/menu.yaml b/config/menu.yaml index 4e6017c9..934953a6 100644 --- a/config/menu.yaml +++ b/config/menu.yaml @@ -186,7 +186,7 @@ main_menu: acl: analytics.menu label: Analytics icon: flaticon-graphic - - id: analytics_forecast + - id: analytics_forecast_form acl: analytics.forecast label: Forecasting parent: analytics diff --git a/config/routes/analytics.yaml b/config/routes/analytics.yaml index 8e96466b..65314662 100644 --- a/config/routes/analytics.yaml +++ b/config/routes/analytics.yaml @@ -1,6 +1,11 @@ -#geofence +# analytics -analytics_forecast: +analytics_forecast_form: path: /analytics/forecast - controller: App\Controller\AnalyticsController::forecast + controller: App\Controller\AnalyticsController::forecastForm methods: [GET] + +analytics_forecast_submit: + path: /analytics/forecast + controller: App\Controller\AnalyticsController::forecastSubmit + methods: [POST] diff --git a/src/Controller/AnalyticsController.php b/src/Controller/AnalyticsController.php index 71b1e971..601f157c 100644 --- a/src/Controller/AnalyticsController.php +++ b/src/Controller/AnalyticsController.php @@ -26,21 +26,53 @@ class AnalyticsController extends Controller * @Menu(selected="analytics_forecast") * @IsGranted("analytics.forecast") */ - public function forecast(EntityManagerInterface $em) + public function forecastForm(EntityManagerInterface $em) { - $hub_list = [ 6, 4, 36, 7, 8, 126, 127, 18, 12, 9, 60, 10, 21, 135 ]; + $hub_ids = [ 6, 4, 36, 7, 8, 126, 127, 18, 12, 9, 60, 10, 21, 135 ]; - $hub_data = []; - foreach ($hub_list as $hub_id) + $all_hubs = $em->getRepository(Hub::class)->findAll(); + + $hub_list = []; + foreach ($all_hubs as $hub) { - $hub_data[$hub_id] = $this->generateHubData($em, $hub_id, 5000, new DateTime()); + $hub_list[$hub->getID()] = $hub->getName() . ' - ' . $hub->getBranch(); } $params = [ + 'hub_list' => $hub_list, + 'default_hubs' => $hub_ids, + ]; + + return $this->render('analytics/forecast_form.html.twig', $params); + } + + + /** + * @Menu(selected="analytics_forecast") + * @IsGranted("analytics.forecast") + */ + public function forecastSubmit(EntityManagerInterface $em, Request $req) + { + $hub_list = $req->request->get('hub_ids', []); + $distances = $req->request->get('distances', []); + $today = DateTime::createFromFormat('d M Y', $req->request->get('date')); + error_log(print_r($hub_list, true)); + + // $hub_list = [ 6, 4, 36, 7, 8, 126, 127, 18, 12, 9, 60, 10, 21, 135 ]; + + $hub_data = []; + foreach ($hub_list as $key => $hub_id) + { + $dist = $distances[$key]; + $hub_data[$hub_id] = $this->generateHubData($em, $hub_id, $dist, $today); + } + + $params = [ + 'date' => $today, 'hub_list' => $hub_data, ]; - return $this->render('analytics/forecast.html.twig', $params); + return $this->render('analytics/forecast_submit.html.twig', $params); } protected function generateHubData($em, $hub_id, $distance_limit, DateTime $today) @@ -58,6 +90,9 @@ class AnalyticsController extends Controller // initialize counters $c_weekday = []; $c_day = []; + + // counter to check instances of hourly weekdays, so we can get average + $c_week_count = []; // loop through job orders foreach ($jos as $jo) @@ -68,6 +103,7 @@ class AnalyticsController extends Controller $day = $date->format('d'); $weekday = $date->format('l'); $hour = $date->format('H'); + $week = $date->format('W'); // year day if (!isset($c_day[$year][$month][$day])) @@ -76,8 +112,19 @@ class AnalyticsController extends Controller // weekday if (!isset($c_weekday[$year][$month][$weekday][$hour])) - $c_weekday[$year][$month][$weekday][$hour] = 0; - $c_weekday[$year][$month][$weekday][$hour]++; + { + $c_weekday[$year][$month][$weekday][$hour]['total'] = 0; + $c_weekday[$year][$month][$weekday][$hour]['count'] = 0; + } + + $c_weekday[$year][$month][$weekday][$hour]['total']++; + + if (!isset($c_week_count[$year][$month][$week][$weekday][$hour])) + { + // error_log('week detected - ' . $week); + $c_week_count[$year][$month][$week][$weekday][$hour] = 1; + $c_weekday[$year][$month][$weekday][$hour]['count']++; + } } // error_log(print_r($c_weekday, true)); @@ -180,7 +227,13 @@ class AnalyticsController extends Controller // get hour data if (isset($year_data[$month][$weekday][$hour])) - $data[$id]['y' . $year] = $year_data[$month][$weekday][$hour]; + { + $year_id = 'y' . $year; + + $data[$id][$year_id] = $year_data[$month][$weekday][$hour]['total']; + $data[$id][$year_id . '_count'] = $year_data[$month][$weekday][$hour]['count']; + $data[$id][$year_id . '_average'] = ceil($year_data[$month][$weekday][$hour]['total'] / $year_data[$month][$weekday][$hour]['count']); + } } } diff --git a/templates/analytics/forecast_form.html.twig b/templates/analytics/forecast_form.html.twig new file mode 100644 index 00000000..5dd51e7f --- /dev/null +++ b/templates/analytics/forecast_form.html.twig @@ -0,0 +1,96 @@ +{% extends 'base.html.twig' %} + +{% block body %} + +