fix: distribute non-monthly budgets across months when creating budget map

This commit is contained in:
khushi8112
2025-12-30 16:46:24 +05:30
parent e3fb7f4c47
commit c57a43b3f4

View File

@@ -81,26 +81,48 @@ def build_budget_map(budget_records, filters):
actual_amt = get_actual_details(budget.dimension, filters)
budget_map.setdefault(budget.dimension, {})
budget_map[budget.dimension].setdefault(budget.account, {})
budget_distributions = get_budget_distributions(budget)
for row in budget_distributions:
fiscal_year = get_fiscal_year(row.start_date)[0]
month = row.start_date.strftime("%B")
budget_map[budget.dimension][budget.account].setdefault(fiscal_year, {})
budget_map[budget.dimension][budget.account][fiscal_year].setdefault(month, {})
budget_map[budget.dimension][budget.account][fiscal_year][month] = {
"budget": row.amount,
"actual": 0,
}
for ad in actual_amt.get(budget.account, []):
if ad.month_name == month and ad.fiscal_year == fiscal_year:
budget_map[budget.dimension][budget.account][fiscal_year][month]["actual"] += flt(
ad.debit
) - flt(ad.credit)
months = get_months_in_range(row.start_date, row.end_date)
monthly_budget = flt(row.amount) / len(months)
for month_date in months:
fiscal_year = get_fiscal_year(month_date)[0]
month = month_date.strftime("%B")
budget_map[budget.dimension][budget.account].setdefault(fiscal_year, {})
budget_map[budget.dimension][budget.account][fiscal_year].setdefault(
month,
{
"budget": 0,
"actual": 0,
},
)
budget_map[budget.dimension][budget.account][fiscal_year][month]["budget"] += monthly_budget
for ad in actual_amt.get(budget.account, []):
if ad.month_name == month and ad.fiscal_year == fiscal_year:
budget_map[budget.dimension][budget.account][fiscal_year][month]["actual"] += flt(
ad.debit
) - flt(ad.credit)
return budget_map
def get_months_in_range(start_date, end_date):
months = []
current = start_date
while current <= end_date:
months.append(current)
current = add_months(current, 1)
return months
def get_budget_distributions(budget):
return frappe.db.sql(
"""