sqm-dashboards/app/models/student_response_rate_calculator.rb
rebuilt c03615cb43 Rename ResponseRate to ResponseRateCalculator. Create a new response
rate model.  Create a loader to refresh response rates for all
subcategories.

Use precalculated response rates in views

Wrap more elements in page caching

Calculate a response rate for a subcategory if one does not already
exist
2022-06-16 08:19:26 -07:00

40 lines
1.3 KiB
Ruby

class StudentResponseRateCalculator
include ResponseRateCalculator
private
def survey_item_count
@survey_item_count ||= begin
survey = Survey.find_by(school:, academic_year:)
survey_items = SurveyItem.includes(%i[scale
measure]).student_survey_items.where("scale.measure": @subcategory.measures)
survey_items = survey_items.where(on_short_form: true) if survey.form == 'short'
survey_items = survey_items.reject do |survey_item|
survey_item.survey_item_responses.where(school:, academic_year:).none?
end
survey_items.count
end
end
def response_count
@response_count ||= @subcategory.measures.map do |measure|
measure.student_survey_items.map do |survey_item|
survey = Survey.find_by(school:, academic_year:)
next 0 if survey.form == 'short' && survey_item.on_short_form == false
survey_item.survey_item_responses.where(school:,
academic_year:).exclude_boston.count
end.sum
end.sum
end
def total_possible_responses
@total_possible_responses ||= begin
total_responses = Respondent.find_by(school:, academic_year:)
return 0 unless total_responses.present?
total_responses.total_students
end
end
end