diff --git a/app/controllers/overview_controller.rb b/app/controllers/overview_controller.rb index 464944ab..91d761ab 100644 --- a/app/controllers/overview_controller.rb +++ b/app/controllers/overview_controller.rb @@ -29,10 +29,10 @@ class OverviewController < SqmApplicationController end def measures - @measures ||= Measure.all.includes(%i[scales admin_data_items category subcategory survey_items]) + @measures ||= subcategories.flat_map(&:measures) end def subcategories - @subcategories ||= Subcategory.all.includes(:measures) + @subcategories ||= Subcategory.all.includes(%i[measures admin_data_items category]) end end diff --git a/app/models/measure.rb b/app/models/measure.rb index d13aa2f3..04c06e07 100644 --- a/app/models/measure.rb +++ b/app/models/measure.rb @@ -192,34 +192,16 @@ class Measure < ActiveRecord::Base def sufficient_student_data?(school:, academic_year:) return false unless includes_student_survey_items? - return false if no_student_responses_exist?(school:, academic_year:) subcategory.response_rate(school:, academic_year:).meets_student_threshold? end def sufficient_teacher_data?(school:, academic_year:) return false unless includes_teacher_survey_items? - return false if no_teacher_responses_exist?(school:, academic_year:) subcategory.response_rate(school:, academic_year:).meets_teacher_threshold? end - def no_student_responses_exist?(school:, academic_year:) - @no_student_responses_exist ||= Hash.new do |memo, (school, academic_year)| - memo[[school, academic_year]] = - SurveyItemResponse.where(school:, academic_year:, survey_item: survey_items.student_survey_items).count.zero? - end - @no_student_responses_exist[[school, academic_year]] - end - - def no_teacher_responses_exist?(school:, academic_year:) - @no_teacher_responses_exist ||= Hash.new do |memo, (school, academic_year)| - memo[[school, academic_year]] = - SurveyItemResponse.where(school:, academic_year:, survey_item: survey_items.teacher_survey_items).count.zero? - end - @no_teacher_responses_exist[[school, academic_year]] - end - def incalculable_score(school:, academic_year:) @incalculable_score ||= Hash.new do |memo, (school, academic_year)| lacks_sufficient_survey_data = !sufficient_student_data?(school:, academic_year:) && diff --git a/app/models/subcategory.rb b/app/models/subcategory.rb index 07b1ce09..3be94fcc 100644 --- a/app/models/subcategory.rb +++ b/app/models/subcategory.rb @@ -5,6 +5,9 @@ class Subcategory < ActiveRecord::Base has_many :measures has_many :survey_items, through: :measures + has_many :admin_data_items, through: :measures + has_many :survey_items, through: :measures + has_many :scales, through: :measures def score(school:, academic_year:) measures.map do |measure| diff --git a/app/models/teacher_response_rate_calculator.rb b/app/models/teacher_response_rate_calculator.rb index aed55382..a7524715 100644 --- a/app/models/teacher_response_rate_calculator.rb +++ b/app/models/teacher_response_rate_calculator.rb @@ -2,11 +2,15 @@ class TeacherResponseRateCalculator < ResponseRateCalculator def survey_item_count - @survey_item_count ||= @subcategory.measures.map do |measure| - measure.teacher_survey_items.reject do |survey_item| - survey_item.survey_item_responses.where(school:, academic_year:).none? - end.count - end.sum + @survey_item_count ||= begin + survey_items = @subcategory.measures.flat_map(&:teacher_survey_items) + + SurveyItem.joins('inner join survey_item_responses on survey_item_responses.survey_item_id = survey_items.id') + .teacher_survey_items + .where("survey_item_responses.school": school, "survey_item_responses.academic_year": academic_year, "survey_item_responses.survey_item_id": survey_items) + .group('survey_items.id') + .having('count(*) >= 0').count.length + end end def survey_items_have_sufficient_responses? diff --git a/app/presenters/variance_chart_row_presenter.rb b/app/presenters/variance_chart_row_presenter.rb index 122d71fc..b7003d66 100644 --- a/app/presenters/variance_chart_row_presenter.rb +++ b/app/presenters/variance_chart_row_presenter.rb @@ -12,7 +12,7 @@ class VarianceChartRowPresenter @meets_student_threshold = score.meets_student_threshold? @measure_name = @measure.name @measure_id = @measure.measure_id - @category = @measure.category + @category = @measure.subcategory.category end def sufficient_data?