diff --git a/app/models/derived_variables/sales_log_variables.rb b/app/models/derived_variables/sales_log_variables.rb index 1e7489015..b4ff1a671 100644 --- a/app/models/derived_variables/sales_log_variables.rb +++ b/app/models/derived_variables/sales_log_variables.rb @@ -1,7 +1,7 @@ module DerivedVariables::SalesLogVariables def set_derived_fields! self.ethnic = 17 if ethnic_refused? - self.mscharge = nil if monthly_leasehold_charges_unknown? + self.mscharge = nil if no_monthly_leasehold_charges? if exdate.present? self.exday = exdate.day self.exmonth = exdate.month diff --git a/app/models/form/sales/pages/leasehold_charges.rb b/app/models/form/sales/pages/leasehold_charges.rb index a27c25e1d..a8ce52805 100644 --- a/app/models/form/sales/pages/leasehold_charges.rb +++ b/app/models/form/sales/pages/leasehold_charges.rb @@ -6,7 +6,7 @@ class Form::Sales::Pages::LeaseholdCharges < ::Form::Page def questions @questions ||= [ - Form::Sales::Questions::LeaseholdChargesKnown.new(nil, nil, self, ownershipsch: @ownershipsch), + Form::Sales::Questions::HasLeaseholdCharges.new(nil, nil, self, ownershipsch: @ownershipsch), Form::Sales::Questions::LeaseholdCharges.new(nil, nil, self, ownershipsch: @ownershipsch), ] end diff --git a/app/models/form/sales/questions/leasehold_charges_known.rb b/app/models/form/sales/questions/has_leasehold_charges.rb similarity index 70% rename from app/models/form/sales/questions/leasehold_charges_known.rb rename to app/models/form/sales/questions/has_leasehold_charges.rb index 92370a3ac..1c9e52766 100644 --- a/app/models/form/sales/questions/leasehold_charges_known.rb +++ b/app/models/form/sales/questions/has_leasehold_charges.rb @@ -1,9 +1,9 @@ -class Form::Sales::Questions::LeaseholdChargesKnown < ::Form::Question +class Form::Sales::Questions::HasLeaseholdCharges < ::Form::Question def initialize(id, hsh, subsection, ownershipsch:) super(id, hsh, subsection) - @id = "mscharge_known" - @check_answer_label = "Monthly leasehold charges known?" - @header = "Do you know the monthly leasehold charges for the property?" + @id = "has_mscharge" + @check_answer_label = "Does the property have any monthly leasehold charges?" + @header = "Does the property have any monthly leasehold charges?" @hint_text = "For example, service and management charges" @type = "radio" @answer_options = ANSWER_OPTIONS @@ -13,7 +13,7 @@ class Form::Sales::Questions::LeaseholdChargesKnown < ::Form::Question @hidden_in_check_answers = { "depends_on" => [ { - "mscharge_known" => 1, + "has_mscharge" => 1, }, ], } diff --git a/app/models/sales_log.rb b/app/models/sales_log.rb index b86124a2f..38beb850f 100644 --- a/app/models/sales_log.rb +++ b/app/models/sales_log.rb @@ -292,8 +292,8 @@ class SalesLog < Log companybuy == 1 end - def monthly_leasehold_charges_unknown? - mscharge_known&.zero? + def no_monthly_leasehold_charges? + has_mscharge&.zero? end def buyers_age_for_old_persons_shared_ownership_invalid? diff --git a/app/services/imports/sales_logs_import_service.rb b/app/services/imports/sales_logs_import_service.rb index 4d26639da..2fb619619 100644 --- a/app/services/imports/sales_logs_import_service.rb +++ b/app/services/imports/sales_logs_import_service.rb @@ -107,7 +107,8 @@ module Imports attributes["hhregresstill"] = still_serving(xml_doc) attributes["proplen"] = safe_string_as_integer(xml_doc, "Q16aProplen2") || safe_string_as_integer(xml_doc, "Q16aProplensec2") attributes["mscharge"] = monthly_charges(xml_doc, attributes) - attributes["mscharge_known"] = 1 if attributes["mscharge"].present? + attributes["has_mscharge"] = 1 if attributes["mscharge"]&.positive? + attributes["has_mscharge"] = 0 if attributes["mscharge"].present? && attributes["mscharge"] <= 0 attributes["prevten"] = unsafe_string_as_integer(xml_doc, "Q6PrevTenure") attributes["mortlen"] = mortgage_length(xml_doc, attributes) attributes["extrabor"] = borrowing(xml_doc, attributes) diff --git a/db/migrate/20230412143245_rename_mscharge_known.rb b/db/migrate/20230412143245_rename_mscharge_known.rb new file mode 100644 index 000000000..8033896ec --- /dev/null +++ b/db/migrate/20230412143245_rename_mscharge_known.rb @@ -0,0 +1,5 @@ +class RenameMschargeKnown < ActiveRecord::Migration[7.0] + def change + rename_column :sales_logs, :mscharge_known, :has_mscharge + end +end diff --git a/db/schema.rb b/db/schema.rb index 2c00fb921..34d3ed363 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: 2023_03_31_094840) do +ActiveRecord::Schema[7.0].define(version: 2023_04_12_143245) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -513,7 +513,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_31_094840) do t.integer "hhregres" t.integer "hhregresstill" t.integer "proplen" - t.integer "mscharge_known" + t.integer "has_mscharge" t.decimal "mscharge", precision: 10, scale: 2 t.integer "prevten" t.integer "mortgageused" diff --git a/spec/factories/sales_log.rb b/spec/factories/sales_log.rb index b2d6f37a5..4bea77a65 100644 --- a/spec/factories/sales_log.rb +++ b/spec/factories/sales_log.rb @@ -92,7 +92,7 @@ FactoryBot.define do mortgageused { 1 } wchair { 1 } armedforcesspouse { 5 } - mscharge_known { 1 } + has_mscharge { 1 } mscharge { 100 } mortlen { 10 } pcodenk { 1 } diff --git a/spec/models/form/sales/pages/leasehold_charges_spec.rb b/spec/models/form/sales/pages/leasehold_charges_spec.rb index d58b965c3..9eedf1830 100644 --- a/spec/models/form/sales/pages/leasehold_charges_spec.rb +++ b/spec/models/form/sales/pages/leasehold_charges_spec.rb @@ -12,7 +12,7 @@ RSpec.describe Form::Sales::Pages::LeaseholdCharges, type: :model do end it "has correct questions" do - expect(page.questions.map(&:id)).to eq(%w[mscharge_known mscharge]) + expect(page.questions.map(&:id)).to eq(%w[has_mscharge mscharge]) end it "has the correct id" do diff --git a/spec/models/form/sales/questions/leasehold_charges_known_spec.rb b/spec/models/form/sales/questions/has_leasehold_charges_spec.rb similarity index 77% rename from spec/models/form/sales/questions/leasehold_charges_known_spec.rb rename to spec/models/form/sales/questions/has_leasehold_charges_spec.rb index b8d191d3b..895a5d3fe 100644 --- a/spec/models/form/sales/questions/leasehold_charges_known_spec.rb +++ b/spec/models/form/sales/questions/has_leasehold_charges_spec.rb @@ -1,6 +1,6 @@ require "rails_helper" -RSpec.describe Form::Sales::Questions::LeaseholdChargesKnown, type: :model do +RSpec.describe Form::Sales::Questions::HasLeaseholdCharges, type: :model do subject(:question) { described_class.new(question_id, question_definition, page, ownershipsch: 1) } let(:question_id) { nil } @@ -12,15 +12,15 @@ RSpec.describe Form::Sales::Questions::LeaseholdChargesKnown, type: :model do end it "has the correct id" do - expect(question.id).to eq("mscharge_known") + expect(question.id).to eq("has_mscharge") end it "has the correct header" do - expect(question.header).to eq("Do you know the monthly leasehold charges for the property?") + expect(question.header).to eq("Does the property have any monthly leasehold charges?") end it "has the correct check_answer_label" do - expect(question.check_answer_label).to eq("Monthly leasehold charges known?") + expect(question.check_answer_label).to eq("Does the property have any monthly leasehold charges?") end it "has the correct type" do @@ -52,7 +52,7 @@ RSpec.describe Form::Sales::Questions::LeaseholdChargesKnown, type: :model do expect(question.hidden_in_check_answers).to eq({ "depends_on" => [ { - "mscharge_known" => 1, + "has_mscharge" => 1, }, ], }) diff --git a/spec/services/imports/sales_logs_import_service_spec.rb b/spec/services/imports/sales_logs_import_service_spec.rb index 3ab0c4a97..5862efa23 100644 --- a/spec/services/imports/sales_logs_import_service_spec.rb +++ b/spec/services/imports/sales_logs_import_service_spec.rb @@ -1478,6 +1478,40 @@ RSpec.describe Imports::SalesLogsImportService do expect(sales_log&.jointmore).to eq(3) end end + + context "when mscharge is 0" do + let(:sales_log_id) { "shared_ownership_sales_log" } + + before do + sales_log_xml.at_xpath("//xmlns:Q29MonthlyCharges").content = "0" + allow(logger).to receive(:warn).and_return(nil) + end + + it "sets has_mscharge to no" do + sales_log_service.send(:create_log, sales_log_xml) + + sales_log = SalesLog.find_by(old_id: sales_log_id) + expect(sales_log&.has_mscharge).to be(0) + expect(sales_log&.mscharge).to be(nil) + end + end + + context "when mscharge is more than 0" do + let(:sales_log_id) { "shared_ownership_sales_log" } + + before do + sales_log_xml.at_xpath("//xmlns:Q29MonthlyCharges").content = "100" + allow(logger).to receive(:warn).and_return(nil) + end + + it "sets has_mscharge to yes" do + sales_log_service.send(:create_log, sales_log_xml) + + sales_log = SalesLog.find_by(old_id: sales_log_id) + expect(sales_log&.has_mscharge).to be(1) + expect(sales_log&.mscharge).to eq(100) + end + end end end end