diff --git a/app/models/case_log.rb b/app/models/case_log.rb index 559ac4e38..f64e543d9 100644 --- a/app/models/case_log.rb +++ b/app/models/case_log.rb @@ -358,6 +358,7 @@ private self.totchild = get_totchild self.totelder = get_totelder self.totadult = get_totadult + self.refused = get_refused if %i[brent scharge pscharge supcharg].any? { |f| public_send(f).present? } self.brent ||= 0 self.scharge ||= 0 @@ -451,6 +452,12 @@ private end end + def get_refused + return 1 if age_refused? || sex_refused? || relat_refused? || ecstat_refused? + + 0 + end + def get_inferred_la(postcode) postcode_lookup = nil begin @@ -529,4 +536,20 @@ private def mandatory_fields form.questions.map(&:id).difference(OPTIONAL_FIELDS, dynamically_not_required) end + + def age_refused? + [age1_known, age2_known, age3_known, age4_known, age5_known, age6_known, age7_known, age8_known].any?(1) + end + + def sex_refused? + [sex1, sex2, sex3, sex4, sex5, sex6, sex7, sex8].any?("R") + end + + def relat_refused? + [relat2, relat3, relat4, relat5, relat6, relat7, relat8].any?(3) + end + + def ecstat_refused? + [ecstat1, ecstat2, ecstat3, ecstat4, ecstat5, ecstat6, ecstat7, ecstat8].any?(10) + end end diff --git a/db/migrate/20220317103029_add_refused_field.rb b/db/migrate/20220317103029_add_refused_field.rb new file mode 100644 index 000000000..26bbfc4ef --- /dev/null +++ b/db/migrate/20220317103029_add_refused_field.rb @@ -0,0 +1,7 @@ +class AddRefusedField < ActiveRecord::Migration[7.0] + def change + change_table :case_logs, bulk: true do |t| + t.column :refused, :integer + end + end +end diff --git a/db/schema.rb b/db/schema.rb index e6782acfb..39b9bc4f3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -224,6 +224,7 @@ ActiveRecord::Schema[7.0].define(version: 202202071123100) do t.decimal "wsupchrg", precision: 10, scale: 2 t.decimal "wtcharge", precision: 10, scale: 2 t.decimal "wtshortfall", precision: 10, scale: 2 + t.integer "refused" t.integer "housingneeds" t.integer "vday" t.integer "vmonth" diff --git a/spec/fixtures/exports/case_logs.xml b/spec/fixtures/exports/case_logs.xml index 49efe81b5..d3eaa7d42 100644 --- a/spec/fixtures/exports/case_logs.xml +++ b/spec/fixtures/exports/case_logs.xml @@ -166,6 +166,7 @@ 17.5 162.5 6.0 + 0 1 3 11 diff --git a/spec/models/case_log_spec.rb b/spec/models/case_log_spec.rb index 32ffccf90..722a6b8c3 100644 --- a/spec/models/case_log_spec.rb +++ b/spec/models/case_log_spec.rb @@ -1378,6 +1378,25 @@ RSpec.describe CaseLog do end end + context "when answering the household characteristics questions" do + let!(:case_log) do + described_class.create({ + managing_organisation: organisation, + owning_organisation: organisation, + age1_known: 1, + sex1: "R", + relat2: 3, + ecstat1: 10, + }) + end + + it "correctly derives and saves refused" do + record_from_db = ActiveRecord::Base.connection.execute("select refused from case_logs where id=#{case_log.id}").to_a[0] + expect(record_from_db["refused"]).to eq(1) + expect(case_log["refused"]).to eq(1) + end + end + context "when the data provider is filling in household needs" do let!(:case_log) do described_class.create({