Browse Source

start date validations

pull/683/head
Dushan Despotovic 3 years ago
parent
commit
7268bd7236
  1. 3
      app/models/case_log.rb
  2. 1
      app/models/scheme.rb
  3. 29
      app/models/validations/setup_validations.rb
  4. 5
      config/locales/en.yml
  5. 5
      db/migrate/20220616130451_add_reference_to_case_log.rb
  6. 5
      db/migrate/20220617102313_add_end_date_to_schemes.rb
  7. 6
      db/schema.rb
  8. 73
      spec/models/validations/setup_validations_spec.rb

3
app/models/case_log.rb

@ -35,7 +35,8 @@ class CaseLog < ApplicationRecord
belongs_to :owning_organisation, class_name: "Organisation", optional: true
belongs_to :managing_organisation, class_name: "Organisation", optional: true
belongs_to :created_by, class_name: "User", optional: true
belongs_to :scheme, required: false
scope :filter_by_organisation, ->(org, _user = nil) { where(owning_organisation: org).or(where(managing_organisation: org)) }
scope :filter_by_status, ->(status, _user = nil) { where status: }
scope :filter_by_years, lambda { |years, _user = nil|

1
app/models/scheme.rb

@ -1,6 +1,7 @@
class Scheme < ApplicationRecord
belongs_to :organisation
has_many :locations
has_many :case_logs
scope :search_by_code, ->(code) { where("code ILIKE ?", "%#{code}%") }
scope :search_by_service_name, ->(name) { where("service_name ILIKE ?", "%#{name}%") }

29
app/models/validations/setup_validations.rb

@ -5,6 +5,35 @@ module Validations::SetupValidations
end
end
def validate_startdate(record)
if record.needstype == 2
if record.startdate > Time.zone.today
record.errors.add :startdate, I18n.t("validations.setup.startdate.today_or_earlier")
end
if record.voiddate.present?
if (record.startdate.to_date - record.voiddate.to_date).to_i.abs > 730
record.errors.add :startdate, I18n.t("validations.setup.startdate.voiddate_difference")
end
end
if record.mrcdate.present?
if (record.startdate.to_date - record.mrcdate.to_date).to_i.abs > 730
record.errors.add :startdate, I18n.t("validations.setup.startdate.mrcdate_difference")
end
end
if record.scheme_id.present?
scheme_end_date = Scheme.find(record.scheme_id).end_date
if scheme_end_date.present?
if record.startdate > scheme_end_date
record.errors.add :startdate, I18n.t("validations.setup.startdate.before_scheme_end_date")
end
end
end
end
end
private
def intermediate_product_rent_type?(record)

5
config/locales/en.yml

@ -61,6 +61,11 @@ en:
setup:
intermediate_rent_product_name:
blank: "Enter name of other intermediate rent product"
startdate:
today_or_earlier: "The start date of a supported housing tenancy must be today or ealier"
before_scheme_end_date: "The start date of a supported housing tenancy must be before the housing scheme end date"
voiddate_difference: "The difference between the tenancy start date and property void date must be 730 days or less"
mrcdate_difference: "The difference between the tenancy start date and major repais date must be 730 days or less"
property:
mrcdate:

5
db/migrate/20220616130451_add_reference_to_case_log.rb

@ -0,0 +1,5 @@
class AddReferenceToCaseLog < ActiveRecord::Migration[7.0]
def change
add_reference :case_logs, :scheme, foreign_key: true
end
end

5
db/migrate/20220617102313_add_end_date_to_schemes.rb

@ -0,0 +1,5 @@
class AddEndDateToSchemes < ActiveRecord::Migration[7.0]
def change
add_column :schemes, :end_date, :datetime
end
end

6
db/schema.rb

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.0].define(version: 2022_06_14_124115) do
ActiveRecord::Schema[7.0].define(version: 2022_06_17_102313) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -198,10 +198,12 @@ ActiveRecord::Schema[7.0].define(version: 2022_06_14_124115) do
t.integer "hhtype"
t.integer "new_old"
t.integer "vacdays"
t.bigint "scheme_id"
t.index ["created_by_id"], name: "index_case_logs_on_created_by_id"
t.index ["managing_organisation_id"], name: "index_case_logs_on_managing_organisation_id"
t.index ["old_id"], name: "index_case_logs_on_old_id", unique: true
t.index ["owning_organisation_id"], name: "index_case_logs_on_owning_organisation_id"
t.index ["scheme_id"], name: "index_case_logs_on_scheme_id"
end
create_table "data_protection_confirmations", force: :cascade do |t|
@ -308,6 +310,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_06_14_124115) do
t.integer "registered_under_care_act"
t.integer "support_type"
t.string "intended_stay"
t.datetime "end_date"
t.index ["organisation_id"], name: "index_schemes_on_organisation_id"
end
@ -364,6 +367,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_06_14_124115) do
t.index ["item_type", "item_id"], name: "index_versions_on_item_type_and_item_id"
end
add_foreign_key "case_logs", "schemes"
add_foreign_key "locations", "schemes"
add_foreign_key "schemes", "organisations"
end

73
spec/models/validations/setup_validations_spec.rb

@ -30,4 +30,77 @@ RSpec.describe Validations::SetupValidations do
expect(record.errors["irproduct_other"]).to be_empty
end
end
context "when a user is setting up a supported housing log" do
describe "#validate_startdate" do
let(:record) { FactoryBot.create(:case_log, needstype: 2) }
let(:scheme) { FactoryBot.create(:scheme, end_date: Time.zone.today - 5.days)}
let(:scheme_no_end_date) { FactoryBot.create(:scheme, end_date: nil)}
it "validates that the tenancy start date must be today or earlier" do
record.startdate = Time.zone.today + 3.days
setup_validator.validate_startdate(record)
expect(record.errors["startdate"])
.to include(match I18n.t("validations.setup.startdate.today_or_earlier"))
end
it "produces no error if the tenancy start date is today or earlier" do
record.startdate = Time.zone.today
setup_validator.validate_startdate(record)
expect(record.errors["startdate"]).to be_empty
end
it "validates that the tenancy start date is before the end date of the chosen scheme if it has an end date" do
record.startdate = Time.zone.today - 3.days
record.scheme = scheme
setup_validator.validate_startdate(record)
expect(record.errors["startdate"])
.to include(match I18n.t("validations.setup.startdate.before_scheme_end_date"))
end
it "produces no error when the tenancy start date is before the end date of the chosen scheme if it has an end date" do
record.startdate = Time.zone.today - 30.days
record.scheme = scheme
setup_validator.validate_startdate(record)
expect(record.errors["startdate"]).to be_empty
end
it "produces no startdate error for scheme end dates when the chosen scheme does not have an end date" do
record.startdate = Time.zone.today
record.scheme = scheme_no_end_date
setup_validator.validate_startdate(record)
expect(record.errors["startdate"]).to be_empty
end
it "validates that tenancy start date is less than 730 days away from the void date" do
record.startdate = Time.zone.today
record.voiddate = Time.zone.today - 3.years
setup_validator.validate_startdate(record)
expect(record.errors["startdate"])
.to include(match I18n.t("validations.setup.startdate.voiddate_difference"))
end
it "produces no error tenancy start date is less than 730 days away from the void date" do
record.startdate = Time.zone.today
record.voiddate = Time.zone.today - 6.months
setup_validator.validate_startdate(record)
expect(record.errors["startdate"]).to be_empty
end
it "validates that tenancy start date is less than 730 days away from the major repairs date" do
record.startdate = Time.zone.today
record.mrcdate = Time.zone.today - 3.years
setup_validator.validate_startdate(record)
expect(record.errors["startdate"])
.to include(match I18n.t("validations.setup.startdate.mrcdate_difference"))
end
it "produces no error when tenancy start date is less than 730 days away from the major repairs date" do
record.startdate = Time.zone.today
record.mrcdate = Time.zone.today - 6.months
setup_validator.validate_startdate(record)
expect(record.errors["startdate"]).to be_empty
end
end
end
end

Loading…
Cancel
Save