Browse Source

feat: handle case when no addresses are found

pull/2278/head
natdeanlewissoftwire 2 years ago
parent
commit
80861fe2d8
  1. 9
      app/models/form/lettings/pages/address_fallback.rb
  2. 3
      app/models/form/lettings/pages/address_selection.rb
  3. 32
      app/models/form/lettings/questions/address_selection.rb
  4. 10
      app/models/log.rb

9
app/models/form/lettings/pages/address_fallback.rb

@ -4,9 +4,12 @@ class Form::Lettings::Pages::AddressFallback < ::Form::Page
@id = "address" @id = "address"
@header = "Q12 - What is the property's address?" @header = "Q12 - What is the property's address?"
@depends_on = [ @depends_on = [
{ "is_supported_housing?" => false, "uprn_known" => nil, "address_selection" => 10 }, { "is_supported_housing?" => false, "uprn_known" => nil, "address_selection" => -1 },
{ "is_supported_housing?" => false, "uprn_known" => 0, "address_selection" => 10 }, { "is_supported_housing?" => false, "uprn_known" => 0, "address_selection" => -1 },
{ "is_supported_housing?" => false, "uprn_confirmed" => 0, "address_selection" => 10 }, { "is_supported_housing?" => false, "uprn_confirmed" => 0, "address_selection" => -1 },
{ "is_supported_housing?" => false, "uprn_known" => nil, "address_options_present?" => false },
{ "is_supported_housing?" => false, "uprn_known" => 0, "address_options_present?" => false },
{ "is_supported_housing?" => false, "uprn_confirmed" => 0, "address_options_present?" => false },
] ]
end end

3
app/models/form/lettings/pages/address_selection.rb

@ -3,6 +3,7 @@ class Form::Lettings::Pages::AddressSelection < ::Form::Page
super super
@id = "address_selection" @id = "address_selection"
@header = "We found some addresses that might be this property" @header = "We found some addresses that might be this property"
@depends_on = [{ "address_options_present?" => true }]
end end
def questions def questions
@ -12,7 +13,7 @@ class Form::Lettings::Pages::AddressSelection < ::Form::Page
end end
def routed_to?(log, _current_user = nil) def routed_to?(log, _current_user = nil)
log.uprn_known.present? && log.uprn_known.zero? && log.address_line1_input.present? && log.postcode_full_input.present? log.uprn_known.present? && log.uprn_known.zero? && log.address_line1_input.present? && log.postcode_full_input.present? && (1..10).cover?(log.address_options.count)
end end
def skip_text def skip_text

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

@ -9,30 +9,20 @@ class Form::Lettings::Questions::AddressSelection < ::Form::Question
end end
def answer_options(log = nil, _user = nil) def answer_options(log = nil, _user = nil)
answer_opts = { "10" => { "value" => "The address is not listed" } } answer_opts = { "-1" => { "value" => "The address is not listed, I want to enter the address manually" } }
return answer_opts unless ActiveRecord::Base.connected? return answer_opts unless ActiveRecord::Base.connected?
return answer_opts unless log return answer_opts unless log&.address_options
return answer_opts unless log.address_options return answer_opts if log.errors.of_kind?(:address_selection, :address_error)
values = [] answer_opts = {}
log.address_options.each do |option|
values.append(option) (0...[log.address_options.count, 10].min).each do |i|
answer_opts[i.to_s] = { "value" => log.address_options[i] }
end end
{ answer_opts["divider"] = { "value" => true }
"0" => { "value" => values[0] }, answer_opts["-1"] = { "value" => "The address is not listed, I want to enter the address manually" }
"1" => { "value" => values[1] }, answer_opts
"2" => { "value" => values[2] },
"3" => { "value" => values[3] },
"4" => { "value" => values[4] },
"5" => { "value" => values[5] },
"6" => { "value" => values[6] },
"7" => { "value" => values[7] },
"8" => { "value" => values[8] },
"9" => { "value" => values[9] },
"divider" => { "value" => true },
"-1" => { "value" => "The address is not listed, I want to enter the address manually" },
}.freeze
end end
def displayed_answer_options(log, user = nil) def displayed_answer_options(log, user = nil)
@ -40,6 +30,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) || !(1..10).cover?(log.address_options.count)
end end
end end

10
app/models/log.rb

@ -55,6 +55,8 @@ class Log < ApplicationRecord
attr_accessor :skip_update_status, :skip_update_uprn_confirmed, :skip_update_address_selection, :skip_dpo_validation attr_accessor :skip_update_status, :skip_update_uprn_confirmed, :skip_update_address_selection, :skip_dpo_validation
delegate :present?, to: :address_options, prefix: true
def process_uprn_change! def process_uprn_change!
if uprn.present? if uprn.present?
service = UprnClient.new(uprn) service = UprnClient.new(uprn)
@ -109,6 +111,8 @@ class Log < ApplicationRecord
end end
def address_options def address_options
return @address_options if @address_options
if [address_line1_input, postcode_full_input].all?(&:present?) if [address_line1_input, postcode_full_input].all?(&:present?)
address_string = "#{address_line1_input}, , , #{postcode_full_input}" address_string = "#{address_line1_input}, , , #{postcode_full_input}"
service = AddressClient.new(address_string) service = AddressClient.new(address_string)
@ -116,13 +120,13 @@ class Log < ApplicationRecord
return errors.add(:address_selection, :address_error, message: service.error) if service.error.present? return errors.add(:address_selection, :address_error, message: service.error) if service.error.present?
address_options = [] address_opts = []
service.result.first(10).each do |result| service.result.first(10).each do |result|
presenter = AddressDataPresenter.new(result) presenter = AddressDataPresenter.new(result)
address_options.append(presenter.address) address_opts.append(presenter.address)
end end
address_options @address_options = address_opts
end end
end end

Loading…
Cancel
Save