You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sqm-dashboards/app/models/scale.rb

48 lines
1.2 KiB

# frozen_string_literal: true
class Scale < ApplicationRecord
belongs_to :measure, counter_cache: true
has_many :survey_items
has_many :survey_item_responses, through: :survey_items
has_many :admin_data_items
def score(school:, academic_year:)
@score ||= Hash.new do |memo, (school, academic_year)|
memo[[school, academic_year]] = begin
items = []
items << collect_survey_item_average(student_survey_items, school, academic_year)
items << collect_survey_item_average(teacher_survey_items, school, academic_year)
items.remove_blanks.average
end
end
@score[[school, academic_year]]
end
scope :teacher_scales, lambda {
where("scale_id LIKE 't-%'")
}
scope :student_scales, lambda {
where("scale_id LIKE 's-%'")
}
scope :parent_scales, lambda {
where("scale_id LIKE 'p-%'")
}
private
def collect_survey_item_average(survey_items, school, academic_year)
survey_items.map do |survey_item|
survey_item.score(school:, academic_year:)
end.remove_blanks.average
end
def teacher_survey_items
survey_items.teacher_survey_items
end
def student_survey_items
survey_items.student_survey_items
end
end