From b059f88383cb08842671cd250e7c94ba17aa840d Mon Sep 17 00:00:00 2001 From: Nelson Jovel Date: Wed, 21 Aug 2024 14:04:44 -0700 Subject: [PATCH] feat: add ability to filter export data by student survey item type. Ability added to 'by grade' 'by item' and 'survey item responses' reports --- app/controllers/exports_controller.rb | 11 ++++++----- app/models/report/survey_item_response.rb | 10 +++++++--- app/presenters/exports_presenter.rb | 3 ++- app/views/exports/index.html.erb | 2 +- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/app/controllers/exports_controller.rb b/app/controllers/exports_controller.rb index b31c14a5..4c31298a 100644 --- a/app/controllers/exports_controller.rb +++ b/app/controllers/exports_controller.rb @@ -37,7 +37,7 @@ class ExportsController < ApplicationController report = params[:report] - if report == "Survey Item - By Item" + if ["Survey Item - By Item", "Survey Item - By Grade", "Survey Item Response"].include?(report) use_student_survey_items = student_survey_types[params[:student_survey_type]] reports[report].call(schools, academic_years, use_student_survey_items) else @@ -78,14 +78,15 @@ class ExportsController < ApplicationController send_data data, disposition: "attachment", filename: "survey_item_by_item_#{Date.today}.csv" }, - "Survey Item - By Grade" => lambda { |schools, academic_years| + "Survey Item - By Grade" => lambda { |schools, academic_years, use_student_survey_items| data = Report::SurveyItemByGrade.to_csv(schools:, academic_years:, - use_student_survey_items: ::SurveyItem.student_survey_items.pluck(:id)) + use_student_survey_items:) send_data data, disposition: "attachment", filename: "survey_item_by_grade_#{Date.today}.csv" }, - "Survey Item Response" => lambda { |schools, academic_years| - data = Report::SurveyItemResponse.to_csv(schools:, academic_years:) + + "Survey Item Response" => lambda { |schools, academic_years, use_student_survey_items| + data = Report::SurveyItemResponse.to_csv(schools:, academic_years:, use_student_survey_items:) send_data data, disposition: "attachment", filename: "survey_item_response_#{Date.today}.csv" } } end diff --git a/app/models/report/survey_item_response.rb b/app/models/report/survey_item_response.rb index f84f8ca8..0665109a 100644 --- a/app/models/report/survey_item_response.rb +++ b/app/models/report/survey_item_response.rb @@ -1,15 +1,15 @@ # Report::SurveyItemResponse.create(schools: District.find_by_name("Lee Public Schools").schools, academic_years: AcademicYear.where(range: "2023-24 Spring"), filename: "test.csv") module Report class SurveyItemResponse - def self.create(schools:, academic_years:, filename:) - data = to_csv(schools:, academic_years:) + def self.create(schools:, academic_years:, filename:, use_student_survey_items:) + data = to_csv(schools:, academic_years:, use_student_survey_items:) FileUtils.mkdir_p Rails.root.join("tmp", "reports") filepath = Rails.root.join("tmp", "reports", filename) write_csv(data:, filepath:) data end - def self.to_csv(schools:, academic_years:) + def self.to_csv(schools:, academic_years:, use_student_survey_items:) data = [] data << ["Response ID", "Race", "Gender", "Grade", "School ID", "District", "Academic Year", "Student Physical Safety", "Student Emotional Safety", "Student Sense of Belonging", "Student-Teacher Relationships", "Valuing of Learning", "Academic Challenge", "Content Specialists & Support Staff", "Cultural Responsiveness", "Engagement In School", "Appreciation For Diversity", "Civic Participation", "Perseverance & Determination", "Growth Mindset", "Participation In Creative & Performing Arts", "Valuing Creative & Performing Arts", "Social & Emotional Health"] @@ -19,6 +19,8 @@ module Report jobs = Queue.new schools.each { |school| jobs << school } + use_student_survey_items = use_student_survey_items.to_set + workers = pool_size.times.map do Thread.new do while school = jobs.pop(true) @@ -42,6 +44,8 @@ module Report response_hash.each do |_key, responses| mutex.synchronize do + next unless responses.map(&:survey_item_id).to_set.subset?(use_student_survey_items) + row = [] info = responses.first response_id = info.response_id diff --git a/app/presenters/exports_presenter.rb b/app/presenters/exports_presenter.rb index 5855a84d..519cf697 100644 --- a/app/presenters/exports_presenter.rb +++ b/app/presenters/exports_presenter.rb @@ -14,6 +14,7 @@ class ExportsPresenter @selected_school ||= @schools.first @schools_grouped_by = params["school_group"] - @show_student_survey_types = params[:report] == "Survey Item - By Item" + @show_student_survey_types = ["Survey Item - By Item", "Survey Item - By Grade", + "Survey Item Response"].include?(params[:report]) end end diff --git a/app/views/exports/index.html.erb b/app/views/exports/index.html.erb index b390dd19..9d1611b4 100644 --- a/app/views/exports/index.html.erb +++ b/app/views/exports/index.html.erb @@ -1,4 +1,4 @@ -

Exports page

+

Exports page

<%= turbo_frame_tag "results" do %> <%= form_with(action: exports_path, method: :get,