mirror of
https://github.com/edcommonwealth/sqm-dashboards.git
synced 2026-03-07 13:38:18 -08:00
fix: correctly memoize student_survey_items_with_sufficient_responses so that on the analyze page, when the first year has insufficient responses, it doesn't affect all subsequent years
This commit is contained in:
parent
3b3bb52523
commit
3f2aa63bfd
4 changed files with 32 additions and 20 deletions
|
|
@ -25,7 +25,8 @@ class Measure < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def student_survey_items_with_sufficient_responses(school:, academic_year:)
|
||||
@student_survey_items_with_sufficient_responses ||= SurveyItem.where(id: SurveyItem.joins("inner join survey_item_responses on survey_item_responses.survey_item_id = survey_items.id")
|
||||
@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")
|
||||
.student_survey_items
|
||||
.where("survey_item_responses.school": school,
|
||||
"survey_item_responses.academic_year": academic_year,
|
||||
|
|
@ -34,6 +35,8 @@ class Measure < ActiveRecord::Base
|
|||
.group("survey_items.id")
|
||||
.having("count(*) >= 10")
|
||||
.count.keys)
|
||||
end
|
||||
@student_survey_items_with_sufficient_responses[[school, academic_year]]
|
||||
end
|
||||
|
||||
def teacher_scales
|
||||
|
|
|
|||
|
|
@ -31,6 +31,11 @@ module Analyze
|
|||
def basis
|
||||
"student surveys"
|
||||
end
|
||||
|
||||
def n_size(academic_year)
|
||||
SurveyItemResponse.where(survey_item: measure.student_survey_items, school:, grade: grades,
|
||||
academic_year:).select(:response_id).distinct.count
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -13,8 +13,8 @@ module Analyze
|
|||
end
|
||||
|
||||
def show_insufficient_data_message?
|
||||
scores = academic_years.map do |year|
|
||||
measure.score(school:, academic_year: year)
|
||||
scores = academic_years.map do |academic_year|
|
||||
measure.student_score(school:, academic_year:)
|
||||
end
|
||||
|
||||
scores.none? { |score| score.meets_student_threshold? }
|
||||
|
|
@ -27,6 +27,11 @@ module Analyze
|
|||
def type
|
||||
:student
|
||||
end
|
||||
|
||||
def n_size(academic_year)
|
||||
SurveyItemResponse.where(survey_item: measure.student_survey_items, school:, grade: grades,
|
||||
academic_year:).select(:response_id).distinct.count
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -21,13 +21,13 @@ module Analyze
|
|||
end
|
||||
|
||||
def bars
|
||||
@bars ||= yearly_scores.map.each_with_index do |yearly_score, index|
|
||||
year = yearly_score.year
|
||||
Analyze::BarPresenter.new(measure:, academic_year: year,
|
||||
score: yearly_score.score,
|
||||
@bars ||= academic_years.map.with_index do |academic_year, index|
|
||||
Analyze::BarPresenter.new(measure:, academic_year:,
|
||||
score: score(academic_year),
|
||||
x_position: bar_x(index),
|
||||
color: bar_color(year))
|
||||
color: bar_color(academic_year))
|
||||
end.reject(&:blank?).select { |bar| bar.score.average&.positive? }
|
||||
@bars
|
||||
end
|
||||
|
||||
def label
|
||||
|
|
@ -46,6 +46,10 @@ module Analyze
|
|||
raise NotImplementedError
|
||||
end
|
||||
|
||||
def n_size(academic_year)
|
||||
raise NotImplementedError
|
||||
end
|
||||
|
||||
def basis
|
||||
"student surveys"
|
||||
end
|
||||
|
|
@ -107,11 +111,6 @@ module Analyze
|
|||
%i[student teacher].include? type
|
||||
end
|
||||
|
||||
def n_size(academic_year)
|
||||
SurveyItemResponse.where(survey_item: measure.student_survey_items, school:, grade: grades,
|
||||
academic_year:).select(:response_id).distinct.count
|
||||
end
|
||||
|
||||
def popover_content(academic_year)
|
||||
"#{n_size(academic_year)} #{type.to_s.capitalize}s"
|
||||
end
|
||||
|
|
@ -126,12 +125,12 @@ module Analyze
|
|||
|
||||
private
|
||||
|
||||
YearlyScore = Struct.new(:year, :score)
|
||||
def yearly_scores
|
||||
yearly_scores = academic_years.each.map do |year|
|
||||
YearlyScore.new(year, score(year))
|
||||
end.reject { |year| year.score.nil? || year.score.blank? }
|
||||
end
|
||||
# YearlyScore = Struct.new(:year, :score)
|
||||
# def yearly_scores
|
||||
# @yearly_scores ||= academic_years.each.map do |year|
|
||||
# YearlyScore.new(year, score(year))
|
||||
# end.reject { |year| year.score.nil? || year.score.blank? }
|
||||
# end
|
||||
|
||||
def bar_color(year)
|
||||
@available_academic_years ||= AcademicYear.order(:range).all
|
||||
|
|
@ -140,7 +139,7 @@ module Analyze
|
|||
|
||||
def bar_x(index)
|
||||
column_start_x + (index * bar_width * 1.2) +
|
||||
((column_end_x - column_start_x) - (yearly_scores.size * bar_width * 1.2)) / 2
|
||||
((column_end_x - column_start_x) - (academic_years.size * bar_width * 1.2)) / 2
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue