From 6d5f2b50241d2f4e5af8e04821fc26436b788ab6 Mon Sep 17 00:00:00 2001 From: khushi8112 Date: Tue, 14 Oct 2025 15:19:07 +0530 Subject: [PATCH 1/2] fix: skip auto-cancel of depreciation for components during asset capitalization --- erpnext/assets/doctype/asset/depreciation.py | 3 ++- .../doctype/asset_capitalization/asset_capitalization.py | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/erpnext/assets/doctype/asset/depreciation.py b/erpnext/assets/doctype/asset/depreciation.py index b06244fd344..c00fc86d4b2 100644 --- a/erpnext/assets/doctype/asset/depreciation.py +++ b/erpnext/assets/doctype/asset/depreciation.py @@ -507,7 +507,8 @@ def depreciate_asset(asset_doc, date, notes): make_depreciation_entry_for_all_asset_depr_schedules(asset_doc, date) asset_doc.reload() - cancel_depreciation_entries(asset_doc, date) + if not frappe.flags.is_composite_component: + cancel_depreciation_entries(asset_doc, date) @erpnext.allow_regional diff --git a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py index fc0625edf9b..7c520d9d352 100644 --- a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py +++ b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py @@ -492,6 +492,7 @@ class AssetCapitalization(StockController): asset = frappe.get_doc("Asset", item.asset) if asset.calculate_depreciation: + frappe.flags.is_composite_component = True notes = _( "This schedule was created when Asset {0} was consumed through Asset Capitalization {1}." ).format( @@ -499,6 +500,7 @@ class AssetCapitalization(StockController): get_link_to_form(self.doctype, self.get("name")), ) depreciate_asset(asset, self.posting_date, notes) + frappe.flags.is_composite_component = False asset.reload() fixed_asset_gl_entries = get_gl_entries_on_asset_disposal( From 02ebde43bfaae627fcd0283ce9f5feff3b6a5f78 Mon Sep 17 00:00:00 2001 From: khushi8112 Date: Tue, 14 Oct 2025 16:32:32 +0530 Subject: [PATCH 2/2] refactor: Ensure flag cleanup with try-finally to prevent state corruption --- .../asset_capitalization.py | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py index 7c520d9d352..ab3bb9ab406 100644 --- a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py +++ b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py @@ -493,15 +493,17 @@ class AssetCapitalization(StockController): if asset.calculate_depreciation: frappe.flags.is_composite_component = True - notes = _( - "This schedule was created when Asset {0} was consumed through Asset Capitalization {1}." - ).format( - get_link_to_form(asset.doctype, asset.name), - get_link_to_form(self.doctype, self.get("name")), - ) - depreciate_asset(asset, self.posting_date, notes) - frappe.flags.is_composite_component = False - asset.reload() + try: + notes = _( + "This schedule was created when Asset {0} was consumed through Asset Capitalization {1}." + ).format( + get_link_to_form(asset.doctype, asset.name), + get_link_to_form(self.doctype, self.get("name")), + ) + depreciate_asset(asset, self.posting_date, notes) + asset.reload() + finally: + frappe.flags.is_composite_component = False fixed_asset_gl_entries = get_gl_entries_on_asset_disposal( asset,