diff --git a/app/models/report/measure_by_grade.rb b/app/models/report/measure_by_grade.rb index 44191099..d969a200 100644 --- a/app/models/report/measure_by_grade.rb +++ b/app/models/report/measure_by_grade.rb @@ -26,8 +26,9 @@ module Report while measure = jobs.pop(true) puts "Processing: #{measure.name}" scores = schools.map do |school| - measure.score(school:, academic_year:).average - end.remove_blanks + [measure.student_score(school:, academic_year:).average, + measure.teacher_score(school:, academic_year:).average].remove_blanks.average + end.remove_blanks.reject { |score| score <= 1 } avg_score = scores.count.positive? ? scores.average : nil avg_score = avg_score.round(2) unless avg_score.nil? @@ -88,7 +89,7 @@ module Report end def self.run(filepath: Rails.root.join("tmp", "exports", "measure_by_grade", "measure_by_grade.csv")) - data = to_csv(schools: ::School.all, academic_years: ::AcademicYear.all, measures: ::Measure.all) + data = to_csv(schools: ::School.all, academic_years: [::AcademicYear.find_by_range("2024-25")], measures: ::Measure.all) write_csv(data:, filepath:) end end diff --git a/app/models/report/measure_summary.rb b/app/models/report/measure_summary.rb index 0fd691ae..18462771 100644 --- a/app/models/report/measure_summary.rb +++ b/app/models/report/measure_summary.rb @@ -1,14 +1,14 @@ module Report class MeasureSummary - def self.create_report(schools:, academic_years: AcademicYear.all, measures: ::Measure.all.order(measure_id: :ASC), filename: "measure_summary.csv") - data = to_csv(schools:, academic_years:, measures:) + def self.create_report(schools:, academic_years: AcademicYear.all, measures: ::Measure.all.order(measure_id: :ASC), filename: "measure_summary.csv", group: :by_district) + data = to_csv(schools:, academic_years:, measures:, group:) 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:, measures:) + def self.to_csv(schools:, academic_years:, measures:, group: :by_district) data = [] mutex = Thread::Mutex.new data << ["Measure Name", "Measure ID", "District", "Academic Year", "Recorded Date Range", "Grades", "Student Score", "Student Zone", "Teacher Score", @@ -24,29 +24,54 @@ module Report grades = "#{all_grades.first}-#{all_grades.last}" academic_years.each do |academic_year| - schools.flat_map(&:district).uniq.each do |district| - selected_schools = district.schools - begin_date = ::SurveyItemResponse.where(school: selected_schools, + if group == :by_district + schools.flat_map(&:district).uniq.each do |district| + selected_schools = district.schools + begin_date = ::SurveyItemResponse.where(school: selected_schools, + academic_year:).where.not(recorded_date: nil).order(:recorded_date).first&.recorded_date&.to_date + end_date = ::SurveyItemResponse.where(school: selected_schools, + academic_year:).where.not(recorded_date: nil).order(:recorded_date).last&.recorded_date&.to_date + date_range = "#{begin_date} - #{end_date}" + + mutex.synchronize do + data << [measure.name, + measure.measure_id, + district.name, + academic_year.range, + date_range, + grades, + student_score(measure:, schools: selected_schools, academic_year:), + student_zone(measure:, schools: selected_schools, academic_year:), + teacher_score(measure:, schools: selected_schools, academic_year:), + teacher_zone(measure:, schools: selected_schools, academic_year:), + admin_score(measure:, schools: selected_schools, academic_year:), + admin_zone(measure:, schools: selected_schools, academic_year:), + all_data_score(measure:, schools: selected_schools, academic_year:), + all_data_zone(measure:, schools: selected_schools, academic_year:)] + end + end + elsif group == :all_schools + begin_date = ::SurveyItemResponse.where(school: schools, academic_year:).where.not(recorded_date: nil).order(:recorded_date).first&.recorded_date&.to_date - end_date = ::SurveyItemResponse.where(school: selected_schools, + end_date = ::SurveyItemResponse.where(school: schools, academic_year:).where.not(recorded_date: nil).order(:recorded_date).last&.recorded_date&.to_date date_range = "#{begin_date} - #{end_date}" mutex.synchronize do data << [measure.name, measure.measure_id, - district.name, + "All Districts", academic_year.range, date_range, grades, - student_score(measure:, schools: selected_schools, academic_year:), - student_zone(measure:, schools: selected_schools, academic_year:), - teacher_score(measure:, schools: selected_schools, academic_year:), - teacher_zone(measure:, schools: selected_schools, academic_year:), - admin_score(measure:, schools: selected_schools, academic_year:), - admin_zone(measure:, schools: selected_schools, academic_year:), - all_data_score(measure:, schools: selected_schools, academic_year:), - all_data_zone(measure:, schools: selected_schools, academic_year:)] + student_score(measure:, schools: schools, academic_year:), + student_zone(measure:, schools: schools, academic_year:), + teacher_score(measure:, schools: schools, academic_year:), + teacher_zone(measure:, schools: schools, academic_year:), + admin_score(measure:, schools: schools, academic_year:), + admin_zone(measure:, schools: schools, academic_year:), + all_data_score(measure:, schools: schools, academic_year:), + all_data_zone(measure:, schools: schools, academic_year:)] end end end @@ -65,7 +90,7 @@ module Report end def self.write_csv(data:, filepath:) - File.write(filepath, csv) + File.write(filepath, data) end def self.all_data_score(measure:, schools:, academic_year:)