From 374c3a903a3f0f5233d28545ac9c199da6ca3fe1 Mon Sep 17 00:00:00 2001 From: Samuel Young Date: Tue, 3 Feb 2026 14:35:33 +0000 Subject: [PATCH 1/4] CLDC-1402: Add hint text for start date --- config/locales/forms/2026/lettings/setup.en.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/forms/2026/lettings/setup.en.yml b/config/locales/forms/2026/lettings/setup.en.yml index 40e101dc0..2dee4aed2 100644 --- a/config/locales/forms/2026/lettings/setup.en.yml +++ b/config/locales/forms/2026/lettings/setup.en.yml @@ -63,7 +63,7 @@ en: page_header: "" check_answer_label: "Tenancy start date" check_answer_prompt: "" - hint_text: "" + hint_text: "The tenancy start date can be up to 14 days from today. If your tenancy starts more than 14 days into the future, please wait until you are within 14 days of the start date before submitting your log.

If you’re answering this question on 1 April, you can enter a tenancy start date up to and including 15 April." question_text: "What is the tenancy start date?" rent_type: From 000fe4b3695518ed65fa0302f2da4ef2d6d60875 Mon Sep 17 00:00:00 2001 From: Samuel Young Date: Tue, 3 Feb 2026 14:36:04 +0000 Subject: [PATCH 2/4] CLDC-1402: Ensure that start date is valid --- app/helpers/collection_time_helper.rb | 9 ++++++--- app/models/form/lettings/questions/tenancy_start_date.rb | 7 +++++++ app/models/form/question.rb | 7 +++++++ app/views/form/_date_question.html.erb | 2 +- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/app/helpers/collection_time_helper.rb b/app/helpers/collection_time_helper.rb index 03fe556a2..d082852f8 100644 --- a/app/helpers/collection_time_helper.rb +++ b/app/helpers/collection_time_helper.rb @@ -16,10 +16,13 @@ module CollectionTimeHelper Time.zone.local(collection_start_year_for_date(date), 4, 1) end - def date_mid_collection_year_formatted(date) + def date_mid_collection_year(date) relevant_year = date.nil? ? current_collection_start_year : collection_start_year_for_date(date) - example_date = Date.new(relevant_year, 9, 13) - example_date.to_formatted_s(:govuk_date_number_month) + Date.new(relevant_year, 9, 13) + end + + def date_mid_collection_year_formatted(date) + date_mid_collection_year(date).to_formatted_s(:govuk_date_number_month) end def current_collection_start_date diff --git a/app/models/form/lettings/questions/tenancy_start_date.rb b/app/models/form/lettings/questions/tenancy_start_date.rb index cf1b556e7..dbc2d5a87 100644 --- a/app/models/form/lettings/questions/tenancy_start_date.rb +++ b/app/models/form/lettings/questions/tenancy_start_date.rb @@ -1,4 +1,6 @@ class Form::Lettings::Questions::TenancyStartDate < ::Form::Question + include CollectionTimeHelper + def initialize(id, hsh, page) super @id = "startdate" @@ -7,5 +9,10 @@ class Form::Lettings::Questions::TenancyStartDate < ::Form::Question @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] if form.start_date.present? end + def example_date_formatted(log) + example_date = [date_mid_collection_year(log.startdate), Time.zone.today + 7].min + example_date.to_formatted_s(:govuk_date_number_month) + end + QUESTION_NUMBER_FROM_YEAR = { 2023 => 5, 2024 => 7 }.freeze end diff --git a/app/models/form/question.rb b/app/models/form/question.rb index c826493a0..45f1b1a78 100644 --- a/app/models/form/question.rb +++ b/app/models/form/question.rb @@ -1,5 +1,6 @@ class Form::Question include FormattingHelper + include CollectionTimeHelper attr_accessor :id, :description, :questions, :disable_clearing_if_not_routed_or_dynamic_answer_options, :type, :min, :max, :step, :width, :fields_to_add, :result_field, @@ -299,6 +300,12 @@ class Form::Question answer_options.keys.reject { |x| x.match(/divider/) } end + def example_date_formatted(log) + if type == "date" + date_mid_collection_year_formatted(log.startdate) + end + end + private def selected_answer_option_is_derived?(log) diff --git a/app/views/form/_date_question.html.erb b/app/views/form/_date_question.html.erb index a1df5f4d5..39286a554 100644 --- a/app/views/form/_date_question.html.erb +++ b/app/views/form/_date_question.html.erb @@ -6,7 +6,7 @@ question_id: question.id, legend: { text: legend[:text], size: legend[:size], caption: caption(caption_text, page_header, conditional) }, resource_type: @log.log_type, - hint: (question.hint_text.blank? ? "" : (question.hint_text.html_safe + "

".html_safe)) + "For example, #{date_mid_collection_year_formatted(@log.startdate).tr(' ', '/')}", + hint: (question.hint_text.blank? ? "" : (question.hint_text.html_safe + "

".html_safe)) + "For example, #{question.example_date_formatted(@log).tr(' ', '/')}", f:, } %> From 506794ea7fe51669a8b786a505a9a845ae0d24e7 Mon Sep 17 00:00:00 2001 From: Samuel Young Date: Thu, 12 Feb 2026 12:21:18 +0000 Subject: [PATCH 3/4] Revert "CLDC-1402: Ensure that start date is valid" This reverts commit 000fe4b3695518ed65fa0302f2da4ef2d6d60875. --- app/helpers/collection_time_helper.rb | 9 +++------ app/models/form/lettings/questions/tenancy_start_date.rb | 7 ------- app/models/form/question.rb | 7 ------- app/views/form/_date_question.html.erb | 2 +- 4 files changed, 4 insertions(+), 21 deletions(-) diff --git a/app/helpers/collection_time_helper.rb b/app/helpers/collection_time_helper.rb index d082852f8..03fe556a2 100644 --- a/app/helpers/collection_time_helper.rb +++ b/app/helpers/collection_time_helper.rb @@ -16,13 +16,10 @@ module CollectionTimeHelper Time.zone.local(collection_start_year_for_date(date), 4, 1) end - def date_mid_collection_year(date) - relevant_year = date.nil? ? current_collection_start_year : collection_start_year_for_date(date) - Date.new(relevant_year, 9, 13) - end - def date_mid_collection_year_formatted(date) - date_mid_collection_year(date).to_formatted_s(:govuk_date_number_month) + relevant_year = date.nil? ? current_collection_start_year : collection_start_year_for_date(date) + example_date = Date.new(relevant_year, 9, 13) + example_date.to_formatted_s(:govuk_date_number_month) end def current_collection_start_date diff --git a/app/models/form/lettings/questions/tenancy_start_date.rb b/app/models/form/lettings/questions/tenancy_start_date.rb index dbc2d5a87..cf1b556e7 100644 --- a/app/models/form/lettings/questions/tenancy_start_date.rb +++ b/app/models/form/lettings/questions/tenancy_start_date.rb @@ -1,6 +1,4 @@ class Form::Lettings::Questions::TenancyStartDate < ::Form::Question - include CollectionTimeHelper - def initialize(id, hsh, page) super @id = "startdate" @@ -9,10 +7,5 @@ class Form::Lettings::Questions::TenancyStartDate < ::Form::Question @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] if form.start_date.present? end - def example_date_formatted(log) - example_date = [date_mid_collection_year(log.startdate), Time.zone.today + 7].min - example_date.to_formatted_s(:govuk_date_number_month) - end - QUESTION_NUMBER_FROM_YEAR = { 2023 => 5, 2024 => 7 }.freeze end diff --git a/app/models/form/question.rb b/app/models/form/question.rb index 45f1b1a78..c826493a0 100644 --- a/app/models/form/question.rb +++ b/app/models/form/question.rb @@ -1,6 +1,5 @@ class Form::Question include FormattingHelper - include CollectionTimeHelper attr_accessor :id, :description, :questions, :disable_clearing_if_not_routed_or_dynamic_answer_options, :type, :min, :max, :step, :width, :fields_to_add, :result_field, @@ -300,12 +299,6 @@ class Form::Question answer_options.keys.reject { |x| x.match(/divider/) } end - def example_date_formatted(log) - if type == "date" - date_mid_collection_year_formatted(log.startdate) - end - end - private def selected_answer_option_is_derived?(log) diff --git a/app/views/form/_date_question.html.erb b/app/views/form/_date_question.html.erb index 39286a554..a1df5f4d5 100644 --- a/app/views/form/_date_question.html.erb +++ b/app/views/form/_date_question.html.erb @@ -6,7 +6,7 @@ question_id: question.id, legend: { text: legend[:text], size: legend[:size], caption: caption(caption_text, page_header, conditional) }, resource_type: @log.log_type, - hint: (question.hint_text.blank? ? "" : (question.hint_text.html_safe + "

".html_safe)) + "For example, #{question.example_date_formatted(@log).tr(' ', '/')}", + hint: (question.hint_text.blank? ? "" : (question.hint_text.html_safe + "

".html_safe)) + "For example, #{date_mid_collection_year_formatted(@log.startdate).tr(' ', '/')}", f:, } %> From 011ef056df92e3bd5cae3a240ad0b44ea5f7fb81 Mon Sep 17 00:00:00 2001 From: Samuel Young Date: Thu, 12 Feb 2026 14:01:57 +0000 Subject: [PATCH 4/4] CLDC-1402: Implement desired copy for start date q adds an override method for the date example --- app/helpers/collection_time_helper.rb | 9 ++++++--- app/helpers/form_page_helper.rb | 9 +++++++++ .../form/lettings/questions/tenancy_start_date.rb | 13 +++++++++++++ app/models/form/question.rb | 5 +++++ app/views/form/_date_question.html.erb | 2 +- config/locales/forms/2026/lettings/setup.en.yml | 1 + 6 files changed, 35 insertions(+), 4 deletions(-) diff --git a/app/helpers/collection_time_helper.rb b/app/helpers/collection_time_helper.rb index 03fe556a2..d082852f8 100644 --- a/app/helpers/collection_time_helper.rb +++ b/app/helpers/collection_time_helper.rb @@ -16,10 +16,13 @@ module CollectionTimeHelper Time.zone.local(collection_start_year_for_date(date), 4, 1) end - def date_mid_collection_year_formatted(date) + def date_mid_collection_year(date) relevant_year = date.nil? ? current_collection_start_year : collection_start_year_for_date(date) - example_date = Date.new(relevant_year, 9, 13) - example_date.to_formatted_s(:govuk_date_number_month) + Date.new(relevant_year, 9, 13) + end + + def date_mid_collection_year_formatted(date) + date_mid_collection_year(date).to_formatted_s(:govuk_date_number_month) end def current_collection_start_date diff --git a/app/helpers/form_page_helper.rb b/app/helpers/form_page_helper.rb index 74e75e572..98b9bb8d5 100644 --- a/app/helpers/form_page_helper.rb +++ b/app/helpers/form_page_helper.rb @@ -1,4 +1,6 @@ module FormPageHelper + include CollectionTimeHelper + def action_href(log, page_id, referrer = "check_answers") send("#{log.log_type}_#{page_id}_path", log, referrer:) end @@ -46,4 +48,11 @@ module FormPageHelper page.skip_href(log) || send(log.form.next_page_redirect_path(page, log, current_user, ignore_answered: true), log) end end + + def date_hint(question, log) + [ + question.hint_text.presence, + question.date_example_override(log) || "For example, #{date_mid_collection_year_formatted(log.startdate).tr(' ', '/')}", + ].compact.join("

").html_safe + end end diff --git a/app/models/form/lettings/questions/tenancy_start_date.rb b/app/models/form/lettings/questions/tenancy_start_date.rb index cf1b556e7..b7d82b399 100644 --- a/app/models/form/lettings/questions/tenancy_start_date.rb +++ b/app/models/form/lettings/questions/tenancy_start_date.rb @@ -1,4 +1,6 @@ class Form::Lettings::Questions::TenancyStartDate < ::Form::Question + include CollectionTimeHelper + def initialize(id, hsh, page) super @id = "startdate" @@ -7,5 +9,16 @@ class Form::Lettings::Questions::TenancyStartDate < ::Form::Question @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] if form.start_date.present? end + def date_example_override(log) + return unless form.start_year_2026_or_later? + + example_date = + [date_mid_collection_year(log.startdate), Time.zone.today + 7] + .min + .to_formatted_s(:govuk_date_number_month) + .tr(" ", "/") + I18n.t("forms.#{form.start_date.year}.#{copy_key}.example", default: "", example_date:) + end + QUESTION_NUMBER_FROM_YEAR = { 2023 => 5, 2024 => 7 }.freeze end diff --git a/app/models/form/question.rb b/app/models/form/question.rb index c826493a0..28c25f19f 100644 --- a/app/models/form/question.rb +++ b/app/models/form/question.rb @@ -299,6 +299,11 @@ class Form::Question answer_options.keys.reject { |x| x.match(/divider/) } end + # used by date questions that need bespoke formatting for the example date + def date_example_override(_log) + nil + end + private def selected_answer_option_is_derived?(log) diff --git a/app/views/form/_date_question.html.erb b/app/views/form/_date_question.html.erb index a1df5f4d5..28437f3b9 100644 --- a/app/views/form/_date_question.html.erb +++ b/app/views/form/_date_question.html.erb @@ -6,7 +6,7 @@ question_id: question.id, legend: { text: legend[:text], size: legend[:size], caption: caption(caption_text, page_header, conditional) }, resource_type: @log.log_type, - hint: (question.hint_text.blank? ? "" : (question.hint_text.html_safe + "

".html_safe)) + "For example, #{date_mid_collection_year_formatted(@log.startdate).tr(' ', '/')}", + hint: date_hint(question, @log), f:, } %> diff --git a/config/locales/forms/2026/lettings/setup.en.yml b/config/locales/forms/2026/lettings/setup.en.yml index 2dee4aed2..c6d6a08e7 100644 --- a/config/locales/forms/2026/lettings/setup.en.yml +++ b/config/locales/forms/2026/lettings/setup.en.yml @@ -64,6 +64,7 @@ en: check_answer_label: "Tenancy start date" check_answer_prompt: "" hint_text: "The tenancy start date can be up to 14 days from today. If your tenancy starts more than 14 days into the future, please wait until you are within 14 days of the start date before submitting your log.

If you’re answering this question on 1 April, you can enter a tenancy start date up to and including 15 April." + example: "Enter the date in the format DD/MM/YYYY, for example %{example_date}." question_text: "What is the tenancy start date?" rent_type: