From 408a09233bfae90082a06ab21cf38ceaf7a9c7cb Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 7 Dec 2024 12:58:34 +0530 Subject: [PATCH] fix: BOM name issue (backport #44586) (#44589) fix: BOM name issue (#44586) (cherry picked from commit d871e21a40943b3e9d52e2dd7233a128fa0f0ff6) Co-authored-by: rohitwaghchaure (cherry picked from commit a5cc30741703857556efe0f201a7bb91231eee0b) # Conflicts: # erpnext/manufacturing/doctype/bom/bom.py --- erpnext/manufacturing/doctype/bom/bom.js | 7 ++++++ erpnext/manufacturing/doctype/bom/bom.py | 28 ++++++++++++++---------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js index 6267ee4d029..92e4715590b 100644 --- a/erpnext/manufacturing/doctype/bom/bom.js +++ b/erpnext/manufacturing/doctype/bom/bom.js @@ -250,6 +250,13 @@ frappe.ui.form.on("BOM", { }); } + fields.push({ + fieldtype: "Check", + label: __("Use Multi-Level BOM"), + fieldname: "use_multi_level_bom", + default: 1, + }); + if (!skip_qty_field) { fields.push({ fieldtype: "Float", diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index c3105b8e9ec..41ea6f80f10 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -179,10 +179,14 @@ class BOM(WebsiteGenerator): "BOM", filters={"name": ("like", search_key), "amended_from": ["is", "not set"]}, pluck="name" ) +<<<<<<< HEAD if existing_boms: index = self.get_next_version_index(existing_boms) else: index = 1 +======= + index = self.get_index_for_bom(existing_boms) +>>>>>>> a5cc307417 (fix: BOM name issue (backport #44586) (#44589)) prefix = self.doctype suffix = "%.3i" % index # convert index to string (1 -> "001") @@ -200,21 +204,23 @@ class BOM(WebsiteGenerator): name = f"{prefix}-{truncated_item_name}-{suffix}" if frappe.db.exists("BOM", name): - conflicting_bom = frappe.get_doc("BOM", name) + existing_boms = frappe.get_all( + "BOM", filters={"name": ("like", search_key), "amended_from": ["is", "not set"]}, pluck="name" + ) - if conflicting_bom.item != self.item: - msg = _("A BOM with name {0} already exists for item {1}.").format( - frappe.bold(name), frappe.bold(conflicting_bom.item) - ) - - frappe.throw( - _("{0}{1} Did you rename the item? Please contact Administrator / Tech support").format( - msg, "
" - ) - ) + index = self.get_index_for_bom(existing_boms) + suffix = "%.3i" % index + name = f"{prefix}-{self.item}-{suffix}" self.name = name + def get_index_for_bom(self, existing_boms): + index = 1 + if existing_boms: + index = self.get_next_version_index(existing_boms) + + return index + @staticmethod def get_next_version_index(existing_boms: list[str]) -> int: # split by "/" and "-"