1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-08-02 20:15:22 +02:00

Account Activity View + Account Forms (#1406)
Some checks are pending
Publish Docker image / ci (push) Waiting to run
Publish Docker image / Build docker image (push) Blocked by required conditions

* Remove balance mode, sketch out refactor

* Activity view checkpoint

* Entry partials, checkpoint

* Finish txn partial

* Give entries context when editing for different turbo responses

* Calculate change of balance for each entry

* Account tabs consolidation

* Translations, linting, brakeman updates

* Account actions concern

* Finalize forms, get account system tests passing

* Get tests passing

* Lint, rubocop, schema updates

* Improve routing and stream responses

* Fix broken routes

* Add import option for adding accounts

* Fix system test

* Fix test specificity

* Fix sparklines

* Improve account redirects
This commit is contained in:
Zach Gollwitzer 2024-11-04 20:27:31 -05:00 committed by GitHub
parent 12e4f1067d
commit 65db49273c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
216 changed files with 2043 additions and 1620 deletions

View file

@ -46,22 +46,40 @@ class Account::Entry < ApplicationRecord
amount > 0 && account_transaction?
end
def first_of_type?
first_entry = account
.entries
.where("entryable_type = ?", entryable_type)
.order(:date)
.first
first_entry&.id == id
end
def entryable_name_short
entryable_type.demodulize.underscore
end
def prior_balance
account.balances.find_by(date: date - 1)&.balance || 0
end
def balance_after_entry
if account_valuation?
Money.new(amount, currency)
else
new_balance = prior_balance
entries_on_entry_date.each do |e|
change = e.amount
change = account.liability? ? change : -change
new_balance += change
break if e == self
end
Money.new(new_balance, currency)
end
end
def trend
@trend ||= create_trend
TimeSeries::Trend.new(
current: balance_after_entry,
previous: Money.new(prior_balance, currency),
favorable_direction: account.favorable_direction
)
end
def entries_on_entry_date
account.entries.where(date: date).order(created_at: :desc)
end
class << self
@ -216,11 +234,4 @@ class Account::Entry < ApplicationRecord
.order(date: :desc)
.first
end
def create_trend
TimeSeries::Trend.new \
current: amount_money,
previous: previous_entry&.amount_money,
favorable_direction: account.favorable_direction
end
end

View file

@ -26,6 +26,12 @@ class Account::Trade < ApplicationRecord
qty > 0
end
def name
prefix = sell? ? "Sell " : "Buy "
generated = prefix + "#{qty.abs} shares of #{security.ticker}"
entry.name || generated
end
def unrealized_gain_loss
return nil if sell?
current_price = security.current_price

View file

@ -48,12 +48,20 @@ class Account::Transaction < ApplicationRecord
end
end
def name
entry.name || "(no description)"
end
def eod_balance
entry.amount_money
end
private
def previous_transaction_date
self.account
.transactions
.where("date < ?", date)
.order(date: :desc)
.first&.date
def account
entry.account
end
def daily_transactions
account.entries.account_transactions
end
end

View file

@ -1,5 +1,5 @@
class Account::Transfer < ApplicationRecord
has_many :entries, dependent: :nullify
has_many :entries, dependent: :destroy
validate :net_zero_flows, if: :single_currency_transfer?
validate :transaction_count, :from_different_accounts, :all_transactions_marked
@ -13,17 +13,25 @@ class Account::Transfer < ApplicationRecord
end
def from_name
outflow_transaction&.account&.name || I18n.t("account/transfer.from_fallback_name")
from_account&.name || I18n.t("account/transfer.from_fallback_name")
end
def to_name
inflow_transaction&.account&.name || I18n.t("account/transfer.to_fallback_name")
to_account&.name || I18n.t("account/transfer.to_fallback_name")
end
def name
I18n.t("account/transfer.name", from_account: from_name, to_account: to_name)
end
def from_account
outflow_transaction&.account
end
def to_account
inflow_transaction&.account
end
def inflow_transaction
entries.find { |e| e.inflow? }
end
@ -32,13 +40,11 @@ class Account::Transfer < ApplicationRecord
entries.find { |e| e.outflow? }
end
def destroy_and_remove_marks!
def update_entries!(params)
transaction do
entries.each do |e|
e.update! marked_as_transfer: false
entries.each do |entry|
entry.update!(params)
end
destroy!
end
end

View file

@ -10,4 +10,44 @@ class Account::Valuation < ApplicationRecord
false
end
end
def name
oldest? ? "Initial balance" : entry.name || "Balance update"
end
def trend
@trend ||= create_trend
end
def icon
oldest? ? "plus" : entry.trend.icon
end
def color
oldest? ? "#D444F1" : entry.trend.color
end
private
def oldest?
@oldest ||= account.entries.where("date < ?", entry.date).empty?
end
def account
@account ||= entry.account
end
def create_trend
TimeSeries::Trend.new(
current: entry.amount_money,
previous: prior_balance&.balance_money,
favorable_direction: account.favorable_direction
)
end
def prior_balance
@prior_balance ||= account.balances
.where("date < ?", entry.date)
.order(date: :desc)
.first
end
end