mirror of
https://github.com/we-promise/sure.git
synced 2026-04-19 12:04:08 +00:00
Support uncategorized investments (#593)
* Support uncategorized investments * FIX sankey id collision * Fix reports * Fix hardcoded string and i8n * FIX plurals * Remove spending patterns section add net worth section to reports
This commit is contained in:
@@ -31,10 +31,15 @@ class Category < ApplicationRecord
|
||||
COLORS = %w[#e99537 #4da568 #6471eb #db5a54 #df4e92 #c44fe9 #eb5429 #61c9ea #805dee #6ad28a]
|
||||
|
||||
UNCATEGORIZED_COLOR = "#737373"
|
||||
OTHER_INVESTMENTS_COLOR = "#e99537"
|
||||
TRANSFER_COLOR = "#444CE7"
|
||||
PAYMENT_COLOR = "#db5a54"
|
||||
TRADE_COLOR = "#e99537"
|
||||
|
||||
# Synthetic category name keys for i18n
|
||||
UNCATEGORIZED_NAME_KEY = "models.category.uncategorized"
|
||||
OTHER_INVESTMENTS_NAME_KEY = "models.category.other_investments"
|
||||
|
||||
class Group
|
||||
attr_reader :category, :subcategories
|
||||
|
||||
@@ -82,12 +87,30 @@ class Category < ApplicationRecord
|
||||
|
||||
def uncategorized
|
||||
new(
|
||||
name: "Uncategorized",
|
||||
name: I18n.t(UNCATEGORIZED_NAME_KEY),
|
||||
color: UNCATEGORIZED_COLOR,
|
||||
lucide_icon: "circle-dashed"
|
||||
)
|
||||
end
|
||||
|
||||
def other_investments
|
||||
new(
|
||||
name: I18n.t(OTHER_INVESTMENTS_NAME_KEY),
|
||||
color: OTHER_INVESTMENTS_COLOR,
|
||||
lucide_icon: "trending-up"
|
||||
)
|
||||
end
|
||||
|
||||
# Helper to get the localized name for uncategorized
|
||||
def uncategorized_name
|
||||
I18n.t(UNCATEGORIZED_NAME_KEY)
|
||||
end
|
||||
|
||||
# Helper to get the localized name for other investments
|
||||
def other_investments_name
|
||||
I18n.t(OTHER_INVESTMENTS_NAME_KEY)
|
||||
end
|
||||
|
||||
private
|
||||
def default_categories
|
||||
[
|
||||
@@ -142,6 +165,21 @@ class Category < ApplicationRecord
|
||||
subcategory? ? "#{parent.name} > #{name}" : name
|
||||
end
|
||||
|
||||
# Predicate: is this the synthetic "Uncategorized" category?
|
||||
def uncategorized?
|
||||
!persisted? && name == I18n.t(UNCATEGORIZED_NAME_KEY)
|
||||
end
|
||||
|
||||
# Predicate: is this the synthetic "Other Investments" category?
|
||||
def other_investments?
|
||||
!persisted? && name == I18n.t(OTHER_INVESTMENTS_NAME_KEY)
|
||||
end
|
||||
|
||||
# Predicate: is this any synthetic (non-persisted) category?
|
||||
def synthetic?
|
||||
uncategorized? || other_investments?
|
||||
end
|
||||
|
||||
private
|
||||
def category_level_limit
|
||||
if (subcategory? && parent.subcategory?) || (parent? && subcategory?)
|
||||
|
||||
Reference in New Issue
Block a user