diff --git a/app/models/case_log.rb b/app/models/case_log.rb index f64e543d9..8cb17c8cb 100644 --- a/app/models/case_log.rb +++ b/app/models/case_log.rb @@ -440,7 +440,7 @@ private def get_totchild relationships = [relat2, relat3, relat4, relat5, relat6, relat7, relat8] - relationships.count(1) + relationships.count("C") end def get_totadult @@ -448,7 +448,7 @@ private total + (2..8).count do |i| age = public_send("age#{i}") relat = public_send("relat#{i}") - !age.nil? && ((age >= 16 && age < 18 && [0, 2].include?(relat)) || age >= 18 && age < 60) + !age.nil? && ((age >= 16 && age < 18 && %w[P X].include?(relat)) || age >= 18 && age < 60) end end @@ -546,7 +546,7 @@ private end def relat_refused? - [relat2, relat3, relat4, relat5, relat6, relat7, relat8].any?(3) + [relat2, relat3, relat4, relat5, relat6, relat7, relat8].any?("R") end def ecstat_refused? diff --git a/app/models/validations/financial_validations.rb b/app/models/validations/financial_validations.rb index d4ea7e11e..886f7357d 100644 --- a/app/models/validations/financial_validations.rb +++ b/app/models/validations/financial_validations.rb @@ -14,7 +14,7 @@ module Validations::FinancialValidations economic_status = record["ecstat#{n}"] is_employed = EMPLOYED_STATUSES.include?(economic_status) relationship = record["relat#{n}"] - is_partner_or_main = relationship&.zero? || (relationship.nil? && economic_status.present?) + is_partner_or_main = relationship == "P" || (relationship.nil? && economic_status.present?) if is_employed && is_partner_or_main && record.benefits&.zero? record.errors.add :benefits, I18n.t("validations.financial.benefits.part_or_full_time") end diff --git a/app/models/validations/household_validations.rb b/app/models/validations/household_validations.rb index c79890fc0..8a54b0526 100644 --- a/app/models/validations/household_validations.rb +++ b/app/models/validations/household_validations.rb @@ -188,7 +188,7 @@ private end def validate_partner_count(record) - partner_count = (2..8).count { |n| record.public_send("relat#{n}")&.zero? } + partner_count = (2..8).count { |n| tenant_is_partner?(record["relat#{n}"]) } if partner_count > 1 record.errors.add :base, I18n.t("validations.household.relat.one_partner") end @@ -210,7 +210,11 @@ private economic_status == 10 end + def tenant_is_partner?(relationship) + relationship == "P" + end + def tenant_is_child?(relationship) - relationship == 1 + relationship == "C" end end diff --git a/config/forms/2021_2022.json b/config/forms/2021_2022.json index 9e734871a..b6762b34c 100644 --- a/config/forms/2021_2022.json +++ b/config/forms/2021_2022.json @@ -1626,20 +1626,20 @@ "hint_text": "", "type": "radio", "answer_options": { - "0": { + "P": { "value": "Partner" }, - "1": { + "C": { "value": "Child", "hint": "Must be eligible for child benefit, aged under 16 or under 20 if still in full-time education." }, - "2": { + "X": { "value": "Other" }, "divider": { "value": true }, - "3": { + "R": { "value": "Person prefers not to say" } } @@ -1834,20 +1834,20 @@ "hint_text": "", "type": "radio", "answer_options": { - "0": { + "P": { "value": "Partner" }, - "1": { + "C": { "value": "Child", "hint": "Must be eligible for child benefit, aged under 16 or under 20 if still in full-time education." }, - "2": { + "X": { "value": "Other" }, "divider": { "value": true }, - "3": { + "R": { "value": "Person prefers not to say" } } @@ -2039,20 +2039,20 @@ "hint_text": "", "type": "radio", "answer_options": { - "0": { + "P": { "value": "Partner" }, - "1": { + "C": { "value": "Child", "hint": "Must be eligible for child benefit, aged under 16 or under 20 if still in full-time education." }, - "2": { + "X": { "value": "Other" }, "divider": { "value": true }, - "3": { + "R": { "value": "Person prefers not to say" } } @@ -2241,20 +2241,20 @@ "hint_text": "", "type": "radio", "answer_options": { - "0": { + "P": { "value": "Partner" }, - "1": { + "C": { "value": "Child", "hint": "Must be eligible for child benefit, aged under 16 or under 20 if still in full-time education." }, - "2": { + "X": { "value": "Other" }, "divider": { "value": true }, - "3": { + "R": { "value": "Person prefers not to say" } } @@ -2440,20 +2440,20 @@ "hint_text": "", "type": "radio", "answer_options": { - "0": { + "P": { "value": "Partner" }, - "1": { + "C": { "value": "Child", "hint": "Must be eligible for child benefit, aged under 16 or under 20 if still in full-time education." }, - "2": { + "X": { "value": "Other" }, "divider": { "value": true }, - "3": { + "R": { "value": "Person prefers not to say" } } @@ -2636,20 +2636,20 @@ "hint_text": "", "type": "radio", "answer_options": { - "0": { + "P": { "value": "Partner" }, - "1": { + "C": { "value": "Child", "hint": "Must be eligible for child benefit, aged under 16 or under 20 if still in full-time education." }, - "2": { + "X": { "value": "Other" }, "divider": { "value": true }, - "3": { + "R": { "value": "Person prefers not to say" } } @@ -2829,20 +2829,20 @@ "hint_text": "", "type": "radio", "answer_options": { - "0": { + "P": { "value": "Partner" }, - "1": { + "C": { "value": "Child", "hint": "Must be eligible for child benefit, aged under 16 or under 20 if still in full-time education." }, - "2": { + "X": { "value": "Other" }, "divider": { "value": true }, - "3": { + "R": { "value": "Person prefers not to say" } } diff --git a/db/migrate/20220325122431_change_relat_to_string.rb b/db/migrate/20220325122431_change_relat_to_string.rb new file mode 100644 index 000000000..bdecb3943 --- /dev/null +++ b/db/migrate/20220325122431_change_relat_to_string.rb @@ -0,0 +1,39 @@ +class ChangeRelatToString < ActiveRecord::Migration[7.0] + def up + change_table :case_logs, bulk: true do |t| + t.remove :relat2 + t.column :relat2, :string + t.remove :relat3 + t.column :relat3, :string + t.remove :relat4 + t.column :relat4, :string + t.remove :relat5 + t.column :relat5, :string + t.remove :relat6 + t.column :relat6, :string + t.remove :relat7 + t.column :relat7, :string + t.remove :relat8 + t.column :relat8, :string + end + end + + def down + change_table :case_logs, bulk: true do |t| + t.remove :relat2 + t.column :relat2, :integer + t.remove :relat3 + t.column :relat3, :integer + t.remove :relat4 + t.column :relat4, :integer + t.remove :relat5 + t.column :relat5, :integer + t.remove :relat6 + t.column :relat6, :integer + t.remove :relat7 + t.column :relat7, :integer + t.remove :relat8 + t.column :relat8, :integer + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 39b9bc4f3..545cecd7d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -208,13 +208,6 @@ ActiveRecord::Schema[7.0].define(version: 202202071123100) do t.integer "details_known_6" t.integer "details_known_7" t.integer "details_known_8" - t.integer "relat2" - t.integer "relat3" - t.integer "relat4" - t.integer "relat5" - t.integer "relat6" - t.integer "relat7" - t.integer "relat8" t.integer "rent_type" t.integer "has_benefits" t.integer "renewal" @@ -230,6 +223,13 @@ ActiveRecord::Schema[7.0].define(version: 202202071123100) do t.integer "vmonth" t.integer "vyear" t.decimal "wchchrg", precision: 10, scale: 2 + t.string "relat2" + t.string "relat3" + t.string "relat4" + t.string "relat5" + t.string "relat6" + t.string "relat7" + t.string "relat8" t.index ["managing_organisation_id"], name: "index_case_logs_on_managing_organisation_id" t.index ["owning_organisation_id"], name: "index_case_logs_on_owning_organisation_id" end diff --git a/spec/factories/case_log.rb b/spec/factories/case_log.rb index c900cc84e..99a7e72fc 100644 --- a/spec/factories/case_log.rb +++ b/spec/factories/case_log.rb @@ -43,7 +43,7 @@ FactoryBot.define do ecstat1 { 0 } other_hhmemb { 1 } hhmemb { 2 } - relat2 { 0 } + relat2 { "P" } age2 { 32 } sex2 { "M" } ecstat2 { 6 } diff --git a/spec/fixtures/complete_case_log.json b/spec/fixtures/complete_case_log.json index b81719cb9..e2bbf0245 100644 --- a/spec/fixtures/complete_case_log.json +++ b/spec/fixtures/complete_case_log.json @@ -11,31 +11,30 @@ "ecstat1": 1, "other_hhmemb": 7, "hhmemb": 8, - "relat2": 0, + "relat2": "P", "age2": 32, "sex2": "M", "ecstat2": 6, - "relat3": 1, + "relat3": "C", "age3": 12, "sex3": "M", "ecstat3": 9, - "relat4": 1, + "relat4": "C", "age4": 12, "sex4": "F", "ecstat4": 9, - "relat5": 1, + "relat5": "C", "age5": 10, "sex5": "X", "ecstat5": 9, - "relat6": 1, + "relat6": "C", "age6": 5, "sex6": "R", "ecstat6": 9, - "relat7": 1, "age7": 5, "sex7": "R", "ecstat7": 9, - "relat8": 1, + "relat8": "C", "age8": 2, "sex8": "R", "ecstat8": 9, diff --git a/spec/fixtures/exports/case_logs.xml b/spec/fixtures/exports/case_logs.xml index 649947215..639768427 100644 --- a/spec/fixtures/exports/case_logs.xml +++ b/spec/fixtures/exports/case_logs.xml @@ -150,13 +150,6 @@ false - 0 - - - - - - 1 1 0 @@ -172,5 +165,12 @@ 11 2019 + P + + + + + + diff --git a/spec/fixtures/forms/2021_2022.json b/spec/fixtures/forms/2021_2022.json index 482ecc18f..0eea7737a 100644 --- a/spec/fixtures/forms/2021_2022.json +++ b/spec/fixtures/forms/2021_2022.json @@ -137,10 +137,10 @@ "header": "What is person 2’s relationship to lead tenant", "type": "radio", "answer_options": { - "0": { + "X": { "value": "Other" }, - "1": { + "R": { "value": "Prefer not to say" } } @@ -775,7 +775,7 @@ "width": 4 } }, - "depends_on": [{"period": 3}] + "depends_on": [{"period": 3}] }, "care_home_charge_bi_weekly": { "questions": { @@ -789,7 +789,7 @@ "width": 4 } }, - "depends_on": [{"period": 2}] + "depends_on": [{"period": 2}] } } } diff --git a/spec/models/case_log_spec.rb b/spec/models/case_log_spec.rb index 722a6b8c3..3b506e02e 100644 --- a/spec/models/case_log_spec.rb +++ b/spec/models/case_log_spec.rb @@ -1298,12 +1298,12 @@ RSpec.describe CaseLog do managing_organisation: organisation, owning_organisation: organisation, other_hhmemb: 4, - relat2: 1, - relat3: 1, - relat4: 2, - relat5: 1, - relat7: 2, - relat8: 2, + relat2: "C", + relat3: "C", + relat4: "X", + relat5: "C", + relat7: "X", + relat8: "X", age1: 22, age2: 14, age4: 60, @@ -1385,7 +1385,7 @@ RSpec.describe CaseLog do owning_organisation: organisation, age1_known: 1, sex1: "R", - relat2: 3, + relat2: "R", ecstat1: 10, }) end diff --git a/spec/models/validations/financial_validations_spec.rb b/spec/models/validations/financial_validations_spec.rb index 66abd4214..7ea665fc7 100644 --- a/spec/models/validations/financial_validations_spec.rb +++ b/spec/models/validations/financial_validations_spec.rb @@ -50,7 +50,7 @@ RSpec.describe Validations::FinancialValidations do it "validates that the tenant's partner is not in full time employment" do record.benefits = 0 record.ecstat2 = 0 - record.relat2 = 0 + record.relat2 = "P" financial_validator.validate_net_income_uc_proportion(record) expect(record.errors["benefits"]).to include(match I18n.t("validations.financial.benefits.part_or_full_time")) end @@ -58,7 +58,7 @@ RSpec.describe Validations::FinancialValidations do it "expects that the tenant's partner is not in full-time or part-time employment" do record.benefits = 0 record.ecstat2 = 4 - record.relat2 = 0 + record.relat2 = "P" financial_validator.validate_net_income_uc_proportion(record) expect(record.errors["benefits"]).to be_empty end diff --git a/spec/models/validations/household_validations_spec.rb b/spec/models/validations/household_validations_spec.rb index 605197739..df6f4ad99 100644 --- a/spec/models/validations/household_validations_spec.rb +++ b/spec/models/validations/household_validations_spec.rb @@ -276,15 +276,15 @@ RSpec.describe Validations::HouseholdValidations do describe "household member validations" do it "validates that only 1 partner exists" do - record.relat2 = 0 - record.relat3 = 0 + record.relat2 = "P" + record.relat3 = "P" household_validator.validate_household_number_of_other_members(record) expect(record.errors["base"]) .to include(match I18n.t("validations.household.relat.one_partner")) end it "expects that a tenant can have a partner" do - record.relat3 = 0 + record.relat3 = "P" household_validator.validate_household_number_of_other_members(record) expect(record.errors["base"]).to be_empty end @@ -292,7 +292,7 @@ RSpec.describe Validations::HouseholdValidations do context "when the household contains a person under 16" do it "validates that person must be a child of the tenant" do record.age2 = 14 - record.relat2 = 0 + record.relat2 = "P" household_validator.validate_household_number_of_other_members(record) expect(record.errors["relat2"]) .to include(match I18n.t("validations.household.relat.child_under_16", person_num: 2)) @@ -302,7 +302,7 @@ RSpec.describe Validations::HouseholdValidations do it "expects that person is a child of the tenant" do record.age2 = 14 - record.relat2 = 1 + record.relat2 = "C" household_validator.validate_household_number_of_other_members(record) expect(record.errors["relat2"]).to be_empty expect(record.errors["age2"]).to be_empty @@ -328,7 +328,7 @@ RSpec.describe Validations::HouseholdValidations do it "validates that a person with economic status 'child' must be under 16" do record.age2 = 21 - record.relat2 = 1 + record.relat2 = "C" record.ecstat2 = 9 household_validator.validate_household_number_of_other_members(record) expect(record.errors["ecstat2"]) @@ -341,7 +341,7 @@ RSpec.describe Validations::HouseholdValidations do context "when the household contains a tenant's child between the ages of 16 and 19" do it "validates that person's economic status must be full time student or refused" do record.age2 = 17 - record.relat2 = 1 + record.relat2 = "C" record.ecstat2 = 1 household_validator.validate_household_number_of_other_members(record) expect(record.errors["ecstat2"]) @@ -354,7 +354,7 @@ RSpec.describe Validations::HouseholdValidations do it "expects that person can be a full time student" do record.age2 = 17 - record.relat2 = 1 + record.relat2 = "C" record.ecstat2 = 7 household_validator.validate_household_number_of_other_members(record) expect(record.errors["ecstat2"]).to be_empty @@ -364,7 +364,7 @@ RSpec.describe Validations::HouseholdValidations do it "expects that person can refuse to share their work status" do record.age2 = 17 - record.relat2 = 1 + record.relat2 = "C" record.ecstat2 = 10 household_validator.validate_household_number_of_other_members(record) expect(record.errors["ecstat2"]).to be_empty