diff --git a/app/models/derived_variables/lettings_log_variables.rb b/app/models/derived_variables/lettings_log_variables.rb index d42fb3903..aae49422d 100644 --- a/app/models/derived_variables/lettings_log_variables.rb +++ b/app/models/derived_variables/lettings_log_variables.rb @@ -94,6 +94,17 @@ module DerivedVariables::LettingsLogVariables self.vacdays = property_vacant_days set_housingneeds_fields if housingneeds? + + if uprn_known&.zero? + self.uprn = nil + end + + if uprn_confirmed&.zero? + self.uprn = nil + self.uprn_known = 0 + end + + reset_address_fields! if is_supported_housing? end private @@ -229,4 +240,14 @@ private self.housingneeds_g = 0 self.housingneeds_h = 0 end + + def reset_address_fields! + self.uprn = nil + self.uprn_known = nil + self.uprn_confirmed = nil + self.address_line1 = nil + self.address_line2 = nil + self.town_or_city = nil + self.county = nil + end end diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index 764b23f9a..57281d987 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -32,6 +32,7 @@ class LettingsLog < Log before_validation :reset_location_fields!, unless: :postcode_known? before_validation :reset_previous_location_fields!, unless: :previous_postcode_known? before_validation :set_derived_fields! + after_validation :process_uprn_change!, if: :should_process_uprn_change? belongs_to :scheme, optional: true belongs_to :location, optional: true @@ -671,4 +672,8 @@ private def unknown_housingneeds? housingneeds == 3 end + + def should_process_uprn_change? + uprn_changed? && startdate && startdate.year >= 2023 + end end diff --git a/app/models/log.rb b/app/models/log.rb index 34c920bd5..3ecc02754 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -45,6 +45,7 @@ class Log < ApplicationRecord self.address_line2 = presenter.address_line2 self.town_or_city = presenter.town_or_city self.postcode_full = presenter.postcode + self.county = nil process_postcode_changes! end end diff --git a/spec/models/lettings_log_spec.rb b/spec/models/lettings_log_spec.rb index e2431ff92..44f19c7b7 100644 --- a/spec/models/lettings_log_spec.rb +++ b/spec/models/lettings_log_spec.rb @@ -1,6 +1,7 @@ require "rails_helper" require "shared/shared_examples_for_derived_fields" +# rubocop:disable RSpec/AnyInstance RSpec.describe LettingsLog do let(:different_managing_organisation) { create(:organisation) } let(:created_by_user) { create(:user) } @@ -2995,4 +2996,60 @@ RSpec.describe LettingsLog do end end end + + describe "#process_uprn_change!" do + context "when UPRN set to a value" do + let(:lettings_log) do + create( + :lettings_log, + uprn: "123456789", + uprn_confirmed: 1, + county: "county", + ) + end + + it "updates sales log fields" do + lettings_log.uprn = "1111111" + + allow_any_instance_of(UprnClient).to receive(:call) + allow_any_instance_of(UprnClient).to receive(:result).and_return({ + "UPRN" => "UPRN", + "UDPRN" => "UDPRN", + "ADDRESS" => "full address", + "SUB_BUILDING_NAME" => "0", + "BUILDING_NAME" => "building name", + "THOROUGHFARE_NAME" => "thoroughfare", + "POST_TOWN" => "posttown", + "POSTCODE" => "postcode", + }) + + expect { lettings_log.process_uprn_change! }.to change(lettings_log, :address_line1).from(nil).to("0, Building Name, Thoroughfare") + .and change(lettings_log, :town_or_city).from(nil).to("Posttown") + .and change(lettings_log, :postcode_full).from(nil).to("POSTCODE") + .and change(lettings_log, :uprn_confirmed).from(1).to(nil) + .and change(lettings_log, :county).from("county").to(nil) + end + end + + context "when UPRN nil" do + let(:lettings_log) { create(:lettings_log, uprn: nil) } + + it "does not update sales log" do + expect { lettings_log.process_uprn_change! }.not_to change(lettings_log, :attributes) + end + end + + context "when service errors" do + let(:lettings_log) { create(:lettings_log, uprn: "123456789", uprn_confirmed: 1) } + let(:error_message) { "error" } + + it "adds error to sales log" do + allow_any_instance_of(UprnClient).to receive(:call) + allow_any_instance_of(UprnClient).to receive(:error).and_return(error_message) + + expect { lettings_log.process_uprn_change! }.to change { lettings_log.errors[:uprn] }.from([]).to([error_message]) + end + end + end end +# rubocop:enable RSpec/AnyInstance diff --git a/spec/models/sales_log_spec.rb b/spec/models/sales_log_spec.rb index 7f6c74fc4..9b3d82bf5 100644 --- a/spec/models/sales_log_spec.rb +++ b/spec/models/sales_log_spec.rb @@ -511,7 +511,14 @@ RSpec.describe SalesLog, type: :model do describe "#process_uprn_change!" do context "when UPRN set to a value" do - let(:sales_log) { create(:sales_log, uprn: "123456789", uprn_confirmed: 1) } + let(:sales_log) do + create( + :sales_log, + uprn: "123456789", + uprn_confirmed: 1, + county: "county", + ) + end it "updates sales log fields" do sales_log.uprn = "1111111" @@ -532,6 +539,7 @@ RSpec.describe SalesLog, type: :model do .and change(sales_log, :town_or_city).from(nil).to("Posttown") .and change(sales_log, :postcode_full).from(nil).to("POSTCODE") .and change(sales_log, :uprn_confirmed).from(1).to(nil) + .and change(sales_log, :county).from("county").to(nil) end end