automatic purchase request from production planning tool
diff --git a/manufacturing/doctype/production_plan_item/production_plan_item.txt b/manufacturing/doctype/production_plan_item/production_plan_item.txt
index 6ae2a04..2cb2a59 100644
--- a/manufacturing/doctype/production_plan_item/production_plan_item.txt
+++ b/manufacturing/doctype/production_plan_item/production_plan_item.txt
@@ -2,9 +2,9 @@
  {
   "owner": "Administrator", 
   "docstatus": 0, 
-  "creation": "2012-12-20 18:14:55", 
+  "creation": "2013-01-16 14:48:56", 
   "modified_by": "Administrator", 
-  "modified": "2012-12-24 19:37:34"
+  "modified": "2013-01-17 11:21:46"
  }, 
  {
   "istable": 1, 
diff --git a/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/manufacturing/doctype/production_planning_tool/production_planning_tool.py
index fa08789..a6c8458 100644
--- a/manufacturing/doctype/production_planning_tool/production_planning_tool.py
+++ b/manufacturing/doctype/production_planning_tool/production_planning_tool.py
@@ -16,7 +16,7 @@
 
 from __future__ import unicode_literals
 import webnotes
-from webnotes.utils import cstr, flt, nowdate
+from webnotes.utils import cstr, flt, cint, nowdate, add_days
 from webnotes.model.doc import addchild, Document
 from webnotes.model.wrapper import getlist
 from webnotes.model.code import get_obj
@@ -275,7 +275,6 @@
 					and bom_item.item_code = item.name
 					group by item_code
 				""", (flt(bom_dict[bom]), bom))
-
 			self.make_items_dict(fl_bom_items)
 
 	def make_items_dict(self, item_list):
@@ -301,60 +300,82 @@
 		return item_list
 		
 	def raise_purchase_request(self):
-		def _get_projected_qty(items):
-			item_projected_qty = webnotes.conn.sql("""select item_code, sum(projected_qty) 
-				from `tabBin` where item_code in (%s) group by item_code""" % 
-				(", ".join(["%s"]*len(items)),), tuple(items))
-				
-			return dict(item_projected_qty)
+		"""
+			Raise Purchase Request if projected qty is less than qty required
+			Requested qty should be shortage qty considering minimum order qty
+		"""
+		if not self.doc.purchase_request_for_warehouse:
+			webnotes.msgprint("Please enter Warehouse for which Purchase Request will be raised",
+			 	raise_exception=1)
 			
-		item_dict = self.get_raw_materials()
-		item_projected_qty = _get_projected_qty(item_dict.keys())
+		bom_dict = self.get_distinct_items_and_boms()[0]
+		self.get_raw_materials(bom_dict)
+		item_projected_qty = self.get_projected_qty()
 		
 		from accounts.utils import get_fiscal_year
-		fiscal_year = get_fiscal_year(nowdate())
+		fiscal_year = get_fiscal_year(nowdate())[0]
 		
-		items_to_be_requested = []
-		for item in item_dict:
-			if flt(item_dict[item][0]) > item_projected_qty[item]:
+		items_to_be_requested = webnotes._dict()
+		for item in self.item_dict:
+			if flt(self.item_dict[item][0]) > item_projected_qty[item]:
 				# shortage
-				requested_qty = flt(item_dict[item][0]) - item_projected_qty[item]
+				requested_qty = flt(self.item_dict[item][0]) - item_projected_qty[item]
 				# comsider minimum order qty
-				requested_qty = requested_qty > flt(item_dict[item][3]) and \
-					requested_qty or flt(item_dict[item][3])
-				items_to_be_requested.append({
-					"item_code": item, 
-					"qty": requested_qty, 
-					"description": item_dict[item][1],
-					"stock_uom": item_dict[item][2]
-				})
-		webnotes.errprint(items_to_be_requested)
-		self.insert_purchase_request(items_to_be_requested, fiscal_year)
+				requested_qty = requested_qty > flt(self.item_dict[item][3]) and \
+					requested_qty or flt(self.item_dict[item][3])
+				items_to_be_requested[item] = requested_qty
 		
-	def insert_purchase_request(self, items, fiscal_year):
-		for item in items:
-			item_wrapper = webnotes.model_wrapper("Item", args.item_code)
-			pr = [
-				{
-					"doctype": "Purchase Request",
-					"naming_series": "IDT",
-					"transaction_date": nowdate(),
-					"status": "Draft",
-					"company": self.doc.company,
-					"fiscal_year": fiscal_year,
-					"requested_by": webnotes.session.user,
-					"remark": "Automatically raised from Production Planning Tool"
-				},
-				{
-					"doctype": "Purchase Request Item",
-					"item_code": item.item_code,
-					"item_name": item_wrapper.doc.item_name,
-					"description": item.description,
-					"uom": item.stock_uom,
-					"item_group": item_wrapper.doc.item_group,
-					"brand": item_wrapper.doc.brand,
-					"qty": item.qty,
-					
-					
-				}
-			]
\ No newline at end of file
+		self.insert_purchase_request(items_to_be_requested, fiscal_year)
+			
+	def get_projected_qty(self):
+		items = self.item_dict.keys()
+		item_projected_qty = webnotes.conn.sql("""select item_code, sum(projected_qty) 
+			from `tabBin` where item_code in (%s) group by item_code""" % 
+			(", ".join(["%s"]*len(items)),), tuple(items))
+
+		return dict(item_projected_qty)
+		
+	def insert_purchase_request(self, items_to_be_requested, fiscal_year):
+		purchase_request_list = []
+		if items_to_be_requested:
+			for item in items_to_be_requested:
+				item_wrapper = webnotes.model_wrapper("Item", item)
+				pr_doclist = [
+					{
+						"doctype": "Purchase Request",
+						"__islocal": 1,
+						"naming_series": "IDT",
+						"transaction_date": nowdate(),
+						"status": "Draft",
+						"company": self.doc.company,
+						"fiscal_year": fiscal_year,
+						"requested_by": webnotes.session.user,
+						"remark": "Automatically raised from Production Planning Tool"
+					},
+					{
+						"doctype": "Purchase Request Item",
+						"__islocal": 1,
+						"parentfield": "indent_details",
+						"item_code": item,
+						"item_name": item_wrapper.doc.item_name,
+						"description": item_wrapper.doc.description,
+						"uom": item_wrapper.doc.stock_uom,
+						"item_group": item_wrapper.doc.item_group,
+						"brand": item_wrapper.doc.brand,
+						"qty": items_to_be_requested[item],
+						"schedule_date": add_days(nowdate(), cint(item_wrapper.doc.lead_time_days)),
+						"warehouse": self.doc.purchase_request_for_warehouse
+					}
+				]
+				pr_wrapper = webnotes.model_wrapper(pr_doclist)
+				pr_wrapper.ignore_permissions = 1
+				pr_wrapper.submit()
+				purchase_request_list.append(pr_wrapper.doc.name)
+			
+			if purchase_request_list:
+				pur_req = ["""<a href="#Form/Purchase Request/%s" target="_blank">%s</a>""" % \
+					(p, p) for p in purchase_request_list]
+				webnotes.msgprint("Following Purchase Request created successfully: \n%s" % 
+					"\n".join(pur_req))
+		else:
+			webnotes.msgprint("Nothing to request")
\ No newline at end of file
diff --git a/manufacturing/doctype/production_planning_tool/production_planning_tool.txt b/manufacturing/doctype/production_planning_tool/production_planning_tool.txt
index 7eb0a2d..d4a0d94 100644
--- a/manufacturing/doctype/production_planning_tool/production_planning_tool.txt
+++ b/manufacturing/doctype/production_planning_tool/production_planning_tool.txt
@@ -4,7 +4,7 @@
   "docstatus": 0, 
   "creation": "2013-01-16 14:48:56", 
   "modified_by": "Administrator", 
-  "modified": "2013-01-16 15:46:26"
+  "modified": "2013-01-17 11:39:55"
  }, 
  {
   "read_only": 1, 
@@ -199,7 +199,14 @@
   "fieldtype": "Column Break"
  }, 
  {
-  "description": "Raise Purchase Request automatically for items which are \"Out of Stock\" considering already requested, already ordered qty and minimum order qty", 
+  "doctype": "DocField", 
+  "label": "Purchase Request For Warehouse", 
+  "fieldname": "purchase_request_for_warehouse", 
+  "fieldtype": "Link", 
+  "options": "Warehouse"
+ }, 
+ {
+  "description": "Items to be requested which are \"Out of Stock\" considering all warehouses based on projected qty and minimum order qty", 
   "doctype": "DocField", 
   "label": "Raise Purchase Request", 
   "fieldname": "raise_purchase_request",