From 2c8c3a022c28314e87eaafd3ef7c991a86e8f8af Mon Sep 17 00:00:00 2001 From: Gursheen Anand Date: Tue, 18 Jul 2023 12:51:09 +0530 Subject: [PATCH] fix: divide offsetting amount only when account exists (cherry picked from commit 3a3ffa23076f368c4c24fbec1777205a12c76146) --- erpnext/accounts/general_ledger.py | 57 +++++++++++++++++------------- 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py index 987db65d49e..d9c7a6a7ebe 100644 --- a/erpnext/accounts/general_ledger.py +++ b/erpnext/accounts/general_ledger.py @@ -53,7 +53,9 @@ def make_gl_entries( def make_acc_dimensions_offsetting_entry(gl_map): - accounting_dimensions_to_offset = get_accounting_dimensions_for_offsetting_entry(gl_map) + accounting_dimensions_to_offset = get_accounting_dimensions_for_offsetting_entry( + gl_map, gl_map[0].company + ) no_of_dimensions = len(accounting_dimensions_to_offset) if no_of_dimensions == 0: return @@ -61,36 +63,41 @@ def make_acc_dimensions_offsetting_entry(gl_map): offsetting_entries = [] for gle in gl_map: for dimension in accounting_dimensions_to_offset: - dimension_details = frappe.db.get_values( - "Accounting Dimension Detail", - {"parent": dimension, "company": gle.company}, - ["automatically_post_balancing_accounting_entry", "offsetting_account"], + offsetting_account = dimension.offsetting_account + offsetting_entry = gle.copy() + offsetting_entry.update( + { + "account": offsetting_account, + "debit": flt(gle.credit) / no_of_dimensions if gle.credit != 0 else 0, + "credit": flt(gle.debit) / no_of_dimensions if gle.debit != 0 else 0, + "debit_in_account_currency": flt(gle.credit) / no_of_dimensions if gle.credit != 0 else 0, + "credit_in_account_currency": flt(gle.debit) / no_of_dimensions if gle.debit != 0 else 0, + "remarks": _("Offsetting for Accounting Dimension") + " - {0}".format(dimension.name), + "against_voucher": None, + } ) - dimension_details = dimension_details[0] if len(dimension_details) > 0 else None - if dimension_details and dimension_details[0] == 1: - offsetting_account = dimension_details[1] - offsetting_entry = gle.copy() - offsetting_entry.update( - { - "account": offsetting_account, - "debit": flt(gle.credit) / no_of_dimensions if gle.credit != 0 else 0, - "credit": flt(gle.debit) / no_of_dimensions if gle.debit != 0 else 0, - "debit_in_account_currency": flt(gle.credit) / no_of_dimensions if gle.credit != 0 else 0, - "credit_in_account_currency": flt(gle.debit) / no_of_dimensions if gle.debit != 0 else 0, - "remarks": _("Offsetting for Accounting Dimension") + " - {0}".format(dimension), - "against_voucher": None, - } - ) - offsetting_entry["against_voucher_type"] = None - offsetting_entries.append(offsetting_entry) + offsetting_entry["against_voucher_type"] = None + offsetting_entries.append(offsetting_entry) gl_map += offsetting_entries -def get_accounting_dimensions_for_offsetting_entry(gl_map): - acc_dimensions = frappe.db.get_list("Accounting Dimension", {"disabled": 0}, pluck="name") +def get_accounting_dimensions_for_offsetting_entry(gl_map, company): + acc_dimension = frappe.qb.DocType("Accounting Dimension") + dimension_detail = frappe.qb.DocType("Accounting Dimension Detail") + acc_dimensions = ( + frappe.qb.from_(acc_dimension) + .inner_join(dimension_detail) + .on(acc_dimension.name == dimension_detail.parent) + .select(acc_dimension.name, dimension_detail.offsetting_account) + .where( + (acc_dimension.disabled == 0) + & (dimension_detail.company == company) + & (dimension_detail.automatically_post_balancing_accounting_entry == 1) + ) + ).run(as_dict=True) accounting_dimensions_to_offset = [] for acc_dimension in acc_dimensions: - fieldname = acc_dimension.lower().replace(" ", "_") + fieldname = acc_dimension.name.lower().replace(" ", "_") values = set([entry.get(fieldname) for entry in gl_map]) if len(values) > 1: accounting_dimensions_to_offset.append(acc_dimension)