diff --git a/erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.py b/erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.py index 394a9636b78..e217d69039d 100644 --- a/erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.py +++ b/erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.py @@ -4,7 +4,7 @@ import frappe from frappe import _ -from frappe.utils import cstr, flt +from frappe.utils import flt import erpnext from erpnext.accounts.report.financial_statements import ( @@ -31,18 +31,23 @@ def execute(filters=None): def get_data(filters, dimension_list): company_currency = erpnext.get_company_currency(filters.company) - acc = frappe.db.sql( - """ - select - name, account_number, parent_account, lft, rgt, root_type, - report_type, account_name, include_in_gross, account_type, is_group - from - `tabAccount` - where - company=%s - order by lft""", - (filters.company), - as_dict=True, + acc = frappe.get_all( + "Account", + filters={"company": filters.company}, + fields=[ + "name", + "account_number", + "parent_account", + "lft", + "rgt", + "root_type", + "report_type", + "account_name", + "include_in_gross", + "account_type", + "is_group", + ], + order_by="lft", ) if not acc: @@ -50,16 +55,17 @@ def get_data(filters, dimension_list): accounts, accounts_by_name, parent_children_map = filter_accounts(acc) - min_lft, max_rgt = frappe.db.sql( - """select min(lft), max(rgt) from `tabAccount` - where company=%s""", - (filters.company), + lft_rgt = frappe.get_all( + "Account", + filters={"company": filters.company}, + fields=[{"MIN": "lft", "as": "min_lft"}, {"MAX": "rgt", "as": "max_rgt"}], )[0] + min_lft, max_rgt = lft_rgt.min_lft, lft_rgt.max_rgt - account = frappe.db.sql_list( - """select name from `tabAccount` - where lft >= %s and rgt <= %s and company = %s""", - (min_lft, max_rgt, filters.company), + account = frappe.get_all( + "Account", + filters={"lft": [">=", min_lft], "rgt": ["<=", max_rgt], "company": filters.company}, + pluck="name", ) gl_entries_by_account = {} @@ -75,42 +81,34 @@ def get_data(filters, dimension_list): def set_gl_entries_by_account(dimension_list, filters, account, gl_entries_by_account): - condition = get_condition(filters.get("dimension")) - - if account: - condition += " and account in ({})".format(", ".join([frappe.db.escape(d) for d in account])) + dimension_field = frappe.scrub(filters.get("dimension")) gl_filters = { "company": filters.get("company"), - "from_date": filters.get("from_date"), - "to_date": filters.get("to_date"), - "finance_book": cstr(filters.get("finance_book")), + dimension_field: ["in", list(set(dimension_list))], + "posting_date": ["between", [filters.get("from_date"), filters.get("to_date")]], + "is_cancelled": 0, } + if account: + gl_filters["account"] = ["in", account] - gl_filters["dimensions"] = tuple(set(dimension_list)) - - if filters.get("include_default_book_entries"): - gl_filters["company_fb"] = frappe.get_cached_value("Company", filters.company, "default_finance_book") - - gl_entries = frappe.db.sql( - """ - select - posting_date, account, {dimension}, debit, credit, is_opening, fiscal_year, - debit_in_account_currency, credit_in_account_currency, account_currency - from - `tabGL Entry` - where - company=%(company)s - {condition} - and posting_date >= %(from_date)s - and posting_date <= %(to_date)s - and is_cancelled = 0 - order by account, posting_date""".format( - dimension=frappe.scrub(filters.get("dimension")), condition=condition - ), - gl_filters, - as_dict=True, - ) # nosec + gl_entries = frappe.get_all( + "GL Entry", + filters=gl_filters, + fields=[ + "posting_date", + "account", + dimension_field, + "debit", + "credit", + "is_opening", + "fiscal_year", + "debit_in_account_currency", + "credit_in_account_currency", + "account_currency", + ], + order_by="account, posting_date", + ) for entry in gl_entries: gl_entries_by_account.setdefault(entry.account, []).append(entry) @@ -178,14 +176,6 @@ def accumulate_values_into_parents(accounts, accounts_by_name, dimension_list): ].get(frappe.scrub(dimension), 0.0) + d.get(frappe.scrub(dimension), 0.0) -def get_condition(dimension): - conditions = [] - - conditions.append(f"{frappe.scrub(dimension)} in %(dimensions)s") - - return " and {}".format(" and ".join(conditions)) if conditions else "" - - def get_dimensions(filters): meta = frappe.get_meta(filters.get("dimension"), cached=False) query_filters = {}