mirror of
https://github.com/edcommonwealth/sqm-dashboards.git
synced 2026-03-13 09:20:38 -07:00
Implement large speed improvements to score calculations. Add page caching to all pages. Small speed improvements to response rate by filtering out survey items without responses with `none?` `method vs count == 0`.
58 lines
2 KiB
Ruby
58 lines
2 KiB
Ruby
class StudentResponseRate
|
|
include ResponseRate
|
|
|
|
private
|
|
|
|
def survey_item_count
|
|
@survey_item_count ||= begin
|
|
survey = Survey.where(school: @school, academic_year: @academic_year).first
|
|
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: @school, academic_year: @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_item.survey_item_responses.where(school: @school,
|
|
academic_year: @academic_year).exclude_boston.count
|
|
end.sum
|
|
end.sum
|
|
end
|
|
|
|
def total_possible_responses
|
|
@total_possible_responses ||= begin
|
|
total_responses = Respondent.where(school: @school, academic_year: @academic_year).first
|
|
return 0 unless total_responses.present?
|
|
|
|
total_responses.total_students
|
|
end
|
|
end
|
|
end
|
|
|
|
# survey = Survey.where(school:, academic_year:).first
|
|
# total_possible_student_responses = Respondent.where(school:, academic_year:).first
|
|
|
|
# student_survey_items = Subcategory.all.map do |subcategory|
|
|
# subcategory.measures.map do |measure|
|
|
# measure.student_scales.map do |scale|
|
|
# scale.survey_items.count
|
|
# end.sum
|
|
# end.sum
|
|
# end
|
|
# student_response_counts = Subcategory.all.map do |subcategory|
|
|
# subcategory.measures.map do |measure|
|
|
# measure.student_survey_items.map do |survey_item|
|
|
# survey_item.survey_item_responses.where(school:, academic_year:).exclude_boston.count
|
|
# end.sum
|
|
# end.sum
|
|
# end
|
|
|
|
# student_response_counts.each_with_index.map do |value, index|
|
|
# value.to_f / student_survey_items[index] / total_possible_student_responses * 100
|
|
# end
|