Browse Source

CLDC-3426: Ensure outright sale section can be completed with mortgage used unknown

pull/2399/head
Rachael Booth 2 years ago
parent
commit
25ae5368c1
  1. 22
      app/models/derived_variables/sales_log_variables.rb
  2. 6
      app/models/form/sales/questions/deposit_amount.rb
  3. 4
      spec/models/form/sales/questions/deposit_amount_spec.rb
  4. 29
      spec/models/sales_log_spec.rb

22
app/models/derived_variables/sales_log_variables.rb

@ -18,11 +18,15 @@ module DerivedVariables::SalesLogVariables
self.hoyear = hodate.year self.hoyear = hodate.year
end end
if outright_sale? && mortgage_not_used? if outright_sale?
self.deposit = value if mortgage_not_used?
elsif outright_sale? && mortgageused_changed?(from: 2, to: 1) self.deposit = value
# Clear when switching mortgage used from no to yes elsif mortgage_use_unknown?
self.deposit = nil self.deposit = nil
elsif mortgageused_changed?(to: 1)
# Clear when switching mortgage used to yes
self.deposit = nil
end
end end
if saledate && form.start_year_after_2024? && discounted_ownership_sale? if saledate && form.start_year_after_2024? && discounted_ownership_sale?
@ -108,6 +112,14 @@ private
mortgage: 0, mortgage: 0,
}, },
}, },
{
conditions: {
mortgageused: 3,
},
derived_values: {
mortgage: nil,
},
},
].freeze ].freeze
def number_of_household_members def number_of_household_members

6
app/models/form/sales/questions/deposit_amount.rb

@ -16,11 +16,7 @@ class Form::Sales::Questions::DepositAmount < ::Form::Question
end end
def derived?(log) def derived?(log)
log.outright_sale? && log.mortgage_not_used? log.outright_sale? && !log.mortgage_used?
end
def selected_answer_option_is_derived?(_log)
true
end end
QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP = { QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP = {

4
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 expect(question.derived?(log)).to be true
end 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 log.mortgageused = 3
expect(question.derived?(log)).to be false expect(question.derived?(log)).to be true
end end
end end

29
spec/models/sales_log_spec.rb

@ -538,6 +538,11 @@ RSpec.describe SalesLog, type: :model do
describe "derived variables" do describe "derived variables" do
let(:sales_log) { create(:sales_log, :completed) } 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 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) 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) 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) expect(record_from_db["deposit"]).to eq(nil)
end end
it "does not derive deposit if the mortgage use is unknown" do it "derives deposit as nil if the mortgage use is unknown" do
Timecop.freeze(2024, 5, 2) 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)
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)
record_from_db = described_class.find(sales_log.id) record_from_db = described_class.find(sales_log.id)
expect(record_from_db["deposit"]).to eq(nil) expect(record_from_db["deposit"]).to eq(nil)
end end
it "clears deposit when setting mortgage used to yes from no for outright sales" do it "clears deposit when setting mortgage used to yes 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!(value: 123_400, deposit: 123_400, mortgageused: 2, ownershipsch: 3, type: 10, companybuy: 1, jointpur: 1, jointmore: 1)
sales_log.update!(mortgageused: 1) sales_log.update!(mortgageused: 1)
record_from_db = described_class.find(sales_log.id) record_from_db = described_class.find(sales_log.id)
expect(record_from_db["deposit"]).to eq(nil) expect(record_from_db["deposit"]).to eq(nil)
end 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 it "correctly derives and saves pcode1 and pcode1 and pcode2" do
sales_log.update!(postcode_full: "W6 0SP") sales_log.update!(postcode_full: "W6 0SP")
record_from_db = described_class.find(sales_log.id) 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 it "derives a mortgage value of 0 when mortgage is not used" do
# to avoid log failing validations when mortgage value is removed: # to avoid log failing validations when mortgage value is removed:
new_grant_value = sales_log.grant + sales_log.mortgage sales_log.update!(mortgage: 100_000, grant: nil, deposit: nil)
sales_log.update!(mortgageused: 2, grant: new_grant_value) sales_log.update!(mortgageused: 2)
record_from_db = described_class.find(sales_log.id) record_from_db = described_class.find(sales_log.id)
expect(record_from_db["mortgage"]).to eq(0.0) expect(record_from_db["mortgage"]).to eq(0.0)
end end
it "clears mortgage value if mortgage used is changed from no to yes" do it "clears mortgage value if mortgage used is changed from no to yes" do
# to avoid log failing validations when mortgage value is removed: sales_log.update!(mortgageused: 2, grant: nil)
new_grant_value = sales_log.grant + sales_log.mortgage
sales_log.update!(mortgageused: 2, grant: new_grant_value)
sales_log.update!(mortgageused: 1) sales_log.update!(mortgageused: 1)
record_from_db = described_class.find(sales_log.id) record_from_db = described_class.find(sales_log.id)
expect(record_from_db["mortgage"]).to eq(nil) expect(record_from_db["mortgage"]).to eq(nil)

Loading…
Cancel
Save