From bac4b93639ca533ff6fe44140600a618ff3e01db Mon Sep 17 00:00:00 2001 From: Marica Date: Mon, 16 Sep 2019 19:44:28 +0530 Subject: [PATCH] fix: Displaying manufacturer part no along with manufacturer and added Manufacturers validation in Item master (#19066) Manufacturer Link field options in Items Table of transactions will also display manufacturer part no. Manufacturers table in Item master will check for duplicate entries. --- erpnext/controllers/queries.py | 18 +++++++++--------- erpnext/stock/doctype/item/item.py | 9 ++++++++- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py index 19ec053e744..19dea080b17 100644 --- a/erpnext/controllers/queries.py +++ b/erpnext/controllers/queries.py @@ -440,17 +440,17 @@ def get_batch_numbers(doctype, txt, searchfield, start, page_len, filters): @frappe.whitelist() def item_manufacturer_query(doctype, txt, searchfield, start, page_len, filters): - search_txt = "{0}%".format(txt) + item_filters = [ + ['manufacturer', 'like', '%' + txt + '%'], + ['item_code', '=', filters.get("item_code")] + ] - item_filters = { - 'manufacturer': ('like', search_txt), - 'item_code': filters.get("item_code") - } - - return frappe.get_all("Item Manufacturer", - fields = "manufacturer", - filters = item_filters, + item_manufacturers = frappe.get_all( + "Item Manufacturer", + fields=["manufacturer", "manufacturer_part_no"], + filters=item_filters, limit_start=start, limit_page_length=page_len, as_list=1 ) + return item_manufacturers diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 518fe748894..164c659fe87 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -125,6 +125,7 @@ class Item(WebsiteGenerator): self.validate_auto_reorder_enabled_in_stock_settings() self.cant_change() self.update_show_in_website() + self.validate_manufacturer() if not self.get("__islocal"): self.old_item_group = frappe.db.get_value(self.doctype, self.name, "item_group") @@ -144,6 +145,13 @@ class Item(WebsiteGenerator): if cint(frappe.db.get_single_value('Stock Settings', 'clean_description_html')): self.description = clean_html(self.description) + def validate_manufacturer(self): + list_man = [(x.manufacturer, x.manufacturer_part_no) for x in self.get('manufacturers')] + set_man = set(list_man) + + if len(list_man) != len(set_man): + frappe.throw(_("Duplicate entry in Manufacturers table")) + def validate_customer_provided_part(self): if self.is_customer_provided_item: if self.is_purchase_item: @@ -921,7 +929,6 @@ def validate_cancelled_item(item_code, docstatus=None, verbose=1): msg = _("Item {0} is cancelled").format(item_code) _msgprint(msg, verbose) - def _msgprint(msg, verbose): if verbose: msgprint(msg, raise_exception=True)