parent
d15e89f37c
commit
0e9acc7467
@ -1,35 +1,5 @@
|
|||||||
module ResponseRate
|
class ResponseRate < ApplicationRecord
|
||||||
TEACHER_RATE_THRESHOLD = 25
|
belongs_to :subcategory
|
||||||
STUDENT_RATE_THRESHOLD = 25
|
belongs_to :school
|
||||||
|
belongs_to :academic_year
|
||||||
def initialize(subcategory:, school:, academic_year:)
|
|
||||||
@subcategory = subcategory
|
|
||||||
@school = school
|
|
||||||
@academic_year = academic_year
|
|
||||||
end
|
|
||||||
|
|
||||||
def rate
|
|
||||||
return 100 if Respondent.where(school: @school, academic_year: @academic_year).count.zero?
|
|
||||||
|
|
||||||
return 0 unless survey_item_count.positive?
|
|
||||||
|
|
||||||
average_responses_per_survey_item = response_count / survey_item_count.to_f
|
|
||||||
|
|
||||||
return 0 unless total_possible_responses.positive?
|
|
||||||
|
|
||||||
response_rate = (average_responses_per_survey_item / total_possible_responses.to_f * 100).round
|
|
||||||
cap_at_100(response_rate)
|
|
||||||
end
|
|
||||||
|
|
||||||
def meets_student_threshold?
|
|
||||||
rate >= STUDENT_RATE_THRESHOLD
|
|
||||||
end
|
|
||||||
|
|
||||||
def meets_teacher_threshold?
|
|
||||||
rate >= TEACHER_RATE_THRESHOLD
|
|
||||||
end
|
|
||||||
|
|
||||||
def cap_at_100(response_rate)
|
|
||||||
response_rate > 100 ? 100 : response_rate
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,58 +0,0 @@
|
|||||||
class StudentResponseRate
|
|
||||||
include ResponseRate
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def survey_item_count
|
|
||||||
@survey_item_count ||= begin
|
|
||||||
survey = Survey.where(school: @school, academic_year: @academic_year).first
|
|
||||||
survey_items = SurveyItem.includes(%i[scale
|
|
||||||
measure]).student_survey_items.where("scale.measure": @subcategory.measures)
|
|
||||||
survey_items = survey_items.where(on_short_form: true) if survey.form == 'short'
|
|
||||||
survey_items = survey_items.reject do |survey_item|
|
|
||||||
survey_item.survey_item_responses.where(school: @school, academic_year: @academic_year).none?
|
|
||||||
end
|
|
||||||
survey_items.count
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def response_count
|
|
||||||
@response_count ||= @subcategory.measures.map do |measure|
|
|
||||||
measure.student_survey_items.map do |survey_item|
|
|
||||||
survey_item.survey_item_responses.where(school: @school,
|
|
||||||
academic_year: @academic_year).exclude_boston.count
|
|
||||||
end.sum
|
|
||||||
end.sum
|
|
||||||
end
|
|
||||||
|
|
||||||
def total_possible_responses
|
|
||||||
@total_possible_responses ||= begin
|
|
||||||
total_responses = Respondent.where(school: @school, academic_year: @academic_year).first
|
|
||||||
return 0 unless total_responses.present?
|
|
||||||
|
|
||||||
total_responses.total_students
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# survey = Survey.where(school:, academic_year:).first
|
|
||||||
# total_possible_student_responses = Respondent.where(school:, academic_year:).first
|
|
||||||
|
|
||||||
# student_survey_items = Subcategory.all.map do |subcategory|
|
|
||||||
# subcategory.measures.map do |measure|
|
|
||||||
# measure.student_scales.map do |scale|
|
|
||||||
# scale.survey_items.count
|
|
||||||
# end.sum
|
|
||||||
# end.sum
|
|
||||||
# end
|
|
||||||
# student_response_counts = Subcategory.all.map do |subcategory|
|
|
||||||
# subcategory.measures.map do |measure|
|
|
||||||
# measure.student_survey_items.map do |survey_item|
|
|
||||||
# survey_item.survey_item_responses.where(school:, academic_year:).exclude_boston.count
|
|
||||||
# end.sum
|
|
||||||
# end.sum
|
|
||||||
# end
|
|
||||||
|
|
||||||
# student_response_counts.each_with_index.map do |value, index|
|
|
||||||
# value.to_f / student_survey_items[index] / total_possible_student_responses * 100
|
|
||||||
# end
|
|
||||||
@ -1,29 +0,0 @@
|
|||||||
class TeacherResponseRate
|
|
||||||
include ResponseRate
|
|
||||||
|
|
||||||
def survey_item_count
|
|
||||||
@survey_item_count ||= @subcategory.measures.map do |measure|
|
|
||||||
measure.teacher_survey_items.reject do |survey_item|
|
|
||||||
survey_item.survey_item_responses.where(school: @school, academic_year: @academic_year).none?
|
|
||||||
end.count
|
|
||||||
end.sum
|
|
||||||
end
|
|
||||||
|
|
||||||
def response_count
|
|
||||||
@response_count ||= @subcategory.measures.map do |measure|
|
|
||||||
measure.teacher_survey_items.map do |survey_item|
|
|
||||||
survey_item.survey_item_responses.where(school: @school,
|
|
||||||
academic_year: @academic_year).exclude_boston.count
|
|
||||||
end.sum
|
|
||||||
end.sum
|
|
||||||
end
|
|
||||||
|
|
||||||
def total_possible_responses
|
|
||||||
@total_possible_responses ||= begin
|
|
||||||
total_responses = Respondent.where(school: @school, academic_year: @academic_year).first
|
|
||||||
return 0 unless total_responses.present?
|
|
||||||
|
|
||||||
total_responses.total_teachers
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
Loading…
Reference in new issue