From a398d6bf4f9609bcfa0743ea606781bc1d158a5f Mon Sep 17 00:00:00 2001 From: Stavros Anastasiadis Date: Thu, 11 Oct 2018 13:50:30 +0300 Subject: [PATCH] Allow Same Item Multiple Items (#15657) --- erpnext/manufacturing/doctype/bom/bom.json | 35 +++++++++++++++++++++- erpnext/manufacturing/doctype/bom/bom.py | 15 +++++----- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/erpnext/manufacturing/doctype/bom/bom.json b/erpnext/manufacturing/doctype/bom/bom.json index 77fc4989e7..a55c3c5778 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, @@ -472,6 +473,38 @@ "translatable": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "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, @@ -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 38e6156b03..b2c3e75b8f 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -334,14 +334,15 @@ class BOM(WebsiteGenerator): 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 = '
' + '
'.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 = '
' + '
'.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"""