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 6c245acf8d8..f41ba74388b 100644 --- a/erpnext/accounts/report/budget_variance_report/budget_variance_report.py +++ b/erpnext/accounts/report/budget_variance_report/budget_variance_report.py @@ -5,6 +5,7 @@ import frappe from frappe import _ from frappe.utils import add_months, flt, formatdate +from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_dimensions from erpnext.accounts.utils import get_fiscal_year from erpnext.controllers.trends import get_period_date_ranges @@ -13,6 +14,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") @@ -31,6 +34,10 @@ def execute(filters=None): return columns, data, None, chart_data +def validate_filters(filters): + validate_budget_dimensions(filters) + + def get_budget_records(filters, dimensions): budget_against_field = frappe.scrub(filters["budget_against"]) @@ -51,7 +58,7 @@ def get_budget_records(filters, dimensions): b.company = %s AND b.docstatus = 1 AND b.budget_against = %s - AND b.{budget_against_field} IN ({', '.join(['%s'] * len(dimensions))}) + AND b.{budget_against_field} IN ({", ".join(["%s"] * len(dimensions))}) AND ( b.from_fiscal_year <= %s AND b.to_fiscal_year >= %s @@ -404,6 +411,17 @@ def get_budget_dimensions(filters): ) # nosec +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 build_comparison_chart_data(filters, columns, data): if not data: return None