Browse Source

Update date validations for 2025

pull/2886/head
Kat 7 months ago
parent
commit
2265302291
  1. 40
      app/models/validations/date_validations.rb
  2. 4
      config/locales/validations/lettings/date.en.yml
  3. 62
      spec/models/validations/date_validations_spec.rb

40
app/models/validations/date_validations.rb

@ -11,15 +11,27 @@ module Validations::DateValidations
record.errors.add :mrcdate, I18n.t("validations.lettings.date.mrcdate.not_first_let") record.errors.add :mrcdate, I18n.t("validations.lettings.date.mrcdate.not_first_let")
end end
if record["mrcdate"].present? && record["startdate"].present? && record["startdate"].to_date - record["mrcdate"].to_date > 3650 return unless record["mrcdate"].present? && record["startdate"].present?
if record.form.start_year_2025_or_later?
if record["startdate"].to_date - record["mrcdate"].to_date > 7300
record.errors.add :mrcdate, I18n.t("validations.lettings.date.mrcdate.twenty_years_before_tenancy_start")
end
elsif record["startdate"].to_date - record["mrcdate"].to_date > 3650
record.errors.add :mrcdate, I18n.t("validations.lettings.date.mrcdate.ten_years_before_tenancy_start") record.errors.add :mrcdate, I18n.t("validations.lettings.date.mrcdate.ten_years_before_tenancy_start")
end end
end end
def validate_property_void_date(record) def validate_property_void_date(record)
if record["voiddate"].present? && record["startdate"].present? && record["startdate"].to_date - record["voiddate"].to_date > 3650 if record["voiddate"].present? && record["startdate"].present?
if record.form.start_year_2025_or_later?
if record["startdate"].to_date - record["voiddate"].to_date > 7300
record.errors.add :voiddate, I18n.t("validations.lettings.date.void_date.twenty_years_before_tenancy_start")
end
elsif record["startdate"].to_date - record["voiddate"].to_date > 3650
record.errors.add :voiddate, I18n.t("validations.lettings.date.void_date.ten_years_before_tenancy_start") record.errors.add :voiddate, I18n.t("validations.lettings.date.void_date.ten_years_before_tenancy_start")
end end
end
if record["voiddate"].present? && record["startdate"].present? && record["startdate"].to_date < record["voiddate"].to_date if record["voiddate"].present? && record["startdate"].present? && record["startdate"].to_date < record["voiddate"].to_date
record.errors.add :voiddate, I18n.t("validations.lettings.date.void_date.before_tenancy_start") record.errors.add :voiddate, I18n.t("validations.lettings.date.void_date.before_tenancy_start")
@ -42,6 +54,25 @@ module Validations::DateValidations
record.errors.add :startdate, I18n.t("validations.lettings.date.startdate.after_major_repair_date") record.errors.add :startdate, I18n.t("validations.lettings.date.startdate.after_major_repair_date")
end end
validate_startdate_against_mrc_and_void_dates(record)
end
private
def is_rsnvac_first_let?(record)
[15, 16, 17].include?(record["rsnvac"])
end
def validate_startdate_against_mrc_and_void_dates(record)
if record.form.start_year_2025_or_later?
if record["voiddate"].present? && record["startdate"].to_date - record["voiddate"].to_date > 7300
record.errors.add :startdate, I18n.t("validations.lettings.date.startdate.twenty_years_after_void_date")
end
if record["mrcdate"].present? && record["startdate"].to_date - record["mrcdate"].to_date > 7300
record.errors.add :startdate, I18n.t("validations.lettings.date.startdate.twenty_years_after_mrc_date")
end
else
if record["voiddate"].present? && record["startdate"].to_date - record["voiddate"].to_date > 3650 if record["voiddate"].present? && record["startdate"].to_date - record["voiddate"].to_date > 3650
record.errors.add :startdate, I18n.t("validations.lettings.date.startdate.ten_years_after_void_date") record.errors.add :startdate, I18n.t("validations.lettings.date.startdate.ten_years_after_void_date")
end end
@ -50,10 +81,5 @@ module Validations::DateValidations
record.errors.add :startdate, I18n.t("validations.lettings.date.startdate.ten_years_after_mrc_date") record.errors.add :startdate, I18n.t("validations.lettings.date.startdate.ten_years_after_mrc_date")
end end
end end
private
def is_rsnvac_first_let?(record)
[15, 16, 17].include?(record["rsnvac"])
end end
end end

4
config/locales/validations/lettings/date.en.yml

@ -7,14 +7,18 @@ en:
after_major_repair_date: "Enter a tenancy start date that is after the major repair date." after_major_repair_date: "Enter a tenancy start date that is after the major repair date."
ten_years_after_void_date: "Enter a tenancy start date that is no more than 10 years after the void date." ten_years_after_void_date: "Enter a tenancy start date that is no more than 10 years after the void date."
ten_years_after_mrc_date: "Enter a tenancy start date that is no more than 10 years after the major repairs completion date." ten_years_after_mrc_date: "Enter a tenancy start date that is no more than 10 years after the major repairs completion date."
twenty_years_after_void_date: "Enter a tenancy start date that is no more than 20 years after the void date."
twenty_years_after_mrc_date: "Enter a tenancy start date that is no more than 20 years after the major repairs completion date."
mrcdate: mrcdate:
before_tenancy_start: "Enter a major repairs date that is before the tenancy start date." before_tenancy_start: "Enter a major repairs date that is before the tenancy start date."
not_first_let: "Major repairs date must not be completed if the tenancy is a first let." not_first_let: "Major repairs date must not be completed if the tenancy is a first let."
ten_years_before_tenancy_start: "Enter a major repairs completion date that is no more than 10 years before the tenancy start date." ten_years_before_tenancy_start: "Enter a major repairs completion date that is no more than 10 years before the tenancy start date."
twenty_years_before_tenancy_start: "Enter a major repairs completion date that is no more than 20 years before the tenancy start date."
before_void_date: "Major repairs date must be after the void date if provided." before_void_date: "Major repairs date must be after the void date if provided."
void_date: void_date:
ten_years_before_tenancy_start: "Enter a void date no more than 10 years before the tenancy start date." ten_years_before_tenancy_start: "Enter a void date no more than 10 years before the tenancy start date."
twenty_years_before_tenancy_start: "Enter a void date no more than 20 years before the tenancy start date."
before_tenancy_start: "Enter a void date that is before the tenancy start date." before_tenancy_start: "Enter a void date that is before the tenancy start date."
after_mrcdate: "Void date must be before the major repairs date if provided." after_mrcdate: "Void date must be before the major repairs date if provided."

62
spec/models/validations/date_validations_spec.rb

@ -68,9 +68,10 @@ RSpec.describe Validations::DateValidations do
expect(record.errors["mrcdate"]).to be_empty expect(record.errors["mrcdate"]).to be_empty
end end
context "with 2024 logs or earlier" do
it "cannot be more than 10 years before the tenancy start date" do it "cannot be more than 10 years before the tenancy start date" do
record.startdate = Time.zone.local(2022, 2, 1) record.startdate = Time.zone.local(2024, 2, 1)
record.mrcdate = Time.zone.local(2012, 1, 1) record.mrcdate = Time.zone.local(2014, 1, 1)
date_validator.validate_property_major_repairs(record) date_validator.validate_property_major_repairs(record)
date_validator.validate_startdate(record) date_validator.validate_startdate(record)
expect(record.errors["mrcdate"]) expect(record.errors["mrcdate"])
@ -80,12 +81,34 @@ RSpec.describe Validations::DateValidations do
end end
it "must be within 10 years of the tenancy start date" do it "must be within 10 years of the tenancy start date" do
record.startdate = Time.zone.local(2022, 2, 1) record.startdate = Time.zone.local(2024, 2, 1)
record.mrcdate = Time.zone.local(2012, 3, 1) record.mrcdate = Time.zone.local(2014, 3, 1)
date_validator.validate_property_major_repairs(record) date_validator.validate_property_major_repairs(record)
expect(record.errors["mrcdate"]).to be_empty expect(record.errors["mrcdate"]).to be_empty
expect(record.errors["startdate"]).to be_empty expect(record.errors["startdate"]).to be_empty
end end
end
context "with 2025 logs or later" do
it "cannot be more than 20 years before the tenancy start date" do
record.startdate = Time.zone.local(2026, 2, 1)
record.mrcdate = Time.zone.local(2006, 1, 1)
date_validator.validate_property_major_repairs(record)
date_validator.validate_startdate(record)
expect(record.errors["mrcdate"])
.to include(match I18n.t("validations.lettings.date.mrcdate.twenty_years_before_tenancy_start"))
expect(record.errors["startdate"])
.to include(match I18n.t("validations.lettings.date.startdate.twenty_years_after_mrc_date"))
end
it "must be within 20 years of the tenancy start date" do
record.startdate = Time.zone.local(2026, 2, 1)
record.mrcdate = Time.zone.local(2006, 3, 1)
date_validator.validate_property_major_repairs(record)
expect(record.errors["mrcdate"]).to be_empty
expect(record.errors["startdate"]).to be_empty
end
end
context "when reason for vacancy is first let of property" do context "when reason for vacancy is first let of property" do
it "validates that no major repair date is provided for a new build" do it "validates that no major repair date is provided for a new build" do
@ -139,9 +162,10 @@ RSpec.describe Validations::DateValidations do
expect(record.errors["voiddate"]).to be_empty expect(record.errors["voiddate"]).to be_empty
end end
context "with 2024 logs or earlier" do
it "cannot be more than 10 years before the tenancy start date" do it "cannot be more than 10 years before the tenancy start date" do
record.startdate = Time.zone.local(2022, 2, 1) record.startdate = Time.zone.local(2024, 2, 1)
record.voiddate = Time.zone.local(2012, 1, 1) record.voiddate = Time.zone.local(2014, 1, 1)
date_validator.validate_property_void_date(record) date_validator.validate_property_void_date(record)
date_validator.validate_startdate(record) date_validator.validate_startdate(record)
expect(record.errors["voiddate"]) expect(record.errors["voiddate"])
@ -151,12 +175,34 @@ RSpec.describe Validations::DateValidations do
end end
it "must be within 10 years of the tenancy start date" do it "must be within 10 years of the tenancy start date" do
record.startdate = Time.zone.local(2022, 2, 1) record.startdate = Time.zone.local(2024, 2, 1)
record.voiddate = Time.zone.local(2012, 3, 1) record.voiddate = Time.zone.local(2014, 3, 1)
date_validator.validate_property_void_date(record) date_validator.validate_property_void_date(record)
expect(record.errors["voiddate"]).to be_empty expect(record.errors["voiddate"]).to be_empty
expect(record.errors["startdate"]).to be_empty expect(record.errors["startdate"]).to be_empty
end end
end
context "with 2025 logs or later" do
it "cannot be more than 20 years before the tenancy start date" do
record.startdate = Time.zone.local(2026, 2, 1)
record.voiddate = Time.zone.local(2006, 1, 1)
date_validator.validate_property_void_date(record)
date_validator.validate_startdate(record)
expect(record.errors["voiddate"])
.to include(match I18n.t("validations.lettings.date.void_date.twenty_years_before_tenancy_start"))
expect(record.errors["startdate"])
.to include(match I18n.t("validations.lettings.date.startdate.twenty_years_after_void_date"))
end
it "must be within 20 years of the tenancy start date" do
record.startdate = Time.zone.local(2026, 2, 1)
record.voiddate = Time.zone.local(2006, 3, 1)
date_validator.validate_property_void_date(record)
expect(record.errors["voiddate"]).to be_empty
expect(record.errors["startdate"]).to be_empty
end
end
context "when major repairs have been carried out" do context "when major repairs have been carried out" do
it "void_date cannot be after major repairs date" do it "void_date cannot be after major repairs date" do

Loading…
Cancel
Save