1
0
Fork 0
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:
Joseph Ho 2025-04-21 18:54:38 -04:00
parent a7dfafc907
commit 86c7b09493
4 changed files with 24 additions and 6 deletions

View file

@ -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

View file

@ -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>

View file

@ -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
View file

@ -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