diff --git a/app/models/derived_variables/sales_log_variables.rb b/app/models/derived_variables/sales_log_variables.rb index 04658c222..a570abc35 100644 --- a/app/models/derived_variables/sales_log_variables.rb +++ b/app/models/derived_variables/sales_log_variables.rb @@ -261,8 +261,6 @@ private self.pcode1 = nil self.pcode2 = nil self.pcodenk = nil - self.address_line1_input = nil - self.postcode_full_input = nil self.postcode_full = nil self.is_la_inferred = nil self.la = nil diff --git a/app/models/log.rb b/app/models/log.rb index 1454aef65..1e2154fd4 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -90,13 +90,27 @@ class Log < ApplicationRecord if select_best_address_match service = AddressClient.new(address_string) service.call - return nil if service.result.blank? || service.error.present? + if service.result.blank? || service.error.present? + self.postcode_full = postcode_full_as_entered + self.address_line1 = address_line1_as_entered + self.address_line2 = address_line2_as_entered + self.county = county_as_entered + self.town_or_city = town_or_city_as_entered + self.manual_address_entry_selected = true + return nil + end presenter = AddressDataPresenter.new(service.result.first) os_match_threshold_for_bulk_upload = 0.7 if presenter.match >= os_match_threshold_for_bulk_upload self.uprn_selection = presenter.uprn else + self.postcode_full = postcode_full_as_entered + self.address_line1 = address_line1_as_entered + self.address_line2 = address_line2_as_entered + self.county = county_as_entered + self.town_or_city = town_or_city_as_entered + self.manual_address_entry_selected = true return nil end end diff --git a/app/services/bulk_upload/lettings/year2024/row_parser.rb b/app/services/bulk_upload/lettings/year2024/row_parser.rb index 461469200..b68e2a18d 100644 --- a/app/services/bulk_upload/lettings/year2024/row_parser.rb +++ b/app/services/bulk_upload/lettings/year2024/row_parser.rb @@ -438,7 +438,6 @@ class BulkUpload::Lettings::Year2024::RowParser validate :validate_assigned_to_when_support, on: :after_log validate :validate_all_charges_given, on: :after_log, if: proc { is_carehome.zero? } - validate :validate_address_option_found, on: :after_log, unless: -> { supported_housing? } validate :validate_uprn_exists_if_any_key_address_fields_are_blank, on: :after_log, unless: -> { supported_housing? } validate :validate_address_fields, on: :after_log, unless: -> { supported_housing? } @@ -615,21 +614,6 @@ private end end - def validate_address_option_found - if log.uprn.nil? && field_16.blank? && key_address_fields_provided? - error_message = if log.address_options_present? && log.address_options.size > 1 - I18n.t("#{ERROR_BASE_KEY}.address.not_determined.multiple") - elsif log.address_options_present? - I18n.t("#{ERROR_BASE_KEY}.address.not_determined.one") - else - I18n.t("#{ERROR_BASE_KEY}.address.not_found") - end - %i[field_17 field_18 field_19 field_20 field_21 field_22].each do |field| - errors.add(field, error_message) if errors[field].blank? - end - end - end - def key_address_fields_provided? field_17.present? && field_19.present? && postcode_full.present? end @@ -1353,7 +1337,6 @@ private attributes["address_line1_input"] = address_line1_input attributes["postcode_full_input"] = postcode_full attributes["select_best_address_match"] = true if field_16.blank? - attributes["manual_address_entry_selected"] = field_16.blank? end attributes diff --git a/app/services/bulk_upload/lettings/year2025/row_parser.rb b/app/services/bulk_upload/lettings/year2025/row_parser.rb index 9332fbabd..a0f0ee157 100644 --- a/app/services/bulk_upload/lettings/year2025/row_parser.rb +++ b/app/services/bulk_upload/lettings/year2025/row_parser.rb @@ -437,7 +437,6 @@ class BulkUpload::Lettings::Year2025::RowParser validate :validate_assigned_to_when_support, on: :after_log validate :validate_all_charges_given, on: :after_log - validate :validate_address_option_found, on: :after_log, unless: -> { supported_housing? } validate :validate_uprn_exists_if_any_key_address_fields_are_blank, on: :after_log, unless: -> { supported_housing? } validate :validate_address_fields, on: :after_log, unless: -> { supported_housing? } @@ -614,21 +613,6 @@ private end end - def validate_address_option_found - if log.uprn.nil? && field_18.blank? && key_address_fields_provided? - error_message = if log.address_options_present? && log.address_options.size > 1 - I18n.t("#{ERROR_BASE_KEY}.address.not_determined.multiple") - elsif log.address_options_present? - I18n.t("#{ERROR_BASE_KEY}.address.not_determined.one") - else - I18n.t("#{ERROR_BASE_KEY}.address.not_found") - end - %i[field_19 field_20 field_21 field_22 field_23 field_24].each do |field| - errors.add(field, error_message) if errors[field].blank? - end - end - end - def key_address_fields_provided? field_19.present? && field_21.present? && postcode_full.present? end @@ -1348,7 +1332,6 @@ private attributes["address_line1_input"] = address_line1_input attributes["postcode_full_input"] = postcode_full attributes["select_best_address_match"] = true if field_18.blank? - attributes["manual_address_entry_selected"] = field_18.blank? end attributes diff --git a/app/services/bulk_upload/sales/year2024/row_parser.rb b/app/services/bulk_upload/sales/year2024/row_parser.rb index 6bf1cc4be..5f066697c 100644 --- a/app/services/bulk_upload/sales/year2024/row_parser.rb +++ b/app/services/bulk_upload/sales/year2024/row_parser.rb @@ -455,7 +455,6 @@ class BulkUpload::Sales::Year2024::RowParser on: :after_log validate :validate_buyer1_economic_status, on: :before_log - validate :validate_address_option_found, on: :after_log validate :validate_buyer2_economic_status, on: :before_log validate :validate_valid_radio_option, on: :before_log @@ -613,21 +612,6 @@ private end end - def validate_address_option_found - if log.uprn.nil? && field_22.blank? && key_address_fields_provided? - error_message = if log.address_options_present? && log.address_options.size > 1 - I18n.t("#{ERROR_BASE_KEY}.address.not_determined.multiple") - elsif log.address_options_present? - I18n.t("#{ERROR_BASE_KEY}.address.not_determined.one") - else - I18n.t("#{ERROR_BASE_KEY}.address.not_found") - end - %i[field_23 field_24 field_25 field_26 field_27 field_28].each do |field| - errors.add(field, error_message) if errors[field].blank? - end - end - end - def key_address_fields_provided? field_23.present? && field_25.present? && postcode_full.present? end @@ -986,7 +970,6 @@ private attributes["address_line1_input"] = address_line1_input attributes["postcode_full_input"] = postcode_full attributes["select_best_address_match"] = true if field_22.blank? - attributes["manual_address_entry_selected"] = field_22.blank? attributes["ethnic_group2"] = infer_buyer2_ethnic_group_from_ethnic attributes["ethnicbuy2"] = field_40 diff --git a/app/services/bulk_upload/sales/year2025/row_parser.rb b/app/services/bulk_upload/sales/year2025/row_parser.rb index f6a2a6e1a..f22910a29 100644 --- a/app/services/bulk_upload/sales/year2025/row_parser.rb +++ b/app/services/bulk_upload/sales/year2025/row_parser.rb @@ -394,7 +394,6 @@ class BulkUpload::Sales::Year2025::RowParser on: :after_log validate :validate_buyer1_economic_status, on: :before_log - validate :validate_address_option_found, on: :after_log validate :validate_buyer2_economic_status, on: :before_log validate :validate_valid_radio_option, on: :before_log @@ -552,19 +551,6 @@ private end end - def validate_address_option_found - if log.uprn.nil? && field_16.blank? && key_address_fields_provided? - error_message = if log.address_options_present? - I18n.t("#{ERROR_BASE_KEY}.address.not_determined") - else - I18n.t("#{ERROR_BASE_KEY}.address.not_found") - end - %i[field_17 field_18 field_19 field_20 field_21 field_22].each do |field| - errors.add(field, error_message) if errors[field].blank? - end - end - end - def key_address_fields_provided? field_17.present? && field_19.present? && postcode_full.present? end @@ -961,7 +947,6 @@ private attributes["address_line1_input"] = address_line1_input attributes["postcode_full_input"] = postcode_full attributes["select_best_address_match"] = true if field_16.blank? - attributes["manual_address_entry_selected"] = field_16.blank? attributes["ethnic_group2"] = infer_buyer2_ethnic_group_from_ethnic attributes["ethnicbuy2"] = field_37 diff --git a/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb b/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb index a3392e50d..b9dc0a08d 100644 --- a/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb +++ b/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb @@ -1732,6 +1732,11 @@ RSpec.describe BulkUpload::Lettings::Year2024::RowParser do expect(parser.errors[field]).to be_empty end end + + it "does not set manual address input" do + parser.valid? + expect(parser.log.manual_address_entry_selected).to be_falsey + end end context "when no address can be found" do @@ -1740,13 +1745,20 @@ RSpec.describe BulkUpload::Lettings::Year2024::RowParser do .to_return(status: 200, body: { results: [] }.to_json, headers: {}) end - it "adds address not found errors to address fields only" do + it "does not add errors" do parser.valid? - expect(parser.errors[:field_16]).to be_empty - %i[field_17 field_18 field_19 field_20 field_21 field_22].each do |field| - expect(parser.errors[field]).to eql([I18n.t("validations.lettings.2024.bulk_upload.address.not_found")]) + %i[field_16 field_17 field_18 field_19 field_20 field_21 field_22].each do |field| + expect(parser.errors[field]).to be_empty end end + + it "sets manual address input" do + parser.valid? + expect(parser.log.manual_address_entry_selected).to be_truthy + expect(parser.log.address_line1).to eq("address line 1") + expect(parser.log.town_or_city).to eq("town or city") + expect(parser.log.postcode_full).to eq("AA1 1AA") + end end context "when a single address with not a high enough match rating is returned" do @@ -1755,13 +1767,20 @@ RSpec.describe BulkUpload::Lettings::Year2024::RowParser do .to_return(status: 200, body: { results: [{ DPA: { MATCH: 0.6, BUILDING_NAME: "", POST_TOWN: "", POSTCODE: "AA1 1AA", UPRN: "1" } }] }.to_json, headers: {}) end - it "adds address not found errors to address fields only" do + it "does not add errors" do parser.valid? - expect(parser.errors[:field_16]).to be_empty - %i[field_17 field_18 field_19 field_20 field_21 field_22].each do |field| - expect(parser.errors[field]).to eql([I18n.t("validations.lettings.2024.bulk_upload.address.not_determined.one")]) + %i[field_16 field_17 field_18 field_19 field_20 field_21 field_22].each do |field| + expect(parser.errors[field]).to be_empty end end + + it "sets manual address input" do + parser.valid? + expect(parser.log.manual_address_entry_selected).to be_truthy + expect(parser.log.address_line1).to eq("address line 1") + expect(parser.log.town_or_city).to eq("town or city") + expect(parser.log.postcode_full).to eq("AA1 1AA") + end end context "when no addresses have a high enough match rating" do @@ -1770,13 +1789,21 @@ RSpec.describe BulkUpload::Lettings::Year2024::RowParser do .to_return(status: 200, body: { results: [{ DPA: { MATCH: 0.6, BUILDING_NAME: "", POST_TOWN: "", POSTCODE: "AA1 1AA", UPRN: "1" } }, { DPA: { MATCH: 0.8, BUILDING_NAME: "", POST_TOWN: "", POSTCODE: "BB2 2BB", UPRN: "2" } }] }.to_json, headers: {}) end - it "adds address not found errors to address fields only" do + it "does not add errors" do parser.valid? - expect(parser.errors[:field_16]).to be_empty - %i[field_17 field_18 field_19 field_20 field_21 field_22].each do |field| - expect(parser.errors[field]).to eql([I18n.t("validations.lettings.2024.bulk_upload.address.not_determined.multiple")]) + %i[field_16 field_17 field_18 field_19 field_20 field_21 field_22].each do |field| + expect(parser.errors[field]).to be_empty end end + + it "sets manual address input" do + parser.valid? + expect(parser.log.manual_address_entry_selected).to be_truthy + expect(parser.log.manual_address_entry_selected).to be_truthy + expect(parser.log.address_line1).to eq("address line 1") + expect(parser.log.town_or_city).to eq("town or city") + expect(parser.log.postcode_full).to eq("AA1 1AA") + end end end end diff --git a/spec/services/bulk_upload/lettings/year2025/row_parser_spec.rb b/spec/services/bulk_upload/lettings/year2025/row_parser_spec.rb index a822d6f2a..8ba6874eb 100644 --- a/spec/services/bulk_upload/lettings/year2025/row_parser_spec.rb +++ b/spec/services/bulk_upload/lettings/year2025/row_parser_spec.rb @@ -1542,6 +1542,11 @@ RSpec.describe BulkUpload::Lettings::Year2025::RowParser do expect(parser.errors[field]).to be_empty end end + + it "does not set manual address input" do + parser.valid? + expect(parser.log.manual_address_entry_selected).to be_falsey + end end context "when no address can be found" do @@ -1550,13 +1555,20 @@ RSpec.describe BulkUpload::Lettings::Year2025::RowParser do .to_return(status: 200, body: { results: [] }.to_json, headers: {}) end - it "adds address not found errors to address fields only" do + it "does not add errors" do parser.valid? - expect(parser.errors[:field_18]).to be_empty - %i[field_19 field_20 field_21 field_22 field_23 field_24].each do |field| - expect(parser.errors[field]).to eql([I18n.t("validations.lettings.2025.bulk_upload.address.not_found")]) + %i[field_18 field_19 field_20 field_21 field_22 field_23 field_24].each do |field| + expect(parser.errors[field]).to be_empty end end + + it "sets manual address input" do + parser.valid? + expect(parser.log.manual_address_entry_selected).to be_truthy + expect(parser.log.address_line1).to eq("address line 1") + expect(parser.log.town_or_city).to eq("town or city") + expect(parser.log.postcode_full).to eq("AA1 1AA") + end end context "when a single address with not a high enough match rating is returned" do @@ -1565,13 +1577,20 @@ RSpec.describe BulkUpload::Lettings::Year2025::RowParser do .to_return(status: 200, body: { results: [{ DPA: { MATCH: 0.6, BUILDING_NAME: "", POST_TOWN: "", POSTCODE: "AA1 1AA", UPRN: "1" } }] }.to_json, headers: {}) end - it "adds address not found errors to address fields only" do + it "does not add errors" do parser.valid? - expect(parser.errors[:field_18]).to be_empty - %i[field_19 field_20 field_21 field_22 field_23 field_24].each do |field| - expect(parser.errors[field]).to eql([I18n.t("validations.lettings.2025.bulk_upload.address.not_determined.one")]) + %i[field_18 field_19 field_20 field_21 field_22 field_23 field_24].each do |field| + expect(parser.errors[field]).to be_empty end end + + it "sets manual address input" do + parser.valid? + expect(parser.log.manual_address_entry_selected).to be_truthy + expect(parser.log.address_line1).to eq("address line 1") + expect(parser.log.town_or_city).to eq("town or city") + expect(parser.log.postcode_full).to eq("AA1 1AA") + end end context "when no addresses have a high enough match rating" do @@ -1580,13 +1599,21 @@ RSpec.describe BulkUpload::Lettings::Year2025::RowParser do .to_return(status: 200, body: { results: [{ DPA: { MATCH: 0.6, BUILDING_NAME: "", POST_TOWN: "", POSTCODE: "AA1 1AA", UPRN: "1" } }, { DPA: { MATCH: 0.8, BUILDING_NAME: "", POST_TOWN: "", POSTCODE: "BB2 2BB", UPRN: "2" } }] }.to_json, headers: {}) end - it "adds address not found errors to address fields only" do + it "does not add errors" do parser.valid? - expect(parser.errors[:field_18]).to be_empty - %i[field_19 field_20 field_21 field_22 field_23 field_24].each do |field| - expect(parser.errors[field]).to eql([I18n.t("validations.lettings.2025.bulk_upload.address.not_determined.multiple")]) + %i[field_18 field_19 field_20 field_21 field_22 field_23 field_24].each do |field| + expect(parser.errors[field]).to be_empty end end + + it "sets manual address input" do + parser.valid? + expect(parser.log.manual_address_entry_selected).to be_truthy + expect(parser.log.manual_address_entry_selected).to be_truthy + expect(parser.log.address_line1).to eq("address line 1") + expect(parser.log.town_or_city).to eq("town or city") + expect(parser.log.postcode_full).to eq("AA1 1AA") + end end end end diff --git a/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb b/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb index efdb53bb9..90bd87291 100644 --- a/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb +++ b/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb @@ -1077,6 +1077,11 @@ RSpec.describe BulkUpload::Sales::Year2024::RowParser do expect(parser.errors[field]).to be_empty end end + + it "does not set manual address input" do + parser.valid? + expect(parser.log.manual_address_entry_selected).to be_falsey + end end context "when no address can be found" do @@ -1085,13 +1090,20 @@ RSpec.describe BulkUpload::Sales::Year2024::RowParser do .to_return(status: 200, body: { results: [] }.to_json, headers: {}) end - it "adds address not found errors to address fields only" do + it "does not add errors" do parser.valid? - expect(parser.errors[:field_22]).to be_empty - %i[field_23 field_24 field_25 field_26 field_27 field_28].each do |field| - expect(parser.errors[field]).to eql([I18n.t("validations.sales.2024.bulk_upload.address.not_found")]) + %i[field_22 field_23 field_24 field_25 field_26 field_27 field_28].each do |field| + expect(parser.errors[field]).to be_empty end end + + it "sets manual address input" do + parser.valid? + expect(parser.log.manual_address_entry_selected).to be_truthy + expect(parser.log.address_line1).to eq("address line 1") + expect(parser.log.town_or_city).to eq("town or city") + expect(parser.log.postcode_full).to eq("AA1 1AA") + end end context "when a single address with not a high enough match rating is returned" do @@ -1100,13 +1112,20 @@ RSpec.describe BulkUpload::Sales::Year2024::RowParser do .to_return(status: 200, body: { results: [{ DPA: { MATCH: 0.6, BUILDING_NAME: "", POST_TOWN: "", POSTCODE: "AA1 1AA", UPRN: "1" } }] }.to_json, headers: {}) end - it "adds address not found errors to address fields only" do + it "does not add errors" do parser.valid? - expect(parser.errors[:field_22]).to be_empty - %i[field_23 field_24 field_25 field_26 field_27 field_28].each do |field| - expect(parser.errors[field]).to eql([I18n.t("validations.sales.2024.bulk_upload.address.not_determined.one")]) + %i[field_22 field_23 field_24 field_25 field_26 field_27 field_28].each do |field| + expect(parser.errors[field]).to be_empty end end + + it "sets manual address input" do + parser.valid? + expect(parser.log.manual_address_entry_selected).to be_truthy + expect(parser.log.address_line1).to eq("address line 1") + expect(parser.log.town_or_city).to eq("town or city") + expect(parser.log.postcode_full).to eq("AA1 1AA") + end end context "when no addresses have a high enough match rating" do @@ -1124,13 +1143,20 @@ RSpec.describe BulkUpload::Sales::Year2024::RowParser do ) end - it "adds address not found errors to address fields only" do + it "does not add errors" do parser.valid? - expect(parser.errors[:field_22]).to be_empty - %i[field_23 field_24 field_25 field_26 field_27 field_28].each do |field| - expect(parser.errors[field]).to eql([I18n.t("validations.sales.2024.bulk_upload.address.not_determined.multiple")]) + %i[field_22 field_23 field_24 field_25 field_26 field_27 field_28].each do |field| + expect(parser.errors[field]).to be_empty end end + + it "sets manual address input" do + parser.valid? + expect(parser.log.manual_address_entry_selected).to be_truthy + expect(parser.log.address_line1).to eq("address line 1") + expect(parser.log.town_or_city).to eq("town or city") + expect(parser.log.postcode_full).to eq("AA1 1AA") + end end end end diff --git a/spec/services/bulk_upload/sales/year2025/row_parser_spec.rb b/spec/services/bulk_upload/sales/year2025/row_parser_spec.rb index a0b87cdc1..86f264401 100644 --- a/spec/services/bulk_upload/sales/year2025/row_parser_spec.rb +++ b/spec/services/bulk_upload/sales/year2025/row_parser_spec.rb @@ -992,6 +992,11 @@ RSpec.describe BulkUpload::Sales::Year2025::RowParser do expect(parser.errors[field]).to be_empty end end + + it "does not set manual address input" do + parser.valid? + expect(parser.log.manual_address_entry_selected).to be_falsey + end end context "when no address can be found" do @@ -1000,13 +1005,20 @@ RSpec.describe BulkUpload::Sales::Year2025::RowParser do .to_return(status: 200, body: { results: [] }.to_json, headers: {}) end - it "adds address not found errors to address fields only" do + it "does not add errors" do parser.valid? - expect(parser.errors[:field_16]).to be_empty - %i[field_17 field_18 field_19 field_20 field_21 field_22].each do |field| - expect(parser.errors[field]).to eql([I18n.t("validations.sales.2025.bulk_upload.address.not_found")]) + %i[field_16 field_17 field_18 field_19 field_20 field_21 field_22].each do |field| + expect(parser.errors[field]).to be_empty end end + + it "sets manual address input" do + parser.valid? + expect(parser.log.manual_address_entry_selected).to be_truthy + expect(parser.log.address_line1).to eq("address line 1") + expect(parser.log.town_or_city).to eq("town or city") + expect(parser.log.postcode_full).to eq("AA1 1AA") + end end context "when no address has a high enough match rating" do @@ -1015,13 +1027,20 @@ RSpec.describe BulkUpload::Sales::Year2025::RowParser do .to_return(status: 200, body: { results: [{ DPA: { MATCH: 0.6, BUILDING_NAME: "", POST_TOWN: "", POSTCODE: "AA1 1AA", UPRN: "1" } }] }.to_json, headers: {}) end - it "adds address not found errors to address fields only" do + it "does not add errors" do parser.valid? - expect(parser.errors[:field_16]).to be_empty - %i[field_17 field_18 field_19 field_20 field_21 field_22].each do |field| - expect(parser.errors[field]).to eql([I18n.t("validations.sales.2025.bulk_upload.address.not_determined")]) + %i[field_16 field_17 field_18 field_19 field_20 field_21 field_22].each do |field| + expect(parser.errors[field]).to be_empty end end + + it "sets manual address input" do + parser.valid? + expect(parser.log.manual_address_entry_selected).to be_truthy + expect(parser.log.address_line1).to eq("address line 1") + expect(parser.log.town_or_city).to eq("town or city") + expect(parser.log.postcode_full).to eq("AA1 1AA") + end end end end