diff --git a/app/models/location.rb b/app/models/location.rb index e8ec8569a..c14f40324 100644 --- a/app/models/location.rb +++ b/app/models/location.rb @@ -394,10 +394,13 @@ class Location < ApplicationRecord end def status_during(date) - return :reactivating_soon if location_deactivation_periods.any? { |period| period.reactivation_date.present? && date.between?(period.deactivation_date, period.reactivation_date) } || available_from > date + closest_reactivation = location_deactivation_periods.find { |period| period.reactivation_date.present? && date.between?(period.deactivation_date, period.reactivation_date) } + return { status: :reactivating_soon, date: closest_reactivation.reactivation_date } if closest_reactivation.present? + + return { status: :reactivating_soon, date: available_from } if available_from > date open_deactivation = location_deactivation_periods.deactivations_without_reactivation.first - return :deactivated if open_deactivation.present? && open_deactivation.deactivation_date < date + return { status: :deactivated, date: open_deactivation.deactivation_date } if open_deactivation.present? && open_deactivation.deactivation_date < date end private diff --git a/app/models/validations/date_validations.rb b/app/models/validations/date_validations.rb index 68a72eb61..e9bf199b1 100644 --- a/app/models/validations/date_validations.rb +++ b/app/models/validations/date_validations.rb @@ -60,12 +60,13 @@ module Validations::DateValidations record.errors.add :startdate, I18n.t("validations.setup.startdate.after_major_repair_date") end - if record.location&.status_during(record.startdate) == :deactivated - record.errors.add :startdate, I18n.t("validations.setup.startdate.during_deactivated_location", postcode: record.location.postcode, date: "") + status_during_startdate = record.location&.status_during(record.startdate) + if status_during_startdate.present? && status_during_startdate[:status] == :deactivated + record.errors.add :startdate, I18n.t("validations.setup.startdate.during_deactivated_location", postcode: record.location.postcode, date: status_during_startdate[:date].to_formatted_s(:govuk_date)) end - if record.location&.status_during(record.startdate) == :reactivating_soon - record.errors.add :startdate, I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: record.location.postcode, date: "") + if status_during_startdate.present? && status_during_startdate[:status] == :reactivating_soon + record.errors.add :startdate, I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: record.location.postcode, date: status_during_startdate[:date].to_formatted_s(:govuk_date)) end end diff --git a/app/models/validations/setup_validations.rb b/app/models/validations/setup_validations.rb index b310a88bb..6ebb79a2f 100644 --- a/app/models/validations/setup_validations.rb +++ b/app/models/validations/setup_validations.rb @@ -6,22 +6,24 @@ module Validations::SetupValidations end def validate_location(record) - if record.location&.status_during(record.startdate) == :deactivated - record.errors.add :location_id, I18n.t("validations.setup.startdate.during_deactivated_location") + status_during_startdate = record.location&.status_during(record.startdate) + if status_during_startdate.present? && status_during_startdate[:status] == :deactivated + record.errors.add :location_id, I18n.t("validations.setup.startdate.during_deactivated_location", postcode: record.location.postcode, date: status_during_startdate[:date].to_formatted_s(:govuk_date)) end - if record.location&.status_during(record.startdate) == :reactivating_soon - record.errors.add :location_id, I18n.t("validations.setup.startdate.location_reactivating_soon") + if status_during_startdate.present? && status_during_startdate[:status] == :reactivating_soon + record.errors.add :location_id, I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: record.location.postcode, date: status_during_startdate[:date].to_formatted_s(:govuk_date)) end end def validate_scheme(record) - if record.location&.status_during(record.startdate) == :deactivated - record.errors.add :scheme_id, I18n.t("validations.setup.startdate.during_deactivated_location") + status_during_startdate = record.location&.status_during(record.startdate) + if status_during_startdate.present? && status_during_startdate[:status] == :deactivated + record.errors.add :scheme_id, I18n.t("validations.setup.startdate.during_deactivated_location", postcode: record.location.postcode, date: status_during_startdate[:date].to_formatted_s(:govuk_date)) end - if record.location&.status_during(record.startdate) == :reactivating_soon - record.errors.add :scheme_id, I18n.t("validations.setup.startdate.location_reactivating_soon") + if status_during_startdate.present? && status_during_startdate[:status] == :reactivating_soon + record.errors.add :scheme_id, I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: record.location.postcode, date: status_during_startdate[:date].to_formatted_s(:govuk_date)) end end diff --git a/spec/models/validations/date_validations_spec.rb b/spec/models/validations/date_validations_spec.rb index 340494a06..5ca1b95e7 100644 --- a/spec/models/validations/date_validations_spec.rb +++ b/spec/models/validations/date_validations_spec.rb @@ -98,7 +98,7 @@ RSpec.describe Validations::DateValidations do record.location = location date_validator.validate_startdate(record) expect(record.errors["startdate"]) - .to include(match I18n.t("validations.setup.startdate.during_deactivated_location", postcode: location.postcode, date: "6 April 2022")) + .to include(match I18n.t("validations.setup.startdate.during_deactivated_location", postcode: location.postcode, date: "4 June 2022")) end it "produces no error when tenancy start date is during an active location period" do diff --git a/spec/models/validations/setup_validations_spec.rb b/spec/models/validations/setup_validations_spec.rb index 6e9338ea8..69890f2e9 100644 --- a/spec/models/validations/setup_validations_spec.rb +++ b/spec/models/validations/setup_validations_spec.rb @@ -46,7 +46,7 @@ RSpec.describe Validations::SetupValidations do record.location = location setup_validator.validate_scheme(record) expect(record.errors["scheme_id"]) - .to include(match I18n.t("validations.setup.startdate.during_deactivated_location")) + .to include(match I18n.t("validations.setup.startdate.during_deactivated_location", postcode: location.postcode, date: "4 June 2022")) end it "produces no error when tenancy start date is during an active location period" do @@ -71,7 +71,7 @@ RSpec.describe Validations::SetupValidations do record.location = location setup_validator.validate_scheme(record) expect(record.errors["scheme_id"]) - .to include(match I18n.t("validations.setup.startdate.location_reactivating_soon")) + .to include(match I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: location.postcode, date: "4 August 2022")) end it "produces no error when tenancy start date is during an active location period" do @@ -98,7 +98,7 @@ RSpec.describe Validations::SetupValidations do record.location = location setup_validator.validate_scheme(record) expect(record.errors["scheme_id"]) - .to include(match I18n.t("validations.setup.startdate.location_reactivating_soon")) + .to include(match I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: location.postcode, date: "15 September 2022")) end end end @@ -118,7 +118,7 @@ RSpec.describe Validations::SetupValidations do record.location = location setup_validator.validate_location(record) expect(record.errors["location_id"]) - .to include(match I18n.t("validations.setup.startdate.during_deactivated_location")) + .to include(match I18n.t("validations.setup.startdate.during_deactivated_location", postcode: location.postcode, date: "4 June 2022")) end it "produces no error when tenancy start date is during an active location period" do @@ -143,7 +143,7 @@ RSpec.describe Validations::SetupValidations do record.location = location setup_validator.validate_location(record) expect(record.errors["location_id"]) - .to include(match I18n.t("validations.setup.startdate.location_reactivating_soon")) + .to include(match I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: location.postcode, date: "4 August 2022")) end it "produces no error when tenancy start date is during an active location period" do @@ -170,7 +170,7 @@ RSpec.describe Validations::SetupValidations do record.location = location setup_validator.validate_location(record) expect(record.errors["location_id"]) - .to include(match I18n.t("validations.setup.startdate.location_reactivating_soon")) + .to include(match I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: location.postcode, date: "15 September 2022")) end end end