Validation added in Production Order to prevent PO against Item Template or if Allow PO is No in Item Master
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.js b/erpnext/manufacturing/doctype/production_order/production_order.js
index 17fbc5e..6d16cd4 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.js
+++ b/erpnext/manufacturing/doctype/production_order/production_order.js
@@ -250,7 +250,8 @@
 cur_frm.fields_dict['production_item'].get_query = function(doc) {
 	return {
 		filters:[
-			['Item', 'is_pro_applicable', '=', 'Yes']
+			['Item', 'is_pro_applicable', '=', 'Yes'],
+			['Item', 'has_variants', '=', 'No']
 		]
 	}
 }
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py
index 0274b7e..0f805d0 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.py
+++ b/erpnext/manufacturing/doctype/production_order/production_order.py
@@ -30,6 +30,7 @@
 		validate_status(self.status, ["Draft", "Submitted", "Stopped",
 			"In Process", "Completed", "Cancelled"])
 
+		self.validate_production_item()
 		if self.bom_no:
 			validate_bom_no(self.production_item, self.bom_no)
 
@@ -319,6 +320,13 @@
 	def delete_time_logs(self):
 		for time_log in frappe.get_all("Time Log", ["name"], {"production_order": self.name}):
 			frappe.delete_doc("Time Log", time_log.name)
+	
+	def validate_production_item(self):
+		if frappe.db.get_value("Item", self.production_item, "is_pro_applicable")=='No':
+			frappe.throw(_("Item is not allowed to have Production Order."))
+		
+		if frappe.db.get_value("Item", self.production_item, "has_variants"):
+			frappe.throw(_("Production Order cannot be raised against a Item Template"))
 
 @frappe.whitelist()
 def get_item_details(item):