Browse Source

Don't add setup BU errors, deduplicate different sale type errors

pull/2313/head
Kat 2 years ago
parent
commit
47c45bd153
  1. 16
      app/models/validations/sales/sale_information_validations.rb
  2. 103
      app/services/bulk_upload/sales/year2024/row_parser.rb
  3. 27
      spec/services/bulk_upload/sales/year2024/row_parser_spec.rb

16
app/models/validations/sales/sale_information_validations.rb

@ -147,13 +147,13 @@ module Validations::Sales::SaleInformationValidations
if record.mortgage_deposit_and_discount_total != record.expected_shared_ownership_deposit_value
%i[mortgage value deposit cashdis equity type].each do |field|
record.errors.add field, I18n.t("validations.sale_information.non_staircasing_mortgage.mortgage_used_socialhomebuy", mortgage_deposit_and_discount_total: record.field_formatted_as_currency("mortgage_deposit_and_discount_total"), expected_shared_ownership_deposit_value: record.field_formatted_as_currency("expected_shared_ownership_deposit_value"))
record.errors.add field, :skip_bu_setup_error, message: I18n.t("validations.sale_information.non_staircasing_mortgage.mortgage_used_socialhomebuy", mortgage_deposit_and_discount_total: record.field_formatted_as_currency("mortgage_deposit_and_discount_total"), expected_shared_ownership_deposit_value: record.field_formatted_as_currency("expected_shared_ownership_deposit_value"))
end
end
elsif record.mortgage_not_used?
if record.deposit_and_discount_total != record.expected_shared_ownership_deposit_value
%i[mortgageused value deposit cashdis equity type].each do |field|
record.errors.add field, I18n.t("validations.sale_information.non_staircasing_mortgage.mortgage_not_used_socialhomebuy", deposit_and_discount_total: record.field_formatted_as_currency("deposit_and_discount_total"), expected_shared_ownership_deposit_value: record.field_formatted_as_currency("expected_shared_ownership_deposit_value"))
record.errors.add field, :skip_bu_setup_error, message: I18n.t("validations.sale_information.non_staircasing_mortgage.mortgage_not_used_socialhomebuy", deposit_and_discount_total: record.field_formatted_as_currency("deposit_and_discount_total"), expected_shared_ownership_deposit_value: record.field_formatted_as_currency("expected_shared_ownership_deposit_value"))
end
end
end
@ -165,13 +165,13 @@ module Validations::Sales::SaleInformationValidations
if record.mortgage_and_deposit_total != record.expected_shared_ownership_deposit_value
%i[mortgage value deposit equity type].each do |field|
record.errors.add field, I18n.t("validations.sale_information.non_staircasing_mortgage.mortgage_used", mortgage_and_deposit_total: record.field_formatted_as_currency("mortgage_and_deposit_total"), expected_shared_ownership_deposit_value: record.field_formatted_as_currency("expected_shared_ownership_deposit_value"))
record.errors.add field, :skip_bu_setup_error, message: I18n.t("validations.sale_information.non_staircasing_mortgage.mortgage_used", mortgage_and_deposit_total: record.field_formatted_as_currency("mortgage_and_deposit_total"), expected_shared_ownership_deposit_value: record.field_formatted_as_currency("expected_shared_ownership_deposit_value"))
end
end
elsif record.mortgage_not_used?
if record.deposit != record.expected_shared_ownership_deposit_value
%i[mortgageused value deposit equity type].each do |field|
record.errors.add field, I18n.t("validations.sale_information.non_staircasing_mortgage.mortgage_not_used", deposit: record.field_formatted_as_currency("deposit"), expected_shared_ownership_deposit_value: record.field_formatted_as_currency("expected_shared_ownership_deposit_value"))
record.errors.add field, :skip_bu_setup_error, message: I18n.t("validations.sale_information.non_staircasing_mortgage.mortgage_not_used", deposit: record.field_formatted_as_currency("deposit"), expected_shared_ownership_deposit_value: record.field_formatted_as_currency("expected_shared_ownership_deposit_value"))
end
end
end
@ -185,12 +185,12 @@ module Validations::Sales::SaleInformationValidations
if record.mortgage_deposit_and_discount_total != record.stairbought_part_of_value
%i[mortgage value deposit cashdis stairbought type].each do |field|
record.errors.add field, I18n.t("validations.sale_information.staircasing_mortgage.mortgage_used_socialhomebuy", mortgage_deposit_and_discount_total: record.field_formatted_as_currency("mortgage_deposit_and_discount_total"), stairbought_part_of_value: record.field_formatted_as_currency("stairbought_part_of_value"))
record.errors.add field, :skip_bu_setup_error, message: I18n.t("validations.sale_information.staircasing_mortgage.mortgage_used_socialhomebuy", mortgage_deposit_and_discount_total: record.field_formatted_as_currency("mortgage_deposit_and_discount_total"), stairbought_part_of_value: record.field_formatted_as_currency("stairbought_part_of_value"))
end
end
elsif record.deposit_and_discount_total != record.stairbought_part_of_value
%i[mortgageused value deposit cashdis stairbought type].each do |field|
record.errors.add field, I18n.t("validations.sale_information.staircasing_mortgage.mortgage_not_used_socialhomebuy", deposit_and_discount_total: record.field_formatted_as_currency("deposit_and_discount_total"), stairbought_part_of_value: record.field_formatted_as_currency("stairbought_part_of_value"))
record.errors.add field, :skip_bu_setup_error, message: I18n.t("validations.sale_information.staircasing_mortgage.mortgage_not_used_socialhomebuy", deposit_and_discount_total: record.field_formatted_as_currency("deposit_and_discount_total"), stairbought_part_of_value: record.field_formatted_as_currency("stairbought_part_of_value"))
end
end
end
@ -201,12 +201,12 @@ module Validations::Sales::SaleInformationValidations
if record.mortgage_and_deposit_total != record.stairbought_part_of_value
%i[mortgage value deposit stairbought type].each do |field|
record.errors.add field, I18n.t("validations.sale_information.staircasing_mortgage.mortgage_used", mortgage_and_deposit_total: record.field_formatted_as_currency("mortgage_and_deposit_total"), stairbought_part_of_value: record.field_formatted_as_currency("stairbought_part_of_value"))
record.errors.add field, :skip_bu_setup_error, message: I18n.t("validations.sale_information.staircasing_mortgage.mortgage_used", mortgage_and_deposit_total: record.field_formatted_as_currency("mortgage_and_deposit_total"), stairbought_part_of_value: record.field_formatted_as_currency("stairbought_part_of_value"))
end
end
elsif record.deposit != record.stairbought_part_of_value
%i[mortgageused value deposit stairbought type].each do |field|
record.errors.add field, I18n.t("validations.sale_information.staircasing_mortgage.mortgage_not_used", deposit: record.field_formatted_as_currency("deposit"), stairbought_part_of_value: record.field_formatted_as_currency("stairbought_part_of_value"))
record.errors.add field, :skip_bu_setup_error, message: I18n.t("validations.sale_information.staircasing_mortgage.mortgage_not_used", deposit: record.field_formatted_as_currency("deposit"), stairbought_part_of_value: record.field_formatted_as_currency("stairbought_part_of_value"))
end
end
end

103
app/services/bulk_upload/sales/year2024/row_parser.rb

@ -506,7 +506,7 @@ class BulkUpload::Sales::Year2024::RowParser
question = log.form.get_question(error.attribute, log)
if question.present? && setup_question?(question)
if question.present? && setup_question?(question) && error.type != :skip_bu_setup_error
errors.add(field, error.message, category: :setup)
else
errors.add(field, error.message)
@ -711,16 +711,16 @@ private
lanomagr: %i[field_97],
frombeds: %i[field_98],
fromprop: %i[field_99],
value: %i[field_101 field_114 field_125],
value: value_fields,
equity: %i[field_102],
mortgage: %i[field_104 field_118 field_127],
extrabor: %i[field_108 field_122 field_129],
deposit: %i[field_109 field_123 field_130],
mortgage: mortgage_fields,
extrabor: extrabor_fields,
deposit: deposit_fields,
cashdis: %i[field_110],
mrent: %i[field_111],
has_mscharge: %i[field_112 field_124 field_131],
mscharge: %i[field_112 field_124 field_131],
has_mscharge: mscharge_fields,
mscharge: mscharge_fields,
grant: %i[field_115],
discount: %i[field_116],
othtype: %i[field_12],
@ -731,12 +731,12 @@ private
hhregresstill: %i[field_73],
armedforcesspouse: %i[field_74],
mortgagelender: %i[field_105 field_119],
mortgagelenderother: %i[field_106 field_120],
mortgagelender: mortgagelender_fields,
mortgagelenderother: mortgagelenderother_fields,
hb: %i[field_81],
mortlen: %i[field_107 field_121 field_128],
proplen: %i[field_113 field_85],
mortlen: mortlen_fields,
proplen: proplen_fields,
jointmore: %i[field_16],
staircase: %i[field_86],
@ -752,7 +752,7 @@ private
stairbought: %i[field_87],
stairowned: %i[field_88],
socprevten: %i[field_100],
mortgageused: [mortgageused_field],
mortgageused: mortgageused_fields,
uprn: %i[field_22],
address_line1: %i[field_23],
@ -1108,10 +1108,81 @@ private
return field_126 if outright_sale?
end
def mortgageused_field
return :field_103 if shared_ownership?
return :field_117 if discounted_ownership?
return :field_126 if outright_sale?
def value_fields
return [:field_101] if shared_ownership?
return [:field_114] if discounted_ownership?
return [:field_125] if outright_sale?
%i[field_101 field_114 field_125]
end
def mortgage_fields
return [:field_104] if shared_ownership?
return [:field_118] if discounted_ownership?
return [:field_127] if outright_sale?
%i[field_104 field_118 field_127]
end
def extrabor_fields
return [:field_108] if shared_ownership?
return [:field_122] if discounted_ownership?
return [:field_129] if outright_sale?
%i[field_108 field_122 field_129]
end
def deposit_fields
return [:field_109] if shared_ownership?
return [:field_123] if discounted_ownership?
return [:field_130] if outright_sale?
%i[field_109 field_123 field_130]
end
def mscharge_fields
return [:field_112] if shared_ownership?
return [:field_124] if discounted_ownership?
return [:field_131] if outright_sale?
%i[field_112 field_124 field_131]
end
def mortgagelender_fields
return [:field_105] if shared_ownership?
return [:field_119] if discounted_ownership?
%i[field_105 field_119]
end
def mortgagelenderother_fields
return [:field_106] if shared_ownership?
return [:field_120] if discounted_ownership?
%i[field_106 field_120]
end
def mortlen_fields
return [:field_107] if shared_ownership?
return [:field_121] if discounted_ownership?
return [:field_128] if outright_sale?
%i[field_107 field_121 field_128]
end
def proplen_fields
return [:field_85] if shared_ownership?
return [:field_113] if discounted_ownership?
%i[field_85 field_113]
end
def mortgageused_fields
return [:field_103] if shared_ownership?
return [:field_117] if discounted_ownership?
return [:field_126] if outright_sale?
%i[field_103 field_117 field_126]
end
def owning_organisation

27
spec/services/bulk_upload/sales/year2024/row_parser_spec.rb

@ -1059,6 +1059,33 @@ RSpec.describe BulkUpload::Sales::Year2024::RowParser do
expect(parser.errors[:field_109]).to be_empty
end
end
context "with non staircasing mortgage error" do
let(:attributes) { setup_section_params.merge(field_9: "30", field_103: "1", field_104: "10000", field_109: "5000", field_101: "30000", field_102: "28", field_86: "2") }
it "does not add a BU error on type (because it's a setup field and would block log creation)" do
setup_errors = parser.errors.select { |e| e.options[:category] == :setup }
expect(setup_errors).to be_empty
end
it "includes errors on other related fields" do
expect(parser.errors[:field_104]).to include("The mortgage and deposit added together is £15,000.00 and the purchase price times by the equity is £8,400.00. These figures should be the same.")
expect(parser.errors[:field_109]).to include("The mortgage and deposit added together is £15,000.00 and the purchase price times by the equity is £8,400.00. These figures should be the same.")
expect(parser.errors[:field_101]).to include("The mortgage and deposit added together is £15,000.00 and the purchase price times by the equity is £8,400.00. These figures should be the same.")
expect(parser.errors[:field_102]).to include("The mortgage and deposit added together is £15,000.00 and the purchase price times by the equity is £8,400.00. These figures should be the same.")
end
it "does not add errors to other ownership type fields" do
expect(parser.errors[:field_117]).to be_empty
expect(parser.errors[:field_126]).to be_empty
expect(parser.errors[:field_118]).to be_empty
expect(parser.errors[:field_127]).to be_empty
expect(parser.errors[:field_123]).to be_empty
expect(parser.errors[:field_130]).to be_empty
expect(parser.errors[:field_114]).to be_empty
expect(parser.errors[:field_125]).to be_empty
end
end
end
describe "#field_117" do

Loading…
Cancel
Save