mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-08-09 15:35:22 +02:00
loans: Remove inital_balance field from Loan model
Fixes part of #2115.
This commit is contained in:
parent
a7dfafc907
commit
86c7b09493
4 changed files with 24 additions and 6 deletions
|
@ -33,8 +33,8 @@ class Account < ApplicationRecord
|
|||
class << self
|
||||
def create_and_sync(attributes)
|
||||
attributes[:accountable_attributes] ||= {} # Ensure accountable is created, even if empty
|
||||
initial_balance = handle_initial_balance(attributes)
|
||||
account = new(attributes.merge(cash_balance: attributes[:balance]))
|
||||
initial_balance = attributes.dig(:accountable_attributes, :initial_balance)&.to_d || 0
|
||||
|
||||
transaction do
|
||||
# Create 2 valuations for new accounts to establish a value history for users to see
|
||||
|
@ -95,13 +95,14 @@ class Account < ApplicationRecord
|
|||
def update_with_sync!(attributes)
|
||||
should_update_balance = attributes[:balance] && attributes[:balance].to_d != balance
|
||||
|
||||
initial_balance = attributes.dig(:accountable_attributes, :initial_balance)
|
||||
should_update_initial_balance = initial_balance && initial_balance.to_d != accountable.initial_balance
|
||||
initial_balance = self.class.handle_initial_balance(attributes)
|
||||
currency=attributes[:currency]
|
||||
should_update_initial_balance = initial_balance && Money.new(initial_balance, currency) != first_valuation_amount
|
||||
|
||||
transaction do
|
||||
update!(attributes)
|
||||
update_balance!(attributes[:balance]) if should_update_balance
|
||||
update_inital_balance!(attributes[:accountable_attributes][:initial_balance]) if should_update_initial_balance
|
||||
update_inital_balance!(initial_balance) if should_update_initial_balance
|
||||
end
|
||||
|
||||
sync_later
|
||||
|
@ -160,4 +161,16 @@ class Account < ApplicationRecord
|
|||
strategy = linked? ? :reverse : :forward
|
||||
Balance::Syncer.new(self, strategy: strategy).sync_balances
|
||||
end
|
||||
|
||||
def self.handle_initial_balance(attributes)
|
||||
account_type = attributes.dig(:accountable_type)
|
||||
initial_balance = 0
|
||||
|
||||
if account_type == "Loan"
|
||||
initial_balance = attributes.dig(:accountable_attributes, :initial_balance)&.to_d
|
||||
attributes[:accountable_attributes].delete("initial_balance")
|
||||
end
|
||||
|
||||
initial_balance
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
<%= loan_form.money_field :initial_balance,
|
||||
label: t("loans.form.initial_balance"),
|
||||
default_currency: Current.family.currency,
|
||||
value: account.first_valuation_amount,
|
||||
required: true %>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
class RemoveInitialBalanceField < ActiveRecord::Migration[7.2]
|
||||
def change
|
||||
remove_column :loans, :initial_balance, :decimal
|
||||
end
|
||||
end
|
3
db/schema.rb
generated
3
db/schema.rb
generated
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema[7.2].define(version: 2025_04_16_235758) do
|
||||
ActiveRecord::Schema[7.2].define(version: 2025_04_20_011909) do
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "pgcrypto"
|
||||
enable_extension "plpgsql"
|
||||
|
@ -373,7 +373,6 @@ ActiveRecord::Schema[7.2].define(version: 2025_04_16_235758) do
|
|||
t.string "rate_type"
|
||||
t.decimal "interest_rate", precision: 10, scale: 3
|
||||
t.integer "term_months"
|
||||
t.decimal "initial_balance", precision: 19, scale: 4
|
||||
t.jsonb "locked_attributes", default: {}
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue