diff --git a/CHANGELOG.md b/CHANGELOG.md index c29cb580..5a1ebf20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,3 +38,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Add deployment script for beta. Runs tests before deployment to Heroku's git server +- Add new set of student results for 2016-17 +`bundle exec rake one_off:load_single_file` +- Exclude results from boston. Add foreign key from school to district +`bundle exec rake db:migrate` diff --git a/app/models/student_response_rate.rb b/app/models/student_response_rate.rb index d1172c71..29f4dc34 100644 --- a/app/models/student_response_rate.rb +++ b/app/models/student_response_rate.rb @@ -19,7 +19,8 @@ class StudentResponseRate 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).count + survey_item.survey_item_responses.where(school: @school, + academic_year: @academic_year).exclude_boston.count end.sum end.sum end diff --git a/app/models/survey_item.rb b/app/models/survey_item.rb index ce4903fd..243b83ce 100644 --- a/app/models/survey_item.rb +++ b/app/models/survey_item.rb @@ -7,7 +7,8 @@ class SurveyItem < ActiveRecord::Base def score(school:, academic_year:) @score ||= Hash.new do |memo| - memo[[school, academic_year]] = survey_item_responses.where(school:, academic_year:).average(:likert_score).to_f + memo[[school, academic_year]] = survey_item_responses.where(school:, + academic_year:).exclude_boston.average(:likert_score).to_f end @score[[school, academic_year]] diff --git a/app/models/survey_item_response.rb b/app/models/survey_item_response.rb index 8479b5d9..966a5aaa 100644 --- a/app/models/survey_item_response.rb +++ b/app/models/survey_item_response.rb @@ -5,4 +5,9 @@ class SurveyItemResponse < ActiveRecord::Base belongs_to :academic_year belongs_to :school belongs_to :survey_item + + scope :exclude_boston, lambda { + boston = District.where(name: 'Boston').first + where.not(school: boston.schools) if boston.present? + } end diff --git a/app/models/teacher_response_rate.rb b/app/models/teacher_response_rate.rb index 3bf72460..1f2db362 100644 --- a/app/models/teacher_response_rate.rb +++ b/app/models/teacher_response_rate.rb @@ -12,7 +12,8 @@ class TeacherResponseRate 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).count + survey_item.survey_item_responses.where(school: @school, + academic_year: @academic_year).exclude_boston.count end.sum end.sum end diff --git a/app/views/layouts/_boston_modal.html.erb b/app/views/layouts/_boston_modal.html.erb new file mode 100644 index 00000000..2dfddac5 --- /dev/null +++ b/app/views/layouts/_boston_modal.html.erb @@ -0,0 +1,14 @@ + diff --git a/app/views/overview/index.html.erb b/app/views/overview/index.html.erb index b91cd068..311d260a 100644 --- a/app/views/overview/index.html.erb +++ b/app/views/overview/index.html.erb @@ -97,4 +97,8 @@ <%= render partial: "variance_chart", locals: { presenters: @variance_chart_row_presenters } %> -<%= render partial: 'layouts/empty_dataset_modal' if @has_empty_dataset %> +<% if @district == District.find_by_name("Boston") %> + <%= render partial: 'layouts/boston_modal' %> +<% elsif @has_empty_dataset %> + <%= render partial: 'layouts/empty_dataset_modal' %> +<% end %> diff --git a/db/migrate/20220510232626_add_foreign_key_between_schools_and_districts.rb b/db/migrate/20220510232626_add_foreign_key_between_schools_and_districts.rb new file mode 100644 index 00000000..0e5975b7 --- /dev/null +++ b/db/migrate/20220510232626_add_foreign_key_between_schools_and_districts.rb @@ -0,0 +1,5 @@ +class AddForeignKeyBetweenSchoolsAndDistricts < ActiveRecord::Migration[7.0] + def change + add_foreign_key :schools, :districts + end +end diff --git a/db/schema.rb b/db/schema.rb index 1f7f79e8..9d13733a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2022_05_03_180142) do +ActiveRecord::Schema[7.0].define(version: 2022_05_10_232626) do # These are extensions that must be enabled in order to support this database enable_extension "pg_stat_statements" enable_extension "plpgsql" @@ -381,6 +381,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_05_03_180142) do add_foreign_key "respondents", "academic_years" add_foreign_key "respondents", "schools" add_foreign_key "scales", "measures" + add_foreign_key "schools", "districts" add_foreign_key "subcategories", "categories" add_foreign_key "survey_item_responses", "academic_years" add_foreign_key "survey_item_responses", "schools" diff --git a/spec/models/survey_item_response_spec.rb b/spec/models/survey_item_response_spec.rb new file mode 100644 index 00000000..880a6bf5 --- /dev/null +++ b/spec/models/survey_item_response_spec.rb @@ -0,0 +1,24 @@ +require 'rails_helper' +RSpec.describe SurveyItemResponse, type: :model do + let(:district) { create(:district) } + let(:boston) { create(:district, name: 'Boston') } + let(:school) { create(:school, district:) } + let(:boston_school) { create(:school, district: boston) } + let(:academic_year) { create(:academic_year) } + let(:survey_item) { create(:student_survey_item) } + + before :each do + create(:survey_item_response, school:, survey_item:) + create(:survey_item_response, school: boston_school, survey_item:) + end + describe '.survey_item_responses' do + it 'includes all survey item responses' do + expect(survey_item.survey_item_responses.count).to eq 2 + end + end + describe '.exclude_boston' do + it 'excludes survey item responses from boston schools' do + expect(survey_item.survey_item_responses.exclude_boston.count).to eq 1 + end + end +end