budget for 2026

This commit is contained in:
Roger Oriol
2025-12-28 18:29:38 +01:00
parent a45cdbd013
commit b83e80466c
2 changed files with 71 additions and 31 deletions

View File

@@ -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)