From 978b69b0953ffdb8f874d49e028326265e4bf221 Mon Sep 17 00:00:00 2001 From: Nelson Jovel Date: Tue, 26 Dec 2023 22:14:56 -0800 Subject: [PATCH] fix: correct a problem where survey items with insufficient responses were contributing to the response rate calculation --- app/models/student_response_rate_calculator.rb | 8 ++++++-- app/models/survey_item_response.rb | 3 +-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/models/student_response_rate_calculator.rb b/app/models/student_response_rate_calculator.rb index 3aebc169..5a2466bf 100644 --- a/app/models/student_response_rate_calculator.rb +++ b/app/models/student_response_rate_calculator.rb @@ -43,8 +43,12 @@ class StudentResponseRateCalculator < ResponseRateCalculator quarter_of_grade = enrollment_by_grade[grade] / 4 threshold = threshold > quarter_of_grade ? quarter_of_grade : threshold - si = SurveyItemResponse.student_survey_items_with_sufficient_responses_by_grade(school:, academic_year:, - threshold:) + si = SurveyItemResponse.student_survey_items_with_sufficient_responses_by_grade(school:, + academic_year:) + si = si.reject do |_key, value| + value < threshold + end + ssi = @subcategory.survey_items.student_survey_items.map(&:id) grade_array = Array.new(ssi.length, grade) diff --git a/app/models/survey_item_response.rb b/app/models/survey_item_response.rb index c8773121..5e19d084 100644 --- a/app/models/survey_item_response.rb +++ b/app/models/survey_item_response.rb @@ -70,13 +70,12 @@ class SurveyItemResponse < ActiveRecord::Base @teacher_survey_items_with_sufficient_responses[[school, academic_year]] end - def self.student_survey_items_with_sufficient_responses_by_grade(school:, academic_year:, threshold:) + def self.student_survey_items_with_sufficient_responses_by_grade(school:, academic_year:) @student_survey_items_with_sufficient_responses_by_grade ||= Hash.new do |memo, (school, academic_year)| hash = SurveyItem.joins("inner join survey_item_responses on survey_item_responses.survey_item_id = survey_items.id") .student_survey_items .where("survey_item_responses.school": school, "survey_item_responses.academic_year": academic_year) .group(:grade, :id) - .having("count(*) >= #{threshold}") .count memo[[school, academic_year]] = hash end