Add scopes to SurveyItem for selecting survey items by grade and

subcategory.   Add notes to student response rate calculator
pull/1/head
rebuilt 3 years ago
parent 5e0ba556bf
commit 79f7915edf

@ -1,8 +1,23 @@
# frozen_string_literal: true
class StudentResponseRateCalculator < ResponseRateCalculator
def rate; end
private
# def rate
# check to see if enrollment data is available
# if not, run the dese loader to get the data
# then upload the enrollment data into the db
#
# if you still don't see enrollment for the school, raise an error and return 100 from this method
#
# Get the enrollment information from the db
# Get the list of all grades
# For each grade, get the survey items with data
#
#
# All methods below will need to specify a grade
def survey_item_count
@survey_item_count ||= begin
survey_items = SurveyItem.includes(%i[scale

@ -4,6 +4,7 @@ class Subcategory < ActiveRecord::Base
belongs_to :category, counter_cache: true
has_many :measures
has_many :survey_items, through: :measures
def score(school:, academic_year:)
scores = measures.map do |measure|

@ -1,5 +1,14 @@
# frozen_string_literal: true
# SurveyItem.includes(%i[scale measure subcategory]).where("scale.measure.subcategory": subcategory).first.subcategory
# SurveyItem.survey_items_for_grade_and_subcategory(school, academic_year, 0, subcategory)
# SurveyItem.includes(:survey_item_responses)
# .includes(:subcategory)
# .where("survey_item_responses.grade": grade,
# "survey_item_responses.school": school,
# "survey_item_responses.academic_year": academic_year,
# survey_item_id: subcategory.survey_items.pluck(:survey_item_id
# )).count
class SurveyItem < ActiveRecord::Base
belongs_to :scale, counter_cache: true
has_one :measure, through: :scale
@ -32,12 +41,25 @@ class SurveyItem < ActiveRecord::Base
includes(:survey_item_responses)
.where("survey_item_responses.grade": grade,
"survey_item_responses.school": school,
"survey_item_responses.academic_year": academic_year)
.pluck(:survey_item_id).to_set
"survey_item_responses.academic_year": academic_year).distinct
}
scope :survey_item_ids_for_grade, lambda { |school, academic_year, grade|
survey_items_for_grade(school, academic_year, grade).pluck(:survey_item_id)
}
scope :survey_items_for_grade_and_subcategory, lambda { |school, academic_year, grade, subcategory|
includes(:survey_item_responses)
.where(
survey_item_id: subcategory.survey_items.pluck(:survey_item_id),
"survey_item_responses.school": school,
"survey_item_responses.academic_year": academic_year,
"survey_item_responses.grade": grade
)
}
scope :survey_type_for_grade, lambda { |school, academic_year, grade|
survey_items_set_by_grade = survey_items_for_grade(school, academic_year, grade)
survey_items_set_by_grade = survey_items_for_grade(school, academic_year, grade).to_set
if survey_items_set_by_grade.size > 0 && survey_items_set_by_grade.subset?(early_education_surveys.pluck(:survey_item_id).to_set)
return :early_education
end
@ -45,6 +67,7 @@ class SurveyItem < ActiveRecord::Base
:regular
}
# Do I need this?
def description
DataAvailability.new(survey_item_id, prompt, true)
end

Loading…
Cancel
Save