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/presenters/parent_scale_presenter.rb

62 lines
1.6 KiB

# frozen_string_literal: true
class ParentScalePresenter < MeasurePresenter
attr_reader :scale, :academic_year, :school, :name, :description
def initialize(scale:, academic_year:, school:)
@scale = scale
@academic_year = academic_year
@school = school
@name = scale.name
@description = scale.description
end
def title
"Scale #{scale.scale_id}"
end
def gauge_presenter
GaugePresenter.new(zones:,
score:)
end
def data_item_accordion_id
"data-item-accordion-#{@scale.scale_id}"
end
def data_item_presenters
[].tap do |array|
array << parent_survey_presenter if scale.survey_items.parent_survey_items.any?
end
end
def score
@score ||= SurveyItemResponse.where(survey_item: scale.survey_items.parent_survey_items, school:,
academic_year:)
.having("count(*) > 10")
.group(:survey_item)
.average(:likert_score)
.values.average
end
private
def scale_id
scale.scale_id
end
def parent_survey_presenter
ParentSurveyPresenter.new(scale_id:, survey_items: scale.survey_items.parent_survey_items,
has_sufficient_data: score.positive?, school:, academic_year:)
end
def zones
Zones.new(
watch_low_benchmark: @scale.measure.watch_low_benchmark,
growth_low_benchmark: @scale.measure.growth_low_benchmark,
approval_low_benchmark: @scale.measure.approval_low_benchmark,
ideal_low_benchmark: @scale.measure.ideal_low_benchmark
)
end
end