From 06c934b2077dc8c446f43fdcf3e62c6cfd460782 Mon Sep 17 00:00:00 2001 From: Leigh Dodds Date: Fri, 24 Jan 2025 14:04:18 +0000 Subject: [PATCH] Make public displays feature accessible to users (#4186) --- ...oller.rb => digital_signage_controller.rb} | 24 ++-- .../digital_signage_controller.rb | 89 +++++++++++++ .../schools/digital_signage_controller.rb | 8 ++ ...lays.html.erb => digital_signage.html.erb} | 0 .../charts.html.erb | 6 +- .../equivalences.html.erb | 0 .../error.html.erb | 0 .../pupils/public_displays/index.html.erb | 96 -------------- .../digital_signage/index.html.erb | 59 +++++++++ .../schools/digital_signage/index.html.erb | 121 ++++++++++++++++++ .../_manage_school_group_menu.html.erb | 8 +- .../second_nav/_manage_school_menu.html.erb | 10 +- ...ublic_displays.yml => digital_signage.yml} | 2 +- .../locales/views/pupils/digital_signage.yml | 76 +++++++++++ .../locales/views/pupils/public_displays.yml | 37 ------ config/locales/views/shared/shared.yml | 1 + config/routes.rb | 13 +- spec/support/shared_examples/school_groups.rb | 4 +- .../school_groups/digital_signage_spec.rb | 98 ++++++++++++++ .../schools/dashboard/manage_school_spec.rb | 1 + .../digital_signage_spec.rb} | 105 +++++++++------ 21 files changed, 562 insertions(+), 196 deletions(-) rename app/controllers/pupils/{public_displays_controller.rb => digital_signage_controller.rb} (91%) create mode 100644 app/controllers/school_groups/digital_signage_controller.rb create mode 100644 app/controllers/schools/digital_signage_controller.rb rename app/views/layouts/{public_displays.html.erb => digital_signage.html.erb} (100%) rename app/views/pupils/{public_displays => digital_signage}/charts.html.erb (83%) rename app/views/pupils/{public_displays => digital_signage}/equivalences.html.erb (100%) rename app/views/pupils/{public_displays => digital_signage}/error.html.erb (100%) delete mode 100644 app/views/pupils/public_displays/index.html.erb create mode 100644 app/views/school_groups/digital_signage/index.html.erb create mode 100644 app/views/schools/digital_signage/index.html.erb rename config/locales/cy/views/pupils/{public_displays.yml => digital_signage.yml} (98%) create mode 100644 config/locales/views/pupils/digital_signage.yml delete mode 100644 config/locales/views/pupils/public_displays.yml create mode 100644 spec/system/school_groups/digital_signage_spec.rb rename spec/system/{pupils/public_displays_spec.rb => schools/digital_signage_spec.rb} (66%) diff --git a/app/controllers/pupils/public_displays_controller.rb b/app/controllers/pupils/digital_signage_controller.rb similarity index 91% rename from app/controllers/pupils/public_displays_controller.rb rename to app/controllers/pupils/digital_signage_controller.rb index c64dbfc48f..16c2a3a853 100644 --- a/app/controllers/pupils/public_displays_controller.rb +++ b/app/controllers/pupils/digital_signage_controller.rb @@ -1,5 +1,5 @@ module Pupils - class PublicDisplaysController < ApplicationController + class DigitalSignageController < ApplicationController load_resource :school include SchoolAggregation @@ -7,12 +7,14 @@ class PublicDisplaysController < ApplicationController include ActionView::Context skip_before_action :authenticate_user! - before_action :set_fuel_type, except: :index + before_action :set_fuel_type before_action :check_fuel_type, only: :charts - before_action :set_analysis_dates, except: :index + before_action :set_analysis_dates after_action :allow_iframe, only: [:equivalences, :charts] - layout 'public_displays' + layout 'digital_signage' + + CHART_TYPES = %i[last-week out-of-hours].freeze rescue_from StandardError do |exception| Rollbar.error(exception, school: @school.name, school_id: @school.id) @@ -23,10 +25,6 @@ class PublicDisplaysController < ApplicationController end end - def index - render 'index', layout: 'application' - end - def equivalences meter_types = case @fuel_type when :electricity @@ -42,10 +40,10 @@ def charts raise 'Not data enabled' unless @school.data_enabled? @chart_type = params.require(:chart_type).to_sym - # avoid showing stale date on weekly comparion chart, issue temporary redirect + # avoid showing stale date on weekly comparison chart, issue temporary redirect # ensures pages don't break in case of lagging data or a meter fault if lagging_data?(@chart_type) - redirect_to pupils_school_public_displays_equivalences_path(@school, @fuel_type) and return + redirect_to pupils_school_digital_signage_equivalences_path(@school, @fuel_type) and return end @chart = find_chart(@fuel_type, @chart_type) end @@ -53,7 +51,7 @@ def charts private def lagging_data?(chart_type) - return false if chart_type == :out_of_hours + return false if chart_type == :"out-of-hours" (Time.zone.today - @analysis_dates.end_date) > 30 end @@ -96,14 +94,14 @@ def find_chart(fuel_type, chart_type) case fuel_type when :electricity case chart_type - when :out_of_hours + when :"out-of-hours" :daytype_breakdown_electricity_tolerant else :public_displays_electricity_weekly_comparison end when :gas case chart_type - when :out_of_hours + when :"out-of-hours" :daytype_breakdown_gas_tolerant else :public_displays_gas_weekly_comparison diff --git a/app/controllers/school_groups/digital_signage_controller.rb b/app/controllers/school_groups/digital_signage_controller.rb new file mode 100644 index 0000000000..017e380364 --- /dev/null +++ b/app/controllers/school_groups/digital_signage_controller.rb @@ -0,0 +1,89 @@ +module SchoolGroups + class DigitalSignageController < ApplicationController + load_and_authorize_resource :school_group + + def index + end + + def charts + send_data charts_csv, filename: csv_filename_for(:charts) + end + + def equivalences + send_data equivalences_csv, filename: csv_filename_for(:equivalences) + end + + private + + def csv_filename_for(link_type) + title = I18n.t("pupils.digital_signage.index.school_group.links.#{link_type}") + "#{@school_group.name}-#{title}-#{Time.zone.now.strftime('%Y-%m-%d')}".parameterize + '.csv' + end + + def equivalences_csv + CSV.generate do |csv| + csv << [ + t('common.school'), + t('advice_pages.index.priorities.table.columns.fuel_type'), + t('pupils.digital_signage.table.columns.link') + ] + schools.each do |school| + if school.has_electricity? + csv << [ + school.name, + t('common.electricity'), + pupils_school_digital_signage_equivalences_url(school, :electricity) + ] + end + if school.has_gas? + csv << [ + school.name, + t('common.gas'), + pupils_school_digital_signage_equivalences_url(school, :gas) + ] + end + end + end + end + + def charts_csv + CSV.generate do |csv| + csv << [ + t('common.school'), + t('advice_pages.index.priorities.table.columns.fuel_type'), + t('pupils.digital_signage.table.columns.chart_type'), + t('pupils.digital_signage.table.columns.description'), + t('pupils.digital_signage.table.columns.link') + ] + schools.each do |school| + if school.has_electricity? + Pupils::DigitalSignageController::CHART_TYPES.each do |chart_type| + csv << [ + school.name, + t('common.electricity'), + t("pupils.digital_signage.index.charts.#{chart_type}.title"), + t("pupils.digital_signage.index.charts.#{chart_type}.description"), + pupils_school_digital_signage_charts_url(school, :electricity, chart_type) + ] + end + end + if school.has_gas? + Pupils::DigitalSignageController::CHART_TYPES.each do |chart_type| + csv << [ + school.name, + t('common.gas'), + t("pupils.digital_signage.index.charts.#{chart_type}.title"), + t("pupils.digital_signage.index.charts.#{chart_type}.description"), + pupils_school_digital_signage_charts_url(school, :gas, chart_type) + ] + end + end + end + end + end + + def schools + @school_group.schools.active.data_enabled.where(data_sharing: :public).order(:name) + end + end +end diff --git a/app/controllers/schools/digital_signage_controller.rb b/app/controllers/schools/digital_signage_controller.rb new file mode 100644 index 0000000000..c6829967b8 --- /dev/null +++ b/app/controllers/schools/digital_signage_controller.rb @@ -0,0 +1,8 @@ +module Schools + class DigitalSignageController < ApplicationController + load_and_authorize_resource :school + + def index + end + end +end diff --git a/app/views/layouts/public_displays.html.erb b/app/views/layouts/digital_signage.html.erb similarity index 100% rename from app/views/layouts/public_displays.html.erb rename to app/views/layouts/digital_signage.html.erb diff --git a/app/views/pupils/public_displays/charts.html.erb b/app/views/pupils/digital_signage/charts.html.erb similarity index 83% rename from app/views/pupils/public_displays/charts.html.erb rename to app/views/pupils/digital_signage/charts.html.erb index 5572ec3beb..a964bdfd3f 100644 --- a/app/views/pupils/public_displays/charts.html.erb +++ b/app/views/pupils/digital_signage/charts.html.erb @@ -2,10 +2,10 @@

- <%= t("pupils.public_displays.charts.#{@chart_type}.title", fuel_type: I18n.t("common.#{@fuel_type}").downcase) %> + <%= t("pupils.digital_signage.charts.#{@chart_type}.title", fuel_type: I18n.t("common.#{@fuel_type}").downcase) %>

- <%= t("pupils.public_displays.charts.#{@chart_type}.intro") %> + <%= t("pupils.digital_signage.charts.#{@chart_type}.intro") %>

@@ -24,7 +24,7 @@

<% display_dates = @analysis_dates.transform_values { |d| short_dates(d) } %> - <%= t("pupils.public_displays.charts.#{@chart_type}.dates", **display_dates) %> + <%= t("pupils.digital_signage.charts.#{@chart_type}.dates", **display_dates) %>