From bd8dfe45d38d1756656175c918854fd7645de1a0 Mon Sep 17 00:00:00 2001 From: Nelson Jovel Date: Fri, 12 Jan 2024 15:36:23 -0800 Subject: [PATCH] chore:seed demographics --- app/lib/dashboard/seeder.rb | 10 +- app/services/dashboard/cleaner.rb | 146 +++++++++ app/services/dashboard/demographic_loader.rb | 63 ++++ app/services/dashboard/dese/enrollments.rb | 38 +++ app/services/dashboard/dese/five_c_one.rb | 48 +++ app/services/dashboard/dese/five_d_two.rb | 56 ++++ app/services/dashboard/dese/four_a_one.rb | 44 +++ app/services/dashboard/dese/four_b_two.rb | 105 ++++++ app/services/dashboard/dese/four_d_one.rb | 74 +++++ app/services/dashboard/dese/loader.rb | 71 ++++ app/services/dashboard/dese/one_a_one.rb | 115 +++++++ app/services/dashboard/dese/one_a_three.rb | 68 ++++ app/services/dashboard/dese/scraper.rb | 78 +++++ app/services/dashboard/dese/staffing.rb | 35 ++ app/services/dashboard/dese/three_a_one.rb | 45 +++ app/services/dashboard/dese/three_a_two.rb | 163 ++++++++++ app/services/dashboard/dese/three_b_one.rb | 130 ++++++++ app/services/dashboard/dese/three_b_two.rb | 129 ++++++++ app/services/dashboard/dese/two_a_one.rb | 70 ++++ app/services/dashboard/dese/two_c_one.rb | 76 +++++ .../dashboard/disaggregation_loader.rb | 32 ++ app/services/dashboard/disaggregation_row.rb | 56 ++++ app/services/dashboard/enrollment_loader.rb | 133 ++++++++ .../dashboard/response_rate_loader.rb | 55 ++++ app/services/dashboard/sftp/directory.rb | 29 ++ app/services/dashboard/sftp/race_loader.rb | 33 ++ app/services/dashboard/staffing_loader.rb | 74 +++++ app/services/dashboard/survey_item_values.rb | 305 ++++++++++++++++++ .../dashboard/survey_responses_data_loader.rb | 141 ++++++++ ...3232412_create_dashboard_academic_years.rb | 2 +- ...20240104174053_create_dashboard_schools.rb | 2 + lib/tasks/db.rake | 2 +- spec/dummy/db/schema.rb | 3 +- 33 files changed, 2423 insertions(+), 8 deletions(-) create mode 100644 app/services/dashboard/cleaner.rb create mode 100644 app/services/dashboard/demographic_loader.rb create mode 100644 app/services/dashboard/dese/enrollments.rb create mode 100644 app/services/dashboard/dese/five_c_one.rb create mode 100644 app/services/dashboard/dese/five_d_two.rb create mode 100644 app/services/dashboard/dese/four_a_one.rb create mode 100644 app/services/dashboard/dese/four_b_two.rb create mode 100644 app/services/dashboard/dese/four_d_one.rb create mode 100644 app/services/dashboard/dese/loader.rb create mode 100644 app/services/dashboard/dese/one_a_one.rb create mode 100644 app/services/dashboard/dese/one_a_three.rb create mode 100644 app/services/dashboard/dese/scraper.rb create mode 100644 app/services/dashboard/dese/staffing.rb create mode 100644 app/services/dashboard/dese/three_a_one.rb create mode 100644 app/services/dashboard/dese/three_a_two.rb create mode 100644 app/services/dashboard/dese/three_b_one.rb create mode 100644 app/services/dashboard/dese/three_b_two.rb create mode 100644 app/services/dashboard/dese/two_a_one.rb create mode 100644 app/services/dashboard/dese/two_c_one.rb create mode 100644 app/services/dashboard/disaggregation_loader.rb create mode 100644 app/services/dashboard/disaggregation_row.rb create mode 100644 app/services/dashboard/enrollment_loader.rb create mode 100644 app/services/dashboard/response_rate_loader.rb create mode 100644 app/services/dashboard/sftp/directory.rb create mode 100644 app/services/dashboard/sftp/race_loader.rb create mode 100644 app/services/dashboard/staffing_loader.rb create mode 100644 app/services/dashboard/survey_item_values.rb create mode 100644 app/services/dashboard/survey_responses_data_loader.rb diff --git a/app/lib/dashboard/seeder.rb b/app/lib/dashboard/seeder.rb index ff7a570..9bca426 100644 --- a/app/lib/dashboard/seeder.rb +++ b/app/lib/dashboard/seeder.rb @@ -6,7 +6,7 @@ module Dashboard academic_years << { range: } end - AcademicYear.upsert_all(academic_years) + AcademicYear.upsert_all(academic_years, unique_by: :range) end def seed_districts_and_schools(csv_file) @@ -30,7 +30,7 @@ module Dashboard is_hs: marked?(hs), slug: school_name.parameterize } end - School.insert_all(schools) + School.insert_all(schools, unique_by: :dese_id) Respondent.joins(:school).where.not("school.dese_id": dese_ids).destroy_all School.where.not(dese_id: dese_ids).destroy_all @@ -97,9 +97,9 @@ module Dashboard AdminDataItem.where.not(id: admin_data_item_ids).delete_all end - # def seed_demographics(csv_file) - # DemographicLoader.load_data(filepath: csv_file) - # end + def seed_demographics(csv_file) + DemographicLoader.load_data(filepath: csv_file) + end # def seed_enrollment(csv_file) # EnrollmentLoader.load_data(filepath: csv_file) diff --git a/app/services/dashboard/cleaner.rb b/app/services/dashboard/cleaner.rb new file mode 100644 index 0000000..4b11a66 --- /dev/null +++ b/app/services/dashboard/cleaner.rb @@ -0,0 +1,146 @@ +require "fileutils" +module Dashboard + class Cleaner + attr_reader :input_filepath, :output_filepath, :log_filepath + + def initialize(input_filepath:, output_filepath:, log_filepath:) + @input_filepath = input_filepath + @output_filepath = output_filepath + @log_filepath = log_filepath + initialize_directories + end + + def clean + Dir.glob(Rails.root.join(input_filepath, "*.csv")).each do |filepath| + puts filepath + File.open(filepath) do |file| + processed_data = process_raw_file(file:) + processed_data in [headers, clean_csv, log_csv, data] + return if data.empty? + + filename = filename(headers:, data:, filepath:) + write_csv(data: clean_csv, output_filepath:, filename:) + write_csv(data: log_csv, output_filepath: log_filepath, prefix: "removed.", filename:) + end + end + end + + def filename(headers:, data:, filepath:) + output = [] + survey_item_ids = headers.filter(&:present?).filter do |header| + header.start_with?("s-", "t-") + end.reject { |item| item.end_with? "-1" } + survey_type = SurveyItem.survey_type(survey_item_ids:) + range = data.first.academic_year.range + + districts = data.map do |row| + row.district.short_name + end.to_set.to_a + + schools = data.map do |row| + row.school.name + end.to_set + + part = filepath&.match(/[\b\s_.]+(part|form)[\W*_](?