diff --git a/app/presenters/parent_measure_presenter.rb b/app/presenters/parent_measure_presenter.rb new file mode 100644 index 00000000..97c0f1fc --- /dev/null +++ b/app/presenters/parent_measure_presenter.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +class ParentMeasurePresenter < MeasurePresenter + def measure_id + "#{measure.measure_id} (Parent)" + end + + def score_for_measure + @measure.parent_score(school: @school, academic_year: @academic_year) + end + + def data_item_presenters + [].tap do |array| + array << parent_survey_presenter if measure.parent_survey_items.any? + end + end + + private + + def parent_survey_presenter + ParentSurveyPresenter.new(measure_id: measure.measure_id, survey_items: measure.parent_survey_items, + has_sufficient_data: true, school:, academic_year:) + end +end diff --git a/app/presenters/parent_survey_presenter.rb b/app/presenters/parent_survey_presenter.rb index 89f9da61..60551589 100644 --- a/app/presenters/parent_survey_presenter.rb +++ b/app/presenters/parent_survey_presenter.rb @@ -1,11 +1,10 @@ # frozen_string_literal: true class ParentSurveyPresenter < DataItemPresenter - attr_reader :survey_items, :scale_id + attr_reader :survey_items - def initialize(scale_id:, survey_items:, has_sufficient_data:, school:, academic_year:) - super(measure_id: scale_id, has_sufficient_data:, school:, academic_year:) - @scale_id = scale_id + def initialize(measure_id:, survey_items:, has_sufficient_data:, school:, academic_year:) + super(measure_id:, has_sufficient_data:, school:, academic_year:) @survey_items = survey_items end @@ -14,7 +13,7 @@ class ParentSurveyPresenter < DataItemPresenter end def id - "parent-survey-items-#{scale_id}" + "parent-survey-items-#{measure_id}" end def reason_for_insufficiency diff --git a/app/presenters/subcategory_presenter.rb b/app/presenters/subcategory_presenter.rb index 9bbb3650..b6c2d14e 100644 --- a/app/presenters/subcategory_presenter.rb +++ b/app/presenters/subcategory_presenter.rb @@ -39,8 +39,13 @@ class SubcategoryPresenter def measure_presenters @subcategory.measures.sort_by(&:measure_id).map do |measure| - MeasurePresenter.new(measure:, academic_year: @academic_year, school: @school) - end + out = [MeasurePresenter.new(measure:, academic_year: @academic_year, school: @school)] + if parent_gauges_have_displayable_score?(measure:) + out << ParentMeasurePresenter.new(measure:, academic_year: @academic_year, + school: @school) + end + out + end.flatten end def scale_presenters @@ -57,6 +62,11 @@ class SubcategoryPresenter private + def parent_gauges_have_displayable_score?(measure:) + measure.includes_parent_survey_items? && measure.parent_score(school: @school, + academic_year: @academic_year).average.positive? + end + def admin_data_values_count @subcategory.measures.map do |measure| measure.scales.map do |scale| diff --git a/spec/fixtures/raw/sample_file_with_duplicate_headers.csv.bak b/spec/fixtures/raw/sample_file_with_duplicate_headers.csv.bak index 2eaf0323..305af074 100644 --- a/spec/fixtures/raw/sample_file_with_duplicate_headers.csv.bak +++ b/spec/fixtures/raw/sample_file_with_duplicate_headers.csv.bak @@ -1,2 +1,2 @@ -Raw Income,StartDate,StartDate,Status,IPAddress,Progress,Duration (in seconds),Finished,RecordedDate,ResponseId,District,School,LASID,Gender,Race,What grade are you in?,s-emsa-q1,s-emsa-q2,s-emsa-q3,s-tint-q1,s-tint-q2,s-tint-q3,s-tint-q4,s-tint-q5,s-acpr-q1,s-acpr-q2,s-acpr-q3,s-acpr-q4,s-cure-q1,s-cure-q2,s-cure-q3,s-cure-q4,s-sten-q1,s-sten-q2,s-sten-q3,s-sper-q1,s-sper-q2,s-sper-q3,s-sper-q4,s-civp-q1,s-civp-q2,s-civp-q3,s-civp-q4,s-grmi-q1,s-grmi-q2,s-grmi-q3,s-grmi-q4,s-appa-q1,s-appa-q2,s-appa-q3,s-peff-q1,s-peff-q2,s-peff-q3,s-peff-q4,s-peff-q5,s-sbel-q1,s-sbel-q2,s-sbel-q3,s-sbel-q4,s-sbel-q5,s-phys-q1,s-phys-q2,s-phys-q3,s-phys-q4,s-vale-q1,s-vale-q2,s-vale-q3,s-vale-q4,s-acst-q1,s-acst-q2,s-acst-q3,s-sust-q1,s-sust-q2,s-grit-q1,s-grit-q2,s-grit-q3,s-grit-q4,s-expa-q1,s-poaf-q1,s-poaf-q2,s-poaf-q3,s-poaf-q4,s-tint-q1-1,s-tint-q2-1,s-tint-q3-1,s-tint-q4-1,s-tint-q5-1,s-acpr-q1-1,s-acpr-q2-1,s-acpr-q3-1,s-acpr-q4-1,s-peff-q1-1,s-peff-q2-1,s-peff-q3-1,s-peff-q4-1,s-peff-q5-1,s-peff-q6-1 -Unknown,2023-03-17 7:57:47,2023-03-17 8:09:15,0,71.174.81.214,100,1000,1,2023-03-17T8:9:15,1000,2,1740505,1,2,4,9,3,5,5,,,,,,,,,,,,,,,,,,,,,,,,,4,4,3,5,,,,,,,,,4,4,2,3,2,5,5,5,5,4,2,2,4,3,2,3,3,5,4,4,3,5,2,3,3,4,4,4,1,2,5,5,,,,,4,4,4,3,4,5 +StartDate,StartDate,Status,IPAddress,Progress,Duration (in seconds),Finished,RecordedDate,ResponseId,District,School,LASID,Gender,Race,What grade are you in?,s-emsa-q1,s-emsa-q2,s-emsa-q3,s-tint-q1,s-tint-q2,s-tint-q3,s-tint-q4,s-tint-q5,s-acpr-q1,s-acpr-q2,s-acpr-q3,s-acpr-q4,s-cure-q1,s-cure-q2,s-cure-q3,s-cure-q4,s-sten-q1,s-sten-q2,s-sten-q3,s-sper-q1,s-sper-q2,s-sper-q3,s-sper-q4,s-civp-q1,s-civp-q2,s-civp-q3,s-civp-q4,s-grmi-q1,s-grmi-q2,s-grmi-q3,s-grmi-q4,s-appa-q1,s-appa-q2,s-appa-q3,s-peff-q1,s-peff-q2,s-peff-q3,s-peff-q4,s-peff-q5,s-sbel-q1,s-sbel-q2,s-sbel-q3,s-sbel-q4,s-sbel-q5,s-phys-q1,s-phys-q2,s-phys-q3,s-phys-q4,s-vale-q1,s-vale-q2,s-vale-q3,s-vale-q4,s-acst-q1,s-acst-q2,s-acst-q3,s-sust-q1,s-sust-q2,s-grit-q1,s-grit-q2,s-grit-q3,s-grit-q4,s-expa-q1,s-poaf-q1,s-poaf-q2,s-poaf-q3,s-poaf-q4,s-tint-q1-1,s-tint-q2-1,s-tint-q3-1,s-tint-q4-1,s-tint-q5-1,s-acpr-q1-1,s-acpr-q2-1,s-acpr-q3-1,s-acpr-q4-1,s-peff-q1-1,s-peff-q2-1,s-peff-q3-1,s-peff-q4-1,s-peff-q5-1,s-peff-q6-1 +2023-03-17 7:57:47,2023-03-17 8:09:15,0,71.174.81.214,100,1000,1,2023-03-17T8:9:15,1000,2,1740505,1,2,4,9,3,5,5,,,,,,,,,,,,,,,,,,,,,,,,,4,4,3,5,,,,,,,,,4,4,2,3,2,5,5,5,5,4,2,2,4,3,2,3,3,5,4,4,3,5,2,3,3,4,4,4,1,2,5,5,,,,,4,4,4,3,4,5