diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.py b/erpnext/manufacturing/doctype/production_plan/production_plan.py
index 046377e..f57a911 100644
--- a/erpnext/manufacturing/doctype/production_plan/production_plan.py
+++ b/erpnext/manufacturing/doctype/production_plan/production_plan.py
@@ -436,8 +436,7 @@
 	return bom_wise_item_details
 
 def add_item_in_material_request_items(doc, planned_qty, ignore_existing_ordered_qty, item, row, data, warehouse, company):
-	print("add item in material request")
-	total_qty = row.qty * planned_qty
+	total_qty = row['qty'] * planned_qty
 	projected_qty, actual_qty = get_bin_details(row)
 
 	requested_qty = 0
@@ -445,29 +444,27 @@
 		requested_qty = total_qty
 	elif total_qty > projected_qty:
 		requested_qty = total_qty - projected_qty
-	if requested_qty > 0 and requested_qty < row.min_order_qty:
-		requested_qty = row.min_order_qty
+	if requested_qty > 0 and requested_qty < row['min_order_qty']:
+		requested_qty = row['min_order_qty']
 	item_group_defaults = get_item_group_defaults(item, company)
 
-	if not row.purchase_uom:
-		row.purchase_uom = row.stock_uom
+	if not row['purchase_uom']:
+		row['purchase_uom'] = row['stock_uom']
 
-	if row.purchase_uom != row.stock_uom:
-		if not row.conversion_factor:
-			frappe.throw(_("UOM Conversion factor ({0} -> {1}) not found for item: {2}").format(row.purchase_uom, row.stock_uom, item))
-
-		requested_qty = requested_qty / row.conversion_factor
-	if frappe.db.get_value("UOM", row.purchase_uom, "must_be_whole_number"):
+	if row['purchase_uom'] != row['stock_uom']:
+		if not row['conversion_factor']:
+			frappe.throw(_("UOM Conversion factor ({0} -> {1}) not found for item: {2}").format(row['purchase_uom'], row['stock_uom'], item))
+		requested_qty = requested_qty / row['conversion_factor']
+	if frappe.db.get_value("UOM", row['purchase_uom'], "must_be_whole_number"):
 		requested_qty = ceil(requested_qty)
-	print(row)
 	if requested_qty > 0:
 		doc.setdefault('mr_items', []).append({
 			'item_code': item,
-			'item_name': row.item_name,
+			'item_name': row['item_name'],
 			'quantity': requested_qty,
-			'warehouse': warehouse or row.source_warehouse or row.default_warehouse or item_group_defaults.get("default_warehouse"),
+			'warehouse': warehouse or row.get('source_warehouse') or row.get('default_warehouse') or item_group_defaults.get("default_warehouse"),
 			'actual_qty': actual_qty,
-			'min_order_qty': row.min_order_qty,
+			'min_order_qty': row['min_order_qty'],
 			'sales_order': data.get('sales_order')
 		})
 
@@ -515,7 +512,7 @@
 		row = frappe._dict(json.loads(row))
 
 	conditions = ""
-	warehouse = row.source_warehouse or row.default_warehouse or row.warehouse
+	warehouse = row.get('source_warehouse') or row.get('default_warehouse')
 	if warehouse:
 		lft, rgt = frappe.db.get_value("Warehouse", warehouse, ["lft", "rgt"])
 		conditions = " and exists(select name from `tabWarehouse` where lft >= {0} and rgt <= {1} and name=`tabBin`.warehouse)".format(lft, rgt)
@@ -523,13 +520,12 @@
 	item_projected_qty = frappe.db.sql(""" select ifnull(sum(projected_qty),0) as projected_qty,
 		ifnull(sum(actual_qty),0) as actual_qty from `tabBin`
 		where item_code = %(item_code)s {conditions}
-	""".format(conditions=conditions), { "item_code": row.item_code }, as_list=1)
+	""".format(conditions=conditions), { "item_code": row['item_code'] }, as_list=1)
 
 	return item_projected_qty and item_projected_qty[0] or (0,0)
 
 @frappe.whitelist()
 def get_items_for_material_requests(doc, company=None):
-	print("get items for material request")
 	if isinstance(doc, string_types):
 		doc = frappe._dict(json.loads(doc))
 
@@ -540,7 +536,6 @@
 		warehouse = None
 		bom_wise_item_details = {}
 		if data.get("bom"):
-			print(doc),print("-------------------------------------------------")
 			if data.get('required_qty'):
 				planned_qty = data.get('required_qty')
 				bom_no = data.get('bom')
@@ -565,43 +560,39 @@
 				# fetch exploded items from BOM
 				bom_wise_item_details = get_exploded_items(bom_wise_item_details, company, bom_no, include_non_stock_items)
 			else:
-				bom_wise_item_details = get_subitems(doc, data, bom_wise_item_details, bom_no, company, include_non_stock_items, include_subcontracted_items, 1)
+				bom_wise_item_details = get_subitems(doc, data, bom_wise_item_details, bom_no, company,
+					include_non_stock_items, include_subcontracted_items, 1)
 			for item, item_details in bom_wise_item_details.items():
-				print(item),print(item_details)
 				if item_details.qty > 0:
-					add_item_in_material_request_items(doc, planned_qty, ignore_existing_ordered_qty, item, item_details, data, warehouse, company)
+					add_item_in_material_request_items(doc, planned_qty, ignore_existing_ordered_qty,
+						item, item_details, data, warehouse, company)
 		else:
-			sales_order_item = frappe.get_doc('Sales OrderItem', data.sales_order_item).as_dict()
+			item_master = frappe.get_doc('Item', data['item_code']).as_dict()
 			planned_qty = data.get('required_qty')
-			ignore_existing_ordered_qty = data.get('ignore_existing_ordered_qty')
-			item = doc.item_code
-			purchase_uom = sales_order_item.uom
-			stock_uom = sales_order_item.stock_uom
-			conversion_factor = sales_order_item.conversion_factor
-			qty = doc.required_qty
-			if not purchase_uom == stock_uom:
-				qty = qty / conversion_factor
-			if frappe.db.get_value("UOM", purchase_uom, "must_be_whole_number"):
-					qty = ceil(qty)
-			item_details = {
-			'item_name' = sales_order_item.item_name,
-			'default_bom' = doc.bom,
-			'purchase_uom' = purchase_uom,
-			'default_warehouse' = doc.warehouse,
-			'min_order_qty' =
-			'default_material_request_type' =
-			'qty' = qty,
-			'is_sub_contracted' = ,
-			'item_code' = doc.item_code,
-			'description' = sales_order_item.description,
-			'stock_uom' = stock_uom,
-			'conversion_factor' = conversion_factor,
-			'source_warehouse' = ,
-			}
-			warehouse = doc.warehouse
-			company =
-			if item_details.qty > 0:
-				add_item_in_material_request_items(doc, planned_qty, ignore_existing_ordered_qty, item, item_details, data, warehouse, company)
-			print(doc),print("-------------------------------------------------")
+
+			purchase_uom = item_master.purchase_uom or item_master.stock_uom
+			conversion_factor = 0
+			for d in item_master.get("uoms"):
+				if d.uom == purchase_uom:
+					conversion_factor = d.conversion_factor
+
+			item_details = frappe._dict({
+				'item_name' : item_master.item_name,
+				'default_bom' : doc.bom,
+				'purchase_uom' : purchase_uom,
+				'default_warehouse': item_master.default_warehouse,
+				'min_order_qty' : item_master.min_order_qty,
+				'default_material_request_type' : item_master.default_material_request_type,
+				'qty': 1,
+				'is_sub_contracted' : item_master.is_subcontracted_item,
+				'item_code' : item_master.name,
+				'description' : item_master.description,
+				'stock_uom' : item_master.stock_uom,
+				'conversion_factor' : conversion_factor,
+			})
+
+			if item_details['qty'] > 0:
+				add_item_in_material_request_items(doc, planned_qty, data.get('ignore_existing_ordered_qty'), item_master.name,
+					item_details, data, data.get('for_warehouse'), company)
 
 	return doc['mr_items']
