diff --git a/.gitignore b/.gitignore index bc97d1d63..93d1e2481 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,7 @@ yarn-debug.log* # Code coverage results /coverage + +#IDE specific files +/.idea +/.idea/* diff --git a/app/helpers/tasklist_helper.rb b/app/helpers/tasklist_helper.rb new file mode 100644 index 000000000..4c831029c --- /dev/null +++ b/app/helpers/tasklist_helper.rb @@ -0,0 +1,49 @@ +module TasklistHelper + STATUSES = { + not_started: "Not started", + cannot_start_yet: "Cannot start yet", + completed: "Completed", + in_progress: "In progress", + }.freeze + + STYLES = { + not_started: "govuk-tag--grey", + cannot_start_yet: "govuk-tag--grey", + completed: "", + in_progress: "govuk-tag--blue", + }.freeze + + def get_subsection_status(subsection_name, case_log, questions) + if subsection_name == "declaration" + return all_questions_completed(case_log) ? :not_started : :cannot_start_yet + end + + return :not_started if questions.all? { |question| case_log[question].blank? } + return :completed if questions.all? { |question| case_log[question].present? } + + :in_progress + end + + def get_next_incomplete_section(form, case_log) + subsections = form.all_subsections.keys + subsections.find { |subsection| is_incomplete?(subsection, case_log, form.questions_for_subsection(subsection).keys) } + end + + def get_sections_count(form, case_log, status = :all) + subsections = form.all_subsections.keys + return subsections.count if status == :all + + subsections.count { |subsection| get_subsection_status(subsection, case_log, form.questions_for_subsection(subsection).keys) == status } + end + +private + + def all_questions_completed(case_log) + case_log.attributes.all? { |_question, answer| answer.present? } + end + + def is_incomplete?(subsection, case_log, questions) + status = get_subsection_status(subsection, case_log, questions) + %i[not_started in_progress].include?(status) + end +end diff --git a/app/models/form.rb b/app/models/form.rb index 00c3503af..586df20f5 100644 --- a/app/models/form.rb +++ b/app/models/form.rb @@ -60,4 +60,8 @@ class Form pages_for_subsection(subsection).keys[current_page_idx - 1] end + + def questions_for_subsection(subsection) + pages_for_subsection(subsection).map { |title, _value| questions_for_page(title) }.reduce(:merge) + end end diff --git a/app/views/case_logs/_tasklist.html.erb b/app/views/case_logs/_tasklist.html.erb index d0e60c396..dbbeb6321 100644 --- a/app/views/case_logs/_tasklist.html.erb +++ b/app/views/case_logs/_tasklist.html.erb @@ -8,11 +8,12 @@