From a4080eb8400093c312ef9abd97ea3106004b148b Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 17 Dec 2013 17:45:50 +0530 Subject: [PATCH] [fix] [minor] item validation --- stock/doctype/item/item.py | 49 +++++++++++++++----------------------- 1 file changed, 19 insertions(+), 30 deletions(-) diff --git a/stock/doctype/item/item.py b/stock/doctype/item/item.py index a4985e9794..b5884b4111 100644 --- a/stock/doctype/item/item.py +++ b/stock/doctype/item/item.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import webnotes -from webnotes.utils import cstr, flt, cint +from webnotes.utils import cstr, flt from webnotes.model.doc import addchild from webnotes.model.bean import getlist from webnotes import msgprint, _ @@ -116,40 +116,29 @@ class DocType(DocListController, WebsiteGenerator): self.doc.is_pro_applicable = "No" if self.doc.is_pro_applicable == 'Yes' and self.doc.is_stock_item == 'No': - msgprint("As Production Order can be made for this Item, then Is Stock Item Should be 'Yes' as we maintain it's stock. Refer Manufacturing and Inventory section.", raise_exception=1) + webnotes.throw(_("As Production Order can be made for this item, \ + it must be a stock item.")) if self.doc.has_serial_no == 'Yes' and self.doc.is_stock_item == 'No': msgprint("'Has Serial No' can not be 'Yes' for non-stock item", raise_exception=1) def check_for_active_boms(self): - def _check_for_active_boms(field_label): - if field_label in ['Is Active', 'Is Purchase Item']: - bom_mat = webnotes.conn.sql("""select distinct t1.parent - from `tabBOM Item` t1, `tabBOM` t2 where t2.name = t1.parent - and t1.item_code =%s and ifnull(t1.bom_no, '') = '' and t2.is_active = 1 - and t2.docstatus = 1 and t1.docstatus =1 """, self.doc.name) - if bom_mat and bom_mat[0][0]: - msgprint(_(field_label) + _(" should be 'Yes'. As Item: ") + self.doc.name + - _(" is present in one or many Active BOMs"), raise_exception=1) - - if ((field_label == 'Allow Production Order' - and self.doc.is_sub_contracted_item != 'Yes') - or (field_label == 'Is Sub Contracted Item' - and self.doc.is_manufactured_item != 'Yes')): - bom = webnotes.conn.sql("""select name from `tabBOM` where item = %s - and is_active = 1""", (self.doc.name,)) - if bom and bom[0][0]: - msgprint(_(field_label) + _(" should be 'Yes'. As Item: ") + self.doc.name + - _(" is present in one or many Active BOMs"), raise_exception=1) - - if not cint(self.doc.fields.get("__islocal")): - fl = {'is_manufactured_item' :'Allow Bill of Materials', - 'is_sub_contracted_item':'Is Sub Contracted Item', - 'is_purchase_item' :'Is Purchase Item', - 'is_pro_applicable' :'Allow Production Order'} - for d in fl: - if cstr(self.doc.fields.get(d)) != 'Yes': - _check_for_active_boms(fl[d]) + if self.doc.is_active != "Yes" or self.doc.is_purchase_item != "Yes": + bom_mat = webnotes.conn.sql("""select distinct t1.parent + from `tabBOM Item` t1, `tabBOM` t2 where t2.name = t1.parent + and t1.item_code =%s and ifnull(t1.bom_no, '') = '' and t2.is_active = 1 + and t2.docstatus = 1 and t1.docstatus =1 """, self.doc.name) + + if bom_mat and bom_mat[0][0]: + webnotes.throw(_("Item must be active and purchase item, \ + as it is present in one or many Active BOMs")) + + if self.doc.is_manufactured_item != "Yes": + bom = webnotes.conn.sql("""select name from `tabBOM` where item = %s + and is_active = 1""", (self.doc.name,)) + if bom and bom[0][0]: + webnotes.throw(_("""Allow Bill of Materials should be 'Yes'. Because one or many \ + active BOMs present for this item""")) def fill_customer_code(self): """ Append all the customer codes and insert into "customer_code" field of item table """