From 43f7dc6adf2de4254118548afa59a4cf5e46dd1e Mon Sep 17 00:00:00 2001 From: oscar-richardson-softwire Date: Tue, 24 Feb 2026 11:36:18 +0000 Subject: [PATCH] Match updated requirements --- .../lettings_log_variables.rb | 21 ++++--------------- app/models/form.rb | 3 ++- .../lettings/pages/person_lead_partner.rb | 10 ++++++--- .../form/lettings/questions/person_partner.rb | 10 +-------- app/models/form/page.rb | 4 ++++ app/models/lettings_log.rb | 8 ++----- 6 files changed, 20 insertions(+), 36 deletions(-) diff --git a/app/models/derived_variables/lettings_log_variables.rb b/app/models/derived_variables/lettings_log_variables.rb index a7f99b67a..11a827f4f 100644 --- a/app/models/derived_variables/lettings_log_variables.rb +++ b/app/models/derived_variables/lettings_log_variables.rb @@ -277,9 +277,6 @@ private if form.start_year_2024_or_later? && unittype_gn_changed? && unittype_gn_was == 2 self.beds = nil end - if form.start_year_2026_or_later? - reset_partner_fields! - end end def get_totelder @@ -333,7 +330,10 @@ private end def infer_at_most_one_relationship! - if partner_numbers.any? + new_partner_numbers = partner_numbers.select { |i| public_send("relat#{i}_changed?") } + if new_partner_numbers.any? + infer_only_partner!(new_partner_numbers.first) + elsif partner_numbers.any? infer_only_partner!(partner_numbers.first) end end @@ -350,19 +350,6 @@ private end end - def reset_partner_fields! - person_count = hhmemb || 8 - (2..person_count).each do |i| - next unless send("relat#{i}_changed?") && send("relat#{i}_was") == "P" - - ((i + 1)..person_count).each do |j| - if self["relat#{j}"] == "X" - self["relat#{j}"] = nil - end - end - end - end - def household_type return unless totelder && totadult && totchild diff --git a/app/models/form.rb b/app/models/form.rb index cc18b2585..d0f98e3d7 100644 --- a/app/models/form.rb +++ b/app/models/form.rb @@ -108,7 +108,8 @@ class Form return :check_answers if next_page.nil? return next_page.id if next_page.routed_to?(log, current_user) && - (!ignore_answered || next_page.has_unanswered_questions?(log)) + (!ignore_answered || next_page.has_unanswered_questions?(log)) && + !next_page.skip_page_in_form_flow?(log) next_page_id(next_page, log, current_user, ignore_answered:) end diff --git a/app/models/form/lettings/pages/person_lead_partner.rb b/app/models/form/lettings/pages/person_lead_partner.rb index 17d63149c..7fa019a22 100644 --- a/app/models/form/lettings/pages/person_lead_partner.rb +++ b/app/models/form/lettings/pages/person_lead_partner.rb @@ -18,14 +18,18 @@ class Form::Lettings::Pages::PersonLeadPartner < ::Form::Page "operator" => ">=", "operand" => 16, }, - **(2...@person_index).map { |i| ["relat#{i}", { "operator" => "!=", "operand" => "P" }] }.to_h, }, - { "details_known_#{@person_index}" => 0, + { + "details_known_#{@person_index}" => 0, "age#{@person_index}" => nil, - **(2...@person_index).map { |i| ["relat#{i}", { "operator" => "!=", "operand" => "P" }] }.to_h }, + }, ] else [{ "details_known_#{@person_index}" => 0 }] end end + + def skip_page_in_form_flow?(log) + log.is_another_person_partner?(@person_index) + end end diff --git a/app/models/form/lettings/questions/person_partner.rb b/app/models/form/lettings/questions/person_partner.rb index 401f65bd4..b0598bb2f 100644 --- a/app/models/form/lettings/questions/person_partner.rb +++ b/app/models/form/lettings/questions/person_partner.rb @@ -36,14 +36,6 @@ class Form::Lettings::Questions::PersonPartner < ::Form::Question end def derived?(log) - form.start_year_2026_or_later? && log.is_partner_inferred?(@person_index) - end - - def hidden_in_check_answers?(log, _current_user = nil) - if form.start_year_2026_or_later? - log.is_an_earlier_person_partner(@person_index) - else - false - end + form.start_year_2026_or_later? && log.is_person_under_16(@person_index) end end diff --git a/app/models/form/page.rb b/app/models/form/page.rb index 6aa93d766..fda1d886b 100644 --- a/app/models/form/page.rb +++ b/app/models/form/page.rb @@ -55,6 +55,10 @@ class Form::Page def skip_href(log = nil); end + def skip_page_in_form_flow?(_log) + false + end + private def conditional_question_ids diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index 0f859c80d..661299f49 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -445,16 +445,12 @@ class LettingsLog < Log unittype_gn_changed? && unittype_gn_was == 2 end - def is_partner_inferred?(person_index) - is_person_under_16(person_index) || is_an_earlier_person_partner(person_index) - end - def is_person_under_16(person_index) public_send("age#{person_index}") && public_send("age#{person_index}") < 16 end - def is_an_earlier_person_partner(person_index) - (2...person_index).any? do |i| + def is_another_person_partner?(person_index) + (2..8).reject { |i| i == person_index }.any? do |i| public_send("relat#{i}") == "P" end end