diff --git a/app/controllers/locations_controller.rb b/app/controllers/locations_controller.rb index 83e90c373..b84185b51 100644 --- a/app/controllers/locations_controller.rb +++ b/app/controllers/locations_controller.rb @@ -40,6 +40,8 @@ class LocationsController < ApplicationController redirect_to scheme_location_local_authority_path(@scheme, @location, route: params[:route], referrer: params[:referrer]) elsif return_to_check_your_answers? redirect_to scheme_location_check_answers_path(@scheme, @location, route: params[:route]) + elsif params[:referrer] == "details" + redirect_to scheme_location_path(@scheme, @location) else redirect_to scheme_location_name_path(@scheme, @location, route: params[:route]) end @@ -88,6 +90,8 @@ class LocationsController < ApplicationController if @location.save(context: :units) if return_to_check_your_answers? redirect_to scheme_location_check_answers_path(@scheme, @location, route: params[:route]) + elsif params[:referrer] == "details" + redirect_to scheme_location_path(@scheme, @location) else redirect_to scheme_location_type_of_unit_path(@scheme, @location, route: params[:route]) end @@ -103,6 +107,8 @@ class LocationsController < ApplicationController if @location.save(context: :type_of_unit) if return_to_check_your_answers? redirect_to scheme_location_check_answers_path(@scheme, @location, route: params[:route]) + elsif params[:referrer] == "details" + redirect_to scheme_location_path(@scheme, @location) else redirect_to scheme_location_mobility_standards_path(@scheme, @location, route: params[:route]) end @@ -118,6 +124,8 @@ class LocationsController < ApplicationController if @location.save(context: :mobility_type) if return_to_check_your_answers? redirect_to scheme_location_check_answers_path(@scheme, @location, route: params[:route]) + elsif params[:referrer] == "details" + redirect_to scheme_location_path(@scheme, @location) else redirect_to scheme_location_availability_path(@scheme, @location, route: params[:route]) end diff --git a/app/controllers/schemes_controller.rb b/app/controllers/schemes_controller.rb index 682e1bc02..5eec2a294 100644 --- a/app/controllers/schemes_controller.rb +++ b/app/controllers/schemes_controller.rb @@ -136,19 +136,23 @@ class SchemesController < ApplicationController validation_errors scheme_params if @scheme.errors.empty? && @scheme.update(scheme_params) - if scheme_params[:confirmed] == "true" - @scheme.locations.update!(confirmed: true) - flash[:notice] = if scheme_previously_confirmed - "#{@scheme.service_name} has been updated." - else - "#{@scheme.service_name} has been created. It does not require helpdesk approval." - end - redirect_to scheme_path(@scheme) + @scheme.update!(secondary_client_group: nil) if @scheme.has_other_client_group == "No" + if scheme_params[:confirmed] == "true" || @scheme.confirmed? + if check_answers && confirm_secondary_page?(page) + redirect_to scheme_secondary_client_group_path(@scheme, check_answers: "true") + else + @scheme.locations.update!(confirmed: true) + flash[:notice] = if scheme_previously_confirmed + "#{@scheme.service_name} has been updated." + else + "#{@scheme.service_name} has been created. It does not require helpdesk approval." + end + redirect_to scheme_path(@scheme) + end elsif check_answers - if confirm_secondary_page? page + if confirm_secondary_page?(page) redirect_to scheme_secondary_client_group_path(@scheme, check_answers: "true") else - @scheme.update!(secondary_client_group: nil) if @scheme.has_other_client_group == "No" redirect_to scheme_check_answers_path(@scheme) end else @@ -310,7 +314,7 @@ private end def redirect_if_scheme_confirmed - redirect_to @scheme if @scheme.confirmed? + redirect_to @scheme if @scheme.confirmed? && !current_user.support? end def deactivate_success_notice diff --git a/app/helpers/check_answers_helper.rb b/app/helpers/check_answers_helper.rb index 80f4326f7..761a7ac44 100644 --- a/app/helpers/check_answers_helper.rb +++ b/app/helpers/check_answers_helper.rb @@ -12,7 +12,8 @@ module CheckAnswersHelper end def can_change_scheme_answer?(attribute_name, scheme) - return false unless current_user.support? || current_user.data_coordinator? + return true if current_user.support? + return false unless current_user.data_coordinator? editable_attributes = ["Name", "Confidential information", "Housing stock owned by"] diff --git a/app/helpers/schemes_helper.rb b/app/helpers/schemes_helper.rb index 88022dd53..078419619 100644 --- a/app/helpers/schemes_helper.rb +++ b/app/helpers/schemes_helper.rb @@ -1,23 +1,4 @@ module SchemesHelper - def display_scheme_attributes(scheme) - [ - { name: "Scheme code", value: scheme.id_to_display }, - { name: "Name", value: scheme.service_name, edit: true }, - { name: "Status", value: status_tag_from_resource(scheme) }, - { name: "Confidential information", value: scheme.sensitive, edit: true }, - { name: "Type of scheme", value: scheme.scheme_type }, - { name: "Registered under Care Standards Act 2000", value: scheme.registered_under_care_act }, - { name: "Housing stock owned by", value: scheme.owning_organisation.name, edit: true }, - { name: "Support services provided by", value: scheme.arrangement_type }, - { name: "Primary client group", value: scheme.primary_client_group }, - { name: "Has another client group", value: scheme.has_other_client_group }, - scheme.has_other_client_group == "Yes" ? { name: "Secondary client group", value: scheme.secondary_client_group } : nil, - { name: "Level of support given", value: scheme.support_type }, - { name: "Intended length of stay", value: scheme.intended_stay }, - { name: "Availability", value: scheme_availability(scheme) }, - ].compact - end - def scheme_availability(scheme) availability = "" scheme_active_periods(scheme).each do |period| @@ -76,6 +57,21 @@ module SchemesHelper schemes_csv_download_organisation_path(organisation, search:, download_type:) end + def change_answer_link(scheme, question_id, user) + case question_id + when "service_name", "sensitive", "scheme_type", "registered_under_care_act", "owning_organisation_id", "arrangement_type" + user.support? || !scheme.confirmed? ? scheme_details_path(scheme, check_answers: true) : scheme_edit_name_path(scheme) + when "primary_client_group" + scheme_primary_client_group_path(scheme, check_answers: true) + when "has_other_client_group" + scheme_confirm_secondary_client_group_path(scheme, check_answers: true) + when "secondary_client_group" + scheme_secondary_client_group_path(scheme, check_answers: true) + when "support_type", "intended_stay" + scheme_support_path(scheme, check_answers: true) + end + end + private ActivePeriod = Struct.new(:from, :to) diff --git a/app/models/scheme.rb b/app/models/scheme.rb index 00db3924d..0bfd56373 100644 --- a/app/models/scheme.rb +++ b/app/models/scheme.rb @@ -187,37 +187,18 @@ class Scheme < ApplicationRecord def check_details_attributes [ { name: "Scheme code", value: id_to_display, id: "id" }, - { name: "Name", value: service_name, id: "service_name" }, - { name: "Confidential information", value: sensitive, id: "sensitive" }, - { name: "Type of scheme", value: scheme_type, id: "scheme_type" }, - { name: "Registered under Care Standards Act 2000", value: registered_under_care_act, id: "registered_under_care_act" }, - { name: "Housing stock owned by", value: owning_organisation.name, id: "owning_organisation_id" }, - { name: "Support services provided by", value: arrangement_type, id: "arrangement_type" }, - ] - end - - def check_primary_client_attributes - [ - { name: "Primary client group", value: primary_client_group, id: "primary_client_group" }, - ] - end - - def check_secondary_client_confirmation_attributes - [ - { name: "Has another client group", value: has_other_client_group, id: "has_other_client_group" }, - ] - end - - def check_secondary_client_attributes - [ - { name: "Secondary client group", value: secondary_client_group, id: "secondary_client_group" }, - ] - end - - def check_support_attributes - [ - { name: "Level of support given", value: support_type, id: "support_type" }, - { name: "Intended length of stay", value: intended_stay, id: "intended_stay" }, + { name: "Name", value: service_name, id: "service_name", edit: true }, + { name: "Status", value: status, id: "status" }, + { name: "Confidential information", value: sensitive, id: "sensitive", edit: true }, + { name: "Type of scheme", value: scheme_type, id: "scheme_type", edit: true }, + { name: "Registered under Care Standards Act 2000", value: registered_under_care_act, id: "registered_under_care_act", edit: true }, + { name: "Housing stock owned by", value: owning_organisation.name, id: "owning_organisation_id", edit: true }, + { name: "Support services provided by", value: arrangement_type, id: "arrangement_type", edit: true }, + { name: "Primary client group", value: primary_client_group, id: "primary_client_group", edit: true }, + { name: "Has another client group", value: has_other_client_group, id: "has_other_client_group", edit: true }, + { name: "Secondary client group", value: secondary_client_group, id: "secondary_client_group", edit: true }, + { name: "Level of support given", value: support_type, id: "support_type", edit: true }, + { name: "Intended length of stay", value: intended_stay, id: "intended_stay", edit: true }, ] end diff --git a/app/views/locations/mobility_standards.html.erb b/app/views/locations/mobility_standards.html.erb index da08f8bfa..a5ed77f49 100644 --- a/app/views/locations/mobility_standards.html.erb +++ b/app/views/locations/mobility_standards.html.erb @@ -24,6 +24,9 @@ <% if params[:referrer] == "check_answers" %> <%= f.govuk_submit "Save changes" %> <%= govuk_link_to "Cancel", scheme_location_check_answers_path(@scheme, @location, route: params[:route]), secondary: true %> + <% elsif params[:referrer] == "details" %> + <%= f.govuk_submit "Save changes" %> + <%= govuk_link_to "Cancel", scheme_location_path(@scheme, @location), secondary: true %> <% else %> <%= f.govuk_submit "Save and continue" %> <%= govuk_link_to "Skip for now", scheme_location_availability_path(@scheme, @location), secondary: true %> diff --git a/app/views/locations/postcode.html.erb b/app/views/locations/postcode.html.erb index fe0505926..5e17c17d5 100644 --- a/app/views/locations/postcode.html.erb +++ b/app/views/locations/postcode.html.erb @@ -26,6 +26,9 @@ <% if params[:referrer] == "check_answers" %> <%= f.govuk_submit "Save changes" %> <%= govuk_link_to "Cancel", scheme_location_check_answers_path(@scheme, @location, route: params[:route]), secondary: true %> + <% elsif params[:referrer] == "details" %> + <%= f.govuk_submit "Save changes" %> + <%= govuk_link_to "Cancel", scheme_location_path(@scheme, @location), secondary: true %> <% else %> <%= f.govuk_submit "Save and continue" %> <%= govuk_link_to "Skip for now", scheme_location_name_path(@scheme, @location), secondary: true %> diff --git a/app/views/locations/show.html.erb b/app/views/locations/show.html.erb index 5d6044f06..f4371213c 100644 --- a/app/views/locations/show.html.erb +++ b/app/views/locations/show.html.erb @@ -19,7 +19,11 @@ <% row.key { attr[:name] } %> <% row.value { attr[:attribute].eql?("status") ? status_tag_from_resource(@location) : details_html(attr) } %> <% if LocationPolicy.new(current_user, @location).update? %> + <% row.action(text: "Change", href: scheme_location_postcode_path(@scheme, @location, referrer: "details")) if attr[:attribute] == "postcode" && current_user.support? %> <% row.action(text: "Change", href: scheme_location_name_path(@scheme, @location, referrer: "details")) if attr[:attribute] == "name" %> + <% row.action(text: "Change", href: scheme_location_units_path(@scheme, @location, referrer: "details")) if attr[:attribute] == "units" && current_user.support? %> + <% row.action(text: "Change", href: scheme_location_type_of_unit_path(@scheme, @location, referrer: "details")) if attr[:attribute] == "type_of_unit" && current_user.support? %> + <% row.action(text: "Change", href: scheme_location_mobility_standards_path(@scheme, @location, referrer: "details")) if attr[:attribute] == "mobility_standards" && current_user.support? %> <% end %> <% end %> <% end %> diff --git a/app/views/locations/type_of_unit.html.erb b/app/views/locations/type_of_unit.html.erb index 45b76ef67..cb7b3db41 100644 --- a/app/views/locations/type_of_unit.html.erb +++ b/app/views/locations/type_of_unit.html.erb @@ -23,6 +23,9 @@ <% if params[:referrer] == "check_answers" %> <%= f.govuk_submit "Save changes" %> <%= govuk_link_to "Cancel", scheme_location_check_answers_path(@scheme, @location, route: params[:route]), secondary: true %> + <% elsif params[:referrer] == "details" %> + <%= f.govuk_submit "Save changes" %> + <%= govuk_link_to "Cancel", scheme_location_path(@scheme, @location), secondary: true %> <% else %> <%= f.govuk_submit "Save and continue" %> <%= govuk_link_to "Skip for now", scheme_location_mobility_standards_path(@scheme, @location), secondary: true %> diff --git a/app/views/locations/units.html.erb b/app/views/locations/units.html.erb index 12365adbb..cf71ef11a 100644 --- a/app/views/locations/units.html.erb +++ b/app/views/locations/units.html.erb @@ -23,6 +23,9 @@ <% if params[:referrer] == "check_answers" %> <%= f.govuk_submit "Save changes" %> <%= govuk_link_to "Cancel", scheme_location_check_answers_path(@scheme, @location, route: params[:route]), secondary: true %> + <% elsif params[:referrer] == "details" %> + <%= f.govuk_submit "Save changes" %> + <%= govuk_link_to "Cancel", scheme_location_path(@scheme, @location), secondary: true %> <% else %> <%= f.govuk_submit "Save and continue" %> <%= govuk_link_to "Skip for now", scheme_location_type_of_unit_path(@scheme, @location), secondary: true %> diff --git a/app/views/schemes/_scheme_summary_list_row.html.erb b/app/views/schemes/_scheme_summary_list_row.html.erb index 309dcfe15..cf82ccd95 100644 --- a/app/views/schemes/_scheme_summary_list_row.html.erb +++ b/app/views/schemes/_scheme_summary_list_row.html.erb @@ -1,4 +1,4 @@ -
"> +
">
<%= attribute[:name].to_s %>
@@ -15,7 +15,7 @@ <% end %> - <% if can_change_scheme_answer?(attribute[:name], scheme) %> + <% if can_change_scheme_answer?(attribute[:name], scheme) && attribute[:edit] %>
Change
diff --git a/app/views/schemes/check_answers.html.erb b/app/views/schemes/check_answers.html.erb index dccefc565..36c459ada 100644 --- a/app/views/schemes/check_answers.html.erb +++ b/app/views/schemes/check_answers.html.erb @@ -9,26 +9,10 @@

Scheme

<% @scheme.check_details_attributes.each do |attr| %> - <%= render partial: "scheme_summary_list_row", locals: { scheme: @scheme, attribute: attr, change_link: @scheme.confirmed? ? scheme_edit_name_path(@scheme) : scheme_details_path(@scheme, check_answers: true) } %> - <% end %> - - <% @scheme.check_primary_client_attributes.each do |attr| %> - <%= render partial: "scheme_summary_list_row", locals: { scheme: @scheme, attribute: attr, change_link: scheme_primary_client_group_path(@scheme, check_answers: true) } %> - <% end %> - - <% @scheme.check_secondary_client_confirmation_attributes.each do |attr| %> - <%= render partial: "scheme_summary_list_row", locals: { scheme: @scheme, attribute: attr, change_link: scheme_confirm_secondary_client_group_path(@scheme, check_answers: true) } %> - <% end %> - - <% if @scheme.has_other_client_group == "Yes" %> - <% @scheme.check_secondary_client_attributes.each do |attr| %> - <%= render partial: "scheme_summary_list_row", locals: { scheme: @scheme, attribute: attr, change_link: scheme_secondary_client_group_path(@scheme, check_answers: true) } %> + <% if attr[:name] != "Status" && (attr[:id] != "secondary_client_group" || @scheme.has_other_client_group == "Yes") %> + <%= render partial: "scheme_summary_list_row", locals: { scheme: @scheme, attribute: attr, change_link: change_answer_link(@scheme, attr[:id], current_user) } %> <% end %> <% end %> - - <% @scheme.check_support_attributes.each do |attr| %> - <%= render partial: "scheme_summary_list_row", locals: { scheme: @scheme, attribute: attr, change_link: scheme_support_path(@scheme, check_answers: true) } %> - <% end %>
<% end %> <% end %> diff --git a/app/views/schemes/confirm_secondary.html.erb b/app/views/schemes/confirm_secondary.html.erb index 706d14c83..de5d9c82e 100644 --- a/app/views/schemes/confirm_secondary.html.erb +++ b/app/views/schemes/confirm_secondary.html.erb @@ -7,6 +7,7 @@ <% end %> <%= render partial: "organisations/headings", locals: { main: "Does this scheme provide for another client group?", sub: @scheme.service_name } %> +<%= govuk_inset_text(text: "Only update a scheme if you’re fixing an error. If the scheme is changing, create a new scheme.") if @scheme.confirmed? %> <%= form_for(@scheme, method: :patch) do |f| %>
@@ -23,9 +24,10 @@ <%= f.hidden_field :page, value: "confirm-secondary" %> <% if request.query_parameters["check_answers"] == "true" %> <%= f.hidden_field :check_answers, value: "true" %> + <%= f.govuk_submit "Save changes" %> + <% else %> + <%= f.govuk_submit "Save and continue" %> <% end %> - - <%= f.govuk_submit "Save and continue" %>
<% end %> diff --git a/app/views/schemes/details.html.erb b/app/views/schemes/details.html.erb index 9c0c333e2..71f924782 100644 --- a/app/views/schemes/details.html.erb +++ b/app/views/schemes/details.html.erb @@ -9,7 +9,12 @@
<%= f.govuk_error_summary %> - <%= render partial: "organisations/headings", locals: { main: "Create a new supported housing scheme", sub: nil } %> + <% if @scheme.id.present? %> + <%= render partial: "organisations/headings", locals: { main: "Scheme details", sub: @scheme.service_name } %> + <% else %> + <%= render partial: "organisations/headings", locals: { main: "Create a new supported housing scheme", sub: nil } %> + <% end %> + <%= govuk_inset_text(text: "Only update a scheme if you’re fixing an error. If the scheme is changing, create a new scheme.") if @scheme.confirmed? %> <%= f.govuk_text_field :service_name, label: { text: "Scheme name", size: "m" }, @@ -72,8 +77,10 @@ <%= f.hidden_field :page, value: "details" %> <% if request.query_parameters["check_answers"] %> <%= f.hidden_field :check_answers, value: "true" %> + <%= f.govuk_submit "Save changes" %> + <% else %> + <%= f.govuk_submit "Save and continue" %> <% end %> - <%= f.govuk_submit "Save and continue" %>
<% end %> diff --git a/app/views/schemes/edit_name.html.erb b/app/views/schemes/edit_name.html.erb index e908fd1b5..030635b79 100644 --- a/app/views/schemes/edit_name.html.erb +++ b/app/views/schemes/edit_name.html.erb @@ -10,6 +10,7 @@ <%= f.govuk_error_summary %> <%= render partial: "organisations/headings", locals: { main: "Scheme details", sub: @scheme.service_name } %> + <%= govuk_inset_text(text: "Only update a scheme if you’re fixing an error. If the scheme is changing, create a new scheme.") if @scheme.confirmed? %> <%= f.govuk_text_field :service_name, label: { text: "Scheme name", size: "m" }, diff --git a/app/views/schemes/primary_client_group.html.erb b/app/views/schemes/primary_client_group.html.erb index 8fe852c89..85db05b55 100644 --- a/app/views/schemes/primary_client_group.html.erb +++ b/app/views/schemes/primary_client_group.html.erb @@ -16,6 +16,7 @@ <%= f.govuk_error_summary %> <%= render partial: "organisations/headings", locals: { main: "What client group is this scheme intended for?", sub: @scheme.service_name } %> + <%= govuk_inset_text(text: "Only update a scheme if you’re fixing an error. If the scheme is changing, create a new scheme.") if @scheme.confirmed? %> <% primary_client_group_selection = Scheme.primary_client_groups.keys.excluding("Missing").map { |key, _| OpenStruct.new(id: key, name: key) } %> <%= f.govuk_collection_radio_buttons :primary_client_group, @@ -25,14 +26,16 @@ legend: nil %> <%= f.hidden_field :page, value: "primary-client-group" %> - <% if request.query_parameters["check_answers"] == "true" %> - <%= f.hidden_field :check_answers, value: "true" %> - <% end %> <% if request.query_parameters["select_managing_org"] == "true" %> <%= f.hidden_field :check_answers, value: "true" %> <% end %> - <%= f.govuk_submit "Save and continue" %> + <% if request.query_parameters["check_answers"] == "true" %> + <%= f.hidden_field :check_answers, value: "true" %> + <%= f.govuk_submit "Save changes" %> + <% else %> + <%= f.govuk_submit "Save and continue" %> + <% end %> <% end %> diff --git a/app/views/schemes/secondary_client_group.html.erb b/app/views/schemes/secondary_client_group.html.erb index fe292b1c2..45c68547a 100644 --- a/app/views/schemes/secondary_client_group.html.erb +++ b/app/views/schemes/secondary_client_group.html.erb @@ -12,6 +12,7 @@ <%= f.govuk_error_summary %> <%= render partial: "organisations/headings", locals: { main: "What is the other client group?", sub: @scheme.service_name } %> + <%= govuk_inset_text(text: "Only update a scheme if you’re fixing an error. If the scheme is changing, create a new scheme.") if @scheme.confirmed? %> <% secondary_client_group_selection = Scheme.secondary_client_groups.keys.excluding("Missing", @scheme.primary_client_group).map { |key, _| OpenStruct.new(id: key, name: key) } %> <%= f.govuk_collection_radio_buttons :secondary_client_group, @@ -23,9 +24,10 @@ <%= f.hidden_field :page, value: "secondary-client-group" %> <% if request.query_parameters["check_answers"] == "true" %> <%= f.hidden_field :check_answers, value: "true" %> + <%= f.govuk_submit "Save changes" %> + <% else %> + <%= f.govuk_submit "Save and continue" %> <% end %> - - <%= f.govuk_submit "Save and continue" %> <% end %> diff --git a/app/views/schemes/show.html.erb b/app/views/schemes/show.html.erb index 1da4e86f5..9d20ab91c 100644 --- a/app/views/schemes/show.html.erb +++ b/app/views/schemes/show.html.erb @@ -19,24 +19,30 @@ <%= render SubNavigationComponent.new(items: scheme_items(request.path, @scheme.id)) %>

Scheme

- <%= govuk_inset_text(text: edit_scheme_text(@scheme, current_user)) %> - - <%= govuk_summary_list do |summary_list| %> - <% display_scheme_attributes(@scheme).each do |attr| %> - <%= summary_list.row do |row| %> - <% row.key { attr[:name] } %> - <% row.value do %> - <%= details_html(attr) %> - <% if attr[:name] == "Status" && @scheme.confirmed? && @scheme.locations.confirmed.none? && LocationPolicy.new(current_user, @scheme.locations.new).create? %> - Complete this scheme by adding a location using the <%= govuk_link_to("‘locations’ tab", scheme_locations_path(@scheme)) %>. - <% end %> - <% end %> - <% if SchemePolicy.new(current_user, @scheme).update? %> - <% row.action(text: "Change", href: scheme_edit_name_path(scheme_id: @scheme.id)) if attr[:edit] %> - <% end %> +
+ <% @scheme.check_details_attributes.each do |attr| %> + <% if attr[:name] == "Status" %> +
+
Status
+
+ <%= details_html({ name: "Status", value: status_tag_from_resource(@scheme), id: "status" }) %> + <% if @scheme.confirmed? && @scheme.locations.confirmed.none? && LocationPolicy.new(current_user, @scheme.locations.new).create? %> + Complete this scheme by adding a location using the <%= govuk_link_to("‘locations’ tab", scheme_locations_path(@scheme)) %>. + <% end %> +
+
+ <% elsif attr[:id] != "secondary_client_group" || @scheme.has_other_client_group == "Yes" %> + <%= render partial: "scheme_summary_list_row", locals: { scheme: @scheme, attribute: attr, change_link: change_answer_link(@scheme, attr[:id], current_user) } %> <% end %> <% end %> - <% end %> + +
+
Availability
+
+ <%= details_html({ name: "Availability", value: scheme_availability(@scheme), id: "availability" }) %> +
+
+
diff --git a/app/views/schemes/support.html.erb b/app/views/schemes/support.html.erb index be4587617..b953ce548 100644 --- a/app/views/schemes/support.html.erb +++ b/app/views/schemes/support.html.erb @@ -12,6 +12,7 @@ <%= f.govuk_error_summary %> <%= render partial: "organisations/headings", locals: { main: "What support does this scheme provide?", sub: @scheme.service_name } %> + <%= govuk_inset_text(text: "Only update a scheme if you’re fixing an error. If the scheme is changing, create a new scheme.") if @scheme.confirmed? %> <% support_level_options_hints = { "Low level": "Staff visiting once a week, fortnightly or less.", "Medium level": "Staff on site daily or making frequent visits with some out-of-hours cover.", "High level": "Intensive level of staffing provided on a 24-hour basis." } %> @@ -37,7 +38,12 @@ <%= f.hidden_field :page, value: "support" %> - <%= f.govuk_submit "Save and continue" %> + <% if request.query_parameters["check_answers"] == "true" %> + <%= f.hidden_field :check_answers, value: "true" %> + <%= f.govuk_submit "Save changes" %> + <% else %> + <%= f.govuk_submit "Save and continue" %> + <% end %> <% end %> diff --git a/spec/factories/scheme.rb b/spec/factories/scheme.rb index 3877e3c99..7983bfa0a 100644 --- a/spec/factories/scheme.rb +++ b/spec/factories/scheme.rb @@ -4,7 +4,7 @@ FactoryBot.define do sensitive { Faker::Number.within(range: 0..1) } registered_under_care_act { 1 } support_type { [0, 2, 3, 4, 5].sample } - scheme_type { 0 } + scheme_type { 4 } arrangement_type { "D" } intended_stay { %w[M P S V X].sample } primary_client_group { %w[O H M L A G F B D E I S N R Q P X].sample } @@ -13,6 +13,7 @@ FactoryBot.define do owning_organisation { FactoryBot.create(:organisation) } confirmed { true } created_at { Time.zone.local(2021, 4, 1) } + total_units { 2 } trait :export do sensitive { 1 } registered_under_care_act { 1 } diff --git a/spec/features/schemes_spec.rb b/spec/features/schemes_spec.rb index 491a19bbc..8cf2ab43d 100644 --- a/spec/features/schemes_spec.rb +++ b/spec/features/schemes_spec.rb @@ -377,9 +377,9 @@ RSpec.describe "Schemes scheme Features" do expect(page).to have_content("has been added") end - it "does not let you edit the saved location" do + it "lets you edit the saved location" do click_link "AA1 2AA" - expect(page).not_to have_link(nil, href: /postcode/) + expect(page).to have_link("Change", href: /postcode/) end end @@ -390,7 +390,7 @@ RSpec.describe "Schemes scheme Features" do end it "does not let you change details other than the name, confidential information and housing stock owner" do - assert_selector "a", text: "Change", count: 3 + assert_selector "a", text: "Change", count: 11 end end end @@ -607,7 +607,7 @@ RSpec.describe "Schemes scheme Features" do it "displays changed location" do click_link "AA1 2AA" - click_link "Change" + click_link("Change", href: "/schemes/#{scheme.id}/locations/#{location.id}/name?referrer=details", match: :first) fill_in with: "new name" click_button "Save changes" expect(page).to have_content "AA1 2AA" @@ -621,7 +621,7 @@ RSpec.describe "Schemes scheme Features" do end it "displays change links" do - assert_selector "a", text: "Change", count: 11 + assert_selector "a", text: "Change", count: 10 end it "allows changing details questions" do @@ -629,7 +629,7 @@ RSpec.describe "Schemes scheme Features" do expect(page).to have_current_path("/schemes/#{scheme.id}/details?check_answers=true") fill_in "Scheme name", with: "Example" - click_button "Save and continue" + click_button "Save changes" expect(page).to have_current_path("/schemes/#{scheme.id}/check-answers") expect(page).to have_content "Example" @@ -645,7 +645,7 @@ RSpec.describe "Schemes scheme Features" do it "indicates if the scheme is not complete" do click_link("Change", href: "/schemes/#{scheme.id}/confirm-secondary-client-group?check_answers=true", match: :first) choose "Yes" - click_button "Save and continue" + click_button "Save changes" visit("/schemes/#{scheme.id}/check-answers") expect(page).to have_content("You didn’t answer this question") end @@ -687,7 +687,7 @@ RSpec.describe "Schemes scheme Features" do end it "displays change links" do - assert_selector "a", text: "Change", count: 12 + assert_selector "a", text: "Change", count: 11 end it "allows changing details questions" do @@ -695,7 +695,7 @@ RSpec.describe "Schemes scheme Features" do expect(page).to have_current_path("/schemes/#{scheme.id}/details?check_answers=true") fill_in "Scheme name", with: "Example" - click_button "Save and continue" + click_button "Save changes" expect(page).to have_current_path("/schemes/#{scheme.id}/check-answers") expect(page).to have_content "Example" @@ -711,14 +711,14 @@ RSpec.describe "Schemes scheme Features" do it "keeps the provider answer when switching between other provider options" do click_link("Change", href: "/schemes/#{scheme.id}/confirm-secondary-client-group?check_answers=true", match: :first) choose "Yes" - click_button "Save and continue" + click_button "Save changes" expect(find_field("Offenders and people at risk of offending")).to be_checked end it "does not display the answer if it's changed to the same support provider" do click_link("Change", href: "/schemes/#{scheme.id}/details?check_answers=true", match: :first) choose "The same organisation that owns the housing stock" - click_button "Save and continue" + click_button "Save changes" expect(page).not_to have_content("Organisation providing support") end end @@ -766,11 +766,11 @@ RSpec.describe "Schemes scheme Features" do context "when I click to change scheme name" do before do - click_link("Change", href: "/schemes/#{scheme.id}/edit-name", match: :first) + click_link("Change", href: "/schemes/#{scheme.id}/details?check_answers=true", match: :first) end it "shows available fields to edit" do - expect(page).to have_current_path("/schemes/#{scheme.id}/edit-name") + expect(page).to have_current_path("/schemes/#{scheme.id}/details?check_answers=true") expect(page).to have_content "Scheme details" end @@ -781,15 +781,10 @@ RSpec.describe "Schemes scheme Features" do click_button "Save changes" end - it "lets me see amended details on the check answers page" do + it "lets me see amended details on the details page" do expect(page).to have_content "FooBar" - expect(page).to have_current_path("/schemes/#{scheme.id}/check-answers") - assert_selector "a", text: "Change", count: 3 - end - - it "lets me save the scheme" do - click_button "Save" expect(page).to have_current_path("/schemes/#{scheme.id}") + assert_selector "a", text: "Change", count: 11 expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success") expect(page).to have_content("has been updated") end @@ -864,10 +859,10 @@ RSpec.describe "Schemes scheme Features" do expect(page).to have_content("Active") end - it "only allows to edit the location name" do - assert_selector "a", text: "Change", count: 1 + it "only allows to edit the location name, postcode, unit, unit type and mobility standards" do + assert_selector "a", text: "Change", count: 5 - click_link("Change") + click_link("Change", href: "/schemes/#{scheme.id}/locations/#{location.id}/name?referrer=details", match: :first) expect(page).to have_content "What is the name of this location?" end @@ -889,7 +884,7 @@ RSpec.describe "Schemes scheme Features" do context "and I change the location name" do before do - click_link("Change") + click_link("Change", href: "/schemes/#{scheme.id}/locations/#{location.id}/name?referrer=details", match: :first) end it "returns to locations check your answers page and shows the new name" do @@ -1008,9 +1003,9 @@ RSpec.describe "Schemes scheme Features" do expect(page).to have_content("has been added") end - it "does not let you edit the saved location" do + it "lets you edit the saved location" do click_link "AA1 2AA" - expect(page).not_to have_link(nil, href: /postcode/) + expect(page).to have_link("Change", href: /postcode/) end end @@ -1021,7 +1016,7 @@ RSpec.describe "Schemes scheme Features" do end it "does not let you change details other than the name, confidential information and housing stock owner" do - assert_selector "a", text: "Change", count: 3 + assert_selector "a", text: "Change", count: 11 end end end @@ -1069,9 +1064,9 @@ RSpec.describe "Schemes scheme Features" do click_button "Save changes" end - it "lets me see amended details on the check answers page" do + it "lets me see amended details on the details page" do expect(page).to have_content "FooBar" - expect(page).to have_current_path("/schemes/#{scheme.id}/check-answers") + expect(page).to have_current_path("/schemes/#{scheme.id}") expect(page).to have_link("Change", href: /schemes\/#{scheme.id}\/edit-name/, count: 3) end end diff --git a/spec/helpers/schemes_helper_spec.rb b/spec/helpers/schemes_helper_spec.rb index ff3030932..3d1010d4a 100644 --- a/spec/helpers/schemes_helper_spec.rb +++ b/spec/helpers/schemes_helper_spec.rb @@ -88,234 +88,6 @@ RSpec.describe SchemesHelper do end include TagHelper - describe "display_scheme_attributes" do - let(:owning_organisation) { FactoryBot.create(:organisation, name: "Acme LTD Owning") } - let(:managing_organisation) { FactoryBot.create(:organisation, name: "Acme LTD Managing") } - let!(:scheme) do - FactoryBot.create(:scheme, - service_name: "Test service_name", - sensitive: 0, - scheme_type: 7, - registered_under_care_act: 3, - owning_organisation:, - arrangement_type: "V", - primary_client_group: "S", - has_other_client_group: 1, - secondary_client_group: "I", - support_type: 4, - intended_stay: "P", - created_at: Time.zone.local(2022, 4, 1)) - end - let!(:scheme_where_managing_organisation_is_owning_organisation) { FactoryBot.create(:scheme, arrangement_type: "D") } - let(:support_user) { FactoryBot.create(:user, :support) } - let(:coordinator_user) { FactoryBot.create(:user, :data_coordinator) } - - context "when scheme has no locations" do - it "returns correct display attributes" do - attributes = [ - { name: "Scheme code", value: "S#{scheme.id}" }, - { name: "Name", value: "Test service_name", edit: true }, - { name: "Status", value: status_tag(:incomplete) }, - { name: "Confidential information", value: "No", edit: true }, - { name: "Type of scheme", value: "Housing for older people" }, - { name: "Registered under Care Standards Act 2000", value: "Yes – registered care home providing personal care" }, - { name: "Housing stock owned by", value: "Acme LTD Owning", edit: true }, - { name: "Support services provided by", value: "A registered charity or voluntary organisation" }, - { name: "Primary client group", value: "Rough sleepers" }, - { name: "Has another client group", value: "Yes" }, - { name: "Secondary client group", value: "Refugees (permanent)" }, - { name: "Level of support given", value: "High level" }, - { name: "Intended length of stay", value: "Permanent" }, - { name: "Availability", value: "Active from 1 April 2021" }, - ] - expect(display_scheme_attributes(scheme)).to eq(attributes) - end - end - - context "when scheme has a location" do - before do - FactoryBot.create(:location, scheme:) - end - - it "returns correct display attributes" do - attributes = [ - { name: "Scheme code", value: "S#{scheme.id}" }, - { name: "Name", value: "Test service_name", edit: true }, - { name: "Status", value: status_tag(:active) }, - { name: "Confidential information", value: "No", edit: true }, - { name: "Type of scheme", value: "Housing for older people" }, - { name: "Registered under Care Standards Act 2000", value: "Yes – registered care home providing personal care" }, - { name: "Housing stock owned by", value: "Acme LTD Owning", edit: true }, - { name: "Support services provided by", value: "A registered charity or voluntary organisation" }, - { name: "Primary client group", value: "Rough sleepers" }, - { name: "Has another client group", value: "Yes" }, - { name: "Secondary client group", value: "Refugees (permanent)" }, - { name: "Level of support given", value: "High level" }, - { name: "Intended length of stay", value: "Permanent" }, - { name: "Availability", value: "Active from 1 April 2021" }, - ] - expect(display_scheme_attributes(scheme)).to eq(attributes) - end - - context "when the managing organisation is the owning organisation" do - it "doesn't show the organisation providing support" do - attributes = display_scheme_attributes(scheme_where_managing_organisation_is_owning_organisation).find { |x| x[:name] == "Organisation providing support" } - expect(attributes).to be_nil - end - end - - context "when viewing availability" do - context "with no deactivations" do - it "displays current collection start date as availability date if created_at is later than collection start date" do - scheme.update!(created_at: Time.zone.local(2022, 4, 16)) - availability_attribute = display_scheme_attributes(scheme).find { |x| x[:name] == "Availability" }[:value] - - expect(availability_attribute).to eq("Active from 1 April 2021") - end - end - - context "with previous deactivations" do - context "and all reactivated deactivations" do - before do - Timecop.freeze(Time.zone.local(2023, 11, 10)) - FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 8, 10), reactivation_date: Time.zone.local(2022, 9, 1), scheme:) - FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 9, 15), reactivation_date: Time.zone.local(2022, 9, 28), scheme:) - Timecop.return - scheme.reload - end - - it "displays the timeline of availability" do - availability_attribute = display_scheme_attributes(scheme).find { |x| x[:name] == "Availability" }[:value] - - expect(availability_attribute).to eq("Active from 1 April 2021 to 9 August 2022\nDeactivated on 10 August 2022\nActive from 1 September 2022 to 14 September 2022\nDeactivated on 15 September 2022\nActive from 28 September 2022") - end - end - - context "and non reactivated deactivation" do - before do - Timecop.freeze(Time.zone.local(2023, 11, 10)) - FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 8, 10), reactivation_date: Time.zone.local(2022, 9, 1), scheme:) - FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 9, 15), reactivation_date: nil, scheme:) - Timecop.return - scheme.reload - end - - it "displays the timeline of availability" do - availability_attribute = display_scheme_attributes(scheme).find { |x| x[:name] == "Availability" }[:value] - - expect(availability_attribute).to eq("Active from 1 April 2021 to 9 August 2022\nDeactivated on 10 August 2022\nActive from 1 September 2022 to 14 September 2022\nDeactivated on 15 September 2022") - end - end - end - - context "with out of order deactivations" do - context "and all reactivated deactivations" do - before do - Timecop.freeze(Time.zone.local(2023, 11, 10)) - FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 9, 24), reactivation_date: Time.zone.local(2022, 9, 28), scheme:) - FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 15), reactivation_date: Time.zone.local(2022, 6, 18), scheme:) - Timecop.return - scheme.reload - end - - it "displays the timeline of availability" do - availability_attribute = display_scheme_attributes(scheme).find { |x| x[:name] == "Availability" }[:value] - - expect(availability_attribute).to eq("Active from 1 April 2021 to 14 June 2022\nDeactivated on 15 June 2022\nActive from 18 June 2022 to 23 September 2022\nDeactivated on 24 September 2022\nActive from 28 September 2022") - end - end - - context "and one non reactivated deactivation" do - before do - Timecop.freeze(Time.zone.local(2023, 11, 10)) - FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 9, 24), reactivation_date: Time.zone.local(2022, 9, 28), scheme:) - FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 15), reactivation_date: nil, scheme:) - Timecop.return - scheme.reload - end - - it "displays the timeline of availability" do - availability_attribute = display_scheme_attributes(scheme).find { |x| x[:name] == "Availability" }[:value] - - expect(availability_attribute).to eq("Active from 1 April 2021 to 14 June 2022\nDeactivated on 15 June 2022\nActive from 28 September 2022") - end - end - end - - context "with multiple out of order deactivations" do - context "and one non reactivated deactivation" do - before do - Timecop.freeze(Time.zone.local(2023, 11, 10)) - FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 9, 24), reactivation_date: Time.zone.local(2022, 9, 28), scheme:) - FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 10, 24), reactivation_date: Time.zone.local(2022, 10, 28), scheme:) - FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 15), reactivation_date: nil, scheme:) - Timecop.return - scheme.reload - end - - it "displays the timeline of availability" do - availability_attribute = display_scheme_attributes(scheme).find { |x| x[:name] == "Availability" }[:value] - - expect(availability_attribute).to eq("Active from 1 April 2021 to 14 June 2022\nDeactivated on 15 June 2022\nActive from 28 September 2022 to 23 October 2022\nDeactivated on 24 October 2022\nActive from 28 October 2022") - end - end - end - - context "with intersecting deactivations" do - before do - Timecop.freeze(Time.zone.local(2023, 11, 10)) - FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 10, 10), reactivation_date: Time.zone.local(2022, 12, 1), scheme:) - FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 11, 11), reactivation_date: Time.zone.local(2022, 12, 11), scheme:) - Timecop.return - scheme.reload - end - - it "displays the timeline of availability" do - availability_attribute = display_scheme_attributes(scheme).find { |x| x[:name] == "Availability" }[:value] - - expect(availability_attribute).to eq("Active from 1 April 2021 to 9 October 2022\nDeactivated on 10 October 2022\nActive from 11 December 2022") - end - end - end - end - - context "when scheme has no secondary client group" do - before do - scheme.update!(has_other_client_group: 0) - end - - it "returns correct display attributes" do - attributes = [ - { name: "Scheme code", value: "S#{scheme.id}" }, - { name: "Name", value: "Test service_name", edit: true }, - { name: "Status", value: status_tag(:incomplete) }, - { name: "Confidential information", value: "No", edit: true }, - { name: "Type of scheme", value: "Housing for older people" }, - { name: "Registered under Care Standards Act 2000", value: "Yes – registered care home providing personal care" }, - { name: "Housing stock owned by", value: "Acme LTD Owning", edit: true }, - { name: "Support services provided by", value: "A registered charity or voluntary organisation" }, - { name: "Primary client group", value: "Rough sleepers" }, - { name: "Has another client group", value: "No" }, - { name: "Level of support given", value: "High level" }, - { name: "Intended length of stay", value: "Permanent" }, - { name: "Availability", value: "Active from 1 April 2021" }, - ] - expect(display_scheme_attributes(scheme)).to eq(attributes) - end - end - - context "when scheme was merged from another organisation" do - before do - FactoryBot.create(:location, scheme:) - scheme.startdate = Time.zone.local(2023, 1, 5) - end - - it "returns correct availability" do - expect(display_scheme_attributes(scheme)).to include({ name: "Availability", value: "Active from 5 January 2023" }) - end - end - end - describe "edit_scheme_text" do let(:parent_organisation) { FactoryBot.create(:organisation, name: "Parent") } let(:child_organisation) { FactoryBot.create(:organisation, name: "Child") } diff --git a/spec/requests/schemes_controller_spec.rb b/spec/requests/schemes_controller_spec.rb index 0abeb92ae..6e00eb733 100644 --- a/spec/requests/schemes_controller_spec.rb +++ b/spec/requests/schemes_controller_spec.rb @@ -1832,12 +1832,9 @@ RSpec.describe SchemesController, type: :request do get "/schemes/#{scheme.id}/primary-client-group" end - it "redirects to a view scheme page" do - follow_redirect! + it "allows editing the primary client group" do expect(response).to have_http_status(:ok) - expect(path).to match("/schemes/#{scheme.id}") - expect(page).to have_content(scheme.service_name) - assert_select "a", text: /Change/, count: 3 + expect(path).to match("/schemes/#{scheme.id}/primary-client-group") end end end @@ -1912,12 +1909,9 @@ RSpec.describe SchemesController, type: :request do get "/schemes/#{scheme.id}/confirm-secondary-client-group" end - it "redirects to a view scheme page" do - follow_redirect! + it "allows updating secondary client group" do expect(response).to have_http_status(:ok) - expect(path).to match("/schemes/#{scheme.id}") - expect(page).to have_content(scheme.service_name) - assert_select "a", text: /Change/, count: 3 + expect(path).to match("/schemes/#{scheme.id}/confirm-secondary-client-group") end end end @@ -1992,12 +1986,9 @@ RSpec.describe SchemesController, type: :request do get "/schemes/#{scheme.id}/secondary-client-group" end - it "redirects to a view scheme page" do - follow_redirect! + it "allows editing secondary client group" do expect(response).to have_http_status(:ok) - expect(path).to match("/schemes/#{scheme.id}") - expect(page).to have_content(scheme.service_name) - assert_select "a", text: /Change/, count: 3 + expect(path).to match("/schemes/#{scheme.id}/secondary-client-group") end end