Fixes counting of in stock parent assemblies and formatting of csv
diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py
index aaa0e95..e4cee4b 100644
--- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py
+++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py
@@ -363,9 +363,17 @@
 					bom_wise_item_details[d.item_code] = d
 			if include_sublevel:
 				if (d.default_material_request_type == "Purchase" and d.is_sub_contracted \
-					and supply_subs) or (d.default_material_request_type == "Manufacture"):
-					self.get_subitems(bom_wise_item_details,d.default_bom, \
-						d.qty, include_sublevel, only_raw, supply_subs)
+						and supply_subs) or (d.default_material_request_type == "Manufacture"):
+					my_qty = 0
+					if self.create_material_requests_for_all_required_qty:
+						my_qty = d.qty
+					elif (bom_wise_item_details[d.item_code].qty - d.qty) < self.get_item_projected_qty(d.item_code):
+						my_qty = bom_wise_item_details[d.item_code].qty - self.get_item_projected_qty(d.item_code)
+					else:
+						my_qty = d.qty
+					if my_qty > 0:
+						self.get_subitems(bom_wise_item_details,d.default_bom, \
+							my_qty, include_sublevel, only_raw, supply_subs)
 		return bom_wise_item_details
 
 	def make_items_dict(self, item_list):
@@ -387,6 +395,8 @@
 					flt(w.ordered_qty), flt(w.actual_qty)])
 			if item_qty:
 				item_list.append(['', '', '', '', 'Total', i_qty, o_qty, a_qty])
+			else:
+				item_list.append(['', '', '', '', 'Total', 0, 0, 0])
 
 		return item_list
 
@@ -449,6 +459,13 @@
 
 		return items_to_be_requested
 
+	def get_item_projected_qty(self,item):
+		item_projected_qty = frappe.db.sql("""select ifnull(sum(projected_qty),0) as qty	from `tabBin` 
+			where item_code = %(item_code)s and warehouse=%(warehouse)s""", \
+			{"item_code":item, "warehouse": self.purchase_request_for_warehouse},as_dict=1)
+		#frappe.msgprint(item_projected_qty)
+		return item_projected_qty[0].qty
+		
 	def get_projected_qty(self):
 		items = self.item_dict.keys()
 		item_projected_qty = frappe.db.sql("""select item_code, sum(projected_qty)