From f3229ca597e74e970f82620b328ab7f113d5144f Mon Sep 17 00:00:00 2001 From: Nat Dean-Lewis Date: Fri, 20 Feb 2026 15:08:12 +0000 Subject: [PATCH] CLDC-4178: add gender same as sex question for sales questions and pages --- .../sales/pages/person_gender_same_as_sex.rb | 16 +++++++++ .../questions/person_gender_description.rb | 16 +++++++++ .../questions/person_gender_same_as_sex.rb | 33 +++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 app/models/form/sales/pages/person_gender_same_as_sex.rb create mode 100644 app/models/form/sales/questions/person_gender_description.rb create mode 100644 app/models/form/sales/questions/person_gender_same_as_sex.rb diff --git a/app/models/form/sales/pages/person_gender_same_as_sex.rb b/app/models/form/sales/pages/person_gender_same_as_sex.rb new file mode 100644 index 000000000..e81ede18b --- /dev/null +++ b/app/models/form/sales/pages/person_gender_same_as_sex.rb @@ -0,0 +1,16 @@ +class Form::Sales::Pages::PersonGenderSameAsSex < ::Form::Page + def initialize(id, hsh, subsection, person_index:) + super(id, hsh, subsection) + @person_index = person_index + @depends_on = [ + { "details_known_#{person_index}" => 1 }, + ] + end + + def questions + @questions ||= [ + Form::Sales::Questions::PersonGenderSameAsSex.new(nil, nil, self, person_index: @person_index), + Form::Sales::Questions::PersonGenderDescription.new(nil, nil, self, person_index: @person_index), + ] + end +end diff --git a/app/models/form/sales/questions/person_gender_description.rb b/app/models/form/sales/questions/person_gender_description.rb new file mode 100644 index 000000000..a73c6298f --- /dev/null +++ b/app/models/form/sales/questions/person_gender_description.rb @@ -0,0 +1,16 @@ +class Form::Sales::Questions::PersonGenderDescription < ::Form::Question + def initialize(id, hsh, page, person_index:) + super(id, hsh, page) + @id = "gender_description#{person_index}" + @type = "text" + @check_answers_card_number = person_index + @person_index = person_index + @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + end + + QUESTION_NUMBER_FROM_YEAR = { 2026 => 0 }.freeze + + def derived?(log) + log.public_send("gender_same_as_sex#{@person_index}") != 2 + end +end diff --git a/app/models/form/sales/questions/person_gender_same_as_sex.rb b/app/models/form/sales/questions/person_gender_same_as_sex.rb new file mode 100644 index 000000000..fff76c761 --- /dev/null +++ b/app/models/form/sales/questions/person_gender_same_as_sex.rb @@ -0,0 +1,33 @@ +class Form::Sales::Questions::PersonGenderSameAsSex < ::Form::Question + def initialize(id, hsh, page, person_index:) + super(id, hsh, page) + @id = "gender_same_as_sex#{person_index}" + @type = "radio" + @check_answers_card_number = person_index + @conditional_for = { "gender_description#{person_index}" => [2] } + @inferred_check_answers_value = [{ "condition" => { "gender_same_as_sex#{person_index}" => 2 }, "value" => "No" }] + @person_index = person_index + @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] + end + + ANSWER_OPTIONS = { + "1" => { "value" => "Yes" }, + "2" => { "value" => "No, enter gender identity" }, + "divider" => { "value" => true }, + "3" => { "value" => "Person prefers not to say" }, + }.freeze + + def answer_options + ANSWER_OPTIONS + end + + QUESTION_NUMBER_FROM_YEAR = { 2026 => 0 }.freeze + + def label_from_value(value, _log = nil, _user = nil) + return unless value + + return "Prefers not to say" if value == 3 + + super + end +end