From 93f88605621b1afc8094211f26b7ce4fe35b3a9e Mon Sep 17 00:00:00 2001 From: samyou-softwire Date: Fri, 27 Feb 2026 12:38:57 +0000 Subject: [PATCH] CLDC-4168: Allow mortgage not know if buyer wasn't interviewed previously had this the wrong way around. this makes sense because if you interviewed the buyer you should know this --- .../derived_variables/sales_log_variables.rb | 2 +- .../sales/pages/mortgage_length_interviewed.rb | 1 - .../pages/mortgage_length_not_interviewed.rb | 1 + app/models/sales_log.rb | 4 ++-- .../bulk_upload/sales/year2026/row_parser.rb | 16 ++++++++++------ .../validations/sales/2026/bulk_upload.en.yml | 2 +- .../sales/year2026/row_parser_spec.rb | 8 ++++---- 7 files changed, 19 insertions(+), 15 deletions(-) diff --git a/app/models/derived_variables/sales_log_variables.rb b/app/models/derived_variables/sales_log_variables.rb index 9ad8ecc74..7284e238e 100644 --- a/app/models/derived_variables/sales_log_variables.rb +++ b/app/models/derived_variables/sales_log_variables.rb @@ -98,7 +98,7 @@ module DerivedVariables::SalesLogVariables self.numstair = is_firststair? ? 1 : nil if numstair == 1 && firststair_changed? self.mrent = 0 if stairowned_100? - if buyer_not_interviewed_changed_to_interviewed_and_mortgage_length_known? + if buyer_interviewed_changed_to_not_interviewed_and_mortgage_length_known? self.mortgage_length_known = 0 end diff --git a/app/models/form/sales/pages/mortgage_length_interviewed.rb b/app/models/form/sales/pages/mortgage_length_interviewed.rb index 4b378374f..f2bebf148 100644 --- a/app/models/form/sales/pages/mortgage_length_interviewed.rb +++ b/app/models/form/sales/pages/mortgage_length_interviewed.rb @@ -9,7 +9,6 @@ class Form::Sales::Pages::MortgageLengthInterviewed < ::Form::Page def questions @questions ||= [ - Form::Sales::Questions::MortgageLengthKnown.new(nil, nil, self, ownershipsch: @ownershipsch), Form::Sales::Questions::MortgageLength.new(nil, nil, self, ownershipsch: @ownershipsch), ] end diff --git a/app/models/form/sales/pages/mortgage_length_not_interviewed.rb b/app/models/form/sales/pages/mortgage_length_not_interviewed.rb index 3e2dd7d9a..810e904c3 100644 --- a/app/models/form/sales/pages/mortgage_length_not_interviewed.rb +++ b/app/models/form/sales/pages/mortgage_length_not_interviewed.rb @@ -9,6 +9,7 @@ class Form::Sales::Pages::MortgageLengthNotInterviewed < ::Form::Page def questions @questions ||= [ + Form::Sales::Questions::MortgageLengthKnown.new(nil, nil, self, ownershipsch: @ownershipsch), Form::Sales::Questions::MortgageLength.new(nil, nil, self, ownershipsch: @ownershipsch), ] end diff --git a/app/models/sales_log.rb b/app/models/sales_log.rb index d67937aa4..de4c3c95c 100644 --- a/app/models/sales_log.rb +++ b/app/models/sales_log.rb @@ -390,8 +390,8 @@ class SalesLog < Log proptype_changed? && proptype_was == 2 end - def buyer_not_interviewed_changed_to_interviewed_and_mortgage_length_known? - noint_changed? && noint_was == 1 && !buyer_not_interviewed? && mortlen.present? + def buyer_interviewed_changed_to_not_interviewed_and_mortgage_length_known? + noint_changed? && noint_was == 2 && buyer_not_interviewed? && mortlen.present? end def shared_ownership_scheme? diff --git a/app/services/bulk_upload/sales/year2026/row_parser.rb b/app/services/bulk_upload/sales/year2026/row_parser.rb index 736c802cc..b7a327eae 100644 --- a/app/services/bulk_upload/sales/year2026/row_parser.rb +++ b/app/services/bulk_upload/sales/year2026/row_parser.rb @@ -454,7 +454,7 @@ class BulkUpload::Sales::Year2026::RowParser validate :validate_nationality, on: :after_log validate :validate_buyer_2_nationality, on: :after_log - validate :validate_mortlen_field_if_buyer_not_interviewed, on: :after_log + validate :validate_mortlen_field_if_buyer_interviewed, on: :after_log validate :validate_nulls, on: :after_log @@ -672,6 +672,10 @@ private field_99 == 1 end + def buyer_interviewed? + field_14 == 2 + end + def rtb_like_sale_type? [9, 14, 27, 29].include?(field_11) end @@ -1176,7 +1180,7 @@ private end def mortgage_length_known - return nil if field_14 == 1 + return nil if buyer_interviewed? if mortlen == "R" 1 @@ -1552,10 +1556,10 @@ private %w[0] + GlobalConstants::COUNTRIES_ANSWER_OPTIONS.keys # 0 is "Prefers not to say" end - def validate_mortlen_field_if_buyer_not_interviewed - if field_14 == 1 && mortlen == "R" - errors.add(:field_90, I18n.t("#{ERROR_BASE_KEY}.mortlen.invalid_for_not_interviewed")) if shared_ownership? - errors.add(:field_118, I18n.t("#{ERROR_BASE_KEY}.mortlen.invalid_for_not_interviewed")) if discounted_ownership? + def validate_mortlen_field_if_buyer_interviewed + if buyer_interviewed? && mortlen == "R" + errors.add(:field_90, I18n.t("#{ERROR_BASE_KEY}.mortlen.invalid_for_interviewed")) if shared_ownership? + errors.add(:field_118, I18n.t("#{ERROR_BASE_KEY}.mortlen.invalid_for_interviewed")) if discounted_ownership? end end diff --git a/config/locales/validations/sales/2026/bulk_upload.en.yml b/config/locales/validations/sales/2026/bulk_upload.en.yml index eb4e10b90..a45ade4ea 100644 --- a/config/locales/validations/sales/2026/bulk_upload.en.yml +++ b/config/locales/validations/sales/2026/bulk_upload.en.yml @@ -46,4 +46,4 @@ en: invalid: "Select a valid nationality." mortlen: invalid: "Mortgage length must be a number or the letter R" - invalid_for_not_interviewed: "You indicated that the buyer was interviewed, but selected “Don’t know” for mortgage length. Please provide the mortgage length or update your response." + invalid_for_interviewed: "You indicated that the buyer was interviewed, but selected “Don’t know” for mortgage length. Please provide the mortgage length or update your response." diff --git a/spec/services/bulk_upload/sales/year2026/row_parser_spec.rb b/spec/services/bulk_upload/sales/year2026/row_parser_spec.rb index 33315d1b3..24bb06dad 100644 --- a/spec/services/bulk_upload/sales/year2026/row_parser_spec.rb +++ b/spec/services/bulk_upload/sales/year2026/row_parser_spec.rb @@ -1475,18 +1475,18 @@ RSpec.describe BulkUpload::Sales::Year2026::RowParser do context "and buyer was interviewed" do let(:attributes) { field_90_number_attributes.merge({ field_14: 2 }) } - it "does not add an error" do + it "adds an error" do parser.valid? - expect(parser.errors.where(:field_90)).not_to be_present + expect(parser.errors.where(:field_90)).to be_present end end context "and buyer was not interviewed" do let(:attributes) { field_90_number_attributes.merge({ field_14: 1 }) } - it "adds an error" do + it "does not add an error" do parser.valid? - expect(parser.errors.where(:field_90)).to be_present + expect(parser.errors.where(:field_90)).not_to be_present end end end