Browse Source

feat: add more validations

pull/1178/head
natdeanlewissoftwire 3 years ago
parent
commit
9e96b92e50
  1. 30
      app/models/validations/household_validations.rb
  2. 26
      app/models/validations/sales/household_validations.rb
  3. 29
      app/models/validations/shared_validations.rb
  4. 2
      config/locales/en.yml

30
app/models/validations/household_validations.rb

@ -45,7 +45,7 @@ module Validations::HouseholdValidations
(2..8).each do |n|
validate_person_age_matches_economic_status(record, n)
validate_person_age_matches_relationship(record, n)
validate_person_age_and_relationship_matches_economic_status(record, n)
shared_validate_person_age_and_relationship_matches_economic_status(record, n)
end
shared_validate_partner_count(record, 8)
end
@ -170,38 +170,10 @@ private
end
end
def validate_person_age_and_relationship_matches_economic_status(record, person_num)
age = record.public_send("age#{person_num}")
economic_status = record.public_send("ecstat#{person_num}")
relationship = record.public_send("relat#{person_num}")
return unless age && economic_status && relationship
if age >= 16 && age <= 19 && tenant_is_child?(relationship) && (!tenant_is_fulltime_student?(economic_status) && !tenant_economic_status_refused?(economic_status))
record.errors.add "ecstat#{person_num}", I18n.t("validations.household.ecstat.student_16_19", person_num:)
record.errors.add "age#{person_num}", I18n.t("validations.household.age.student_16_19", person_num:)
record.errors.add "relat#{person_num}", I18n.t("validations.household.relat.student_16_19", person_num:)
end
end
def validate_partner_count(record)
partner_count = (2..8).count { |n| tenant_is_partner?(record["relat#{n}"]) }
if partner_count > 1
record.errors.add :base, I18n.t("validations.household.relat.one_partner")
end
end
def tenant_is_economic_child?(economic_status)
economic_status == 9
end
def tenant_is_fulltime_student?(economic_status)
economic_status == 7
end
def tenant_economic_status_refused?(economic_status)
economic_status == 10
end
def tenant_is_child?(relationship)
relationship == "C"
end

26
app/models/validations/sales/household_validations.rb

@ -9,11 +9,33 @@ module Validations::Sales::HouseholdValidations
end
end
def validate_household_number_of_other_members(record)
(2..6).each do |n|
validate_person_age_matches_relationship(record, n)
shared_validate_person_age_and_relationship_matches_economic_status(record, n)
end
shared_validate_partner_count(record, 6)
end
private
def validate_person_age_matches_relationship(record, person_num)
age = record.public_send("age#{person_num}")
relationship = record.public_send("relat#{person_num}")
return unless age && relationship
if age < 16 && person_is_partner?(relationship)
record.errors.add "relat#{person_num}", I18n.t("validations.household.relat.partner_under_16", person_num:)
elsif age >= 20 && person_is_child?(relationship)
record.errors.add "relat#{person_num}", I18n.t("validations.household.relat.child_over_20", person_num:)
end
end
def person_is_partner?(relationship)
relationship == "P"
end
def person_is_child?(relationship)
relationship == "C"
end
end

29
app/models/validations/shared_validations.rb

@ -82,8 +82,21 @@ module Validations::SharedValidations
end
end
def shared_validate_person_age_and_relationship_matches_economic_status(record, person_num)
age = record.public_send("age#{person_num}")
economic_status = record.public_send("ecstat#{person_num}")
relationship = record.public_send("relat#{person_num}")
return unless age && economic_status && relationship
if age >= 16 && age <= 19 && person_is_child?(relationship) && (!person_is_fulltime_student?(economic_status) && !person_economic_status_refused?(economic_status))
record.errors.add "ecstat#{person_num}", I18n.t("validations.household.ecstat.student_16_19", person_num:)
record.errors.add "age#{person_num}", I18n.t("validations.household.age.student_16_19", person_num:)
record.errors.add "relat#{person_num}", I18n.t("validations.household.relat.student_16_19", person_num:)
end
end
def shared_validate_partner_count(record, max_people)
partner_count = (2..max_people).count { |n| tenant_is_partner?(record["relat#{n}"]) }
partner_count = (2..max_people).count { |n| person_is_partner?(record["relat#{n}"]) }
if partner_count > 1
record.errors.add :base, I18n.t("validations.household.relat.one_partner")
end
@ -92,7 +105,19 @@ module Validations::SharedValidations
private
def tenant_is_partner?(relationship)
def person_is_partner?(relationship)
relationship == "P"
end
def person_is_child?(relationship)
relationship == "C"
end
def person_is_fulltime_student?(economic_status)
economic_status == 7
end
def person_economic_status_refused?(economic_status)
economic_status == 10
end
end

2
config/locales/en.yml

@ -308,7 +308,9 @@ en:
retired_male: "Answer cannot be ‘retired’ as the male tenant is under 65"
retired_female: "Answer cannot be ‘retired’ as the female tenant is under 60"
relat:
partner_under_16: "Cannot be partner if the person's age is under 16"
child_under_16: "Person’s %{person_num}’s relationship to tenant 1 must be ‘child’ as you told us they’re under 16"
child_over_20: "Relationship cannot be child if the person's age is 20 or over"
one_partner: "Number of partners cannot be greater than 1"
student_16_19: "Answer cannot be ‘child’ as you told us the person %{person_num} is between 16 and 19 and is not a full-time student"
housingneeds_a:

Loading…
Cancel
Save