From ce898a96956a23ae2d12fec02a7eb7a8c73c5f92 Mon Sep 17 00:00:00 2001 From: pandiyan Date: Thu, 6 Aug 2026 11:25:35 +0530 Subject: [PATCH] fix: clear deferred revenue/expense fields on uncheck (backport #57140) --- erpnext/controllers/accounts_controller.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 7f2afecaf9f..51e00e074a1 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -258,6 +258,7 @@ class AccountsController(TransactionBase): if self.is_return: self.validate_qty() else: + self.clear_stale_deferred_fields() self.validate_deferred_start_and_end_date() self.validate_inter_company_reference() @@ -643,6 +644,23 @@ class AccountsController(TransactionBase): if self.get("from_date") and self.get("to_date") and getdate(self.from_date) > getdate(self.to_date): frappe.throw(_("To Date cannot be before From Date"), title=_("Invalid Auto Repeat Date")) + def clear_stale_deferred_fields(self): + field_map = { + "Sales Invoice": "deferred_revenue_account", + "Purchase Invoice": "deferred_expense_account", + } + account_field = field_map.get(self.doctype) + + for item in self.get("items"): + if item.get("enable_deferred_revenue") or item.get("enable_deferred_expense"): + continue + + item.service_start_date = None + item.service_end_date = None + item.service_stop_date = None + if account_field: + item.set(account_field, None) + def validate_deferred_start_and_end_date(self): for d in self.items: if d.get("enable_deferred_revenue") or d.get("enable_deferred_expense"):