From 22ba12172fc1143efd778aee4cd296cf6970d736 Mon Sep 17 00:00:00 2001 From: Gursheen Anand Date: Mon, 17 Jul 2023 15:17:53 +0530 Subject: [PATCH] fix: make offsetting entry for all doctypes --- .../doctype/journal_entry/journal_entry.py | 43 ------------------ erpnext/accounts/general_ledger.py | 45 +++++++++++++++++++ 2 files changed, 45 insertions(+), 43 deletions(-) diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index 334e8b002c..83312dbd22 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -905,51 +905,8 @@ class JournalEntry(AccountsController): item=d, ) ) - - self.make_acc_dimensions_offsetting_entry(gl_map, d) - return gl_map - def make_acc_dimensions_offsetting_entry(self, gl_map, d): - accounting_dimensions = frappe.db.get_list("Accounting Dimension", {"disabled": 0}, pluck="name") - for dimension in accounting_dimensions: - dimension_details = frappe.db.get_values( - "Accounting Dimension Detail", - {"parent": dimension, "company": self.company}, - ["automatically_post_balancing_accounting_entry", "offsetting_account"], - ) - 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] - gl_map.append( - self.get_gl_dict( - { - "account": offsetting_account, - "party_type": d.party_type, - "due_date": self.due_date, - "party": d.party, - "against": d.against_account, - "debit": flt(d.credit, d.precision("credit")), - "credit": flt(d.debit, d.precision("credit")), - "account_currency": d.account_currency, - "debit_in_account_currency": flt( - d.credit_in_account_currency, d.precision("credit_in_account_currency") - ), - "credit_in_account_currency": flt( - d.debit_in_account_currency, d.precision("debit_in_account_currency") - ), - "against_voucher_type": d.reference_type, - "against_voucher": d.reference_name, - "remarks": _("Offsetting for Accounting Dimension") + " - {0}".format(dimension), - "voucher_detail_no": d.reference_detail_no, - "cost_center": d.cost_center, - "project": d.project, - "finance_book": self.finance_book, - }, - item=d, - ) - ) - def make_gl_entries(self, cancel=0, adv_adj=0): from erpnext.accounts.general_ledger import make_gl_entries diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py index f1dad875fa..1299c44307 100644 --- a/erpnext/accounts/general_ledger.py +++ b/erpnext/accounts/general_ledger.py @@ -30,6 +30,7 @@ def make_gl_entries( from_repost=False, ): if gl_map: + make_acc_dimensions_offsetting_entry(gl_map) if not cancel: validate_accounting_period(gl_map) validate_disabled_accounts(gl_map) @@ -54,6 +55,50 @@ def make_gl_entries( make_reverse_gl_entries(gl_map, adv_adj=adv_adj, update_outstanding=update_outstanding) +def make_acc_dimensions_offsetting_entry(gl_map): + accounting_dimensions_to_offset = get_accounting_dimensions_for_offsetting_entry(gl_map) + if len(accounting_dimensions_to_offset) == 0: + return + + 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"], + ) + 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), + "credit": flt(gle.debit), + "debit_in_account_currency": flt(gle.credit_in_account_currency), + "credit_in_account_currency": flt(gle.debit_in_account_currency), + "remarks": _("Offsetting for Accounting Dimension") + " - {0}".format(dimension), + "against_voucher": None, + } + ) + 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") + accounting_dimensions_to_offset = [] + for acc_dimension in acc_dimensions: + fieldname = acc_dimension.lower().replace(" ", "_") + values = set([entry[fieldname] for entry in gl_map]) + if len(values) > 1: + accounting_dimensions_to_offset.append(acc_dimension) + return accounting_dimensions_to_offset + + def validate_disabled_accounts(gl_map): accounts = [d.account for d in gl_map if d.account]