diff --git a/app/assets/javascripts/dashboard.js b/app/assets/javascripts/dashboard.js
new file mode 100644
index 00000000..40b3a8cc
--- /dev/null
+++ b/app/assets/javascripts/dashboard.js
@@ -0,0 +1,34 @@
+document.addEventListener("DOMContentLoaded", function() {
+ const selectSchoolElement = document.querySelector('#select-school');
+
+ selectSchoolElement.addEventListener('change', (event) => {
+ change_school(event);
+ });
+
+ const selectDistrictElement = document.querySelector('#select-district');
+
+ selectDistrictElement.addEventListener('change', (event) => {
+ change_district(event);
+ });
+});
+
+function change_school(event) {
+ const school_slug = event.target.value;
+
+ const district_regex = /districts\/(.+)\/schools/;
+ const district_slug = window.location.pathname.match(district_regex)[1];
+
+ const year_range_regex = /year=(.+)/;
+ const year_range = window.location.search.match(year_range_regex)[1];
+
+ window.location = `/districts/${district_slug}/schools/${school_slug}/dashboard?year=${year_range}`;
+};
+
+function change_district(event) {
+ const district_slug = event.target.value;
+
+ const year_range_regex = /year=(.+)/;
+ const year_range = window.location.search.match(year_range_regex)[1];
+
+ window.location = `/districts/${district_slug}/schools/first/dashboard?year=${year_range}`;
+};
diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb
index 978510b4..3b141629 100644
--- a/app/controllers/dashboard_controller.rb
+++ b/app/controllers/dashboard_controller.rb
@@ -1,5 +1,7 @@
class DashboardController < ApplicationController
def index
+ schools
+ districts
authenticate(district.name.downcase, "#{district.name.downcase}!")
@measure_graph_row_presenters = measure_ids
.map { |measure_id| Measure.find_by_measure_id measure_id }
@@ -23,13 +25,22 @@ class DashboardController < ApplicationController
end
def school
+ @school = schools.first if params[:school_id] == "first"
@school ||= School.find_by_slug school_slug
end
+ def schools
+ @schools = School.where(district: district).sort_by { | school| school.name }
+ end
+
def district
@district ||= District.find_by_slug district_slug
end
+ def districts
+ @districts = District.all.sort_by {|district| district.name}
+ end
+
def district_slug
params[:district_id]
end
diff --git a/app/services/survey_response_aggregator.rb b/app/services/survey_response_aggregator.rb
index c7e8a016..66e2064b 100644
--- a/app/services/survey_response_aggregator.rb
+++ b/app/services/survey_response_aggregator.rb
@@ -1,4 +1,5 @@
class SurveyResponseAggregator
+ # Returns an average score for all SurveyItemResponses for the given AcademicYear, School, and Measure
def self.score(academic_year:, school:, measure:)
SurveyItemResponse
.where(academic_year: academic_year, school: school)
@@ -6,4 +7,11 @@ class SurveyResponseAggregator
.map { |survey_item_response| survey_item_response.likert_score }
.average
end
+
+ # Returns an array of SurveyItemResponses for the given AcademicYear, School, and Measure
+ def self.find_responses_by_measure(academic_year:, school:, measure:)
+ SurveyItemResponse
+ .where(academic_year: academic_year, school: school)
+ .joins(:survey_item).where('survey_items.measure_id': measure.id)
+ end
end
diff --git a/app/views/dashboard/index.html.erb b/app/views/dashboard/index.html.erb
index 8881effa..31c59a99 100644
--- a/app/views/dashboard/index.html.erb
+++ b/app/views/dashboard/index.html.erb
@@ -7,12 +7,20 @@
-