From b4ea6df93b76f441ed046e11381fe852dbd8e5d0 Mon Sep 17 00:00:00 2001 From: Kat Date: Mon, 19 Feb 2024 11:39:28 +0000 Subject: [PATCH] Validate all relevant charges given for BU 2024 --- .../lettings/year2024/row_parser.rb | 20 ++++++- .../lettings/year2024/row_parser_spec.rb | 59 ++++++++++++++++++- 2 files changed, 77 insertions(+), 2 deletions(-) diff --git a/app/services/bulk_upload/lettings/year2024/row_parser.rb b/app/services/bulk_upload/lettings/year2024/row_parser.rb index 34823ee91..c99f08d92 100644 --- a/app/services/bulk_upload/lettings/year2024/row_parser.rb +++ b/app/services/bulk_upload/lettings/year2024/row_parser.rb @@ -382,6 +382,7 @@ class BulkUpload::Lettings::Year2024::RowParser validate :validate_uprn_exists_if_any_key_address_fields_are_blank, on: :after_log, unless: -> { supported_housing? } validate :validate_incomplete_soft_validations, on: :after_log + validate :validate_all_charges_given, on: :after_log, if: proc { is_carehome.zero? } def self.question_for_field(field) QUESTIONS[field] @@ -810,6 +811,19 @@ private end end + def validate_all_charges_given + return if supported_housing? && field_125 == 1 + + { field_125: "basic rent", + field_126: "service charge", + field_127: "personal service charge", + field_128: "support charge" }.each do |field, charge| + if public_send(field.to_sym).blank? + errors.add(field, I18n.t("validations.financial.charges.missing_charges", question: charge)) + end + end + end + def setup_question?(question) log.form.setup_sections[0].subsections[0].questions.include?(question) end @@ -1152,7 +1166,7 @@ private attributes["pscharge"] = field_127 attributes["supcharg"] = field_128 attributes["chcharge"] = field_124 - attributes["is_carehome"] = field_124.present? ? 1 : 0 + attributes["is_carehome"] = is_carehome attributes["household_charge"] = supported_housing? ? field_122 : nil attributes["hbrentshortfall"] = field_129 attributes["tshortfall_known"] = tshortfall_known @@ -1479,4 +1493,8 @@ private 12 end + + def is_carehome + field_124.present? ? 1 : 0 + end end diff --git a/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb b/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb index 4501d25be..6525f2286 100644 --- a/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb +++ b/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb @@ -2148,11 +2148,24 @@ RSpec.describe BulkUpload::Lettings::Year2024::RowParser do end describe "#chcharge" do - let(:attributes) { { bulk_upload:, field_124: "123.45" } } + let(:attributes) { { bulk_upload:, field_124: "123.45", field_125: "123.45", field_126: "123.45", field_127: "123.45", field_128: "123.45" } } it "sets value given" do expect(parser.log.chcharge).to eq(123.45) end + + it "sets is care home to yes" do + expect(parser.log.is_carehome).to eq(1) + end + + it "clears any other given charges" do + parser.log.save! + expect(parser.log.tcharge).to be_nil + expect(parser.log.brent).to be_nil + expect(parser.log.supcharg).to be_nil + expect(parser.log.pscharge).to be_nil + expect(parser.log.scharge).to be_nil + end end describe "#supcharg" do @@ -2161,6 +2174,50 @@ RSpec.describe BulkUpload::Lettings::Year2024::RowParser do it "sets value given" do expect(parser.log.supcharg).to eq(123.45) end + + context "when other charges are not given" do + context "and it is carehome" do + let(:attributes) { { bulk_upload:, field_128: "123.45", field_124: "123.45", field_125: nil, field_126: nil, field_127: nil } } + + it "does not set charges values" do + parser.log.save! + expect(parser.log.tcharge).to be_nil + expect(parser.log.brent).to be_nil + expect(parser.log.supcharg).to be_nil + expect(parser.log.pscharge).to be_nil + expect(parser.log.scharge).to be_nil + end + + it "does not add errors to missing charges" do + parser.valid? + expect(parser.errors[:field_125]).to be_empty + expect(parser.errors[:field_126]).to be_empty + expect(parser.errors[:field_127]).to be_empty + expect(parser.errors[:field_128]).to be_empty + end + end + + context "and it is not carehome" do + let(:attributes) { { bulk_upload:, field_128: "123.45", field_124: nil, field_125: nil, field_126: nil, field_127: nil } } + + it "does not set charges values" do + parser.log.save! + expect(parser.log.tcharge).to be_nil + expect(parser.log.brent).to be_nil + expect(parser.log.supcharg).to be_nil + expect(parser.log.pscharge).to be_nil + expect(parser.log.scharge).to be_nil + end + + it "adds an error to all missing charges" do + parser.valid? + expect(parser.errors[:field_125]).to eql(["Please enter the basic rent. If there is no basic rent, please enter '0'."]) + expect(parser.errors[:field_126]).to eql(["Please enter the service charge. If there is no service charge, please enter '0'."]) + expect(parser.errors[:field_127]).to eql(["Please enter the personal service charge. If there is no personal service charge, please enter '0'."]) + expect(parser.errors[:field_128]).to be_empty + end + end + end end describe "#pscharge" do