1
0
Fork 0
mirror of https://github.com/maybe-finance/maybe.git synced 2025-08-07 06:25:19 +02:00

Start and end balance breakdown in activity view (#2466)
Some checks are pending
Publish Docker image / ci (push) Waiting to run
Publish Docker image / Build docker image (push) Blocked by required conditions

* Initial data objects

* Remove trend calculator

* Fill in balance reconciliation for entry group

* Initial tooltip component

* Balance trends in activity view

* Lint fixes

* trade partial alignment fix

* Tweaks to balance calculation to acknowledge holdings value better

* More lint fixes

* Bump brakeman dep

* Test fixes

* Remove unused class
This commit is contained in:
Zach Gollwitzer 2025-07-18 17:56:25 -04:00 committed by GitHub
parent ab6fdbbb68
commit e8eb32d2ae
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
27 changed files with 1088 additions and 119 deletions

View file

@ -3,4 +3,6 @@
chart_view: @chart_view,
chart_period: @period,
active_tab: @tab
) %>
) do |account_page| %>
<%= account_page.with_activity_feed(feed_data: @activity_feed_data, pagy: @pagy, search: @q[:search]) %>
<% end %>

View file

@ -76,11 +76,9 @@
<div>
<div class="space-y-4">
<% calculator = Balance::TrendCalculator.new(@account.balances) %>
<%= entries_by_date(@entries) do |entries| %>
<% entries.each_with_index do |entry, index| %>
<%= render entry, balance_trend: index == 0 ? calculator.trend_for(entry.date) : nil, view_ctx: "account" %>
<%= render entry, view_ctx: "account" %>
<% end %>
<% end %>
</div>

View file

@ -5,7 +5,7 @@
<%= turbo_frame_tag dom_id(entry) do %>
<%= turbo_frame_tag dom_id(trade) do %>
<div class="grid grid-cols-12 items-center <%= entry.excluded ? "text-gray-400 bg-gray-25" : "text-primary" %> text-sm font-medium p-4">
<div class="col-span-6 flex items-center gap-4">
<div class="col-span-8 flex items-center gap-4">
<%= check_box_tag dom_id(entry, "selection"),
class: "checkbox checkbox--light",
data: { id: entry.id, "bulk-select-target": "row", action: "bulk-select#toggleRowSelection" } %>
@ -38,16 +38,6 @@
format_money(-entry.amount_money),
class: ["text-green-600": entry.amount.negative?] %>
</div>
<div class="col-span-2 justify-self-end">
<% if balance_trend&.trend %>
<div class="flex items-center gap-2">
<%= tag.p format_money(balance_trend.trend.current), class: "font-medium text-sm text-primary" %>
</div>
<% else %>
<%= tag.p "--", class: "font-medium text-sm text-gray-400" %>
<% end %>
</div>
</div>
<% end %>
<% end %>

View file

@ -6,7 +6,7 @@
<%= turbo_frame_tag dom_id(transaction) do %>
<div class="grid grid-cols-12 items-center text-primary text-sm font-medium p-4 lg:p-4 <%= entry.excluded ? "opacity-50 text-gray-400" : "" %>">
<div class="pr-4 lg:pr-10 flex items-center gap-3 lg:gap-4 col-span-8 <%= view_ctx == "global" ? "lg:col-span-8" : "lg:col-span-6" %>">
<div class="pr-4 lg:pr-10 flex items-center gap-3 lg:gap-4 col-span-8">
<%= check_box_tag dom_id(entry, "selection"),
disabled: transaction.transfer.present?,
class: "checkbox checkbox--light",
@ -93,22 +93,11 @@
<%= render "transactions/transaction_category", transaction: transaction %>
</div>
<div class="col-span-4 lg:col-span-2 ml-auto text-right">
<div class="col-span-2 ml-auto text-right">
<%= content_tag :p,
transaction.transfer? && view_ctx == "global" ? "+/- #{format_money(entry.amount_money.abs)}" : format_money(-entry.amount_money),
class: ["text-green-600": entry.amount.negative?] %>
</div>
<% if view_ctx != "global" %>
<div class="col-span-2 justify-self-end hidden lg:block">
<% if balance_trend&.trend %>
<%= tag.p format_money(balance_trend.trend.current),
class: "font-medium text-sm text-primary" %>
<% else %>
<%= tag.p "--", class: "font-medium text-sm text-gray-400" %>
<% end %>
</div>
<% end %>
</div>
<% end %>
<% end %>

View file

@ -2,8 +2,8 @@
<div class="space-y-4 text-sm text-secondary">
<% if account.investment? %>
<% holdings_value = reconciliation_dry_run.new_balance - reconciliation_dry_run.new_cash_balance %>
<% brokerage_cash = reconciliation_dry_run.new_cash_balance %>
<% brokerage_cash = reconciliation_dry_run.new_cash_balance || 0 %>
<% holdings_value = reconciliation_dry_run.new_balance - brokerage_cash %>
<p>This will <%= action_verb %> the account value on <span class="font-medium text-primary"><%= entry.date.strftime("%B %d, %Y") %></span> to:</p>

View file

@ -1,9 +1,9 @@
<%# locals: (entry:, balance_trend: nil, **) %>
<%# locals: (entry:, **) %>
<% valuation = entry.entryable %>
<% color = balance_trend&.trend&.color || "#D444F1" %>
<% icon = balance_trend&.trend&.icon || "plus" %>
<% color = valuation.opening_anchor? ? "#D444F1" : "var(--color-gray)" %>
<% icon = valuation.opening_anchor? ? "plus" : "minus" %>
<%= turbo_frame_tag dom_id(entry) do %>
<%= turbo_frame_tag dom_id(valuation) do %>
@ -26,7 +26,7 @@
</div>
<div class="col-span-4 justify-self-end">
<%= tag.p format_money(entry.amount_money), class: "font-medium text-sm text-primary" %>
<%= tag.p format_money(entry.amount_money), class: "font-bold text-sm text-primary" %>
</div>
</div>
<% end %>

View file

@ -24,7 +24,7 @@
max: Date.current %>
<%= f.money_field :amount,
label: t(".amount"),
label: "Account value on date",
disable_currency: true %>
<div class="flex justify-end">