From 1e800e2f930ba6b2d7ddbc0c94a948db56042da8 Mon Sep 17 00:00:00 2001 From: "Sure Admin (bot)" Date: Sat, 1 Aug 2026 07:50:09 +0200 Subject: [PATCH] Include uncategorized spending in budget UI (#2877) --- app/helpers/budgets_helper.rb | 2 +- app/models/budget.rb | 13 ++++- app/views/budgets/_budget_donut.html.erb | 2 +- test/helpers/budgets_helper_test.rb | 45 ++++++++++++++++ test/models/budget_test.rb | 54 ++++++++++++++++++++ test/views/budgets/budget_donut_view_test.rb | 54 ++++++++++++++++++++ 6 files changed, 167 insertions(+), 3 deletions(-) create mode 100644 test/views/budgets/budget_donut_view_test.rb diff --git a/app/helpers/budgets_helper.rb b/app/helpers/budgets_helper.rb index 8ffb27ad8..46e695947 100644 --- a/app/helpers/budgets_helper.rb +++ b/app/helpers/budgets_helper.rb @@ -2,7 +2,7 @@ module BudgetsHelper def budget_has_over_budget?(budget) return false unless budget.initialized? - budget.budget_categories.any?(&:any_over_budget?) + budget.budget_categories.any?(&:any_over_budget?) || budget.uncategorized_budget_category.any_over_budget? end def budget_categories_view_state(budget) diff --git a/app/models/budget.rb b/app/models/budget.rb index dcc9466a1..a229def0e 100644 --- a/app/models/budget.rb +++ b/app/models/budget.rb @@ -208,7 +208,7 @@ class Budget < ApplicationRecord # Continuous gray segment for empty budgets return [ { color: "var(--budget-unallocated-fill)", amount: 1, id: unused_segment_id } ] unless allocations_valid? - segments = budget_categories.reject(&:subcategory?).map do |bc| + segments = donut_budget_categories.map do |bc| { color: bc.category.color, amount: budget_category_actual_spending(bc), id: bc.id } end @@ -219,6 +219,17 @@ class Budget < ApplicationRecord segments end + def donut_budget_categories + categories = budget_categories.reject(&:subcategory?).to_a + uncategorized = uncategorized_budget_category + + if budget_category_actual_spending(uncategorized).positive? + categories << uncategorized + end + + categories + end + # ============================================================================= # Actuals: How much user has spent on each budget category # ============================================================================= diff --git a/app/views/budgets/_budget_donut.html.erb b/app/views/budgets/_budget_donut.html.erb index dc268c912..967a8b3fd 100644 --- a/app/views/budgets/_budget_donut.html.erb +++ b/app/views/budgets/_budget_donut.html.erb @@ -34,7 +34,7 @@ <% end %> - <% budget.budget_categories.each do |bc| %> + <% budget.donut_budget_categories.each do |bc| %>