Allow Same Item Multiple Items (#15657)
diff --git a/erpnext/manufacturing/doctype/bom/bom.json b/erpnext/manufacturing/doctype/bom/bom.json
index 77fc498..a55c3c5 100644
--- a/erpnext/manufacturing/doctype/bom/bom.json
+++ b/erpnext/manufacturing/doctype/bom/bom.json
@@ -1,5 +1,6 @@
{
"allow_copy": 0,
+ "allow_events_in_timeline": 0,
"allow_guest_to_view": 0,
"allow_import": 1,
"allow_rename": 0,
@@ -479,6 +480,38 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "allow_same_item_multiple_times",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Allow Same Item Multiple Times",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_in_quick_entry": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"depends_on": "with_operations",
"fieldname": "transfer_material_against_job_card",
"fieldtype": "Check",
@@ -1943,7 +1976,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
- "modified": "2018-07-15 11:09:19.425998",
+ "modified": "2018-10-11 11:52:39.047935",
"modified_by": "Administrator",
"module": "Manufacturing",
"name": "BOM",
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index 38e6156..b2c3e75 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -334,14 +334,15 @@
frappe.throw(_("Quantity required for Item {0} in row {1}").format(m.item_code, m.idx))
check_list.append(m)
- duplicate_items = list(get_duplicates(check_list))
- if duplicate_items:
- li = []
- for i in duplicate_items:
- li.append("{0} on row {1}".format(i.item_code, i.idx))
- duplicate_list = '<br>' + '<br>'.join(li)
+ if not self.allow_same_item_multiple_times:
+ duplicate_items = list(get_duplicates(check_list))
+ if duplicate_items:
+ li = []
+ for i in duplicate_items:
+ li.append("{0} on row {1}".format(i.item_code, i.idx))
+ duplicate_list = '<br>' + '<br>'.join(li)
- frappe.throw(_("Same item has been entered multiple times. {0}").format(duplicate_list))
+ frappe.throw(_("Same item has been entered multiple times. {0}").format(duplicate_list))
def check_recursion(self):
""" Check whether recursion occurs in any bom"""