You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sqm-dashboards/app/services/survey_item_values.rb

80 lines
2.1 KiB

class SurveyItemValues
attr_reader :row, :headers, :genders, :survey_items
def initialize(row:, headers:, genders:, survey_items:)
@row = row
@headers = headers
@genders = genders
@survey_items = survey_items
end
def dese_id?
dese_id.present?
end
def response_date
@response_date ||= Date.parse(row['Recorded Date'] || row['RecordedDate'])
end
def academic_year
@academic_year ||= AcademicYear.find_by_date response_date
end
def survey_item_response(survey_item:)
@survey_item_response ||= Hash.new do |memo, survey_item|
memo[survey_item] = survey_item_responses[[response_id, survey_item.id]]
end
@survey_item_response[survey_item]
end
def survey_item_responses
@survey_item_responses ||= Hash.new do |memo|
responses_hash = {}
SurveyItemResponse.where(school:, academic_year:, response_id:).each do |response|
responses_hash[[response.response_id, response.survey_item.id]] = response
end
memo[[school, academic_year]] = responses_hash
end
@survey_item_responses[[school, academic_year]]
end
def response_id
@response_id ||= row['Response ID'] || row['ResponseId'] || row['ResponseID']
end
def dese_id
@dese_id ||= (row['DESE ID' || 'Dese ID'] || row['DeseId'] || row['DeseID'] || row['School'] || row['school']).to_i
end
def likert_score(survey_item_id:)
row[survey_item_id] || row["#{survey_item_id}-1"]
end
def school
@school ||= schools[dese_id]
end
def schools
@@schools ||= School.all.map { |school| [school.dese_id, school] }.to_h
end
def grade
@grade ||= begin
raw_grade = (row['grade'] || row['Grade'] || row['What grade are you in?'])
return nil if raw_grade.blank?
raw_grade = raw_grade.to_i
end
end
def gender
gender_code = row['gender'] || row['Gender'] || row['What is your gender?'] || row['What is your gender? - Selected Choice'] || 99
gender_code = gender_code.to_i
gender_code = 4 if gender_code == 3
gender_code = 99 if gender_code.zero?
genders[gender_code]
end
end