mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-08-04 04:55:20 +02:00
Refactor balance sheet weight calculation and improve group weight rendering
- Update BalanceSheet model to directly calculate account weights based on converted balances. - Modify dashboard view to compute account weight as a percentage of classification total, enhancing clarity. - Adjust group weight partial to handle effective weight, ensuring accurate rendering of weight representation.
This commit is contained in:
parent
fd65b5a747
commit
5cfb4addbd
3 changed files with 14 additions and 9 deletions
|
@ -60,7 +60,7 @@ class BalanceSheet
|
||||||
|
|
||||||
key = accountable.model_name.param_key
|
key = accountable.model_name.param_key
|
||||||
|
|
||||||
AccountGroup.new(
|
group = AccountGroup.new(
|
||||||
id: classification ? "#{classification}_#{key}_group" : "#{key}_group",
|
id: classification ? "#{classification}_#{key}_group" : "#{key}_group",
|
||||||
key: key,
|
key: key,
|
||||||
name: accountable.display_name,
|
name: accountable.display_name,
|
||||||
|
@ -72,13 +72,11 @@ class BalanceSheet
|
||||||
color: accountable.color,
|
color: accountable.color,
|
||||||
syncing?: accounts.any?(&:is_syncing),
|
syncing?: accounts.any?(&:is_syncing),
|
||||||
accounts: accounts.map do |account|
|
accounts: accounts.map do |account|
|
||||||
account.define_singleton_method(:weight) do
|
|
||||||
classification_total.zero? ? 0 : account.converted_balance / classification_total.to_d * 100
|
|
||||||
end
|
|
||||||
|
|
||||||
account
|
account
|
||||||
end.sort_by(&:weight).reverse
|
end.sort_by(&:converted_balance).reverse
|
||||||
)
|
)
|
||||||
|
|
||||||
|
group
|
||||||
end
|
end
|
||||||
|
|
||||||
groups.sort_by do |group|
|
groups.sort_by do |group|
|
||||||
|
|
|
@ -116,7 +116,12 @@
|
||||||
<% else %>
|
<% else %>
|
||||||
<div class="ml-auto flex items-center text-right gap-6">
|
<div class="ml-auto flex items-center text-right gap-6">
|
||||||
<div class="w-28 shrink-0 flex items-center justify-end gap-2">
|
<div class="w-28 shrink-0 flex items-center justify-end gap-2">
|
||||||
<%= render "pages/dashboard/group_weight", weight: account.weight, color: account_group.color %>
|
<%
|
||||||
|
# Calculate weight as percentage of classification total
|
||||||
|
classification_total = classification_group.total_money.amount
|
||||||
|
account_weight = classification_total.zero? ? 0 : account.converted_balance / classification_total * 100
|
||||||
|
%>
|
||||||
|
<%= render "pages/dashboard/group_weight", weight: account_weight, color: account_group.color %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="w-40 shrink-0">
|
<div class="w-40 shrink-0">
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
<%# locals: (weight:, color:) %>
|
<%# locals: (weight:, color:) %>
|
||||||
|
|
||||||
|
<% effective_weight = weight.presence || 0 %>
|
||||||
|
|
||||||
<div class="w-full flex items-center justify-between gap-2">
|
<div class="w-full flex items-center justify-between gap-2">
|
||||||
<div class="flex gap-[3px]">
|
<div class="flex gap-[3px]">
|
||||||
<% 10.times do |i| %>
|
<% 10.times do |i| %>
|
||||||
<div class="w-0.5 h-2.5 rounded-lg <%= i < (weight / 10.0).ceil ? "" : "opacity-20" %>" style="background-color: <%= color %>;"></div>
|
<div class="w-0.5 h-2.5 rounded-lg <%= i < (effective_weight / 10.0).ceil ? "" : "opacity-20" %>" style="background-color: <%= color %>;"></div>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
<p class="text-sm"><%= number_to_percentage(weight, precision: 2) %></p>
|
<p class="text-sm"><%= number_to_percentage(effective_weight, precision: 2) %></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue