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 @@
+
+
+
+
+
+
We’re unable to display results for the selected school and school year.
+
You’re welcome to contact MCIEA for more information
+
+
+
+
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