mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-08-02 20:15:22 +02:00
Add Local Development Demo Data (#502)
* Clean up seeds, add development demo data * Handle liability account display and sync * Fix tests
This commit is contained in:
parent
dbf575c02a
commit
14641d16de
12 changed files with 368 additions and 62 deletions
|
@ -49,12 +49,13 @@ module ApplicationHelper
|
|||
end
|
||||
|
||||
# Styles to use when displaying a change in value
|
||||
def trend_styles(trend)
|
||||
def trend_styles(trend, mode: :asset)
|
||||
puts mode == :liability ? "it is a liability" : "it is an asset"
|
||||
bg_class, text_class, symbol, icon = case trend.direction
|
||||
when "up"
|
||||
[ "bg-green-500/5", "text-green-500", "+", "arrow-up" ]
|
||||
mode == :liability ? [ "bg-red-500/5", "text-red-500", "+", "arrow-up" ] : [ "bg-green-500/5", "text-green-500", "+", "arrow-up" ]
|
||||
when "down"
|
||||
[ "bg-red-500/5", "text-red-500", "-", "arrow-down" ]
|
||||
mode == :liability ? [ "bg-green-500/5", "text-green-500", "-", "arrow-down" ] : [ "bg-red-500/5", "text-red-500", "-", "arrow-down" ]
|
||||
when "flat"
|
||||
[ "bg-gray-500/5", "text-gray-500", "", "minus" ]
|
||||
else
|
||||
|
|
|
@ -12,6 +12,21 @@ class Account < ApplicationRecord
|
|||
delegate :type_name, to: :accountable
|
||||
before_create :check_currency
|
||||
|
||||
def classification
|
||||
classifications = {
|
||||
"Account::Depository" => :asset,
|
||||
"Account::Investment" => :asset,
|
||||
"Account::Property" => :asset,
|
||||
"Account::Vehicle" => :asset,
|
||||
"Account::OtherAsset" => :asset,
|
||||
"Account::Loan" => :liability,
|
||||
"Account::Credit" => :liability,
|
||||
"Account::OtherLiability" => :liability
|
||||
}
|
||||
|
||||
classifications[accountable_type]
|
||||
end
|
||||
|
||||
def balance_series(period)
|
||||
filtered_balances = balances.in_period(period).order(:date)
|
||||
return nil if filtered_balances.empty?
|
||||
|
|
|
@ -11,6 +11,7 @@ class Account::BalanceCalculator
|
|||
oldest_entry = [ valuations.first, transactions.first ].compact.min_by(&:date)
|
||||
|
||||
net_transaction_flows = transactions.sum(&:amount)
|
||||
net_transaction_flows *= -1 if @account.classification == :liability
|
||||
implied_start_balance = oldest_entry.is_a?(Valuation) ? oldest_entry.value : @account.balance + net_transaction_flows
|
||||
|
||||
prior_balance = implied_start_balance
|
||||
|
@ -21,6 +22,7 @@ class Account::BalanceCalculator
|
|||
current_balance = valuation.value
|
||||
else
|
||||
current_day_net_transaction_flows = transactions.select { |t| t.date == date }.sum(&:amount)
|
||||
current_day_net_transaction_flows *= -1 if @account.classification == :liability
|
||||
current_balance = prior_balance - current_day_net_transaction_flows
|
||||
end
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<div class="rounded-lg bg-white border-alpha-black-25 shadow-xs">
|
||||
<%= turbo_frame_tag dom_id(Valuation.new) %>
|
||||
<%= turbo_frame_tag "valuations_list" do %>
|
||||
<%= render partial: "accounts/account_valuation_list", locals: { valuation_series: valuation_series } %>
|
||||
<%= render partial: "accounts/account_valuation_list", locals: { valuation_series: valuation_series, classification: account.classification } %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<%# locals: (valuation_series:) %>
|
||||
<%# locals: (valuation_series:, classification:) %>
|
||||
<% valuation_series.with_index do |valuation_item, index| %>
|
||||
<% valuation, trend = valuation_item.values_at(:value, :trend) %>
|
||||
<% valuation_styles = trend_styles(valuation_item[:trend]) %>
|
||||
<% valuation_styles = trend_styles(valuation_item[:trend], mode: classification) %>
|
||||
<%= turbo_frame_tag dom_id(valuation) do %>
|
||||
<div class="p-4 flex items-center">
|
||||
<div class="w-16">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<%= turbo_stream_from @account %>
|
||||
<% balance_trend_styles = @balance_series.nil? ? {} : trend_styles(@balance_series[:trend]) %>
|
||||
<% balance_trend_styles = @balance_series.nil? ? {} : trend_styles(@balance_series[:trend], mode: @account.classification) %>
|
||||
<div class="space-y-4">
|
||||
<div class="flex justify-between items-center">
|
||||
<div class="flex items-center gap-3">
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue