Browse Source

feat: build out alternative routes through the address lookup flow

pull/2278/head
natdeanlewissoftwire 2 years ago
parent
commit
043e5ff4eb
  1. 22
      app/models/form/lettings/pages/address_fallback.rb
  2. 2
      app/models/form/lettings/pages/address_matcher.rb
  3. 9
      app/models/form/lettings/pages/address_selection.rb
  4. 12
      app/models/form/lettings/pages/uprn.rb
  5. 10
      app/models/form/lettings/questions/address_line1_for_address_matcher.rb
  6. 25
      app/models/form/lettings/questions/address_selection.rb
  7. 2
      app/models/form/lettings/questions/postcode_for_address_matcher.rb
  8. 2
      app/models/form/lettings/subsections/property_information.rb
  9. 33
      app/models/log.rb
  10. 2
      app/services/address_data_presenter.rb

22
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

2
app/models/form/lettings/pages/address_matcher.rb

@ -2,7 +2,7 @@ class Form::Lettings::Pages::AddressMatcher < ::Form::Page
def initialize(id, hsh, subsection) def initialize(id, hsh, subsection)
super super
@id = "address_matcher" @id = "address_matcher"
@header = "Enter address details" @header = "Find address"
@depends_on = [ @depends_on = [
{ "is_supported_housing?" => false, "uprn_known" => 0 }, { "is_supported_housing?" => false, "uprn_known" => 0 },
{ "is_supported_housing?" => false, "uprn_confirmed" => 0 }, { "is_supported_housing?" => false, "uprn_confirmed" => 0 },

9
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) def routed_to?(log, _current_user = nil)
log.uprn_known == 0 && log.address_line1.present? && log.postcode_full.present? log.uprn_known == 0 && log.address_line1.present? && log.postcode_full.present?
end 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 end

12
app/models/form/lettings/pages/uprn.rb

@ -13,12 +13,20 @@ class Form::Lettings::Pages::Uprn < ::Form::Page
end end
def skip_text def skip_text
"Enter address instead" if form.start_year_after_2024?
"Search for address instead"
else
"Enter address instead"
end
end end
def skip_href(log = nil) def skip_href(log = nil)
return unless log 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
end end

10
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" @error_label = "Address line 1"
@type = "text" @type = "text"
@plain_label = true @plain_label = true
@check_answer_label = "Address line 1" @check_answer_label = "Find address"
@disable_clearing_if_not_routed_or_dynamic_answer_options = true @disable_clearing_if_not_routed_or_dynamic_answer_options = true
@question_number = 12
@hide_question_number_on_page = true @hide_question_number_on_page = true
end end
def answer_label(log, _current_user = nil)
[
log.address_line1,
log.postcode_full,
].select(&:present?).join("\n")
end
end end

25
app/models/form/lettings/questions/address_selection.rb

@ -5,22 +5,11 @@ class Form::Lettings::Questions::AddressSelection < ::Form::Question
@header = "Select the correct address" @header = "Select the correct address"
@type = "radio" @type = "radio"
@check_answer_label = "Select the correct address" @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 end
def answer_options(log = nil, user = nil) def answer_options(log = nil, user = nil)
answer_opts = { answer_opts = { "10" => { "value" => "The address is not listed" } }
# "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" },
}
return answer_opts unless ActiveRecord::Base.connected? return answer_opts unless ActiveRecord::Base.connected?
return answer_opts unless log return answer_opts unless log
return answer_opts unless log.address_options return answer_opts unless log.address_options
@ -41,6 +30,8 @@ class Form::Lettings::Questions::AddressSelection < ::Form::Question
"7" => { "value" => values[7] }, "7" => { "value" => values[7] },
"8" => { "value" => values[8] }, "8" => { "value" => values[8] },
"9" => { "value" => values[9] }, "9" => { "value" => values[9] },
"divider" => { "value" => true },
"10" => { "value" => "The address is not listed, I want to enter the address manually" },
}.freeze }.freeze
end end
@ -49,12 +40,6 @@ class Form::Lettings::Questions::AddressSelection < ::Form::Question
end end
def hidden_in_check_answers?(log, _current_user = nil) def hidden_in_check_answers?(log, _current_user = nil)
log.uprn_known == 1 || log.uprn_confirmed == 1 (log.uprn_known == 1 || log.uprn_confirmed == 1)
end
private
def selected_answer_option_is_derived?(_log)
true
end end
end end

2
app/models/form/lettings/questions/postcode_for_address_matcher.rb

@ -19,7 +19,7 @@ class Form::Lettings::Questions::PostcodeForAddressMatcher < ::Form::Question
@plain_label = true @plain_label = true
@check_answer_label = "Postcode" @check_answer_label = "Postcode"
@disable_clearing_if_not_routed_or_dynamic_answer_options = true @disable_clearing_if_not_routed_or_dynamic_answer_options = true
@question_number = 12
@hide_question_number_on_page = true @hide_question_number_on_page = true
@hidden_in_check_answers = true
end end
end end

2
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::UprnConfirmation.new(nil, nil, self),
Form::Lettings::Pages::AddressMatcher.new(nil, nil, self), Form::Lettings::Pages::AddressMatcher.new(nil, nil, self),
Form::Lettings::Pages::AddressSelection.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 elsif form.start_date.year == 2023
[ [

33
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? return errors.add(:address_line1, :address_error, message: service.error) if service.error.present?
presenter = AddressDataPresenter.new(service.result[address_selection]) if address_selection.between?(0, 9)
presenter = AddressDataPresenter.new(service.result[address_selection])
self.uprn_known = 1
self.uprn_confirmed = 1 self.uprn_known = 1
self.address_selection = nil # unless skip_update_address_confirmed self.uprn_confirmed = 1
self.uprn = presenter.uprn #skip process uprn change? self.address_selection = nil # unless skip_update_address_confirmed
self.address_line1 = presenter.address_line1 self.uprn = presenter.uprn # skip process uprn change?
self.address_line2 = presenter.address_line2 self.address_line1 = presenter.address_line1
self.town_or_city = presenter.town_or_city self.address_line2 = presenter.address_line2
self.postcode_full = presenter.postcode self.town_or_city = presenter.town_or_city
self.county = nil self.postcode_full = presenter.postcode
process_postcode_changes! 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
end end

2
app/services/address_data_presenter.rb

@ -12,7 +12,7 @@ class AddressDataPresenter
end end
def address_line1 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 end
def address_line2 def address_line2

Loading…
Cancel
Save