Browse Source

CLDC-678: Store total household members (#86)

* Store other housdehold members and infer total household members

* Remove redundant question
pull/87/head
kosiakkatrina 3 years ago committed by GitHub
parent
commit
894228c02e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      app/admin/case_logs.rb
  2. 8
      app/models/case_log.rb
  3. 2
      app/validations/household_validations.rb
  4. 16
      config/forms/2021_2022.json
  5. 7
      db/migrate/20211111143319_add_other_members_column.rb
  6. 3
      db/schema.rb
  7. 6
      docs/api/DLUHC-CORE-Data.v1.json
  8. 4
      spec/features/case_log_spec.rb
  9. 3
      spec/fixtures/complete_case_log.json
  10. 2
      spec/fixtures/forms/test_form.json
  11. 2
      spec/helpers/check_answers_helper_spec.rb
  12. 4
      spec/models/case_log_spec.rb

2
app/admin/case_logs.rb

@ -2,7 +2,7 @@ ActiveAdmin.register CaseLog do
# See permitted parameters documentation: # See permitted parameters documentation:
# https://github.com/activeadmin/activeadmin/blob/master/docs/2-resource-customization.md#setting-up-strong-parameters # https://github.com/activeadmin/activeadmin/blob/master/docs/2-resource-customization.md#setting-up-strong-parameters
permit_params do permit_params do
permitted = %i[status tenant_code age1 sex1 tenant_ethnic_group tenant_nationality previous_housing_situation armed_forces ecstat1 hhmemb relat2 age2 sex2 ecstat2 relat3 age3 sex3 ecstat3 relat4 age4 sex4 ecstat4 relat5 age5 sex5 ecstat5 relat6 age6 sex6 ecstat6 relat7 age7 person_7_gender ecstat7 relat8 age8 sex8 ecstat8 homelessness reason benefit_cap_spare_room_subsidy armed_forces_active armed_forces_injured armed_forces_partner medical_conditions pregnancy accessibility_requirements condition_effects tenancy_code tenancy_start_date starter_tenancy fixed_term_tenancy tenancy_type letting_type letting_provider la previous_postcode property_relet property_vacancy_reason property_reference property_unit_type property_building_type property_number_of_bedrooms property_void_date majorrepairs mrcdate property_number_of_times_relet property_wheelchair_accessible net_income net_income_frequency net_income_uc_proportion hb rent_frequency basic_rent service_charge personal_service_charge support_charge total_charge tshortfall time_lived_in_la time_on_la_waiting_list prevloc property_postcode reasonable_preference reasonable_preference_reason cbl_letting chr_letting cap_letting hbrentshortfall other_reason accessibility_requirements_fully_wheelchair_accessible_housing accessibility_requirements_wheelchair_access_to_essential_rooms accessibility_requirements_level_access_housing accessibility_requirements_other_disability_requirements accessibility_requirements_no_disability_requirements accessibility_requirements_do_not_know accessibility_requirements_prefer_not_to_say condition_effects_vision condition_effects_hearing condition_effects_mobility condition_effects_dexterity condition_effects_stamina condition_effects_learning condition_effects_memory condition_effects_mental_health condition_effects_social_or_behavioral condition_effects_other condition_effects_prefer_not_to_say reasonable_preference_reason_homeless reasonable_preference_reason_unsatisfactory_housing reasonable_preference_reason_medical_grounds reasonable_preference_reason_avoid_hardship reasonable_preference_reason_do_not_know other_tenancy_type override_net_income_validation net_income_known] permitted = %i[status tenant_code age1 sex1 tenant_ethnic_group tenant_nationality previous_housing_situation armed_forces ecstat1 other_hhmemb relat2 age2 sex2 ecstat2 relat3 age3 sex3 ecstat3 relat4 age4 sex4 ecstat4 relat5 age5 sex5 ecstat5 relat6 age6 sex6 ecstat6 relat7 age7 person_7_gender ecstat7 relat8 age8 sex8 ecstat8 homelessness reason benefit_cap_spare_room_subsidy armed_forces_active armed_forces_injured armed_forces_partner medical_conditions pregnancy accessibility_requirements condition_effects tenancy_code tenancy_start_date starter_tenancy fixed_term_tenancy tenancy_type letting_type letting_provider la previous_postcode property_relet property_vacancy_reason property_reference property_unit_type property_building_type property_number_of_bedrooms property_void_date majorrepairs mrcdate property_number_of_times_relet property_wheelchair_accessible net_income net_income_frequency net_income_uc_proportion hb rent_frequency basic_rent service_charge personal_service_charge support_charge total_charge tshortfall time_lived_in_la time_on_la_waiting_list prevloc property_postcode reasonable_preference reasonable_preference_reason cbl_letting chr_letting cap_letting hbrentshortfall other_reason accessibility_requirements_fully_wheelchair_accessible_housing accessibility_requirements_wheelchair_access_to_essential_rooms accessibility_requirements_level_access_housing accessibility_requirements_other_disability_requirements accessibility_requirements_no_disability_requirements accessibility_requirements_do_not_know accessibility_requirements_prefer_not_to_say condition_effects_vision condition_effects_hearing condition_effects_mobility condition_effects_dexterity condition_effects_stamina condition_effects_learning condition_effects_memory condition_effects_mental_health condition_effects_social_or_behavioral condition_effects_other condition_effects_prefer_not_to_say reasonable_preference_reason_homeless reasonable_preference_reason_unsatisfactory_housing reasonable_preference_reason_medical_grounds reasonable_preference_reason_avoid_hardship reasonable_preference_reason_do_not_know other_tenancy_type override_net_income_validation net_income_known]
permitted permitted
end end

8
app/models/case_log.rb

@ -163,6 +163,12 @@ class CaseLog < ApplicationRecord
end end
end end
def hhmemb
if other_hhmemb.present?
other_hhmemb
end
end
def applicable_income_range def applicable_income_range
return unless ecstat1 return unless ecstat1
@ -239,7 +245,7 @@ private
dynamically_not_required << "incfreq" dynamically_not_required << "incfreq"
end end
start_range = (hhmemb || 0) + 2 start_range = (other_hhmemb || 0) + 2
(start_range..8).each do |n| (start_range..8).each do |n|
dynamically_not_required << "age#{n}" dynamically_not_required << "age#{n}"
dynamically_not_required << "sex#{n}" dynamically_not_required << "sex#{n}"

2
app/validations/household_validations.rb

@ -80,7 +80,7 @@ module HouseholdValidations
record.errors.add :unittype_gn, "A bedsit can only have one bedroom" record.errors.add :unittype_gn, "A bedsit can only have one bedroom"
end end
if !record.hhmemb.nil? && record.hhmemb.positive? && (record.unittype_gn.include?("Shared") && !record.beds.to_i.between?(1, 7)) if !record.other_hhmemb.nil? && record.other_hhmemb.positive? && (record.unittype_gn.include?("Shared") && !record.beds.to_i.between?(1, 7))
record.errors.add :unittype_gn, "A shared house must have 1 to 7 bedrooms" record.errors.add :unittype_gn, "A shared house must have 1 to 7 bedrooms"
end end

16
config/forms/2021_2022.json

@ -104,7 +104,7 @@
"header": "About this log", "header": "About this log",
"description": "", "description": "",
"questions": { "questions": {
"tenancy_start_date": { "startdate": {
"check_answer_label": "When is the tenancy start date?", "check_answer_label": "When is the tenancy start date?",
"header": "What is the tenancy start date?", "header": "What is the tenancy start date?",
"hint_text": "For example, 27 3 2007", "hint_text": "For example, 27 3 2007",
@ -332,7 +332,7 @@
"header": "", "header": "",
"description": "", "description": "",
"questions": { "questions": {
"hhmemb": { "other_hhmemb": {
"check_answer_label": "Number of Other Household Members", "check_answer_label": "Number of Other Household Members",
"header": "How many other people are there in the household?", "header": "How many other people are there in the household?",
"hint_text": "The maximum number of others is 7", "hint_text": "The maximum number of others is 7",
@ -1027,18 +1027,6 @@
} }
} }
}, },
"tenancy_start_date": {
"header": "",
"description": "",
"questions": {
"startdate": {
"check_answer_label": "When is the tenancy start date?",
"header": "What is the tenancy start date?",
"hint_text": "For example, 27 3 2007",
"type": "date"
}
}
},
"starter_tenancy": { "starter_tenancy": {
"header": "", "header": "",
"description": "", "description": "",

7
db/migrate/20211111143319_add_other_members_column.rb

@ -0,0 +1,7 @@
class AddOtherMembersColumn < ActiveRecord::Migration[6.1]
def change
change_table :case_logs, bulk: true do |t|
t.column :other_hhmemb, :integer
end
end
end

3
db/schema.rb

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2021_11_10_140928) do ActiveRecord::Schema.define(version: 2021_11_11_143319) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -152,6 +152,7 @@ ActiveRecord::Schema.define(version: 2021_11_10_140928) do
t.integer "mrcday" t.integer "mrcday"
t.integer "mrcmonth" t.integer "mrcmonth"
t.integer "mrcyear" t.integer "mrcyear"
t.integer "other_hhmemb"
t.index ["discarded_at"], name: "index_case_logs_on_discarded_at" t.index ["discarded_at"], name: "index_case_logs_on_discarded_at"
end end

6
docs/api/DLUHC-CORE-Data.v1.json

@ -263,7 +263,7 @@
"prevten": "Private sector tenancy", "prevten": "Private sector tenancy",
"armed_forces": "Yes - a regular", "armed_forces": "Yes - a regular",
"ecstat1": "Full-time - 30 hours or more", "ecstat1": "Full-time - 30 hours or more",
"hhmemb": 7, "other_hhmemb": 7,
"relat2": "Partner", "relat2": "Partner",
"age2": 32, "age2": 32,
"sex2": "Male", "sex2": "Male",
@ -459,7 +459,7 @@
"Prefer not to say" "Prefer not to say"
] ]
}, },
"hhmemb": { "other_hhmemb": {
"type": "number", "type": "number",
"minimum": 0, "minimum": 0,
"maximum": 7 "maximum": 7
@ -1052,7 +1052,7 @@
"prevten", "prevten",
"armed_forces", "armed_forces",
"ecstat1", "ecstat1",
"hhmemb", "other_hhmemb",
"relat2", "relat2",
"age2", "age2",
"sex2", "sex2",

4
spec/features/case_log_spec.rb

@ -9,7 +9,7 @@ RSpec.describe "Test Features" do
tenant_code: { type: "text", answer: "BZ737", path: "tenant_code" }, tenant_code: { type: "text", answer: "BZ737", path: "tenant_code" },
age1: { type: "numeric", answer: 25, path: "person_1_age" }, age1: { type: "numeric", answer: 25, path: "person_1_age" },
sex1: { type: "radio", answer: "Female", path: "person_1_gender" }, sex1: { type: "radio", answer: "Female", path: "person_1_gender" },
hhmemb: { type: "numeric", answer: 2, path: "household_number_of_other_members" }, other_hhmemb: { type: "numeric", answer: 2, path: "household_number_of_other_members" },
} }
def fill_in_number_question(case_log_id, question, value, path) def fill_in_number_question(case_log_id, question, value, path)
@ -265,7 +265,7 @@ RSpec.describe "Test Features" do
let(:last_question_for_subsection) { "household_number_of_other_members" } let(:last_question_for_subsection) { "household_number_of_other_members" }
it "redirects to the check answers page when answering the last question and clicking save and continue" do it "redirects to the check answers page when answering the last question and clicking save and continue" do
fill_in_number_question(id, "hhmemb", 0, last_question_for_subsection) fill_in_number_question(id, "other_hhmemb", 0, last_question_for_subsection)
expect(page).to have_current_path("/case_logs/#{id}/#{subsection}/check_answers") expect(page).to have_current_path("/case_logs/#{id}/#{subsection}/check_answers")
end end

3
spec/fixtures/complete_case_log.json vendored

@ -8,7 +8,8 @@
"prevten": "Private sector tenancy", "prevten": "Private sector tenancy",
"armed_forces": "Yes - a regular", "armed_forces": "Yes - a regular",
"ecstat1": "Full-time - 30 hours or more", "ecstat1": "Full-time - 30 hours or more",
"hhmemb": 7, "other_hhmemb": 7,
"hhmemb": 8,
"relat2": "Partner", "relat2": "Partner",
"age2": 32, "age2": 32,
"sex2": "Male", "sex2": "Male",

2
spec/fixtures/forms/test_form.json vendored

@ -45,7 +45,7 @@
}, },
"household_number_of_other_members": { "household_number_of_other_members": {
"questions": { "questions": {
"hhmemb": { "other_hhmemb": {
"check_answer_label": "Number of Other Household Members", "check_answer_label": "Number of Other Household Members",
"header": "How many other people are there in the household?", "header": "How many other people are there in the household?",
"hint_text": "The maximum number of others is 1", "hint_text": "The maximum number of others is 1",

2
spec/helpers/check_answers_helper_spec.rb

@ -6,7 +6,7 @@ RSpec.describe CheckAnswersHelper do
FactoryBot.create( FactoryBot.create(
:case_log, :case_log,
:in_progress, :in_progress,
hhmemb: 1, other_hhmemb: 1,
relat2: "Partner", relat2: "Partner",
) )
end end

4
spec/models/case_log_spec.rb

@ -109,7 +109,7 @@ RSpec.describe Form, type: :model do
expect { expect {
CaseLog.create!(unittype_gn: "Shared bungalow", CaseLog.create!(unittype_gn: "Shared bungalow",
beds: 8, beds: 8,
hhmemb: 1) other_hhmemb: 1)
}.to raise_error(ActiveRecord::RecordInvalid) }.to raise_error(ActiveRecord::RecordInvalid)
end end
@ -117,7 +117,7 @@ RSpec.describe Form, type: :model do
expect { expect {
CaseLog.create!(unittype_gn: "Shared bungalow", CaseLog.create!(unittype_gn: "Shared bungalow",
beds: 4, beds: 4,
hhmemb: 0) other_hhmemb: 0)
}.to raise_error(ActiveRecord::RecordInvalid) }.to raise_error(ActiveRecord::RecordInvalid)
end end

Loading…
Cancel
Save