From c2d15e1aa7cb96153efe52f75bb7cf205e6194a9 Mon Sep 17 00:00:00 2001 From: rebuilt Date: Fri, 5 Dec 2025 11:45:07 -0800 Subject: [PATCH] create measure by grade file --- app/models/report/measure_by_grade.rb | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 app/models/report/measure_by_grade.rb diff --git a/app/models/report/measure_by_grade.rb b/app/models/report/measure_by_grade.rb new file mode 100644 index 00000000..e75450f8 --- /dev/null +++ b/app/models/report/measure_by_grade.rb @@ -0,0 +1,29 @@ +module Report + class MeasureByGrade + def self.create_report(schools:, academic_years: AcademicYear.all, measures: ::Measure.all.order(measure_id: :ASC), filename: "measure_by_grade.csv") + data = to_csv(schools:, academic_years:, measures:) + 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:) + ::School.all.map do |school| + ::AcademicYear.all.map do |academic_year| + ::Measure.all.map do |measure| + next 0 if measure.student_survey_items.count.zero? + + measure.student_survey_items.map do |survey_item| + ::SurveyItemResponse.where(survey_item:, school: school, academic_year: academic_year).average(:likert_score).to_f.round(2) + end.remove_blanks.average + end + end + end + end + + def self.write_csv(data:, filepath:) + File.write(filepath, csv) + end + end +end