Browse Source

change copy for some validations, add sales log method and amend interruption screen helper to support this

pull/1101/head
Arthur Campbell 3 years ago
parent
commit
f1508b9c64
  1. 2
      app/helpers/interruption_screen_helper.rb
  2. 14
      app/models/form/sales/pages/buyer2_income_value_check.rb
  3. 2
      app/models/form/sales/questions/buyer2_income_value_check.rb
  4. 8
      app/models/sales_log.rb
  5. 12
      app/models/validations/sales/financial_validations.rb
  6. 10
      config/locales/en.yml
  7. 48
      spec/models/validations/sales/financial_validations_spec.rb

2
app/helpers/interruption_screen_helper.rb

@ -34,6 +34,8 @@ module InterruptionScreenHelper
lettings_log.form.get_question(argument["key"], lettings_log).answer_label(lettings_log).downcase lettings_log.form.get_question(argument["key"], lettings_log).answer_label(lettings_log).downcase
elsif argument["currency"] elsif argument["currency"]
number_to_currency(lettings_log.public_send(argument["key"]), delimiter: ",", format: "%n", unit: "£") number_to_currency(lettings_log.public_send(argument["key"]), delimiter: ",", format: "%n", unit: "£")
elsif argument["arguments_for_public_send"]
lettings_log.public_send(argument["key"], argument["arguments_for_public_send"])
else else
lettings_log.public_send(argument["key"]) lettings_log.public_send(argument["key"])
end end

14
app/models/form/sales/pages/buyer2_income_value_check.rb

@ -9,6 +9,20 @@ class Form::Sales::Pages::Buyer2IncomeValueCheck < ::Form::Page
"income2_under_soft_min?" => true, "income2_under_soft_min?" => true,
}, },
] ]
@title_text = {
"translation" => "soft_validations.income.under_soft_min_for_economic_status",
"arguments" => [
{
"key" => "income2",
"i18n_template" => "income",
},
{
"key" => "income_soft_min_for_ecstat",
"arguments_for_public_send" => "ecstat2",
"i18n_template" => "minimum",
},
],
}
@informative_text = {} @informative_text = {}
end end

2
app/models/form/sales/questions/buyer2_income_value_check.rb

@ -3,7 +3,7 @@ class Form::Sales::Questions::Buyer2IncomeValueCheck < ::Form::Question
super super
@id = "income2_value_check" @id = "income2_value_check"
@check_answer_label = "Income confirmation" @check_answer_label = "Income confirmation"
@header = "Are you sure this income is correct?" @header = "Are you sure?"
@type = "interruption_screen" @type = "interruption_screen"
@answer_options = { @answer_options = {
"0" => { "value" => "Yes" }, "0" => { "value" => "Yes" },

8
app/models/sales_log.rb

@ -248,4 +248,12 @@ class SalesLog < Log
def purchase_price_soft_max def purchase_price_soft_max
LaSaleRange.find_by(start_year: collection_start_year, la:, bedrooms: beds).soft_max LaSaleRange.find_by(start_year: collection_start_year, la:, bedrooms: beds).soft_max
end end
def income_soft_min_for_ecstat(ecstat_field)
economic_status_code = public_send(ecstat_field)
return unless ALLOWED_INCOME_RANGES
ALLOWED_INCOME_RANGES[economic_status_code]&.soft_min
end
end end

12
app/models/validations/sales/financial_validations.rb

@ -7,9 +7,9 @@ module Validations::Sales::FinancialValidations
relevant_fields = %i[income1 ecstat1 ownershipsch la postcode_full] relevant_fields = %i[income1 ecstat1 ownershipsch la postcode_full]
if record.london_property? && record.income1 > 90_000 if record.london_property? && record.income1 > 90_000
relevant_fields.each { |field| record.errors.add field, I18n.t("validations.financial.income.over_hard_max", hard_max: 90_000) } relevant_fields.each { |field| record.errors.add field, I18n.t("validations.financial.income.over_hard_max_for_london") }
elsif record.property_not_in_london? && record.income1 > 80_000 elsif record.property_not_in_london? && record.income1 > 80_000
relevant_fields.each { |field| record.errors.add field, I18n.t("validations.financial.income.over_hard_max", hard_max: 80_000) } relevant_fields.each { |field| record.errors.add field, I18n.t("validations.financial.income.over_hard_max_for_outside_london") }
end end
end end
@ -18,9 +18,9 @@ module Validations::Sales::FinancialValidations
relevant_fields = %i[income2 ecstat2 ownershipsch la postcode_full] relevant_fields = %i[income2 ecstat2 ownershipsch la postcode_full]
if record.london_property? && record.income2 > 90_000 if record.london_property? && record.income2 > 90_000
relevant_fields.each { |field| record.errors.add field, I18n.t("validations.financial.income.over_hard_max", hard_max: 90_000) } relevant_fields.each { |field| record.errors.add field, I18n.t("validations.financial.income.over_hard_max_for_london") }
elsif record.property_not_in_london? && record.income2 > 80_000 elsif record.property_not_in_london? && record.income2 > 80_000
relevant_fields.each { |field| record.errors.add field, I18n.t("validations.financial.income.over_hard_max", hard_max: 80_000) } relevant_fields.each { |field| record.errors.add field, I18n.t("validations.financial.income.over_hard_max_for_outside_london") }
end end
end end
@ -30,9 +30,9 @@ module Validations::Sales::FinancialValidations
combined_income = record.income1 + record.income2 combined_income = record.income1 + record.income2
relevant_fields = %i[income1 income2 ownershipsch la postcode_full] relevant_fields = %i[income1 income2 ownershipsch la postcode_full]
if record.london_property? && combined_income > 90_000 if record.london_property? && combined_income > 90_000
relevant_fields.each { |field| record.errors.add field, I18n.t("validations.financial.income.combined_over_hard_max", hard_max: 90_000) } relevant_fields.each { |field| record.errors.add field, I18n.t("validations.financial.income.combined_over_hard_max_for_london") }
elsif record.property_not_in_london? && combined_income > 80_000 elsif record.property_not_in_london? && combined_income > 80_000
relevant_fields.each { |field| record.errors.add field, I18n.t("validations.financial.income.combined_over_hard_max", hard_max: 80_000) } relevant_fields.each { |field| record.errors.add field, I18n.t("validations.financial.income.combined_over_hard_max_for_outside_london") }
end end
end end

10
config/locales/en.yml

@ -217,9 +217,11 @@ en:
freq_missing: "Select how often the household receives income" freq_missing: "Select how often the household receives income"
earnings_missing: "Enter how much income the household has in total" earnings_missing: "Enter how much income the household has in total"
income: income:
over_hard_max: "Income must be lower than £%{hard_max}" over_hard_max_for_london: "Income must not exceed £90,000 for properties within London local authorities"
combined_over_hard_max: "Combined income must not be more than £%{hard_max}" over_hard_max_for_outside_london: "Income must not exceed £80,000 for properties outside London local authorities"
child_has_income: "A child's income must be 0" combined_over_hard_max_for_london: "Combined income must not exceed £90,000 for properties within London local authorities"
combined_over_hard_max_for_outside_london: "Combined income must not exceed £80,000 for properties outside London local authorities"
child_has_income: "Child's income must be £0"
negative_currency: "Enter an amount above 0" negative_currency: "Enter an amount above 0"
rent: rent:
less_than_shortfall: "Enter an amount that is more than the shortfall in basic rent" less_than_shortfall: "Enter an amount that is more than the shortfall in basic rent"
@ -456,6 +458,8 @@ en:
message: "Net income is lower than expected based on the lead tenant’s working situation. Are you sure this is correct?" message: "Net income is lower than expected based on the lead tenant’s working situation. Are you sure this is correct?"
in_soft_max_range: in_soft_max_range:
message: "Net income is higher than expected based on the lead tenant’s working situation. Are you sure this is correct?" message: "Net income is higher than expected based on the lead tenant’s working situation. Are you sure this is correct?"
income:
under_soft_min_for_economic_status: "You said income was £%{income}, which is below this working situation's minimum (£%{minimum})"
rent: rent:
outside_range_title: "You told us the rent is %{brent}" outside_range_title: "You told us the rent is %{brent}"
min_hint_text: "The minimum rent expected for this type of property in this local authority is £%{soft_min_for_period}." min_hint_text: "The minimum rent expected for this type of property in this local authority is £%{soft_min_for_period}."

48
spec/models/validations/sales/financial_validations_spec.rb

@ -18,22 +18,22 @@ RSpec.describe Validations::Sales::FinancialValidations do
record.income1 = 85_000 record.income1 = 85_000
record.ecstat1 = rand(0..8) record.ecstat1 = rand(0..8)
financial_validator.validate_income1(record) financial_validator.validate_income1(record)
expect(record.errors["income1"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 80_000)) expect(record.errors["income1"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_outside_london"))
expect(record.errors["ecstat1"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 80_000)) expect(record.errors["ecstat1"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_outside_london"))
expect(record.errors["ownershipsch"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 80_000)) expect(record.errors["ownershipsch"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_outside_london"))
expect(record.errors["la"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 80_000)) expect(record.errors["la"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_outside_london"))
expect(record.errors["postcode_full"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 80_000)) expect(record.errors["postcode_full"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_outside_london"))
end end
it "adds errors if buyer 2's economic status is not child and has income over 80,000" do it "adds errors if buyer 2's economic status is not child and has income over 80,000" do
record.income2 = 85_000 record.income2 = 85_000
record.ecstat2 = rand(0..8) record.ecstat2 = rand(0..8)
financial_validator.validate_income2(record) financial_validator.validate_income2(record)
expect(record.errors["income2"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 80_000)) expect(record.errors["income2"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_outside_london"))
expect(record.errors["ecstat2"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 80_000)) expect(record.errors["ecstat2"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_outside_london"))
expect(record.errors["ownershipsch"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 80_000)) expect(record.errors["ownershipsch"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_outside_london"))
expect(record.errors["la"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 80_000)) expect(record.errors["la"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_outside_london"))
expect(record.errors["postcode_full"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 80_000)) expect(record.errors["postcode_full"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_outside_london"))
end end
it "does not add errors if buyer 1 has not set economic status" do it "does not add errors if buyer 1 has not set economic status" do
@ -66,8 +66,8 @@ RSpec.describe Validations::Sales::FinancialValidations do
record.income1 = 45_000 record.income1 = 45_000
record.income2 = 40_000 record.income2 = 40_000
financial_validator.validate_combined_income(record) financial_validator.validate_combined_income(record)
expect(record.errors["income1"]).to include(match I18n.t("validations.financial.income.combined_over_hard_max", hard_max: 80_000)) expect(record.errors["income1"]).to include(match I18n.t("validations.financial.income.combined_over_hard_max_for_outside_london"))
expect(record.errors["income2"]).to include(match I18n.t("validations.financial.income.combined_over_hard_max", hard_max: 80_000)) expect(record.errors["income2"]).to include(match I18n.t("validations.financial.income.combined_over_hard_max_for_outside_london"))
end end
it "does not add errors when combined income is under 80_000" do it "does not add errors when combined income is under 80_000" do
@ -88,22 +88,22 @@ RSpec.describe Validations::Sales::FinancialValidations do
record.income1 = 95_000 record.income1 = 95_000
record.ecstat1 = rand(0..8) record.ecstat1 = rand(0..8)
financial_validator.validate_income1(record) financial_validator.validate_income1(record)
expect(record.errors["income1"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 90_000)) expect(record.errors["income1"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_london"))
expect(record.errors["ecstat1"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 90_000)) expect(record.errors["ecstat1"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_london"))
expect(record.errors["ownershipsch"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 90_000)) expect(record.errors["ownershipsch"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_london"))
expect(record.errors["la"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 90_000)) expect(record.errors["la"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_london"))
expect(record.errors["postcode_full"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 90_000)) expect(record.errors["postcode_full"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_london"))
end end
it "adds errors if buyer 2's economic status is not child and has income over 90,000" do it "adds errors if buyer 2's economic status is not child and has income over 90,000" do
record.income2 = 95_000 record.income2 = 95_000
record.ecstat2 = rand(0..8) record.ecstat2 = rand(0..8)
financial_validator.validate_income2(record) financial_validator.validate_income2(record)
expect(record.errors["income2"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 90_000)) expect(record.errors["income2"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_london"))
expect(record.errors["ecstat2"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 90_000)) expect(record.errors["ecstat2"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_london"))
expect(record.errors["ownershipsch"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 90_000)) expect(record.errors["ownershipsch"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_london"))
expect(record.errors["la"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 90_000)) expect(record.errors["la"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_london"))
expect(record.errors["postcode_full"]).to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 90_000)) expect(record.errors["postcode_full"]).to include(match I18n.t("validations.financial.income.over_hard_max_for_london"))
end end
it "does not add errors if buyer 1 has not set economic status" do it "does not add errors if buyer 1 has not set economic status" do
@ -136,8 +136,8 @@ RSpec.describe Validations::Sales::FinancialValidations do
record.income1 = 55_000 record.income1 = 55_000
record.income2 = 40_000 record.income2 = 40_000
financial_validator.validate_combined_income(record) financial_validator.validate_combined_income(record)
expect(record.errors["income1"]).to include(match I18n.t("validations.financial.income.combined_over_hard_max", hard_max: 90_000)) expect(record.errors["income1"]).to include(match I18n.t("validations.financial.income.combined_over_hard_max_for_london"))
expect(record.errors["income2"]).to include(match I18n.t("validations.financial.income.combined_over_hard_max", hard_max: 90_000)) expect(record.errors["income2"]).to include(match I18n.t("validations.financial.income.combined_over_hard_max_for_london"))
end end
it "does not add errors when combined income is under 90_000" do it "does not add errors when combined income is under 90_000" do

Loading…
Cancel
Save