feat: add parent survey gauges

This commit is contained in:
Nelson Jovel 2024-09-05 16:20:25 -07:00
parent 695f8b69a2
commit c85ddddd8d
12 changed files with 305 additions and 9 deletions

View file

@ -24,6 +24,10 @@ class Measure < ActiveRecord::Base
@student_survey_items ||= survey_items.student_survey_items
end
def parent_survey_items
@parent_survey_items ||= survey_items.parent_survey_items
end
def student_survey_items_with_sufficient_responses(school:, academic_year:)
@student_survey_items_with_sufficient_responses ||= Hash.new do |memo, (school, academic_year)|
memo[[school, academic_year]] = SurveyItem.where(id: SurveyItem.joins("inner join survey_item_responses on survey_item_responses.survey_item_id = survey_items.id")
@ -59,6 +63,10 @@ class Measure < ActiveRecord::Base
@includes_admin_data_items ||= admin_data_items.length.positive?
end
def includes_parent_survey_items?
@includes_parent_survey_items ||= parent_survey_items.length.positive?
end
def score(school:, academic_year:)
@score ||= Hash.new do |memo, (school, academic_year)|
next Score::NIL_SCORE if incalculable_score(school:, academic_year:)
@ -103,6 +111,15 @@ class Measure < ActiveRecord::Base
@admin_score[[school, academic_year]]
end
def parent_score(school:, academic_year:)
@parent_score ||= Hash.new do |memo, (school, academic_year)|
average = parent_averages(school:, academic_year:).average.round(2)
memo[[school, academic_year]] = scorify(average:, school:, academic_year:)
end
@parent_score[[school, academic_year]]
end
def warning_low_benchmark
1
end
@ -222,4 +239,9 @@ class Measure < ActiveRecord::Base
def admin_data_averages(school:, academic_year:)
AdminDataValue.where(school:, academic_year:, admin_data_item: admin_data_items).pluck(:likert_score)
end
def parent_averages(school:, academic_year:)
SurveyItemResponse.where(school:, academic_year:,
survey_item_id: parent_survey_items).group(:survey_item).average(:likert_score).values
end
end

View file

@ -30,6 +30,9 @@ class SurveyItem < ActiveRecord::Base
scope :early_education_survey_items, lambda {
where("survey_items.survey_item_id LIKE '%-%-es%'")
}
scope :parent_survey_items, lambda {
where("survey_items.survey_item_id LIKE 'p-%'")
}
scope :survey_items_for_grade, lambda { |school, academic_year, grade|
includes(:survey_item_responses)
@ -76,6 +79,8 @@ class SurveyItem < ActiveRecord::Base
return :teacher if survey_item_ids.subset? teacher_survey_items.map(&:survey_item_id).to_set
return :standard if survey_item_ids.subset? standard_survey_items.map(&:survey_item_id).to_set
return :parent if parent_survey_items.count.positive?
:unknown
end
end