From 48eb4889180473f64e4010dafeb65eb1d4ac21fb Mon Sep 17 00:00:00 2001 From: l0gesh29 Date: Mon, 25 Aug 2025 13:55:40 +0530 Subject: [PATCH] fix: handle ple for immutable ledger --- erpnext/accounts/general_ledger.py | 6 +----- erpnext/accounts/utils.py | 23 ++++++++++++++--------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py index b6424d0f5fb..1a5789d6f93 100644 --- a/erpnext/accounts/general_ledger.py +++ b/erpnext/accounts/general_ledger.py @@ -20,7 +20,7 @@ from erpnext.accounts.doctype.accounting_dimension_filter.accounting_dimension_f ) from erpnext.accounts.doctype.accounting_period.accounting_period import ClosedAccountingPeriod from erpnext.accounts.doctype.budget.budget import validate_expense_against_budget -from erpnext.accounts.utils import create_payment_ledger_entry +from erpnext.accounts.utils import create_payment_ledger_entry, is_immutable_ledger_enabled from erpnext.controllers.budget_controller import BudgetValidation from erpnext.exceptions import InvalidAccountDimensionError, MandatoryAccountDimensionError @@ -849,7 +849,3 @@ def validate_allowed_dimensions(gl_entry, dimension_filter_map): ), InvalidAccountDimensionError, ) - - -def is_immutable_ledger_enabled(): - return frappe.get_single_value("Accounts Settings", "enable_immutable_ledger") diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index 8e366e478ec..f45b7b8b499 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -1922,18 +1922,17 @@ def create_payment_ledger_entry( for entry in ple_map: ple = frappe.get_doc(entry) + + if cancel: + delink_original_entry(ple, partial_cancel=partial_cancel) + if is_immutable_ledger_enabled(): + ple.delinked = 0 + ple.posting_date = frappe.form_dict.get("posting_date") or getdate() + ple.flags.ignore_permissions = 1 ple.flags.adv_adj = adv_adj ple.flags.from_repost = from_repost ple.flags.update_outstanding = update_outstanding - - if cancel: - delink_original_entry(ple, partial_cancel=partial_cancel) - ple._action = "submit" - ple.run_before_save_methods() - ple.run_post_save_methods() - continue - ple.submit() @@ -2013,7 +2012,6 @@ def delink_original_entry(pl_entry, partial_cancel=False): ple = qb.DocType("Payment Ledger Entry") query = ( qb.update(ple) - .set(ple.delinked, True) .set(ple.modified, now()) .set(ple.modified_by, frappe.session.user) .where( @@ -2032,6 +2030,9 @@ def delink_original_entry(pl_entry, partial_cancel=False): if partial_cancel: query = query.where(ple.voucher_detail_no == pl_entry.voucher_detail_no) + if not is_immutable_ledger_enabled(): + query = query.set(ple.delinked, True) + query.run() @@ -2492,3 +2493,7 @@ def build_qb_match_conditions(doctype, user=None) -> list: criterion.append(cond) return criterion + + +def is_immutable_ledger_enabled(): + return frappe.get_single_value("Accounts Settings", "enable_immutable_ledger")