From 963272abc438b4b3c0f557597aba767558ba178c Mon Sep 17 00:00:00 2001 From: samyou-softwire Date: Tue, 10 Mar 2026 18:03:52 +0000 Subject: [PATCH] CLDC-4184: Commonise person question logic in sales --- app/models/form/question.rb | 10 ++++++++++ app/models/form/sales/questions/gender_description.rb | 11 +---------- app/models/form/sales/questions/gender_same_as_sex.rb | 11 +---------- app/models/form/sales/questions/person_age.rb | 7 +------ .../form/sales/questions/person_gender_identity.rb | 7 +------ .../person_relationship_to_buyer_1_yes_no.rb | 8 +------- .../sales/questions/person_sex_registered_at_birth.rb | 7 +------ .../form/sales/questions/person_working_situation.rb | 7 +------ 8 files changed, 17 insertions(+), 51 deletions(-) diff --git a/app/models/form/question.rb b/app/models/form/question.rb index 1bd915149..93a750039 100644 --- a/app/models/form/question.rb +++ b/app/models/form/question.rb @@ -391,6 +391,16 @@ private hash_value[value_key] end + def get_person_question_number(base_hash, override_hash: nil) + buyer_override_question_number = override_hash&.dig(form.start_date.year, @person_index) + + return buyer_override_question_number if buyer_override_question_number.present? && @buyer + + base_question_number = base_hash[form.start_date.year] || base_hash[base_hash.keys.max] + + base_question_number + (form.person_question_count * @person_index) + end + RADIO_YES_VALUE = { renewal: [1], postcode_known: [1], diff --git a/app/models/form/sales/questions/gender_description.rb b/app/models/form/sales/questions/gender_description.rb index d7ecb0eca..210633e39 100644 --- a/app/models/form/sales/questions/gender_description.rb +++ b/app/models/form/sales/questions/gender_description.rb @@ -6,20 +6,11 @@ class Form::Sales::Questions::GenderDescription < ::Form::Question @check_answers_card_number = person_index @buyer = buyer @person_index = person_index - @question_number = question_number + @question_number = get_person_question_number(BASE_QUESTION_NUMBERS, override_hash: BUYER_OVERRIDE_QUESTION_NUMBERS) end BASE_QUESTION_NUMBERS = { 2026 => 32 }.freeze BUYER_OVERRIDE_QUESTION_NUMBERS = { 2026 => { 1 => 23, 2 => 32 } }.freeze - def question_number - buyer_override_question_number = BUYER_OVERRIDE_QUESTION_NUMBERS.dig(form.start_date.year, @person_index) - - return buyer_override_question_number if buyer_override_question_number.present? && @buyer - - base_question_number = BASE_QUESTION_NUMBERS[form.start_date.year] || BASE_QUESTION_NUMBERS[BASE_QUESTION_NUMBERS.keys.max] - - base_question_number + (form.person_question_count * @person_index) - end def derived?(log) log.public_send("gender_same_as_sex#{@person_index}") != 2 diff --git a/app/models/form/sales/questions/gender_same_as_sex.rb b/app/models/form/sales/questions/gender_same_as_sex.rb index 38671014e..27fd8034a 100644 --- a/app/models/form/sales/questions/gender_same_as_sex.rb +++ b/app/models/form/sales/questions/gender_same_as_sex.rb @@ -9,20 +9,11 @@ class Form::Sales::Questions::GenderSameAsSex < ::Form::Question @person_index = person_index @buyer = buyer @copy_key = "sales.household_characteristics.gender_same_as_sex#{person_index}.#{buyer ? 'buyer' : 'person'}" if person_index == 2 - @question_number = question_number + @question_number = get_person_question_number(BASE_QUESTION_NUMBERS, override_hash: BUYER_OVERRIDE_QUESTION_NUMBERS) end BASE_QUESTION_NUMBERS = { 2026 => 32 }.freeze BUYER_OVERRIDE_QUESTION_NUMBERS = { 2026 => { 1 => 23, 2 => 32 } }.freeze - def question_number - buyer_override_question_number = BUYER_OVERRIDE_QUESTION_NUMBERS.dig(form.start_date.year, @person_index) - - return buyer_override_question_number if buyer_override_question_number.present? && @buyer - - base_question_number = BASE_QUESTION_NUMBERS[form.start_date.year] || BASE_QUESTION_NUMBERS[BASE_QUESTION_NUMBERS.keys.max] - - base_question_number + (form.person_question_count * @person_index) - end def answer_options { diff --git a/app/models/form/sales/questions/person_age.rb b/app/models/form/sales/questions/person_age.rb index 466006718..fe38d38e3 100644 --- a/app/models/form/sales/questions/person_age.rb +++ b/app/models/form/sales/questions/person_age.rb @@ -13,13 +13,8 @@ class Form::Sales::Questions::PersonAge < ::Form::Question @max = 110 @step = 1 @person_index = person_index - @question_number = question_number + @question_number = get_person_question_number(BASE_QUESTION_NUMBERS) end BASE_QUESTION_NUMBERS = { 2023 => 29, 2024 => 31, 2025 => 29, 2026 => 30 }.freeze - def question_number - base_question_number = BASE_QUESTION_NUMBERS[form.start_date.year] || BASE_QUESTION_NUMBERS[BASE_QUESTION_NUMBERS.keys.max] - - base_question_number + (form.person_question_count * @person_index) - end end diff --git a/app/models/form/sales/questions/person_gender_identity.rb b/app/models/form/sales/questions/person_gender_identity.rb index ef19c60ed..ce4c4e0ef 100644 --- a/app/models/form/sales/questions/person_gender_identity.rb +++ b/app/models/form/sales/questions/person_gender_identity.rb @@ -12,7 +12,7 @@ class Form::Sales::Questions::PersonGenderIdentity < ::Form::Question "value" => "Prefers not to say", }] @person_index = person_index - @question_number = question_number + @question_number = get_person_question_number(BASE_QUESTION_NUMBERS) end ANSWER_OPTIONS = { @@ -23,9 +23,4 @@ class Form::Sales::Questions::PersonGenderIdentity < ::Form::Question }.freeze BASE_QUESTION_NUMBERS = { 2023 => 30, 2024 => 32, 2025 => 30 }.freeze - def question_number - base_question_number = BASE_QUESTION_NUMBERS[form.start_date.year] || BASE_QUESTION_NUMBERS[BASE_QUESTION_NUMBERS.keys.max] - - base_question_number + (form.person_question_count * @person_index) - end end diff --git a/app/models/form/sales/questions/person_relationship_to_buyer_1_yes_no.rb b/app/models/form/sales/questions/person_relationship_to_buyer_1_yes_no.rb index e93c52d83..480b4a31e 100644 --- a/app/models/form/sales/questions/person_relationship_to_buyer_1_yes_no.rb +++ b/app/models/form/sales/questions/person_relationship_to_buyer_1_yes_no.rb @@ -16,13 +16,7 @@ class Form::Sales::Questions::PersonRelationshipToBuyer1YesNo < ::Form::Question }] @check_answers_card_number = person_index @person_index = person_index - @question_number = question_number - end - - def question_number - base_question_number = BASE_QUESTION_NUMBERS[form.start_date.year] || BASE_QUESTION_NUMBERS[BASE_QUESTION_NUMBERS.keys.max] - - base_question_number + (form.person_question_count * @person_index) + @question_number = get_person_question_number(BASE_QUESTION_NUMBERS) end BASE_QUESTION_NUMBERS = { 2025 => 28, 2026 => 29 }.freeze diff --git a/app/models/form/sales/questions/person_sex_registered_at_birth.rb b/app/models/form/sales/questions/person_sex_registered_at_birth.rb index 4045f2165..f701975e8 100644 --- a/app/models/form/sales/questions/person_sex_registered_at_birth.rb +++ b/app/models/form/sales/questions/person_sex_registered_at_birth.rb @@ -6,7 +6,7 @@ class Form::Sales::Questions::PersonSexRegisteredAtBirth < ::Form::Question @check_answers_card_number = person_index @answer_options = ANSWER_OPTIONS @person_index = person_index - @question_number = question_number + @question_number = get_person_question_number(BASE_QUESTION_NUMBERS) end ANSWER_OPTIONS = { @@ -17,11 +17,6 @@ class Form::Sales::Questions::PersonSexRegisteredAtBirth < ::Form::Question }.freeze BASE_QUESTION_NUMBERS = { 2023 => 30, 2024 => 32, 2025 => 31 }.freeze - def question_number - base_question_number = BASE_QUESTION_NUMBERS[form.start_date.year] || BASE_QUESTION_NUMBERS[BASE_QUESTION_NUMBERS.keys.max] - - base_question_number + (form.person_question_count * @person_index) - end def label_from_value(value, _log = nil, _user = nil) return unless value diff --git a/app/models/form/sales/questions/person_working_situation.rb b/app/models/form/sales/questions/person_working_situation.rb index 25015dbd3..dd4743811 100644 --- a/app/models/form/sales/questions/person_working_situation.rb +++ b/app/models/form/sales/questions/person_working_situation.rb @@ -11,7 +11,7 @@ class Form::Sales::Questions::PersonWorkingSituation < ::Form::Question "value" => "Prefers not to say", }] @person_index = person_index - @question_number = question_number + @question_number = get_person_question_number(BASE_QUESTION_NUMBERS) @answer_options = answer_options end @@ -64,9 +64,4 @@ class Form::Sales::Questions::PersonWorkingSituation < ::Form::Question end BASE_QUESTION_NUMBERS = { 2023 => 31, 2024 => 33, 2025 => 31, 2026 => 33 }.freeze - def question_number - base_question_number = BASE_QUESTION_NUMBERS[form.start_date.year] || BASE_QUESTION_NUMBERS[BASE_QUESTION_NUMBERS.keys.max] - - base_question_number + (form.person_question_count * @person_index) - end end