diff --git a/app/models/form/lettings/pages/address_fallback.rb b/app/models/form/lettings/pages/address_fallback.rb new file mode 100644 index 000000000..5e932d913 --- /dev/null +++ b/app/models/form/lettings/pages/address_fallback.rb @@ -0,0 +1,22 @@ +class Form::Lettings::Pages::AddressFallback < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "address" + @header = "Q12 - What is the property's address?" + @depends_on = [ + { "is_supported_housing?" => false, "uprn_known" => nil, "address_selection" => 10 }, + { "is_supported_housing?" => false, "uprn_known" => 0, "address_selection" => 10 }, + { "is_supported_housing?" => false, "uprn_confirmed" => 0, "address_selection" => 10 }, + ] + end + + def questions + @questions ||= [ + Form::Lettings::Questions::AddressLine1.new(nil, nil, self), + Form::Lettings::Questions::AddressLine2.new(nil, nil, self), + Form::Lettings::Questions::TownOrCity.new(nil, nil, self), + Form::Lettings::Questions::County.new(nil, nil, self), + Form::Lettings::Questions::PostcodeForFullAddress.new(nil, nil, self), + ] + end +end diff --git a/app/models/form/lettings/pages/address_matcher.rb b/app/models/form/lettings/pages/address_matcher.rb index cfd24a4d1..4bf7bad41 100644 --- a/app/models/form/lettings/pages/address_matcher.rb +++ b/app/models/form/lettings/pages/address_matcher.rb @@ -2,7 +2,7 @@ class Form::Lettings::Pages::AddressMatcher < ::Form::Page def initialize(id, hsh, subsection) super @id = "address_matcher" - @header = "Enter address details" + @header = "Find address" @depends_on = [ { "is_supported_housing?" => false, "uprn_known" => 0 }, { "is_supported_housing?" => false, "uprn_confirmed" => 0 }, diff --git a/app/models/form/lettings/pages/address_selection.rb b/app/models/form/lettings/pages/address_selection.rb index 72c93cd1d..4e7a8ec74 100644 --- a/app/models/form/lettings/pages/address_selection.rb +++ b/app/models/form/lettings/pages/address_selection.rb @@ -14,4 +14,13 @@ class Form::Lettings::Pages::AddressSelection < ::Form::Page def routed_to?(log, _current_user = nil) log.uprn_known == 0 && log.address_line1.present? && log.postcode_full.present? end + + def skip_text + "Search for address again" + end + + def skip_href(log = nil) + return unless log + "/#{log.model_name.param_key.dasherize}s/#{log.id}/address-matcher" + end end diff --git a/app/models/form/lettings/pages/uprn.rb b/app/models/form/lettings/pages/uprn.rb index eb59e4a24..83ea11507 100644 --- a/app/models/form/lettings/pages/uprn.rb +++ b/app/models/form/lettings/pages/uprn.rb @@ -13,12 +13,20 @@ class Form::Lettings::Pages::Uprn < ::Form::Page end def skip_text - "Enter address instead" + if form.start_year_after_2024? + "Search for address instead" + else + "Enter address instead" + end end def skip_href(log = nil) return unless log - "/#{log.model_name.param_key.dasherize}s/#{log.id}/address" + if form.start_year_after_2024? + "/#{log.model_name.param_key.dasherize}s/#{log.id}/address-matcher" + else + "/#{log.model_name.param_key.dasherize}s/#{log.id}/address" + end end end diff --git a/app/models/form/lettings/questions/address_line1_for_address_matcher.rb b/app/models/form/lettings/questions/address_line1_for_address_matcher.rb index 601b3f5eb..2c807f85b 100644 --- a/app/models/form/lettings/questions/address_line1_for_address_matcher.rb +++ b/app/models/form/lettings/questions/address_line1_for_address_matcher.rb @@ -6,9 +6,15 @@ class Form::Lettings::Questions::AddressLine1ForAddressMatcher < ::Form::Questio @error_label = "Address line 1" @type = "text" @plain_label = true - @check_answer_label = "Address line 1" + @check_answer_label = "Find address" @disable_clearing_if_not_routed_or_dynamic_answer_options = true - @question_number = 12 @hide_question_number_on_page = true end + + def answer_label(log, _current_user = nil) + [ + log.address_line1, + log.postcode_full, + ].select(&:present?).join("\n") + end end diff --git a/app/models/form/lettings/questions/address_selection.rb b/app/models/form/lettings/questions/address_selection.rb index 5c2a80ae1..3f0f5e1c7 100644 --- a/app/models/form/lettings/questions/address_selection.rb +++ b/app/models/form/lettings/questions/address_selection.rb @@ -5,22 +5,11 @@ class Form::Lettings::Questions::AddressSelection < ::Form::Question @header = "Select the correct address" @type = "radio" @check_answer_label = "Select the correct address" - @disable_clearing_if_not_routed_or_dynamic_answer_options = true # have just added this, check if it works! + @disable_clearing_if_not_routed_or_dynamic_answer_options = true end def answer_options(log = nil, user = nil) - answer_opts = { - # "0" => { "value" => "address 0" }, - # "1" => { "value" => "address 1" }, - # "2" => { "value" => "address 2" }, - # "3" => { "value" => "address 3" }, - # "4" => { "value" => "address 4" }, - # "5" => { "value" => "address 5" }, - # "6" => { "value" => "address 6" }, - # "7" => { "value" => "address 7" }, - # "8" => { "value" => "address 8" }, - # "9" => { "value" => "address 9" }, - } + answer_opts = { "10" => { "value" => "The address is not listed" } } return answer_opts unless ActiveRecord::Base.connected? return answer_opts unless log return answer_opts unless log.address_options @@ -41,6 +30,8 @@ class Form::Lettings::Questions::AddressSelection < ::Form::Question "7" => { "value" => values[7] }, "8" => { "value" => values[8] }, "9" => { "value" => values[9] }, + "divider" => { "value" => true }, + "10" => { "value" => "The address is not listed, I want to enter the address manually" }, }.freeze end @@ -49,12 +40,6 @@ class Form::Lettings::Questions::AddressSelection < ::Form::Question end def hidden_in_check_answers?(log, _current_user = nil) - log.uprn_known == 1 || log.uprn_confirmed == 1 - end - -private - - def selected_answer_option_is_derived?(_log) - true + (log.uprn_known == 1 || log.uprn_confirmed == 1) end end diff --git a/app/models/form/lettings/questions/postcode_for_address_matcher.rb b/app/models/form/lettings/questions/postcode_for_address_matcher.rb index 0d8c8ff7c..989b976c7 100644 --- a/app/models/form/lettings/questions/postcode_for_address_matcher.rb +++ b/app/models/form/lettings/questions/postcode_for_address_matcher.rb @@ -19,7 +19,7 @@ class Form::Lettings::Questions::PostcodeForAddressMatcher < ::Form::Question @plain_label = true @check_answer_label = "Postcode" @disable_clearing_if_not_routed_or_dynamic_answer_options = true - @question_number = 12 @hide_question_number_on_page = true + @hidden_in_check_answers = true end end diff --git a/app/models/form/lettings/subsections/property_information.rb b/app/models/form/lettings/subsections/property_information.rb index edf4f6a58..4fdb9c922 100644 --- a/app/models/form/lettings/subsections/property_information.rb +++ b/app/models/form/lettings/subsections/property_information.rb @@ -37,7 +37,7 @@ class Form::Lettings::Subsections::PropertyInformation < ::Form::Subsection Form::Lettings::Pages::UprnConfirmation.new(nil, nil, self), Form::Lettings::Pages::AddressMatcher.new(nil, nil, self), Form::Lettings::Pages::AddressSelection.new(nil, nil, self), - Form::Lettings::Pages::Address.new(nil, nil, self), + Form::Lettings::Pages::AddressFallback.new(nil, nil, self), ] elsif form.start_date.year == 2023 [ diff --git a/app/models/log.rb b/app/models/log.rb index 95a72a981..483ebfaed 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -84,18 +84,27 @@ class Log < ApplicationRecord return errors.add(:address_line1, :address_error, message: service.error) if service.error.present? - presenter = AddressDataPresenter.new(service.result[address_selection]) - - self.uprn_known = 1 - self.uprn_confirmed = 1 - self.address_selection = nil # unless skip_update_address_confirmed - self.uprn = presenter.uprn #skip process uprn change? - self.address_line1 = presenter.address_line1 - 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! + if address_selection.between?(0, 9) + presenter = AddressDataPresenter.new(service.result[address_selection]) + + self.uprn_known = 1 + self.uprn_confirmed = 1 + self.address_selection = nil # unless skip_update_address_confirmed + self.uprn = presenter.uprn # skip process uprn change? + self.address_line1 = presenter.address_line1 + 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! + elsif address_selection == 10 + self.uprn_known = 0 + self.uprn_confirmed = nil + self.uprn = nil + self.address_line2 = nil + self.town_or_city = nil + self.county = nil + end end end diff --git a/app/services/address_data_presenter.rb b/app/services/address_data_presenter.rb index 3dcced33e..1ce9064f5 100644 --- a/app/services/address_data_presenter.rb +++ b/app/services/address_data_presenter.rb @@ -12,7 +12,7 @@ class AddressDataPresenter end def address_line1 - [data["BUILDING_NUMBER"], data["BUILDING_NAME"], data["THOROUGHFARE_NAME"]].compact.join(", ") + [data["SUB_BUILDING_NAME"], data["BUILDING_NUMBER"], data["BUILDING_NAME"], data["THOROUGHFARE_NAME"]].compact.join(", ") end def address_line2