From 14a163d97996d7e07601aa06b8b07717fe7743e2 Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Mon, 3 Jul 2023 11:08:15 +0100 Subject: [PATCH] CLDC-2460 Update edit end date functionality (#1721) * Redirect lettings log to review page if the collection year is closed for editing * Redirect sales log to review page if the collection year is closed for editing * Update location default deactivation date * Update location default deactivation date * Do not display resources for a closed collection year * lint * Extract a method * tests * Update breadcrumbs for closed period --- app/controllers/lettings_logs_controller.rb | 2 + app/controllers/locations_controller.rb | 2 +- app/controllers/sales_logs_controller.rb | 6 +- app/controllers/schemes_controller.rb | 2 +- app/helpers/review_helper.rb | 28 +++ app/models/form_handler.rb | 16 ++ app/models/location_deactivation_period.rb | 4 +- app/models/log.rb | 4 + app/models/scheme_deactivation_period.rb | 4 +- app/views/form/review.html.erb | 8 +- .../layouts/_collection_resources.html.erb | 168 +++++++++--------- app/views/locations/toggle_active.html.erb | 2 +- app/views/schemes/toggle_active.html.erb | 2 +- .../requests/lettings_logs_controller_spec.rb | 70 +++++++- spec/requests/locations_controller_spec.rb | 2 +- .../requests/organisations_controller_spec.rb | 39 ++++ spec/requests/sales_logs_controller_spec.rb | 78 ++++++++ 17 files changed, 330 insertions(+), 107 deletions(-) create mode 100644 app/helpers/review_helper.rb diff --git a/app/controllers/lettings_logs_controller.rb b/app/controllers/lettings_logs_controller.rb index f67e94acc..b29e72b5d 100644 --- a/app/controllers/lettings_logs_controller.rb +++ b/app/controllers/lettings_logs_controller.rb @@ -63,6 +63,8 @@ class LettingsLogsController < LogsController if @log.unresolved redirect_to(send(@log.form.unresolved_log_path, @log)) + elsif @log.collection_closed_for_editing? + redirect_to review_lettings_log_path(@log) else render("logs/edit", locals: { current_user: }) end diff --git a/app/controllers/locations_controller.rb b/app/controllers/locations_controller.rb index 199c295dd..e55ee10d6 100644 --- a/app/controllers/locations_controller.rb +++ b/app/controllers/locations_controller.rb @@ -280,7 +280,7 @@ private if params[:location_deactivation_period].blank? return elsif params[:location_deactivation_period]["#{key}_type".to_sym] == "default" - return FormHandler.instance.start_date_of_earliest_open_collection_period + return FormHandler.instance.start_date_of_earliest_open_for_editing_collection_period elsif params[:location_deactivation_period][key.to_sym].present? return params[:location_deactivation_period][key.to_sym] end diff --git a/app/controllers/sales_logs_controller.rb b/app/controllers/sales_logs_controller.rb index 4a06fa6c4..7c5083265 100644 --- a/app/controllers/sales_logs_controller.rb +++ b/app/controllers/sales_logs_controller.rb @@ -37,7 +37,11 @@ class SalesLogsController < LogsController def edit @log = current_user.sales_logs.visible.find(params[:id]) - render "logs/edit", locals: { current_user: } + if @log.collection_closed_for_editing? + redirect_to review_sales_log_path(@log, sales_log: true) + else + render "logs/edit", locals: { current_user: } + end end def destroy diff --git a/app/controllers/schemes_controller.rb b/app/controllers/schemes_controller.rb index 5c2fe355f..6dc24ddcd 100644 --- a/app/controllers/schemes_controller.rb +++ b/app/controllers/schemes_controller.rb @@ -318,7 +318,7 @@ private if params[:scheme_deactivation_period].blank? return elsif params[:scheme_deactivation_period]["#{key}_type".to_sym] == "default" - return FormHandler.instance.start_date_of_earliest_open_collection_period + return FormHandler.instance.start_date_of_earliest_open_for_editing_collection_period elsif params[:scheme_deactivation_period][key.to_sym].present? return params[:scheme_deactivation_period][key.to_sym] end diff --git a/app/helpers/review_helper.rb b/app/helpers/review_helper.rb new file mode 100644 index 000000000..502c11b5d --- /dev/null +++ b/app/helpers/review_helper.rb @@ -0,0 +1,28 @@ +module ReviewHelper + include CollectionTimeHelper + + def review_log_info_text(log) + if log.collection_period_open? + "You can review and make changes to this log until #{log.form.submission_deadline.to_formatted_s(:govuk_date)}.".html_safe + else + start_year = log.startdate ? collection_start_year_for_date(log.startdate) : log.form.start_date.year + "This log is from the #{start_year}/#{start_year + 1} collection window, which is now closed." + end + end + + def review_breadcrumbs(log) + class_name = log.class.model_name.human.downcase + if log.collection_closed_for_editing? + content_for :breadcrumbs, govuk_breadcrumbs(breadcrumbs: { + "Logs" => url_for(log.class), + "Log #{log.id}" => "", + }) + else + content_for :breadcrumbs, govuk_breadcrumbs(breadcrumbs: { + "Logs" => url_for(log.class), + "Log #{log.id}" => url_for(log), + "Review #{class_name}" => "", + }) + end + end +end diff --git a/app/models/form_handler.rb b/app/models/form_handler.rb index c4b3c51d4..8cbd5a2e5 100644 --- a/app/models/form_handler.rb +++ b/app/models/form_handler.rb @@ -115,10 +115,18 @@ class FormHandler in_crossover_period? ? previous_collection_start_date : current_collection_start_date end + def start_date_of_earliest_open_for_editing_collection_period + in_edit_crossover_period? ? previous_collection_start_date : current_collection_start_date + end + def in_crossover_period?(now: Time.zone.now) lettings_in_crossover_period?(now:) || sales_in_crossover_period?(now:) end + def in_edit_crossover_period?(now: Time.zone.now) + lettings_in_edit_crossover_period?(now:) || sales_in_edit_crossover_period?(now:) + end + def lettings_in_crossover_period?(now: Time.zone.now) forms = lettings_forms.values forms.count { |form| now.between?(form.start_date, form.new_logs_end_date) } > 1 @@ -157,6 +165,14 @@ class FormHandler end end + def earliest_open_for_editing_collection_start_date(now: Time.zone.now) + if in_edit_crossover_period?(now:) + collection_start_date(now) - 1.year + else + collection_start_date(now) + end + end + private def get_all_forms diff --git a/app/models/location_deactivation_period.rb b/app/models/location_deactivation_period.rb index be635a975..3f222509e 100644 --- a/app/models/location_deactivation_period.rb +++ b/app/models/location_deactivation_period.rb @@ -34,8 +34,8 @@ class LocationDeactivationPeriodValidator < ActiveModel::Validator end elsif location.location_deactivation_periods.any? { |period| period.reactivation_date.present? && record.deactivation_date.between?(period.deactivation_date, period.reactivation_date - 1.day) } record.errors.add(:deactivation_date, message: I18n.t("validations.location.deactivation.during_deactivated_period")) - elsif record.deactivation_date.before? FormHandler.instance.start_date_of_earliest_open_collection_period - record.errors.add(:deactivation_date, message: I18n.t("validations.location.toggle_date.out_of_range", date: FormHandler.instance.start_date_of_earliest_open_collection_period.to_formatted_s(:govuk_date))) + elsif record.deactivation_date.before? FormHandler.instance.start_date_of_earliest_open_for_editing_collection_period + record.errors.add(:deactivation_date, message: I18n.t("validations.location.toggle_date.out_of_range", date: FormHandler.instance.start_date_of_earliest_open_for_editing_collection_period.to_formatted_s(:govuk_date))) elsif record.deactivation_date.before? location.available_from record.errors.add(:deactivation_date, message: I18n.t("validations.location.toggle_date.before_creation", date: location.available_from.to_formatted_s(:govuk_date))) end diff --git a/app/models/log.rb b/app/models/log.rb index c17bd2c44..3a6361e36 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -188,6 +188,10 @@ class Log < ApplicationRecord bulk_upload_id.present? end + def collection_closed_for_editing? + form.edit_end_date < Time.zone.now || older_than_previous_collection_year? + end + private # Handle logs that are older than previous collection start date diff --git a/app/models/scheme_deactivation_period.rb b/app/models/scheme_deactivation_period.rb index e413bb6a9..176d15211 100644 --- a/app/models/scheme_deactivation_period.rb +++ b/app/models/scheme_deactivation_period.rb @@ -34,8 +34,8 @@ class SchemeDeactivationPeriodValidator < ActiveModel::Validator end elsif scheme.scheme_deactivation_periods.any? { |period| period.reactivation_date.present? && record.deactivation_date.between?(period.deactivation_date, period.reactivation_date - 1.day) } record.errors.add(:deactivation_date, message: I18n.t("validations.scheme.deactivation.during_deactivated_period")) - elsif record.deactivation_date.before? FormHandler.instance.start_date_of_earliest_open_collection_period - record.errors.add(:deactivation_date, message: I18n.t("validations.scheme.toggle_date.out_of_range", date: FormHandler.instance.start_date_of_earliest_open_collection_period.to_formatted_s(:govuk_date))) + elsif record.deactivation_date.before? FormHandler.instance.start_date_of_earliest_open_for_editing_collection_period + record.errors.add(:deactivation_date, message: I18n.t("validations.scheme.toggle_date.out_of_range", date: FormHandler.instance.start_date_of_earliest_open_for_editing_collection_period.to_formatted_s(:govuk_date))) elsif record.deactivation_date.before? scheme.available_from record.errors.add(:deactivation_date, message: I18n.t("validations.scheme.toggle_date.before_creation", date: scheme.available_from.to_formatted_s(:govuk_date))) end diff --git a/app/views/form/review.html.erb b/app/views/form/review.html.erb index f3b6a2f30..9a94059e4 100644 --- a/app/views/form/review.html.erb +++ b/app/views/form/review.html.erb @@ -1,10 +1,6 @@ <% class_name = @log.class.model_name.human.downcase %> <% content_for :title, "Review #{class_name}" %> -<% content_for :breadcrumbs, govuk_breadcrumbs(breadcrumbs: { - "Logs" => url_for(@log.class), - "Log #{@log.id}" => url_for(@log), - "Review #{class_name}" => "", -}) %> +<% review_breadcrumbs(@log) %>
- You can review and make changes to this log until <%= @log.form.submission_deadline.to_formatted_s(:govuk_date) %>. + <%= review_log_info_text(@log) %>
<% @log.form.sections.map do |section| %>For lettings starting during 1 April 2023 to 31 March 2024 and sales completing during the same period, use the 2023/24 forms.
-