From 2bbecb0b9efc8ce09dcca38504eed306991ffc54 Mon Sep 17 00:00:00 2001 From: Kat Date: Mon, 25 Jul 2022 12:27:09 +0100 Subject: [PATCH] validate all the required scheme questions are answered --- app/controllers/schemes_controller.rb | 2 + app/models/scheme.rb | 10 ++ app/views/schemes/check_answers.html.erb | 200 +++++++++++------------ spec/factories/scheme.rb | 1 + 4 files changed, 113 insertions(+), 100 deletions(-) diff --git a/app/controllers/schemes_controller.rb b/app/controllers/schemes_controller.rb index 50d2d989f..2bae8ae94 100644 --- a/app/controllers/schemes_controller.rb +++ b/app/controllers/schemes_controller.rb @@ -128,6 +128,8 @@ private "schemes/details" elsif page.include?("edit") "schemes/edit_name" + elsif page.include?("check-answers") + "schemes/check_answers" end end diff --git a/app/models/scheme.rb b/app/models/scheme.rb index 1af0a9b74..dddabc740 100644 --- a/app/models/scheme.rb +++ b/app/models/scheme.rb @@ -9,6 +9,8 @@ class Scheme < ApplicationRecord scope :search_by_postcode, ->(postcode) { joins(:locations).where("locations.postcode ILIKE ?", "%#{postcode.delete(' ')}%") } scope :search_by, ->(param) { search_by_postcode(param).or(search_by_service_name(param)).or(filter_by_id(param)).distinct } + validate :validate_confirmed + SENSITIVE = { No: 0, Yes: 1, @@ -205,4 +207,12 @@ class Scheme < ApplicationRecord def arrangement_type_same? arrangement_type.present? && ARRANGEMENT_TYPE[arrangement_type.to_sym] == "D" end + + def validate_confirmed + required_attributes = attribute_names - %w[id created_at updated_at old_id old_visible_id confirmed end_date sensitive secondary_client_group total_units has_other_client_group] + + if confirmed == true && required_attributes.any? { |attribute| self[attribute].blank? } + errors.add :base, "Please answer all the required questions" + end + end end diff --git a/app/views/schemes/check_answers.html.erb b/app/views/schemes/check_answers.html.erb index 61b56cdfd..fc78bdc82 100644 --- a/app/views/schemes/check_answers.html.erb +++ b/app/views/schemes/check_answers.html.erb @@ -1,137 +1,137 @@ <% content_for :title, "Check your answers before creating this scheme" %> <%= render partial: "organisations/headings", locals: { main: "Check your changes before creating this scheme", sub: @scheme.service_name } %> -
-
- <%= govuk_tabs(title: "Check your answers before creating this scheme") do |component| %> - <% component.tab(label: "Scheme") do %> - <%= govuk_summary_list do |summary_list| %> - <% @scheme.check_details_attributes.each do |attr| %> - <% next if current_user.data_coordinator? && attr[:name] == ("owned by") %> - <%= summary_list.row do |row| %> - <% row.key { attr[:name].to_s } %> - <% row.value { details_html(attr) } %> - <% unless @scheme.confirmed? && attr[:name] != "Name" %> - <% row.action( - text: "Change", - href: scheme_details_path(@scheme, check_answers: true), - ) %> +<%= form_for(@scheme, as: :scheme, method: :patch) do |f| %> + <%= f.govuk_error_summary %> +
+
+ <%= govuk_tabs(title: "Check your answers before creating this scheme") do |component| %> + <% component.tab(label: "Scheme") do %> + <%= govuk_summary_list do |summary_list| %> + <% @scheme.check_details_attributes.each do |attr| %> + <% next if current_user.data_coordinator? && attr[:name] == ("owned by") %> + <%= summary_list.row do |row| %> + <% row.key { attr[:name].to_s } %> + <% row.value { details_html(attr) } %> + <% unless @scheme.confirmed? && attr[:name] != "Name" %> + <% row.action( + text: "Change", + href: scheme_details_path(@scheme, check_answers: true), + ) %> + <% end %> + <% end %> + <% end %> + <% if !@scheme.arrangement_type_same? %> + <% @scheme.check_support_services_provider_attributes.each do |attr| %> + <%= summary_list.row do |row| %> + <% row.key { attr[:name].to_s } %> + <% row.value { details_html(attr) } %> + <% unless @scheme.confirmed? %> + <% row.action( + text: "Change", + href: scheme_support_services_provider_path(@scheme, check_answers: true), + ) %> + <% end %> <% end %> + <% end %> <% end %> - <% end %> - <% if !@scheme.arrangement_type_same? %> - <% @scheme.check_support_services_provider_attributes.each do |attr| %> + <% @scheme.check_primary_client_attributes.each do |attr| %> <%= summary_list.row do |row| %> <% row.key { attr[:name].to_s } %> <% row.value { details_html(attr) } %> <% unless @scheme.confirmed? %> <% row.action( text: "Change", - href: scheme_support_services_provider_path(@scheme, check_answers: true), + href: scheme_primary_client_group_path(@scheme, check_answers: true), ) %> <% end %> <% end %> <% end %> - <% end %> - <% @scheme.check_primary_client_attributes.each do |attr| %> - <%= summary_list.row do |row| %> - <% row.key { attr[:name].to_s } %> - <% row.value { details_html(attr) } %> - <% unless @scheme.confirmed? %> - <% row.action( - text: "Change", - href: scheme_primary_client_group_path(@scheme, check_answers: true), - ) %> + <% @scheme.check_secondary_client_confirmation_attributes.each do |attr| %> + <%= summary_list.row do |row| %> + <% row.key { attr[:name].to_s } %> + <% row.value { details_html(attr) } %> + <% unless @scheme.confirmed? %> + <% row.action( + text: "Change", + href: scheme_confirm_secondary_client_group_path(@scheme, check_answers: true), + ) %> <% end %> + <% end %> <% end %> - <% end %> - <% @scheme.check_secondary_client_confirmation_attributes.each do |attr| %> - <%= summary_list.row do |row| %> - <% row.key { attr[:name].to_s } %> - <% row.value { details_html(attr) } %> - <% unless @scheme.confirmed? %> - <% row.action( - text: "Change", - href: scheme_confirm_secondary_client_group_path(@scheme, check_answers: true), - ) %> + <% if @scheme.has_other_client_group == "Yes" %> + <% @scheme.check_secondary_client_attributes.each do |attr| %> + <%= summary_list.row do |row| %> + <% row.key { attr[:name].to_s } %> + <% row.value { details_html(attr) } %> + <% unless @scheme.confirmed? %> + <% row.action( + text: "Change", + href: scheme_secondary_client_group_path(@scheme, check_answers: true), + ) %> + <% end %> + <% end %> <% end %> <% end %> - <% end %> - <% if @scheme.has_other_client_group == "Yes" %> - <% @scheme.check_secondary_client_attributes.each do |attr| %> + <% @scheme.check_support_attributes.each do |attr| %> <%= summary_list.row do |row| %> <% row.key { attr[:name].to_s } %> <% row.value { details_html(attr) } %> <% unless @scheme.confirmed? %> <% row.action( - text: "Change", - href: scheme_secondary_client_group_path(@scheme, check_answers: true), - ) %> - <% end %> - <% end %> - <% end %> - <% end %> - <% @scheme.check_support_attributes.each do |attr| %> - <%= summary_list.row do |row| %> - <% row.key { attr[:name].to_s } %> - <% row.value { details_html(attr) } %> - <% unless @scheme.confirmed? %> - <% row.action( - text: "Change", - href: scheme_support_path(@scheme, check_answers: true), - ) %> + text: "Change", + href: scheme_support_path(@scheme, check_answers: true), + ) %> + <% end %> <% end %> <% end %> <% end %> <% end %> - <% end %> - <% component.tab(label: "Locations") do %> - <%= govuk_table do |table| %> - <%= table.caption(classes: %w[govuk-!-font-size-19 govuk-!-font-weight-regular]) do |caption| %> - <%= @scheme.locations.count %> <%= @scheme.locations.count.eql?(1) ? "location" : "locations" %> - <% end %> - <%= table.head do |head| %> - <%= head.row do |row| %> - <% row.cell(header: true, text: "Code", html_attributes: { - scope: "col", - }) %> - <% row.cell(header: true, text: "Postcode", html_attributes: { - scope: "col", - }) %> - <% row.cell(header: true, text: "Units", html_attributes: { - scope: "col", - }) %> - <% row.cell(header: true, text: "Common unit type", html_attributes: { - scope: "col", - }) %> - <% row.cell(header: true, text: "Mobility type", html_attributes: { - scope: "col", - }) %> - <% row.cell(header: true, text: "Local authority", html_attributes: { - scope: "col", - }) %> + <% component.tab(label: "Locations") do %> + <%= govuk_table do |table| %> + <%= table.caption(classes: %w[govuk-!-font-size-19 govuk-!-font-weight-regular]) do |caption| %> + <%= @scheme.locations.count %> <%= @scheme.locations.count.eql?(1) ? "location" : "locations" %> <% end %> - <% end %> - <% @scheme.locations.each do |location| %> - <%= table.body do |body| %> - <%= body.row do |row| %> - <% row.cell(text: location.id) %> - <% row.cell(text: simple_format(location_cell(location, "/schemes/#{@scheme.id}/locations/#{location.id}/edit"), { class: "govuk-!-font-weight-bold" }, wrapper_tag: "div")) %> - <% row.cell(text: location.units) %> - <% row.cell(text: simple_format("#{location.type_of_unit}")) %> - <% row.cell(text: location.mobility_type) %> - <% row.cell(text: location.location_admin_district) %> - <% end %> + <%= table.head do |head| %> + <%= head.row do |row| %> + <% row.cell(header: true, text: "Code", html_attributes: { + scope: "col", + }) %> + <% row.cell(header: true, text: "Postcode", html_attributes: { + scope: "col", + }) %> + <% row.cell(header: true, text: "Units", html_attributes: { + scope: "col", + }) %> + <% row.cell(header: true, text: "Common unit type", html_attributes: { + scope: "col", + }) %> + <% row.cell(header: true, text: "Mobility type", html_attributes: { + scope: "col", + }) %> + <% row.cell(header: true, text: "Local authority", html_attributes: { + scope: "col", + }) %> + <% end %> + <% end %> + <% @scheme.locations.each do |location| %> + <%= table.body do |body| %> + <%= body.row do |row| %> + <% row.cell(text: location.id) %> + <% row.cell(text: simple_format(location_cell(location, "/schemes/#{@scheme.id}/locations/#{location.id}/edit"), { class: "govuk-!-font-weight-bold" }, wrapper_tag: "div")) %> + <% row.cell(text: location.units) %> + <% row.cell(text: simple_format("#{location.type_of_unit}")) %> + <% row.cell(text: location.mobility_type) %> + <% row.cell(text: location.location_admin_district) %> + <% end %> + <% end %> <% end %> <% end %> + <%= govuk_button_link_to "Add a location", new_location_path(id: @scheme.id), secondary: true %> <% end %> - <%= govuk_button_link_to "Add a location", new_location_path(id: @scheme.id), secondary: true %> <% end %> - <% end %> +
-
- -<%= form_for(@scheme, as: :scheme, method: :patch) do |f| %> <%= f.hidden_field :page, value: "check-answers" %> <%= f.hidden_field :confirmed, value: "true" %> <% button_label = @scheme.confirmed? ? "Save" : "Create scheme" %> diff --git a/spec/factories/scheme.rb b/spec/factories/scheme.rb index ab3342fea..4a85f2036 100644 --- a/spec/factories/scheme.rb +++ b/spec/factories/scheme.rb @@ -10,6 +10,7 @@ FactoryBot.define do primary_client_group { %w[O H M L A G F B D E I S N R Q P X].sample } secondary_client_group { %w[O H M L A G F B D E I S N R Q P X].sample } owning_organisation { FactoryBot.create(:organisation) } + managing_organisation { FactoryBot.create(:organisation) } confirmed { true } created_at { Time.zone.now } trait :export do