From a072a81fb2872edbfb6521c30a8f3d9564750fad Mon Sep 17 00:00:00 2001 From: Kat Date: Mon, 16 Jan 2023 13:47:27 +0000 Subject: [PATCH] Reuse soft validations for retirement in sales --- app/models/lettings_log.rb | 21 --------------------- app/models/log.rb | 21 +++++++++++++++++++++ app/models/sales_log.rb | 9 +++++++++ app/models/validations/soft_validations.rb | 4 ++-- 4 files changed, 32 insertions(+), 23 deletions(-) diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index d78495016..04b4b4ec9 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -456,16 +456,6 @@ class LettingsLog < Log OPTIONAL_FIELDS + dynamically_not_required end - (1..8).each do |person_num| - define_method("retirement_age_for_person_#{person_num}") do - retirement_age_for_person(person_num) - end - - define_method("plural_gender_for_person_#{person_num}") do - plural_gender_for_person(person_num) - end - end - def retirement_age_for_person(person_num) gender = public_send("sex#{person_num}".to_sym) return unless gender @@ -473,17 +463,6 @@ class LettingsLog < Log RETIREMENT_AGES[gender] end - def plural_gender_for_person(person_num) - gender = public_send("sex#{person_num}".to_sym) - return unless gender - - if %w[M X].include?(gender) - "male and non-binary people" - elsif gender == "F" - "females" - end - end - def age_known?(person_num) return false unless person_num.is_a?(Integer) diff --git a/app/models/log.rb b/app/models/log.rb index ea8a637af..abcab4914 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -61,9 +61,30 @@ class Log < ApplicationRecord public_send("#{error.attribute}=", nil) end end + + (1..8).each do |person_num| + define_method("retirement_age_for_person_#{person_num}") do + retirement_age_for_person(person_num) + end + + define_method("plural_gender_for_person_#{person_num}") do + plural_gender_for_person(person_num) + end + end private + def plural_gender_for_person(person_num) + gender = public_send("sex#{person_num}".to_sym) + return unless gender + + if %w[M X].include?(gender) + "male and non-binary people" + elsif gender == "F" + "females" + end + end + def update_status! self.status = if all_fields_completed? && errors.empty? "completed" diff --git a/app/models/sales_log.rb b/app/models/sales_log.rb index cdf2964f1..613d79f37 100644 --- a/app/models/sales_log.rb +++ b/app/models/sales_log.rb @@ -16,6 +16,7 @@ end class SalesLog < Log include DerivedVariables::SalesLogVariables include Validations::Sales::SoftValidations + include Validations::SoftValidations self.inheritance_column = :_type_disabled @@ -33,6 +34,7 @@ class SalesLog < Log scope :search_by, ->(param) { filter_by_id(param) } OPTIONAL_FIELDS = %w[purchid].freeze + RETIREMENT_AGES = { "M" => 65, "F" => 60, "X" => 65 }.freeze def startdate saledate @@ -181,4 +183,11 @@ class SalesLog < Log self.postcode_full = upcase_and_remove_whitespace(postcode_full) process_postcode(postcode_full, "pcodenk", "is_la_inferred", "la") end + + def retirement_age_for_person(person_num) + gender = public_send("sex#{person_num}".to_sym) + return unless gender + + RETIREMENT_AGES[gender] + end end diff --git a/app/models/validations/soft_validations.rb b/app/models/validations/soft_validations.rb index 944fff022..fc2c469ca 100644 --- a/app/models/validations/soft_validations.rb +++ b/app/models/validations/soft_validations.rb @@ -111,7 +111,7 @@ private gender = public_send("sex#{person_num}") return unless age && economic_status && gender - %w[M X].include?(gender) && tenant_is_retired?(economic_status) && age < 67 || + %w[M X].include?(gender) && tenant_is_retired?(economic_status) && age < retirement_age_for_person(person_num) || gender == "F" && tenant_is_retired?(economic_status) && age < 60 end @@ -122,7 +122,7 @@ private tenant_retired_or_prefers_not_say = tenant_is_retired?(economic_status) || tenant_prefers_not_to_say?(economic_status) return unless age && economic_status && gender - %w[M X].include?(gender) && !tenant_retired_or_prefers_not_say && age > 67 || + %w[M X].include?(gender) && !tenant_retired_or_prefers_not_say && age > retirement_age_for_person(person_num) || gender == "F" && !tenant_retired_or_prefers_not_say && age > 60 end end