diff --git a/app/helpers/tasklist_helper.rb b/app/helpers/tasklist_helper.rb index 1d3f376c5..12843a517 100644 --- a/app/helpers/tasklist_helper.rb +++ b/app/helpers/tasklist_helper.rb @@ -14,17 +14,25 @@ module TasklistHelper }.freeze def get_subsection_status(subsection_name, case_log, form, questions) - applicable_questions = form.filter_conditional_questions(questions, case_log).keys if subsection_name == "declaration" return case_log.completed? ? :not_started : :cannot_start_yet + elsif subsection_name != "about_this_log" + return :cannot_start_yet unless about_this_log_completed?(form, case_log) end + applicable_questions = form.filter_conditional_questions(questions, case_log).keys return :not_started if applicable_questions.all? { |question| case_log[question].blank? } return :completed if applicable_questions.all? { |question| case_log[question].present? } :in_progress end + def about_this_log_completed?(form, case_log) + questions = form.questions_for_subsection("about_this_log") + applicable_questions = form.filter_conditional_questions(questions, case_log).keys + applicable_questions.all? { |question| case_log[question].present? } + end + def get_next_incomplete_section(form, case_log) subsections = form.all_subsections.keys subsections.find { |subsection| is_incomplete?(subsection, case_log, form, form.questions_for_subsection(subsection)) } @@ -46,6 +54,16 @@ module TasklistHelper send(path, case_log) end + def subsection_link(subsection_key, subsection_value, status) + next_page_path = if status != :cannot_start_yet + questions = @form.questions_for_subsection(subsection_key) + get_first_page_or_check_answers(subsection_key, @case_log, @form, questions) + else + "#" + end + link_to(subsection_value["label"], next_page_path, class: "task-name govuk-link") + end + private def is_incomplete?(subsection, case_log, form, questions) diff --git a/app/models/form.rb b/app/models/form.rb index 34385af99..3de2655ad 100644 --- a/app/models/form.rb +++ b/app/models/form.rb @@ -108,7 +108,7 @@ class Form end def page_routed_to?(page, case_log) - return true unless (conditions = page_dependencies(page)) + return true unless conditions = page_dependencies(page) conditions.all? do |question, value| case_log[question].present? && case_log[question] == value diff --git a/app/views/case_logs/_tasklist.html.erb b/app/views/case_logs/_tasklist.html.erb index 1e75f207b..b82a11250 100644 --- a/app/views/case_logs/_tasklist.html.erb +++ b/app/views/case_logs/_tasklist.html.erb @@ -10,9 +10,8 @@ <% section_value["subsections"].map do |subsection_key, subsection_value| %>
  • > <% questions_for_subsection = @form.questions_for_subsection(subsection_key) %> - <% next_page_path = get_first_page_or_check_answers(subsection_key, @case_log, @form, questions_for_subsection) %> - <%= link_to subsection_value["label"], next_page_path, class: "task-name govuk-link" %> <% subsection_status = get_subsection_status(subsection_key, @case_log, @form, questions_for_subsection) %> + <%= subsection_link(subsection_key, subsection_value, subsection_status) %> <%= TasklistHelper::STATUSES[subsection_status] %>