diff --git a/app/views/budget_categories/_budget_category.html.erb b/app/views/budget_categories/_budget_category.html.erb index b867783a7..3ce90e6f4 100644 --- a/app/views/budget_categories/_budget_category.html.erb +++ b/app/views/budget_categories/_budget_category.html.erb @@ -1,44 +1,53 @@ <%# locals: (budget_category:) %> -<%= turbo_frame_tag dom_id(budget_category), class: "w-full block" do %> - <%= link_to budget_budget_category_path(budget_category.budget, budget_category), class: "group block w-full p-4 bg-container hover:bg-surface-inset transition-colors", data: { turbo_frame: "drawer" } do %> +<%= turbo_frame_tag dom_id(budget_category), class: "flex-1 min-w-0 block" do %> + <%= link_to budget_budget_category_path(budget_category.budget, budget_category), class: "group block w-full px-4 py-2 bg-container", data: { turbo_frame: "drawer" } do %> <% if budget_category.initialized? %> <%# Category Header with Status Badge %> -
-
-
-

<%= budget_category.category.name %>

+
+
+ <% if budget_category.category.lucide_icon %> + <%= icon(budget_category.category.lucide_icon, color: "current") %> + <% else %> + <%= render DS::FilledIcon.new( + variant: :text, + hex_color: budget_category.category.color, + text: budget_category.category.name, + size: "md", + rounded: true + ) %> + <% end %>
- -
+

<%= budget_category.category.name %>

+
<% if budget_category.over_budget? %> - - <%= icon("alert-circle", class: "w-3 h-3") %> + + <%= icon("alert-circle", size: "sm", color: "red") %> <%= t("reports.budget_performance.status.over") %> <% elsif budget_category.near_limit? %> - - <%= icon("alert-triangle", class: "w-3 h-3") %> + + <%= icon("alert-triangle", size: "sm", color: "yellow") %> <%= t("reports.budget_performance.status.warning") %> <% else %> - - <%= icon("check-circle", class: "w-3 h-3") %> + + <%= icon("check-circle", size: "sm", color: "green") %> <%= t("reports.budget_performance.status.good") %> <% end %> - - - <%= budget_category.percent_of_budget_spent.round(0) %>% -
<%# Progress Bar %>
-
- <% bar_color = budget_category.over_budget? ? "bg-danger" : (budget_category.near_limit? ? "bg-warning" : "bg-success") %> +
+ <% bar_color = budget_category.over_budget? ? "bg-red-500" : (budget_category.near_limit? ? "bg-yellow-500" : "bg-green-500") %>
@@ -46,27 +55,27 @@ <%# Budget Details %>
-
- <%= t("reports.budget_performance.spent") %>: +
+ <%= t("reports.budget_performance.spent") %>: <%= format_money(budget_category.actual_spending_money) %>
-
- <%= t("reports.budget_performance.budgeted") %>: - +
+ <%= t("reports.budget_performance.budgeted") %>: + <%= format_money(budget_category.budgeted_spending_money) %>
-
+
<% if budget_category.available_to_spend >= 0 %> - <%= t("reports.budget_performance.remaining") %>: - + <%= t("reports.budget_performance.remaining") %>: + "> <%= format_money(budget_category.available_to_spend_money) %> <% else %> - <%= t("reports.budget_performance.over_by") %>: - + <%= t("reports.budget_performance.over_by") %>: + <%= format_money(budget_category.available_to_spend_money.abs) %> <% end %> @@ -76,8 +85,8 @@ <%# Suggested Daily Limit (if remaining days in month) %> <% if budget_category.suggested_daily_spending.present? %> <% daily_info = budget_category.suggested_daily_spending %> -
-

+

+

<%= t("reports.budget_performance.suggested_daily", amount: daily_info[:amount].format, days: daily_info[:days_remaining]) %> diff --git a/app/views/budgets/_budget_categories.html.erb b/app/views/budgets/_budget_categories.html.erb index 994373026..46824bac3 100644 --- a/app/views/budgets/_budget_categories.html.erb +++ b/app/views/budgets/_budget_categories.html.erb @@ -18,13 +18,13 @@ <% category_groups = BudgetCategory::Group.for(budget.budget_categories) %> <% category_groups.each_with_index do |group, index| %> -

+
<%= render "budget_categories/budget_category", budget_category: group.budget_category %>
<% group.budget_subcategories.each do |budget_subcategory| %> -
-
+
+
<%= icon "corner-down-right" %>
@@ -36,8 +36,9 @@ <%= render "shared/ruler" %> <% end %> - - <%= render "budget_categories/budget_category", budget_category: budget.uncategorized_budget_category %> +
+ <%= render "budget_categories/budget_category", budget_category: budget.uncategorized_budget_category %> +
<% end %>
diff --git a/app/views/budgets/show.html.erb b/app/views/budgets/show.html.erb index 57eee66ad..63e37448d 100644 --- a/app/views/budgets/show.html.erb +++ b/app/views/budgets/show.html.erb @@ -18,30 +18,30 @@
<%# Actuals Summary %> -
- <% if @budget.initialized? && @budget.available_to_allocate.positive? %> - <%= render DS::Tabs.new(active_tab: params[:tab].presence || "budgeted") do |tabs| %> - <% tabs.with_nav do |nav| %> - <% nav.with_btn(id: "budgeted", label: "Budgeted") %> - <% nav.with_btn(id: "actuals", label: "Actual") %> - <% end %> - - <% tabs.with_panel(tab_id: "budgeted") do %> -
- <%= render "budgets/budgeted_summary", budget: @budget %> -
- <% end %> - - <% tabs.with_panel(tab_id: "actuals") do %> -
- <%= render "budgets/actuals_summary", budget: @budget %> -
- <% end %> + <% if @budget.initialized? && @budget.available_to_allocate.positive? %> + <%= render DS::Tabs.new(active_tab: params[:tab].presence || "budgeted") do |tabs| %> + <% tabs.with_nav do |nav| %> + <% nav.with_btn(id: "budgeted", label: t("budgets.show.tabs.budgeted")) %> + <% nav.with_btn(id: "actuals", label: t("budgets.show.tabs.actual")) %> + <% end %> + + <% tabs.with_panel(tab_id: "budgeted") do %> +
+ <%= render "budgets/budgeted_summary", budget: @budget %> +
+ <% end %> + + <% tabs.with_panel(tab_id: "actuals") do %> +
+ <%= render "budgets/actuals_summary", budget: @budget %> +
<% end %> - <% else %> - <%= render "budgets/actuals_summary", budget: @budget %> <% end %> -
+ <% else %> +
+ <%= render "budgets/actuals_summary", budget: @budget %> +
+ <% end %>
<%# Bottom Section: Categories full width %>