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

94 lines
2.2 KiB

# frozen_string_literal: true
class Scale < ApplicationRecord
belongs_to :measure, counter_cache: true
has_one :category, through: :measure
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
def parent_score(school:, academic_year:)
@parent_score ||= Hash.new do |memo, (school, academic_year)|
memo[[school, academic_year]] = begin
items = []
items << collect_survey_item_average(survey_items.parent_survey_items, school, academic_year)
items.remove_blanks.average
end
end
@parent_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-%'")
}
def watch_low_benchmark
survey_items.first.watch_low_benchmark
end
def growth_low_benchmark
survey_items.first.growth_low_benchmark
end
def approval_low_benchmark
survey_items.first.approval_low_benchmark
end
def ideal_low_benchmark
survey_items.first.ideal_low_benchmark
end
def includes_teacher_survey_items?
survey_items.teacher_survey_items.length.positive?
end
def includes_student_survey_items?
survey_items.student_survey_items.length.positive?
end
def includes_admin_data_items?
admin_data_items.length.positive?
end
def construct_id
scale_id
end
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