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.
94 lines
2.2 KiB
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
|
|
|