From 7429a260f6a4da2f4189e90200e66020b8422f7e Mon Sep 17 00:00:00 2001 From: pandiyan Date: Fri, 11 Sep 2026 17:50:30 +0530 Subject: [PATCH] fix: prevent disabled items from being used in bom (#58997) Co-authored-by: Ajish18 (cherry picked from commit e6f431a8d6f883b02ca1a6246df7e0ac564170d5) --- erpnext/manufacturing/doctype/bom/bom.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index 3a799a508dd..051554f3e0a 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -10,7 +10,7 @@ import frappe from frappe import _, bold from frappe.core.doctype.version.version import get_diff from frappe.model.mapper import get_mapped_doc -from frappe.utils import cint, cstr, flt, today +from frappe.utils import cint, cstr, flt, get_link_to_form, today from frappe.website.website_generator import WebsiteGenerator import erpnext @@ -653,6 +653,19 @@ class BOM(WebsiteGenerator): frappe.throw(_("Quantity required for Item {0} in row {1}").format(m.item_code, m.idx)) check_list.append(m) + bom_items = {self.item} + bom_items.update(d.item_code for d in self.get("items")) + bom_items.update(d.item_code for d in self.get("scrap_items")) + + if disabled_items := frappe.db.get_all( + "Item", filters={"item_code": ("in", list(bom_items)), "disabled": 1}, pluck="name" + ): + frappe.throw( + _("Disabled Item {0} cannot be used in BOMs.").format( + ", ".join(get_link_to_form("Item", item) for item in disabled_items) + ) + ) + def check_recursion(self, bom_list=None): """Check whether recursion occurs in any bom"""