diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb index 77cfdeb6f..9e7bd09d6 100644 --- a/app/controllers/form_controller.rb +++ b/app/controllers/form_controller.rb @@ -10,7 +10,9 @@ class FormController < ApplicationController responses_for_page = responses_for_page(@page) mandatory_questions_with_no_response = mandatory_questions_with_no_response(responses_for_page) - if mandatory_questions_with_no_response.empty? && @log.update(responses_for_page) + if @log.not_started? && responses_for_page.values.all?(&:blank?) && mandatory_questions_with_no_response.empty? + redirect_to(successful_redirect_path) + elsif mandatory_questions_with_no_response.empty? && @log.update(responses_for_page) session[:errors] = session[:fields] = nil redirect_to(successful_redirect_path) else @@ -124,7 +126,7 @@ private @log = if params[:sales_log_id].present? current_user.sales_logs.find_by(id: params[:sales_log_id]) elsif new_log_request? - create_new_resource + create_new_resource else current_user.lettings_logs.find_by(id: params[:lettings_log_id]) end @@ -143,7 +145,7 @@ private end def new_log_request_referrer? - request.referer&.split("/").include?("new") + request.referer&.split("/")&.include?("new") end def is_referrer_check_answers? diff --git a/app/controllers/lettings_logs_controller.rb b/app/controllers/lettings_logs_controller.rb index eac78dfc4..245628dbe 100644 --- a/app/controllers/lettings_logs_controller.rb +++ b/app/controllers/lettings_logs_controller.rb @@ -97,7 +97,7 @@ private @log = LettingsLog.find_by(id: params[:id]) end - def post_create_redirect_url - new_log_lettings_logs_path + def post_create_redirect_url(log) + log.not_started? ? new_log_lettings_logs_path : lettings_log_url(log) end end diff --git a/app/controllers/logs_controller.rb b/app/controllers/logs_controller.rb index f57482e84..8e7d4289c 100644 --- a/app/controllers/logs_controller.rb +++ b/app/controllers/logs_controller.rb @@ -11,11 +11,13 @@ private def create log = yield + log.save! unless api_log_params.empty? + raise "Caller must pass a block that implements model creation" if log.blank? respond_to do |format| format.html do - redirect_to(post_create_redirect_url) + redirect_to(post_create_redirect_url(log)) end format.json do if log.save diff --git a/app/controllers/sales_logs_controller.rb b/app/controllers/sales_logs_controller.rb index 5e3239158..c15382559 100644 --- a/app/controllers/sales_logs_controller.rb +++ b/app/controllers/sales_logs_controller.rb @@ -40,8 +40,8 @@ class SalesLogsController < LogsController end end - def post_create_redirect_url - new_log_sales_logs_path + def post_create_redirect_url(log) + log.not_started? ? new_log_sales_logs_path : sales_log_url(log) end def permitted_log_params diff --git a/app/helpers/check_answers_helper.rb b/app/helpers/check_answers_helper.rb index 67f582c1c..e869b1aa6 100644 --- a/app/helpers/check_answers_helper.rb +++ b/app/helpers/check_answers_helper.rb @@ -32,6 +32,22 @@ module CheckAnswersHelper "#{log.class.name.underscore}_#{redirect_path.underscore.tr('/', '_')}_path" end + def log_breadcrumbs(log, subsection) + if log.not_started? + { + "Logs" => "/logs", + "New log" => send("new_log_#{@log.class.name.underscore}s_path"), + subsection.label => "", + } + else + { + "Logs" => "/logs", + "Log #{@log.id}" => send("#{@log.class.name.underscore}_path", @log), + subsection.label => "", + } + end + end + private def answered_questions_count(subsection, lettings_log, current_user) diff --git a/app/models/form.rb b/app/models/form.rb index fa83588ae..65fb7ce90 100644 --- a/app/models/form.rb +++ b/app/models/form.rb @@ -74,14 +74,18 @@ class Form def next_page_redirect_path(page, log, current_user) nxt_page = next_page(page, log, current_user) if nxt_page == :check_answers - "#{type}_log_#{subsection_for_page(page).id}_check_answers_path" + log.not_started? ? "#{type}_log_new_#{subsection_for_page(page).id}_check_answers_path" : "#{type}_log_#{subsection_for_page(page).id}_check_answers_path" else - log.id ? "#{type}_log_#{nxt_page}_path" : "#{type}_log_new_#{nxt_page}_path" + log.not_started? ? "#{type}_log_new_#{nxt_page}_path" : "#{type}_log_#{nxt_page}_path" end end def cancel_path(page, log) - "#{log.class.name.underscore}_#{page.subsection.id}_check_answers_path" + if log.not_started? + "#{log.class.name.underscore}_new_#{page.subsection.id}_check_answers_path" + else + "#{log.class.name.underscore}_#{page.subsection.id}_check_answers_path" + end end def next_incomplete_section_redirect_path(subsection, log) diff --git a/app/models/form/question.rb b/app/models/form/question.rb index 4478f63fd..291255a41 100644 --- a/app/models/form/question.rb +++ b/app/models/form/question.rb @@ -122,7 +122,11 @@ class Form::Question end def action_href(log, page_id) - "/#{log.model_name.param_key.dasherize}s/#{log.id}/#{page_id.to_s.dasherize}?referrer=check_answers" + if log.not_started? + "/#{log.model_name.param_key.dasherize}/new/#{page_id.to_s.dasherize}?referrer=check_answers" + else + "/#{log.model_name.param_key.dasherize}s/#{log.id}/#{page_id.to_s.dasherize}?referrer=check_answers" + end end def completed?(log) diff --git a/app/views/form/check_answers.html.erb b/app/views/form/check_answers.html.erb index 46a945017..43264acb2 100644 --- a/app/views/form/check_answers.html.erb +++ b/app/views/form/check_answers.html.erb @@ -1,9 +1,5 @@ <% content_for :title, "#{subsection.id.humanize} - Check your answers" %> -<% content_for :breadcrumbs, govuk_breadcrumbs(breadcrumbs: { - "Logs" => "/logs", - "Log #{@log.id}" => send("#{@log.class.name.underscore}_path", @log), - subsection.label => "", - }) %> +<% content_for :breadcrumbs, govuk_breadcrumbs(breadcrumbs: log_breadcrumbs(@log, subsection)) %>