From 5dd30a10e2122a992143d9c4da7fef65c71d9c9b Mon Sep 17 00:00:00 2001 From: Robert Sullivan Date: Tue, 26 Mar 2024 16:54:32 +0000 Subject: [PATCH] CLDC-3351: Clear deposit in situations where it is no longer derived --- .../derived_variables/sales_log_variables.rb | 23 ++++++- app/models/sales_log.rb | 4 ++ spec/models/sales_log_spec.rb | 67 +++++++++++++++++++ 3 files changed, 93 insertions(+), 1 deletion(-) diff --git a/app/models/derived_variables/sales_log_variables.rb b/app/models/derived_variables/sales_log_variables.rb index 05210830b..76811740c 100644 --- a/app/models/derived_variables/sales_log_variables.rb +++ b/app/models/derived_variables/sales_log_variables.rb @@ -17,7 +17,20 @@ module DerivedVariables::SalesLogVariables self.homonth = hodate.month self.hoyear = hodate.year end - self.deposit = value if outright_sale? && mortgage_not_used? + + if outright_sale? && mortgage_not_used? + self.deposit = value + elsif outright_sale? && mortgage_use_unknown? + self.deposit = nil + elsif outright_sale? && mortgageused_changed? && !deposit_changed? + # Clear when switching to mortgage used + self.deposit = nil + elsif ownershipsch_changed?(from: 3) && + ((mortgage_not_used? && !mortgageused_changed?) || mortgageused_changed?(from: 2)) && + !deposit_changed? + # Clear when switching to to different ownership type + self.deposit = nil + end if saledate && form.start_year_after_2024? && discounted_ownership_sale? self.ppostcode_full = postcode_full @@ -102,6 +115,14 @@ private mortgage: 0, }, }, + { + conditions: { + mortgageused: 3, + }, + derived_values: { + mortgage: 0, + }, + }, ].freeze def number_of_household_members diff --git a/app/models/sales_log.rb b/app/models/sales_log.rb index 5223c249b..d6e6bf40b 100644 --- a/app/models/sales_log.rb +++ b/app/models/sales_log.rb @@ -330,6 +330,10 @@ class SalesLog < Log mortgageused == 2 end + def mortgage_use_unknown? + mortgageused == 3 + end + def process_postcode_changes! self.postcode_full = upcase_and_remove_whitespace(postcode_full) return if postcode_full.blank? diff --git a/spec/models/sales_log_spec.rb b/spec/models/sales_log_spec.rb index 5685ac58c..023349f10 100644 --- a/spec/models/sales_log_spec.rb +++ b/spec/models/sales_log_spec.rb @@ -549,6 +549,22 @@ RSpec.describe SalesLog, type: :model do expect(record_from_db["deposit"]).to eq(123_400) end + it "clears deposit for outright sales when mortgage is changed from yes to unknown" do + Timecop.freeze(2024, 5, 2) + sales_log.update!(value: 123_400, deposit: 5000, saledate: Time.zone.local(2024, 5, 2), mortgageused: 1, ownershipsch: 3, type: 10, companybuy: 1, jointpur: 1, jointmore: 1) + sales_log.update!(mortgageused: 3) + record_from_db = described_class.find(sales_log.id) + expect(record_from_db["deposit"]).to eq(nil) + end + + it "clears deposit for outright sales when mortgage is changed from no to unknown" do + Timecop.freeze(2024, 5, 2) + sales_log.update!(value: 123_400, deposit: 5000, saledate: Time.zone.local(2024, 5, 2), mortgageused: 2, ownershipsch: 3, type: 10, companybuy: 1, jointpur: 1, jointmore: 1) + sales_log.update!(mortgageused: 3) + record_from_db = described_class.find(sales_log.id) + expect(record_from_db["deposit"]).to eq(nil) + end + it "does not derive deposit if the sale isn't outright" do sales_log.update!(value: 123_400, deposit: nil, mortgageused: 2, ownershipsch: 2) record_from_db = described_class.find(sales_log.id) @@ -561,6 +577,50 @@ RSpec.describe SalesLog, type: :model do expect(record_from_db["deposit"]).to eq(nil) end + it "clears deposit when setting mortgage used to yes from no for outright sales" do + sales_log.update!(value: 123_400, deposit: nil, mortgageused: 2, ownershipsch: 3, type: 10, companybuy: 1, jointpur: 1, jointmore: 1) + sales_log.update!(mortgageused: 1) + record_from_db = described_class.find(sales_log.id) + expect(record_from_db["deposit"]).to eq(nil) + end + + it "does not clear deposit when setting mortgage used to yes from no for outright sales with new deposit value" do + sales_log.update!(value: 123_400, deposit: nil, mortgageused: 2, ownershipsch: 3, type: 10, companybuy: 1, jointpur: 1, jointmore: 1) + sales_log.update!(mortgageused: 1, deposit: 1000) + record_from_db = described_class.find(sales_log.id) + expect(record_from_db["deposit"]).to eq(1000) + end + + it "clears deposit when changing from outright sale with no mortgage to shared ownership" do + sales_log.update!(value: 123_400, deposit: nil, mortgageused: 2, ownershipsch: 3, type: 10, companybuy: 1, jointpur: 1, jointmore: 1) + sales_log.update!(ownershipsch: 1) + record_from_db = described_class.find(sales_log.id) + expect(record_from_db["deposit"]).to eq(nil) + end + + it "clears deposit when changing from outright sale with no mortgage to discounted ownership" do + Timecop.freeze(2024, 5, 2) + sales_log.update!(value: 123_400, deposit: nil, mortgageused: 2, ownershipsch: 3, type: 10, companybuy: 1, jointpur: 1, jointmore: 1) + sales_log.update!(ownershipsch: 2) + record_from_db = described_class.find(sales_log.id) + expect(record_from_db["deposit"]).to eq(nil) + end + + it "does not clear deposit when changing from outright sale with no mortgage to shared ownership with new deposit value" do + sales_log.update!(value: 123_400, deposit: nil, mortgageused: 2, ownershipsch: 3, type: 10, companybuy: 1, jointpur: 1, jointmore: 1) + sales_log.update!(ownershipsch: 1, deposit: 1000) + record_from_db = described_class.find(sales_log.id) + expect(record_from_db["deposit"]).to eq(1000) + end + + it "does not clear when changing from outright sale with no mortgage to discounted ownership with new deposit value" do + Timecop.freeze(2024, 5, 2) + sales_log.update!(value: 123_400, deposit: nil, mortgageused: 2, ownershipsch: 3, type: 10, companybuy: 1, jointpur: 1, jointmore: 1) + sales_log.update!(ownershipsch: 2, deposit: 1000) + record_from_db = described_class.find(sales_log.id) + expect(record_from_db["deposit"]).to eq(1000) + end + it "correctly derives and saves pcode1 and pcode1 and pcode2" do sales_log.update!(postcode_full: "W6 0SP") record_from_db = described_class.find(sales_log.id) @@ -576,6 +636,13 @@ RSpec.describe SalesLog, type: :model do expect(record_from_db["mortgage"]).to eq(0.0) end + it "derives a mortgage value of 0 when mortgage is unknown" do + Timecop.freeze(2024, 5, 2) + sales_log.update!(value: 123_400, saledate: Time.zone.local(2024, 5, 2), mortgageused: 3, ownershipsch: 3, type: 10, companybuy: 1, jointpur: 1, jointmore: 1) + record_from_db = described_class.find(sales_log.id) + expect(record_from_db["mortgage"]).to eq(0.0) + end + it "clears mortgage value if mortgage used is changed from no to yes" do # to avoid log failing validations when mortgage value is removed: new_grant_value = sales_log.grant + sales_log.mortgage