diff --git a/app/services/imports/sales_logs_import_service.rb b/app/services/imports/sales_logs_import_service.rb
index 2d6551189..aec3dd714 100644
--- a/app/services/imports/sales_logs_import_service.rb
+++ b/app/services/imports/sales_logs_import_service.rb
@@ -158,6 +158,16 @@ module Imports
attributes["buyer_livein_value_check"] = 0
attributes["percentage_discount_value_check"] = 0
+ if attributes["saledate"] >= Time.zone.local(2023, 4, 1)
+ attributes["uprn"] = string_or_nil(xml_doc, "UPRN")
+ attributes["uprn_known"] = attributes["uprn"].present? ? 1 : 0
+ attributes["uprn_confirmed"] = attributes["uprn"].present? ? 1 : 0
+ attributes["address_line1"] = string_or_nil(xml_doc, "AddressLine1")
+ attributes["address_line2"] = string_or_nil(xml_doc, "AddressLine2")
+ attributes["town_or_city"] = string_or_nil(xml_doc, "TownCity")
+ attributes["county"] = string_or_nil(xml_doc, "County")
+ end
+
# Sets the log creator
owner_id = meta_field_value(xml_doc, "owner-user-id").strip
if owner_id.present?
@@ -233,6 +243,11 @@ module Imports
@logs_overridden << sales_log.old_id
attributes.delete("mortgage")
save_sales_log(attributes, previous_status)
+ elsif sales_log.errors.of_kind?(:uprn, :uprn_error)
+ @logger.warn("Log #{sales_log.old_id}: Setting uprn_known to no with error: #{sales_log.errors[:uprn].join(', ')}")
+ @logs_overridden << sales_log.old_id
+ attributes["uprn_known"] = 0
+ save_sales_log(attributes, previous_status)
else
@logger.error("Log #{sales_log.old_id}: Failed to import")
sales_log.errors.each do |error|
diff --git a/spec/fixtures/imports/sales_logs/outright_sale_sales_log.xml b/spec/fixtures/imports/sales_logs/outright_sale_sales_log.xml
index 4bbdc9981..abca3fdde 100644
--- a/spec/fixtures/imports/sales_logs/outright_sale_sales_log.xml
+++ b/spec/fixtures/imports/sales_logs/outright_sale_sales_log.xml
@@ -32,6 +32,11 @@
1
1 Flat or maisonette
1 Purpose built
+
+
+
+
+
SW1A 1AA
Westminster
E09000033
diff --git a/spec/services/imports/sales_logs_import_service_spec.rb b/spec/services/imports/sales_logs_import_service_spec.rb
index 5862efa23..d5cf858ca 100644
--- a/spec/services/imports/sales_logs_import_service_spec.rb
+++ b/spec/services/imports/sales_logs_import_service_spec.rb
@@ -1336,6 +1336,97 @@ RSpec.describe Imports::SalesLogsImportService do
end
end
+ context "when setting location fields for 23/24 logs" do
+ let(:sales_log_id) { "outright_sale_sales_log" }
+
+ around do |example|
+ Timecop.freeze(Time.zone.local(2023, 4, 1)) do
+ Singleton.__init__(FormHandler)
+ example.run
+ end
+ Timecop.return
+ Singleton.__init__(FormHandler)
+ end
+
+ before do
+ sales_log_xml.at_xpath("//xmlns:DAY").content = "10"
+ sales_log_xml.at_xpath("//xmlns:MONTH").content = "4"
+ sales_log_xml.at_xpath("//xmlns:YEAR").content = "2023"
+ sales_log_xml.at_xpath("//xmlns:UPRN").content = "123456781234"
+ sales_log_xml.at_xpath("//xmlns:AddressLine1").content = "address 1"
+ sales_log_xml.at_xpath("//xmlns:AddressLine2").content = "address 2"
+ sales_log_xml.at_xpath("//xmlns:TownCity").content = "towncity"
+ sales_log_xml.at_xpath("//xmlns:County").content = "county"
+ sales_log_xml.at_xpath("//xmlns:Q14Postcode").content = "A1 1AA"
+
+ body = {
+ results: [
+ {
+ DPA: {
+ "POSTCODE": "LS16 6FT",
+ "POST_TOWN": "Westminster",
+ "PO_BOX_NUMBER": "321",
+ "DOUBLE_DEPENDENT_LOCALITY": "Double Dependent Locality",
+ },
+ },
+ ],
+ }.to_json
+
+ stub_request(:get, "https://api.os.uk/search/places/v1/uprn?key=OS_DATA_KEY&uprn=123456781234")
+ .to_return(status: 200, body:, headers: {})
+ stub_request(:get, "https://api.os.uk/search/places/v1/uprn?key=OS_DATA_KEY&uprn=123")
+ .to_return(status: 500, body: "{}", headers: {})
+
+ WebMock.stub_request(:get, /api.postcodes.io\/postcodes\/LS166FT/)
+ .to_return(status: 200, body: '{"status":200,"result":{"admin_district":"Westminster","codes":{"admin_district":"E08000035"}}}', headers: {})
+
+ allow(logger).to receive(:warn).and_return(nil)
+ end
+
+ it "correctly sets address if uprn is not given" do
+ sales_log_xml.at_xpath("//xmlns:UPRN").content = ""
+ sales_log_service.send(:create_log, sales_log_xml)
+
+ sales_log = SalesLog.find_by(old_id: sales_log_id)
+ expect(sales_log&.uprn_known).to eq(0) # no
+ expect(sales_log&.uprn).to be_nil
+ expect(sales_log&.address_line1).to eq("address 1")
+ expect(sales_log&.address_line2).to eq("address 2")
+ expect(sales_log&.town_or_city).to eq("towncity")
+ expect(sales_log&.county).to eq("county")
+ expect(sales_log&.postcode_full).to eq("A1 1AA")
+ end
+
+ it "correctly sets address and uprn if uprn is given" do
+ sales_log_service.send(:create_log, sales_log_xml)
+
+ sales_log = SalesLog.find_by(old_id: sales_log_id)
+ expect(sales_log&.uprn_known).to eq(1)
+ expect(sales_log&.uprn).to eq("123456781234")
+ expect(sales_log&.address_line1).to eq("321")
+ expect(sales_log&.address_line2).to eq("Double Dependent Locality")
+ expect(sales_log&.town_or_city).to eq("Westminster")
+ expect(sales_log&.postcode_full).to eq("LS16 6FT")
+ expect(sales_log&.la).to eq("E08000035")
+ end
+
+ it "correctly sets address and uprn if uprn is given but not recognised" do
+ sales_log_xml.at_xpath("//xmlns:UPRN").content = "123"
+
+ sales_log_service.send(:create_log, sales_log_xml)
+
+ sales_log = SalesLog.find_by(old_id: sales_log_id)
+ expect(sales_log&.uprn_known).to eq(0)
+ expect(sales_log&.uprn).to be_nil
+ expect(sales_log&.address_line1).to eq("address 1")
+ expect(sales_log&.address_line2).to eq("address 2")
+ expect(sales_log&.town_or_city).to eq("towncity")
+ expect(sales_log&.county).to eq("county")
+ expect(sales_log&.postcode_full).to eq("A1 1AA")
+ expect(sales_log&.la).to eq("E09000033")
+ end
+ end
+
context "when setting default buyer 1 previous tenancy" do
let(:sales_log_id) { "outright_sale_sales_log" }