budget for 2026
This commit is contained in:
@@ -26,19 +26,26 @@ class bcolors:
|
||||
|
||||
def get_budget_entries(entries, period, start_date):
|
||||
budgets = []
|
||||
seen_accounts = set()
|
||||
seen_accounts = {}
|
||||
for entry in entries:
|
||||
if isinstance(entry, Custom) and entry.values[1].value == period \
|
||||
and entry.date <= date.fromisoformat(start_date):
|
||||
account = entry.values[0].value
|
||||
if account not in seen_accounts:
|
||||
seen_accounts.add(account)
|
||||
seen_accounts[account] = len(budgets)
|
||||
budgets.append({
|
||||
"date": entry.date,
|
||||
"account": account,
|
||||
"period": entry.values[1].value,
|
||||
"budget": entry.values[2].value
|
||||
})
|
||||
else:
|
||||
budgets[seen_accounts[account]] = {
|
||||
"date": entry.date,
|
||||
"account": account,
|
||||
"period": entry.values[1].value,
|
||||
"budget": entry.values[2].value
|
||||
}
|
||||
return budgets
|
||||
|
||||
|
||||
@@ -82,25 +89,26 @@ def build_budget(budget_entries, expenses, equity_amounts, total_positive_expens
|
||||
total_perc = 0
|
||||
remaining = entry["budget"]
|
||||
if entry["account"] in expenses:
|
||||
expense = expenses[entry["account"]].get_only_position().units
|
||||
if expenses[entry["account"]].get_only_position() is not None:
|
||||
expense = expenses[entry["account"]].get_only_position().units
|
||||
|
||||
# Apply equity deductions for specific accounts
|
||||
if entry["account"] == "Expenses:Lloguer" and "Equity:LloguerMiquel" in equity_amounts:
|
||||
equity_amount = equity_amounts["Equity:LloguerMiquel"].get_only_position(
|
||||
)
|
||||
expense = sub(expense, equity_amount.units)
|
||||
elif entry["account"] == "Expenses:FacturesUtilitats" and "Equity:FacturesUtilitatsMiquel" in equity_amounts:
|
||||
equity_amount = equity_amounts["Equity:FacturesUtilitatsMiquel"].get_only_position(
|
||||
)
|
||||
expense = sub(expense, equity_amount.units)
|
||||
# Apply equity deductions for specific accounts
|
||||
# if entry["account"] == "Expenses:Lloguer" and "Equity:LloguerMiquel" in equity_amounts:
|
||||
# equity_amount = equity_amounts["Equity:LloguerMiquel"].get_only_position(
|
||||
# )
|
||||
# expense = sub(expense, equity_amount.units)
|
||||
# elif entry["account"] == "Expenses:FacturesUtilitats" and "Equity:FacturesUtilitatsMiquel" in equity_amounts:
|
||||
# equity_amount = equity_amounts["Equity:FacturesUtilitatsMiquel"].get_only_position(
|
||||
# )
|
||||
# expense = sub(expense, equity_amount.units)
|
||||
|
||||
expense_perc = (expense.number /
|
||||
entry["budget"].number) * 100
|
||||
# Calculate percentage of total positive expenses only
|
||||
if total_positive_expenses.number > 0 and expense.number > 0:
|
||||
total_perc = (expense.number /
|
||||
total_positive_expenses.number) * 100
|
||||
remaining = sub(remaining, expense)
|
||||
expense_perc = (expense.number /
|
||||
entry["budget"].number) * 100
|
||||
# Calculate percentage of total positive expenses only
|
||||
if total_positive_expenses.number > 0 and expense.number > 0:
|
||||
total_perc = (expense.number /
|
||||
total_positive_expenses.number) * 100
|
||||
remaining = sub(remaining, expense)
|
||||
result.append({
|
||||
"Account": entry["account"],
|
||||
"Budget": entry["budget"].to_string(),
|
||||
@@ -161,20 +169,21 @@ def main():
|
||||
Decimal(0), budget_entries[0]["budget"].currency)
|
||||
for entry in budget_entries:
|
||||
if entry["account"] in expenses:
|
||||
expense = expenses[entry["account"]].get_only_position().units
|
||||
if expenses[entry["account"]].get_only_position() is not None:
|
||||
expense = expenses[entry["account"]].get_only_position().units
|
||||
|
||||
# Apply equity deductions for specific accounts (same logic as in build_budget)
|
||||
if entry["account"] == "Expenses:Lloguer" and "Equity:LloguerMiquel" in equity_amounts:
|
||||
equity_amount = equity_amounts["Equity:LloguerMiquel"].get_only_position(
|
||||
)
|
||||
expense = sub(expense, equity_amount.units)
|
||||
elif entry["account"] == "Expenses:FacturesUtilitats" and "Equity:FacturesUtilitatsMiquel" in equity_amounts:
|
||||
equity_amount = equity_amounts["Equity:FacturesUtilitatsMiquel"].get_only_position(
|
||||
)
|
||||
expense = sub(expense, equity_amount.units)
|
||||
# Apply equity deductions for specific accounts (same logic as in build_budget)
|
||||
if entry["account"] == "Expenses:Lloguer" and "Equity:LloguerMiquel" in equity_amounts:
|
||||
equity_amount = equity_amounts["Equity:LloguerMiquel"].get_only_position(
|
||||
)
|
||||
expense = sub(expense, equity_amount.units)
|
||||
elif entry["account"] == "Expenses:FacturesUtilitats" and "Equity:FacturesUtilitatsMiquel" in equity_amounts:
|
||||
equity_amount = equity_amounts["Equity:FacturesUtilitatsMiquel"].get_only_position(
|
||||
)
|
||||
expense = sub(expense, equity_amount.units)
|
||||
|
||||
if expense.number > 0:
|
||||
positive_expenses_sum = add(positive_expenses_sum, expense)
|
||||
if expense.number > 0:
|
||||
positive_expenses_sum = add(positive_expenses_sum, expense)
|
||||
|
||||
budget_report = build_budget(
|
||||
budget_entries, expenses, equity_amounts, positive_expenses_sum)
|
||||
|
||||
Reference in New Issue
Block a user