diff --git a/app/models/derived_variables/sales_log_variables.rb b/app/models/derived_variables/sales_log_variables.rb index 24ba9ce5c..7e103077b 100644 --- a/app/models/derived_variables/sales_log_variables.rb +++ b/app/models/derived_variables/sales_log_variables.rb @@ -18,11 +18,15 @@ module DerivedVariables::SalesLogVariables self.hoyear = hodate.year end - if outright_sale? && mortgage_not_used? - self.deposit = value - elsif outright_sale? && mortgageused_changed?(from: 2, to: 1) - # Clear when switching mortgage used from no to yes - self.deposit = nil + if outright_sale? + if mortgage_not_used? + self.deposit = value + elsif mortgage_use_unknown? + self.deposit = nil + elsif mortgageused_changed?(to: 1) + # Clear when switching mortgage used to yes + self.deposit = nil + end end if saledate && form.start_year_after_2024? && discounted_ownership_sale? @@ -108,6 +112,14 @@ private mortgage: 0, }, }, + { + conditions: { + mortgageused: 3, + }, + derived_values: { + mortgage: nil, + }, + }, ].freeze def number_of_household_members diff --git a/app/models/form/sales/questions/deposit_amount.rb b/app/models/form/sales/questions/deposit_amount.rb index 72faa818c..3cef0db8d 100644 --- a/app/models/form/sales/questions/deposit_amount.rb +++ b/app/models/form/sales/questions/deposit_amount.rb @@ -16,11 +16,7 @@ class Form::Sales::Questions::DepositAmount < ::Form::Question end def derived?(log) - log.outright_sale? && log.mortgage_not_used? - end - - def selected_answer_option_is_derived?(_log) - true + log.outright_sale? && !log.mortgage_used? end QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP = { diff --git a/spec/models/form/sales/questions/deposit_amount_spec.rb b/spec/models/form/sales/questions/deposit_amount_spec.rb index c08ad7e5e..cb32a7ee1 100644 --- a/spec/models/form/sales/questions/deposit_amount_spec.rb +++ b/spec/models/form/sales/questions/deposit_amount_spec.rb @@ -56,9 +56,9 @@ RSpec.describe Form::Sales::Questions::DepositAmount, type: :model do expect(question.derived?(log)).to be true end - it "is not marked as derived when the mortgage use is unknown" do + it "is marked as derived when the mortgage use is unknown" do log.mortgageused = 3 - expect(question.derived?(log)).to be false + expect(question.derived?(log)).to be true end end diff --git a/spec/models/sales_log_spec.rb b/spec/models/sales_log_spec.rb index 0c07acb82..f8a8de6fd 100644 --- a/spec/models/sales_log_spec.rb +++ b/spec/models/sales_log_spec.rb @@ -538,6 +538,11 @@ RSpec.describe SalesLog, type: :model do describe "derived variables" do let(:sales_log) { create(:sales_log, :completed) } + before do + Timecop.return + Singleton.__init__(FormHandler) + end + it "correctly derives and saves exday, exmonth and exyear" do sales_log.update!(exdate: Time.gm(2023, 5, 4), saledate: Time.gm(2023, 7, 4), ownershipsch: 1, type: 18, staircase: 2, resale: 2, proplen: 0) record_from_db = described_class.find(sales_log.id) @@ -564,20 +569,26 @@ RSpec.describe SalesLog, type: :model do expect(record_from_db["deposit"]).to eq(nil) end - it "does not derive deposit if the mortgage use is unknown" do - Timecop.freeze(2024, 5, 2) - sales_log.update!(value: 123_400, deposit: nil, saledate: Time.zone.local(2024, 5, 2), mortgageused: 3, ownershipsch: 3, type: 10, companybuy: 1, jointpur: 1, jointmore: 1) + it "derives deposit as nil if the mortgage use is unknown" do + sales_log.update!(value: 123_400, deposit: 0, 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["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) + it "clears deposit when setting mortgage used to yes for outright sales" do + sales_log.update!(value: 123_400, deposit: 123_400, 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 mortgage used is not changed" do + sales_log.update!(value: 123_400, deposit: 25_000, mortgageused: 1, 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(25_000) + 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) @@ -587,16 +598,14 @@ RSpec.describe SalesLog, type: :model do it "derives a mortgage value of 0 when mortgage is not used" do # to avoid log failing validations when mortgage value is removed: - new_grant_value = sales_log.grant + sales_log.mortgage - sales_log.update!(mortgageused: 2, grant: new_grant_value) + sales_log.update!(mortgage: 100_000, grant: nil, deposit: nil) + sales_log.update!(mortgageused: 2) 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 - sales_log.update!(mortgageused: 2, grant: new_grant_value) + sales_log.update!(mortgageused: 2, grant: nil) sales_log.update!(mortgageused: 1) record_from_db = described_class.find(sales_log.id) expect(record_from_db["mortgage"]).to eq(nil)