mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-19 05:09:38 +02:00
* Initial multi-step property form * Improve form structure, add optional tooltip help icons to form fields * Add basic inline alert component * Clean up and improve property form lifecycle * Implement Account status concept * Lint fixes * Remove whitespace * Balance editing, scope updates for account * Passing tests * Fix brakeman warning * Remove stale columns * data constraint tweaks * Redundant property
47 lines
1.4 KiB
Ruby
47 lines
1.4 KiB
Ruby
class Account::BalanceUpdater
|
|
def initialize(account, balance:, currency: nil, date: Date.current, notes: nil)
|
|
@account = account
|
|
@balance = balance.to_d
|
|
@currency = currency
|
|
@date = date.to_date
|
|
@notes = notes
|
|
end
|
|
|
|
def update
|
|
return Result.new(success?: true, updated?: false) unless requires_update?
|
|
|
|
Account.transaction do
|
|
if date == Date.current
|
|
account.balance = balance
|
|
account.currency = currency if currency.present?
|
|
account.save!
|
|
end
|
|
|
|
valuation_entry = account.entries.valuations.find_or_initialize_by(date: date) do |entry|
|
|
entry.entryable = Valuation.new
|
|
end
|
|
|
|
valuation_entry.amount = balance
|
|
valuation_entry.currency = currency if currency.present?
|
|
valuation_entry.name = "Manual #{account.accountable.balance_display_name} update"
|
|
valuation_entry.notes = notes if notes.present?
|
|
valuation_entry.save!
|
|
end
|
|
|
|
account.sync_later
|
|
|
|
Result.new(success?: true, updated?: true)
|
|
rescue => e
|
|
message = Rails.env.development? ? e.message : "Unable to update account values. Please try again."
|
|
Result.new(success?: false, updated?: false, error_message: message)
|
|
end
|
|
|
|
private
|
|
attr_reader :account, :balance, :currency, :date, :notes
|
|
|
|
Result = Struct.new(:success?, :updated?, :error_message)
|
|
|
|
def requires_update?
|
|
date != Date.current || account.balance != balance || account.currency != currency
|
|
end
|
|
end
|