From fd4e1510c5c5094d91fc1055747f611882cd2e68 Mon Sep 17 00:00:00 2001 From: Robert Sullivan Date: Fri, 5 Apr 2024 15:57:59 +0100 Subject: [PATCH] CLDC-2670: Do not show already-answered questions when answering new questions from CYA page --- .../check_answers_summary_list_card_component.rb | 2 +- app/controllers/form_controller.rb | 7 +++++-- app/models/form.rb | 12 +++++++----- app/models/form/page.rb | 2 +- app/views/form/_check_answers_summary_list.html.erb | 6 +++++- .../form/_interruption_screen_question.html.erb | 1 - app/views/form/check_answers.html.erb | 2 +- app/views/form/review.html.erb | 2 +- 8 files changed, 21 insertions(+), 13 deletions(-) diff --git a/app/components/check_answers_summary_list_card_component.rb b/app/components/check_answers_summary_list_card_component.rb index 19c2181d1..205a8516e 100644 --- a/app/components/check_answers_summary_list_card_component.rb +++ b/app/components/check_answers_summary_list_card_component.rb @@ -29,7 +29,7 @@ class CheckAnswersSummaryListCardComponent < ViewComponent::Base end def action_href(question, log) - referrer = question.displayed_as_answered?(log) ? "check_answers" : nil + referrer = question.displayed_as_answered?(log) ? "check_answers" : "check_answers_new_answer" send("#{log.model_name.param_key}_#{question.page.id}_path", log, referrer:) end diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb index b0be0880a..328a61c73 100644 --- a/app/controllers/form_controller.rb +++ b/app/controllers/form_controller.rb @@ -213,8 +213,11 @@ private return send("#{@log.class.name.underscore}_#{previous_interruption_screen_page_id}_path", @log, { referrer: previous_interruption_screen_referrer, original_log_id: original_duplicate_log_id_from_query }.compact) end - redirect_path = form.next_page_redirect_path(@page, @log, current_user) - send(redirect_path, @log) + is_new_answer_from_check_answers = is_referrer_type?("check_answers_new_answer") + redirect_path = form.next_page_redirect_path(@page, @log, current_user, is_new_answer_from_check_answers) + referrer = is_new_answer_from_check_answers ? "check_answers_new_answer" : nil + + send(redirect_path, @log, { referrer: referrer}) end def redirect_path_to_question(page_to_show, unanswered_pages) diff --git a/app/models/form.rb b/app/models/form.rb index 1d58e2f9f..bae96c7a3 100644 --- a/app/models/form.rb +++ b/app/models/form.rb @@ -80,7 +80,7 @@ class Form subsections.find { |s| s.pages.find { |p| p.id == page.id } } end - def next_page_id(page, log, current_user) + def next_page_id(page, log, current_user, ignore_answered = false) return page.next_unresolved_page_id || :check_answers if log.unresolved page_ids = subsection_for_page(page).pages.map(&:id) @@ -93,13 +93,15 @@ class Form next_page = get_page(page_id) return :check_answers if next_page.nil? - return next_page.id if next_page.routed_to?(log, current_user) + return next_page.id if next_page.routed_to?(log, current_user) && + (!ignore_answered || next_page.has_unanswered_questions?(log)) - next_page_id(next_page, log, current_user) + next_page_id(next_page, log, current_user, ignore_answered) end - def next_page_redirect_path(page, log, current_user) - next_page_id = next_page_id(page, log, current_user) + def next_page_redirect_path(page, log, current_user, ignore_answered = false) + puts ignore_answered + next_page_id = next_page_id(page, log, current_user, ignore_answered) if next_page_id == :check_answers "#{type}_log_#{subsection_for_page(page).id}_check_answers_path" else diff --git a/app/models/form/page.rb b/app/models/form/page.rb index c1b03fd56..982b5270f 100644 --- a/app/models/form/page.rb +++ b/app/models/form/page.rb @@ -37,7 +37,7 @@ class Form::Page end def has_unanswered_questions?(log) - questions.any? { |question| log[question.id].nil? } + questions.any? { |question| question.unanswered?(log) } end def interruption_screen? diff --git a/app/views/form/_check_answers_summary_list.html.erb b/app/views/form/_check_answers_summary_list.html.erb index 271bc925f..ae278ff19 100644 --- a/app/views/form/_check_answers_summary_list.html.erb +++ b/app/views/form/_check_answers_summary_list.html.erb @@ -28,7 +28,11 @@ <% if @log.collection_period_open_for_editing? %> <% row.with_action( text: question.action_text(@log), - href: action_href(@log, question.page.id, question.displayed_as_answered?(@log) || refer_unanswered ? referrer : nil), + href: action_href( + @log, + question.page.id, + question.displayed_as_answered?(@log) || referrer_unanswered.nil? ? referrer : referrer_unanswered + ), visually_hidden_text: question.check_answer_label.to_s.downcase, ) %> <% end %> diff --git a/app/views/form/_interruption_screen_question.html.erb b/app/views/form/_interruption_screen_question.html.erb index e383539e4..73c355588 100644 --- a/app/views/form/_interruption_screen_question.html.erb +++ b/app/views/form/_interruption_screen_question.html.erb @@ -10,7 +10,6 @@ lettings_log:, questions: soft_validation_affected_questions(question, @log).filter { |q| q.page.routed_to?(@log, current_user) }, referrer: "interruption_screen", - refer_unanswered: true, } %> diff --git a/app/views/form/check_answers.html.erb b/app/views/form/check_answers.html.erb index a42e348dc..13d2279f4 100644 --- a/app/views/form/check_answers.html.erb +++ b/app/views/form/check_answers.html.erb @@ -27,7 +27,7 @@ lettings_log: @log, questions: total_applicable_questions(subsection, @log, current_user), referrer: "check_answers", - refer_unanswered: false, + referrer_unanswered: "check_answers_new", } %> <% end %> diff --git a/app/views/form/review.html.erb b/app/views/form/review.html.erb index 9795b3c2f..61e8540ee 100644 --- a/app/views/form/review.html.erb +++ b/app/views/form/review.html.erb @@ -23,7 +23,7 @@ subsection:, questions: total_applicable_questions(subsection, @log, current_user), referrer: "check_answers", - refer_unanswered: false, + referrer_unanswered: "check_answers_new", } %>