From d96590c4d916aaa317fd10af07115ea3d58d9f5e Mon Sep 17 00:00:00 2001 From: diptanilsaha Date: Fri, 20 Mar 2026 15:33:36 +0530 Subject: [PATCH] fix(budget-variance-report): validate 'budget_against' filter (backport #53079) (#53663) --- .../budget_variance_report.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/erpnext/accounts/report/budget_variance_report/budget_variance_report.py b/erpnext/accounts/report/budget_variance_report/budget_variance_report.py index db42d23a839..f4cb3083961 100644 --- a/erpnext/accounts/report/budget_variance_report/budget_variance_report.py +++ b/erpnext/accounts/report/budget_variance_report/budget_variance_report.py @@ -8,6 +8,7 @@ import frappe from frappe import _ from frappe.utils import flt, formatdate +from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_dimensions from erpnext.controllers.trends import get_period_date_ranges, get_period_month_ranges @@ -15,6 +16,8 @@ def execute(filters=None): if not filters: filters = {} + validate_filters(filters) + columns = get_columns(filters) if filters.get("budget_against_filter"): dimensions = filters.get("budget_against_filter") @@ -35,6 +38,21 @@ def execute(filters=None): return columns, data, None, chart +def validate_filters(filters): + validate_budget_dimensions(filters) + + +def validate_budget_dimensions(filters): + dimensions = [d.get("document_type") for d in get_dimensions(with_cost_center_and_project=True)[0]] + if filters.get("budget_against") and filters.get("budget_against") not in dimensions: + frappe.throw( + title=_("Invalid Accounting Dimension"), + msg=_("{0} is not a valid Accounting Dimension.").format( + frappe.bold(filters.get("budget_against")) + ), + ) + + def get_final_data(dimension, dimension_items, filters, period_month_ranges, data, DCC_allocation): for account, monthwise_data in dimension_items.items(): row = [dimension, account]