mirror of
https://github.com/edcommonwealth/sqm-dashboards.git
synced 2026-03-07 21:48:16 -08:00
feat: show parent scales on variance chart
This commit is contained in:
parent
2302c12b5b
commit
7d4db37ee7
9 changed files with 87 additions and 33 deletions
|
|
@ -173,6 +173,10 @@ class Measure < ActiveRecord::Base
|
|||
approval_low_benchmark:, ideal_low_benchmark:).zone_for_score(score.average)
|
||||
end
|
||||
|
||||
def construct_id
|
||||
measure_id
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def any_admin_data_collected?(school:, academic_year:)
|
||||
|
|
|
|||
|
|
@ -42,6 +42,38 @@ class Scale < ApplicationRecord
|
|||
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)
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ class Overview::OverviewPresenter
|
|||
def presenter_for_measure(measure)
|
||||
score = measure.score(school: @school, academic_year: @academic_year)
|
||||
|
||||
Overview::VarianceChartRowPresenter.new(measure:, score:)
|
||||
Overview::VarianceChartRowPresenter.new(construct: measure, score:)
|
||||
end
|
||||
|
||||
def empty_dataset?
|
||||
|
|
|
|||
|
|
@ -12,4 +12,21 @@ class Overview::ParentOverviewPresenter < Overview::OverviewPresenter
|
|||
def framework_indicator_class
|
||||
"school-quality-frameworks-parent"
|
||||
end
|
||||
|
||||
def variance_chart_row_presenters
|
||||
scales.map(&method(:presenter_for_scale))
|
||||
end
|
||||
|
||||
def scales
|
||||
measures.flat_map { |measure| measure.scales.parent_scales }
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def presenter_for_scale(scale)
|
||||
score = scale.parent_score(school: @school, academic_year: @academic_year)
|
||||
score = Score.new(average: score, meets_teacher_threshold: true, meets_student_threshold: true)
|
||||
|
||||
Overview::VarianceChartRowPresenter.new(construct: scale, score:)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -3,16 +3,16 @@
|
|||
class Overview::VarianceChartRowPresenter
|
||||
include Comparable
|
||||
|
||||
attr_reader :score, :measure_name, :measure_id, :category
|
||||
attr_reader :score, :construct_name, :construct_id, :category
|
||||
|
||||
def initialize(measure:, score:)
|
||||
@measure = measure
|
||||
def initialize(construct:, score:)
|
||||
@construct = construct
|
||||
@score = score.average
|
||||
@meets_teacher_threshold = score.meets_teacher_threshold?
|
||||
@meets_student_threshold = score.meets_student_threshold?
|
||||
@measure_name = @measure.name
|
||||
@measure_id = @measure.measure_id
|
||||
@category = @measure.subcategory.category
|
||||
@construct_name = @construct.name
|
||||
@construct_id = @construct.construct_id
|
||||
@category = @construct.category
|
||||
end
|
||||
|
||||
def sufficient_data?
|
||||
|
|
@ -57,9 +57,9 @@ class Overview::VarianceChartRowPresenter
|
|||
|
||||
def partial_data_sources
|
||||
[].tap do |sources|
|
||||
sources << "teacher survey results" if @measure.includes_teacher_survey_items? && !@meets_teacher_threshold
|
||||
sources << "student survey results" if @measure.includes_student_survey_items? && !@meets_student_threshold
|
||||
sources << "administrative data" if @measure.includes_admin_data_items?
|
||||
sources << "teacher survey results" if @construct.includes_teacher_survey_items? && !@meets_teacher_threshold
|
||||
sources << "student survey results" if @construct.includes_student_survey_items? && !@meets_student_threshold
|
||||
sources << "administrative data" if @construct.includes_admin_data_items?
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -106,10 +106,10 @@ class Overview::VarianceChartRowPresenter
|
|||
|
||||
def zone
|
||||
zones = Zones.new(
|
||||
watch_low_benchmark: @measure.watch_low_benchmark,
|
||||
growth_low_benchmark: @measure.growth_low_benchmark,
|
||||
approval_low_benchmark: @measure.approval_low_benchmark,
|
||||
ideal_low_benchmark: @measure.ideal_low_benchmark
|
||||
watch_low_benchmark: @construct.watch_low_benchmark,
|
||||
growth_low_benchmark: @construct.growth_low_benchmark,
|
||||
approval_low_benchmark: @construct.approval_low_benchmark,
|
||||
ideal_low_benchmark: @construct.ideal_low_benchmark
|
||||
)
|
||||
zones.zone_for_score(@score)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
<% if displayed_presenters.none? %>
|
||||
<p class="caption mb-5">Note: No measures can be displayed due to limited availability of school data and/or low survey response rates.</p>
|
||||
<% elsif not_displayed_presenters.present? %>
|
||||
<p class="caption mb-5">Note: The following measures are not displayed due to limited availability of school data and/or low survey response rates: <%= not_displayed_presenters.map(&:measure_name).join('; ') %>.</p>
|
||||
<p class="caption mb-5">Note: The following measures are not displayed due to limited availability of school data and/or low survey response rates: <%= not_displayed_presenters.map(&:construct_name).join('; ') %>.</p>
|
||||
<% end %>
|
||||
|
||||
<svg width="100%" height=<%= graph_height(displayed_presenters.size) %> xmlns="http://www.w3.org/2000/svg">
|
||||
|
|
@ -90,7 +90,7 @@
|
|||
width="550"
|
||||
height="200">
|
||||
|
||||
<%= link_to(presenter.measure_name, district_school_category_path( @district, @school, presenter.category, {year: @academic_year.range, anchor: "#{presenter.measure_id}"}), class: "measure-row-label") %>
|
||||
<%= link_to(presenter.construct_name, district_school_category_path( @district, @school, presenter.category, {year: @academic_year.range, anchor: "#{presenter.construct_id}"}), class: "measure-row-label") %>
|
||||
</foreignObject>
|
||||
<% end %>
|
||||
|
||||
|
|
@ -120,7 +120,7 @@
|
|||
y="<%= index * measure_row_height + (measure_row_height - measure_row_bar_height) / 2 %>"
|
||||
width="<%= presenter.bar_width %>"
|
||||
height="<%= measure_row_bar_height %>"
|
||||
data-for-measure-id="<%= presenter.measure_id %>"
|
||||
data-for-measure-id="<%= presenter.construct_id %>"
|
||||
stroke="none"
|
||||
/>
|
||||
<% end %>
|
||||
|
|
|
|||
|
|
@ -30,12 +30,12 @@ describe Overview::VarianceChartRowPresenter do
|
|||
end
|
||||
|
||||
let(:presenter) do
|
||||
Overview::VarianceChartRowPresenter.new measure:, score:
|
||||
Overview::VarianceChartRowPresenter.new construct: measure, score:
|
||||
end
|
||||
|
||||
shared_examples_for "measure_name" do
|
||||
it "returns the measure name" do
|
||||
expect(presenter.measure_name).to eq "Some Title"
|
||||
expect(presenter.construct_name).to eq "Some Title"
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -139,7 +139,7 @@ describe Overview::VarianceChartRowPresenter do
|
|||
let(:score) { Score.new(average: nil, meets_teacher_threshold: false, meets_student_threshold: false) }
|
||||
|
||||
it "it does not show a partial data indicator" do
|
||||
presenter_without_admin_data = Overview::VarianceChartRowPresenter.new(measure: measure_without_admin_data_items,
|
||||
presenter_without_admin_data = Overview::VarianceChartRowPresenter.new(construct: measure_without_admin_data_items,
|
||||
score:)
|
||||
expect(presenter_without_admin_data.show_partial_data_indicator?).to be false
|
||||
end
|
||||
|
|
@ -163,7 +163,7 @@ describe Overview::VarianceChartRowPresenter do
|
|||
growth_low_benchmark:,
|
||||
approval_low_benchmark:,
|
||||
ideal_low_benchmark:)
|
||||
admin_data_presenter = Overview::VarianceChartRowPresenter.new measure: measure_with_admin_data,
|
||||
admin_data_presenter = Overview::VarianceChartRowPresenter.new construct: measure_with_admin_data,
|
||||
score: Score.new(
|
||||
average: 3.7, meets_teacher_threshold: true, meets_student_threshold: true
|
||||
)
|
||||
|
|
@ -236,11 +236,11 @@ describe Overview::VarianceChartRowPresenter do
|
|||
growth_low_benchmark:,
|
||||
approval_low_benchmark:,
|
||||
ideal_low_benchmark:)
|
||||
approval_presenter = Overview::VarianceChartRowPresenter.new measure:,
|
||||
approval_presenter = Overview::VarianceChartRowPresenter.new construct: measure,
|
||||
score: Score.new(
|
||||
average: 3.7, meets_teacher_threshold: true, meets_student_threshold: true
|
||||
)
|
||||
ideal_presenter = Overview::VarianceChartRowPresenter.new measure:,
|
||||
ideal_presenter = Overview::VarianceChartRowPresenter.new construct: measure,
|
||||
score: Score.new(
|
||||
average: 4.4, meets_teacher_threshold: true, meets_student_threshold: true
|
||||
)
|
||||
|
|
@ -249,11 +249,11 @@ describe Overview::VarianceChartRowPresenter do
|
|||
end
|
||||
|
||||
it "selects a warning bar below a ideal bar" do
|
||||
warning_presenter = Overview::VarianceChartRowPresenter.new measure:,
|
||||
warning_presenter = Overview::VarianceChartRowPresenter.new construct: measure,
|
||||
score: Score.new(
|
||||
average: 1.0, meets_teacher_threshold: true, meets_student_threshold: true
|
||||
)
|
||||
ideal_presenter = Overview::VarianceChartRowPresenter.new measure:,
|
||||
ideal_presenter = Overview::VarianceChartRowPresenter.new construct: measure,
|
||||
score: Score.new(
|
||||
average: 5.0, meets_teacher_threshold: true, meets_student_threshold: true
|
||||
)
|
||||
|
|
|
|||
|
|
@ -50,16 +50,16 @@ describe "overview/index" do
|
|||
approval_low_benchmark: 3.5,
|
||||
ideal_low_benchmark: 4.5)
|
||||
[
|
||||
Overview::VarianceChartRowPresenter.new(measure:,
|
||||
Overview::VarianceChartRowPresenter.new(construct: measure,
|
||||
score: Score.new(average: rand))
|
||||
]
|
||||
end
|
||||
context "when some presenters have a nil score" do
|
||||
let(:variance_chart_row_presenters) do
|
||||
[
|
||||
Overview::VarianceChartRowPresenter.new(measure: support_for_teaching, score: Score.new),
|
||||
Overview::VarianceChartRowPresenter.new(measure: effective_leadership, score: Score.new(average: rand)),
|
||||
Overview::VarianceChartRowPresenter.new(measure: professional_qualifications, score: Score.new)
|
||||
Overview::VarianceChartRowPresenter.new(construct: support_for_teaching, score: Score.new),
|
||||
Overview::VarianceChartRowPresenter.new(construct: effective_leadership, score: Score.new(average: rand)),
|
||||
Overview::VarianceChartRowPresenter.new(construct: professional_qualifications, score: Score.new)
|
||||
]
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@ describe "overview/_variance_chart.html.erb" do
|
|||
|
||||
before :each do
|
||||
presenters = [
|
||||
Overview::VarianceChartRowPresenter.new(measure: lower_scoring_measure, score: Score.new(average: 1)),
|
||||
Overview::VarianceChartRowPresenter.new(measure: higher_scoring_measure, score: Score.new(average: 5))
|
||||
Overview::VarianceChartRowPresenter.new(construct: lower_scoring_measure, score: Score.new(average: 1)),
|
||||
Overview::VarianceChartRowPresenter.new(construct: higher_scoring_measure, score: Score.new(average: 5))
|
||||
]
|
||||
|
||||
render partial: "variance_chart", locals: { presenters: }
|
||||
|
|
@ -53,8 +53,9 @@ describe "overview/_variance_chart.html.erb" do
|
|||
measure_lacking_score = create(:measure)
|
||||
another_measure_lacking_score = create(:measure)
|
||||
presenters = [
|
||||
Overview::VarianceChartRowPresenter.new(measure: measure_lacking_score, score: Score.new(average: nil)),
|
||||
Overview::VarianceChartRowPresenter.new(measure: another_measure_lacking_score, score: Score.new(average: nil))
|
||||
Overview::VarianceChartRowPresenter.new(construct: measure_lacking_score, score: Score.new(average: nil)),
|
||||
Overview::VarianceChartRowPresenter.new(construct: another_measure_lacking_score,
|
||||
score: Score.new(average: nil))
|
||||
]
|
||||
|
||||
render partial: "variance_chart", locals: { presenters: }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue