From f336d8a1edaf2c904e81cf95e4b456a71812981a Mon Sep 17 00:00:00 2001 From: tim-s-ccs Date: Mon, 13 Mar 2023 16:53:28 +0000 Subject: [PATCH] I have updated the RM3830 admin section so that when the framework has expired, admins will be unable to edit/update any of the service/supplier data in the system. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I’ve also added specs to validate these changes. --- .../admin/framework_controller.rb | 4 + .../admin/supplier_details_controller.rb | 6 + .../rm3830/admin/service_rates_controller.rb | 6 + .../rm3830/admin/sublot_regions_controller.rb | 6 + .../admin/sublot_services_controller.rb | 6 + .../admin/framework_helper.rb | 4 + .../admin/supplier_details/show.html.erb | 50 ++- .../_average-framework-rates.html.erb | 5 +- .../_call-off-benchmark-rates.html.erb | 5 +- .../service_rates/_variance_table.html.erb | 2 +- .../rm3830/admin/service_rates/edit.html.erb | 2 +- .../rm3830/admin/sublot_regions/edit.html.erb | 6 +- .../admin/sublot_services/_services.html.erb | 6 +- .../_services_prices_and_variances.html.erb | 12 +- .../views/facilities_management.rm3830.en.yml | 5 + .../views/facilities_management.rm6232.en.yml | 2 + .../service_rates_framework_expired.feature | 16 + ...supplier_details_framework_expired.feature | 12 + ...r_framework_data_framework_expired.feature | 37 ++ ...supplier_details_framework_expired.feature | 13 + .../rm3830/framework_status_steps.rb | 23 ++ features/support/pages/admin.rb | 2 +- ...supplier_details_controller_rm3830_spec.rb | 354 ++++++++++------- ...supplier_details_controller_rm6232_spec.rb | 356 +++++++++++------- .../admin/service_rates_controller_spec.rb | 112 +++--- .../admin/sublot_regions_controller_spec.rb | 44 ++- .../admin/sublot_services_controller_spec.rb | 152 +++++--- .../admin/framework_helper_spec.rb | 25 ++ 28 files changed, 865 insertions(+), 408 deletions(-) create mode 100644 features/facilities_management/rm3830/admin/assessed_value/service_rates_framework_expired.feature create mode 100644 features/facilities_management/rm3830/admin/supplier_data/supplier_details/supplier_details_framework_expired.feature create mode 100644 features/facilities_management/rm3830/admin/supplier_data/supplier_framework_data/supplier_framework_data_framework_expired.feature create mode 100644 features/facilities_management/rm6232/admin/supplier_data/supplier_details/supplier_details_framework_expired.feature create mode 100644 features/step_definitions/facilities_management/rm3830/framework_status_steps.rb create mode 100644 spec/helpers/facilities_management/admin/framework_helper_spec.rb diff --git a/app/controllers/facilities_management/admin/framework_controller.rb b/app/controllers/facilities_management/admin/framework_controller.rb index 14858548bd..022f6463b3 100644 --- a/app/controllers/facilities_management/admin/framework_controller.rb +++ b/app/controllers/facilities_management/admin/framework_controller.rb @@ -39,6 +39,10 @@ def set_lot def service_scope :facilities_management end + + def set_framework_has_expired + @framework_has_expired = Framework.find_by(framework: params[:framework]).status == :expired + end end end end diff --git a/app/controllers/facilities_management/admin/supplier_details_controller.rb b/app/controllers/facilities_management/admin/supplier_details_controller.rb index 44f210f6dd..a1f1010dbd 100644 --- a/app/controllers/facilities_management/admin/supplier_details_controller.rb +++ b/app/controllers/facilities_management/admin/supplier_details_controller.rb @@ -1,6 +1,8 @@ module FacilitiesManagement module Admin class SupplierDetailsController < FacilitiesManagement::Admin::FrameworkController + before_action :set_framework_has_expired + before_action :redirect_if_framework_has_expired, only: %i[edit update] before_action :set_data_for_framework before_action :set_supplier before_action :set_page, only: %i[edit update] @@ -53,6 +55,10 @@ def supplier_params params.require(@suppliers_admin_param_key).permit(PERMITED_PARAMS[@page]) end + def redirect_if_framework_has_expired + redirect_to facilities_management_admin_supplier_detail_path if @framework_has_expired + end + PERMITED_PARAMS = { supplier_name: %i[supplier_name], supplier_contact_information: %i[contact_name contact_email contact_phone], diff --git a/app/controllers/facilities_management/rm3830/admin/service_rates_controller.rb b/app/controllers/facilities_management/rm3830/admin/service_rates_controller.rb index 78f8af8fa1..bde81ae46d 100644 --- a/app/controllers/facilities_management/rm3830/admin/service_rates_controller.rb +++ b/app/controllers/facilities_management/rm3830/admin/service_rates_controller.rb @@ -2,6 +2,8 @@ module FacilitiesManagement module RM3830 module Admin class ServiceRatesController < FacilitiesManagement::Admin::FrameworkController + before_action :set_framework_has_expired + before_action :redirect_if_framework_has_expired, only: :update before_action :set_slug, :set_rate_type, :full_services, :set_variances, :initialise_errors def edit; end @@ -74,6 +76,10 @@ def save_updated_rates @variances.each { |_label, rate| rate.save if rate.changed? } end + + def redirect_if_framework_has_expired + redirect_to edit_facilities_management_rm3830_admin_service_rate_path if @framework_has_expired + end end end end diff --git a/app/controllers/facilities_management/rm3830/admin/sublot_regions_controller.rb b/app/controllers/facilities_management/rm3830/admin/sublot_regions_controller.rb index db6a2cdf35..ce920f0838 100644 --- a/app/controllers/facilities_management/rm3830/admin/sublot_regions_controller.rb +++ b/app/controllers/facilities_management/rm3830/admin/sublot_regions_controller.rb @@ -2,6 +2,8 @@ module FacilitiesManagement module RM3830 module Admin class SublotRegionsController < FacilitiesManagement::Admin::FrameworkController + before_action :set_framework_has_expired + before_action :redirect_if_framework_has_expired, only: :update before_action :set_supplier, :set_lot, :redirect_if_lot_out_of_range before_action :set_region_data, only: :edit @@ -22,6 +24,10 @@ def set_region_data @selected_supplier_regions = Supplier::SupplierRegionsHelper.supllier_selected_regions(supplier_lot_data) @subregions = FacilitiesManagement::Region.all.to_h { |region| [region.code, region.name] } end + + def redirect_if_framework_has_expired + redirect_to edit_facilities_management_rm3830_admin_supplier_framework_datum_sublot_region_path if @framework_has_expired + end end end end diff --git a/app/controllers/facilities_management/rm3830/admin/sublot_services_controller.rb b/app/controllers/facilities_management/rm3830/admin/sublot_services_controller.rb index f82b41a110..ba9c6449ed 100644 --- a/app/controllers/facilities_management/rm3830/admin/sublot_services_controller.rb +++ b/app/controllers/facilities_management/rm3830/admin/sublot_services_controller.rb @@ -2,6 +2,8 @@ module FacilitiesManagement module RM3830 module Admin class SublotServicesController < FacilitiesManagement::Admin::FrameworkController + before_action :set_framework_has_expired + before_action :redirect_if_framework_has_expired, only: :update before_action :set_supplier, :set_lot, :redirect_if_lot_out_of_range before_action :full_services before_action :set_service_data, only: :edit @@ -86,6 +88,10 @@ def update_checkboxes @supplier.replace_services_for_lot(params[:checked_services], @lot) @supplier.save end + + def redirect_if_framework_has_expired + redirect_to edit_facilities_management_rm3830_admin_supplier_framework_datum_sublot_service_path if @framework_has_expired + end end end end diff --git a/app/helpers/facilities_management/admin/framework_helper.rb b/app/helpers/facilities_management/admin/framework_helper.rb index 5d364788ee..239e99bd6f 100644 --- a/app/helpers/facilities_management/admin/framework_helper.rb +++ b/app/helpers/facilities_management/admin/framework_helper.rb @@ -4,4 +4,8 @@ def admin_breadcrumbs(*breadcrumbs) govuk_breadcrumbs(*breadcrumbs) end + + def framework_expired_warning(text) + warning_text(text) if @framework_has_expired + end end diff --git a/app/views/facilities_management/admin/supplier_details/show.html.erb b/app/views/facilities_management/admin/supplier_details/show.html.erb index 23919873b9..ec6faf9059 100644 --- a/app/views/facilities_management/admin/supplier_details/show.html.erb +++ b/app/views/facilities_management/admin/supplier_details/show.html.erb @@ -5,6 +5,8 @@ ) %> <%= govuk_page_header(FacilitiesManagement::PageDetail::Heading.new(t('.supplier_details'), @supplier.supplier_name, nil, nil, nil)) %> +<%= framework_expired_warning(t("facilities_management.#{params[:framework].downcase}.admin.you_cannot_update.details")) %> +

<%= t('.edit_supplier_details') %>

@@ -24,9 +26,11 @@
<%= supplier_user_email %>
-
- <%= link_to(t('.change'), edit_facilities_management_admin_supplier_detail_path(@framework, @supplier, page: :supplier_user), class: 'govuk-link--no-visited-state') %> -
+ <% unless @framework_has_expired %> +
+ <%= link_to(t('.change'), edit_facilities_management_admin_supplier_detail_path(@framework, @supplier, page: :supplier_user), class: 'govuk-link--no-visited-state') %> +
+ <% end %> @@ -48,9 +52,11 @@
<%= govuk_tag_with_text(*@supplier.current_status) %>
-
- <%= link_to(t('.change'), edit_facilities_management_admin_supplier_detail_path(@framework, @supplier, page: :supplier_status), class: 'govuk-link--no-visited-state') %> -
+ <% unless @framework_has_expired %> +
+ <%= link_to(t('.change'), edit_facilities_management_admin_supplier_detail_path(@framework, @supplier, page: :supplier_status), class: 'govuk-link--no-visited-state') %> +
+ <% end %> @@ -71,9 +77,11 @@
<%= contact_detail(:supplier_name) %>
-
- <%= link_to(t('.change'), edit_facilities_management_admin_supplier_detail_path(@framework, @supplier, page: :supplier_name), class: 'govuk-link--no-visited-state') %> -
+ <% unless @framework_has_expired %> +
+ <%= link_to(t('.change'), edit_facilities_management_admin_supplier_detail_path(@framework, @supplier, page: :supplier_name), class: 'govuk-link--no-visited-state') %> +
+ <% end %> <% if params[:framework] == 'RM3830' %> <% %i[contact_name contact_email contact_phone].each do |attribute| %> @@ -84,9 +92,11 @@
<%= contact_detail(attribute) %>
-
- <%= link_to(t('.change'), edit_facilities_management_admin_supplier_detail_path(@framework, @supplier, page: :supplier_contact_information), class: 'govuk-link--no-visited-state') %> -
+ <% unless @framework_has_expired %> +
+ <%= link_to(t('.change'), edit_facilities_management_admin_supplier_detail_path(@framework, @supplier, page: :supplier_contact_information), class: 'govuk-link--no-visited-state') %> +
+ <% end %> <% end %> <% end %> @@ -109,9 +119,11 @@
<%= contact_detail(attribute) %>
-
- <%= link_to(t('.change'), edit_facilities_management_admin_supplier_detail_path(@framework, @supplier, page: :additional_supplier_information), class: 'govuk-link--no-visited-state') %> -
+ <% unless @framework_has_expired %> +
+ <%= link_to(t('.change'), edit_facilities_management_admin_supplier_detail_path(@framework, @supplier, page: :additional_supplier_information), class: 'govuk-link--no-visited-state') %> +
+ <% end %> <% end %>
@@ -121,9 +133,11 @@
<%= full_address %>
-
- <%= link_to(t('.change'), edit_facilities_management_admin_supplier_detail_path(@framework, @supplier, page: :supplier_address), class: 'govuk-link--no-visited-state') %> -
+ <% unless @framework_has_expired %> +
+ <%= link_to(t('.change'), edit_facilities_management_admin_supplier_detail_path(@framework, @supplier, page: :supplier_address), class: 'govuk-link--no-visited-state') %> +
+ <% end %>
diff --git a/app/views/facilities_management/rm3830/admin/service_rates/_average-framework-rates.html.erb b/app/views/facilities_management/rm3830/admin/service_rates/_average-framework-rates.html.erb index ec8de359f9..3dc2041f9c 100644 --- a/app/views/facilities_management/rm3830/admin/service_rates/_average-framework-rates.html.erb +++ b/app/views/facilities_management/rm3830/admin/service_rates/_average-framework-rates.html.erb @@ -1,6 +1,9 @@

<%= t('.heading') %>

+ +<%= framework_expired_warning(t('facilities_management.rm3830.admin.you_cannot_update.rates')) %> +

<%= t('.leading_text') %>
<%= t('.percentage_note') %> @@ -36,7 +39,7 @@ - <%= text_field_tag "rates[#{rate.id}]", rate.read_attribute_before_type_cast(:framework), class: "govuk-input govuk-input--width-3 #{'govuk-input--error' if rate_invalid }" %> + <%= text_field_tag "rates[#{rate.id}]", rate.read_attribute_before_type_cast(:framework), class: "govuk-input govuk-input--width-3 #{'govuk-input--error' if rate_invalid }", disabled: @framework_has_expired %> <% end %> diff --git a/app/views/facilities_management/rm3830/admin/service_rates/_call-off-benchmark-rates.html.erb b/app/views/facilities_management/rm3830/admin/service_rates/_call-off-benchmark-rates.html.erb index a7bdec38fa..b4019374d8 100644 --- a/app/views/facilities_management/rm3830/admin/service_rates/_call-off-benchmark-rates.html.erb +++ b/app/views/facilities_management/rm3830/admin/service_rates/_call-off-benchmark-rates.html.erb @@ -1,4 +1,7 @@

<%= t('.heading') %>

+ +<%= framework_expired_warning(t('facilities_management.rm3830.admin.you_cannot_update.rates')) %> +

<%= t('.leading_text') %>
<%= t('.percentage_note') %> @@ -49,7 +52,7 @@ <% rate = work_pckg['rates'].find(&selector) %> <% if rate %> - <%= text_field_tag "rates[#{rate.id}]", rate.read_attribute_before_type_cast(:benchmark), class: "govuk-input govuk-input--width-3 #{'govuk-input--error' if rate.errors.any?}", 'aria-label': "#{work_pckg['name']} #{rate.standard.blank? ? 'normal price' : "standard #{rate.standard}"}" %> + <%= text_field_tag "rates[#{rate.id}]", rate.read_attribute_before_type_cast(:benchmark), class: "govuk-input govuk-input--width-3 #{'govuk-input--error' if rate.errors.any?}", 'aria-label': "#{work_pckg['name']} #{rate.standard.blank? ? 'normal price' : "standard #{rate.standard}"}", disabled: @framework_has_expired %> <% end %> <% end %> diff --git a/app/views/facilities_management/rm3830/admin/service_rates/_variance_table.html.erb b/app/views/facilities_management/rm3830/admin/service_rates/_variance_table.html.erb index c5f5a87b73..1519d6ba1b 100644 --- a/app/views/facilities_management/rm3830/admin/service_rates/_variance_table.html.erb +++ b/app/views/facilities_management/rm3830/admin/service_rates/_variance_table.html.erb @@ -22,7 +22,7 @@ - <%= text_field_tag "rates[#{rate.id}]", rate.read_attribute_before_type_cast(attribue), class: "govuk-input govuk-input--width-3 #{'govuk-input--error' if rate_invalid }" %> + <%= text_field_tag "rates[#{rate.id}]", rate.read_attribute_before_type_cast(attribue), class: "govuk-input govuk-input--width-3 #{'govuk-input--error' if rate_invalid }", disabled: @framework_has_expired %> <% end %> diff --git a/app/views/facilities_management/rm3830/admin/service_rates/edit.html.erb b/app/views/facilities_management/rm3830/admin/service_rates/edit.html.erb index 17c9ba5f5d..81c0388ac9 100644 --- a/app/views/facilities_management/rm3830/admin/service_rates/edit.html.erb +++ b/app/views/facilities_management/rm3830/admin/service_rates/edit.html.erb @@ -5,6 +5,6 @@ <%= form_with url: facilities_management_rm3830_admin_service_rate_path(slug: @slug), method: :put, html: { specialvalidation: true, novalidate: true }, local: 'false' do |f| %> <%= render partial: @slug, locals: { f: f } %> - <%= f.submit t('.update_button'), class: 'govuk-button', name: 'update_benchmark_rates', aria: { label: t('.update_button') } %> + <%= f.submit t('.update_button'), class: 'govuk-button', name: 'update_benchmark_rates', aria: { label: t('.update_button') }, disabled: @framework_has_expired %> <%= link_to t('.return_link'), facilities_management_rm3830_admin_path, class: 'govuk-link govuk-caption-m'%> <% end %> diff --git a/app/views/facilities_management/rm3830/admin/sublot_regions/edit.html.erb b/app/views/facilities_management/rm3830/admin/sublot_regions/edit.html.erb index e41febb995..3bed9b69da 100644 --- a/app/views/facilities_management/rm3830/admin/sublot_regions/edit.html.erb +++ b/app/views/facilities_management/rm3830/admin/sublot_regions/edit.html.erb @@ -6,6 +6,7 @@

<%= @supplier.supplier_name %>

<%= @sublot_region_name %>

+<%= framework_expired_warning(t('facilities_management.rm3830.admin.you_cannot_update.regions')) %>

<%= t('.leading_text') %>

<%= form_with url: facilities_management_rm3830_admin_supplier_framework_datum_sublot_region_path, method: 'put', local: 'false', html: { specialvalidation: true } do |f| %> @@ -25,7 +26,8 @@ key2, @selected_supplier_regions[key2], class: "govuk-checkboxes__input", - id: "#{key2}" + id: "#{key2}", + disabled: @framework_has_expired ) %>