diff --git a/erpnext/selling/doctype/lead/lead.py b/erpnext/selling/doctype/lead/lead.py
index 2c16a1d..57e73d0 100644
--- a/erpnext/selling/doctype/lead/lead.py
+++ b/erpnext/selling/doctype/lead/lead.py
@@ -77,13 +77,13 @@
 	
 	def set_missing_values(source, target):
 		if source.company_name:
-			target[0].customer_type = "Company"
-			target[0].customer_name = source.company_name
+			target.customer_type = "Company"
+			target.customer_name = source.company_name
 		else:
-			target[0].customer_type = "Individual"
-			target[0].customer_name = source.lead_name
+			target.customer_type = "Individual"
+			target.customer_name = source.lead_name
 			
-		target[0].customer_group = frappe.db.get_default("customer_group")
+		target.customer_group = frappe.db.get_default("customer_group")
 			
 	doclist = get_mapped_doc("Lead", source_name, 
 		{"Lead": {
diff --git a/erpnext/selling/doctype/quotation/quotation.py b/erpnext/selling/doctype/quotation/quotation.py
index 45a9d0b..f5c2050 100644
--- a/erpnext/selling/doctype/quotation/quotation.py
+++ b/erpnext/selling/doctype/quotation/quotation.py
@@ -105,8 +105,8 @@
 	
 	def set_missing_values(source, target):
 		if customer:
-			target[0].customer = customer.name
-			target[0].customer_name = customer.customer_name
+			target.customer = customer.name
+			target.customer_name = customer.customer_name
 			
 		si = frappe.get_doc(target)
 		si.ignore_permissions = ignore_permissions
diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py
index 756f540..2b3a5fa 100644
--- a/erpnext/stock/doctype/material_request/material_request.py
+++ b/erpnext/stock/doctype/material_request/material_request.py
@@ -29,84 +29,84 @@
 						so_items[d.sales_order_no][d.item_code] = flt(d.qty)
 					else:
 						so_items[d.sales_order_no][d.item_code] += flt(d.qty)
-		
+
 		for so_no in so_items.keys():
 			for item in so_items[so_no].keys():
-				already_indented = frappe.db.sql("""select sum(ifnull(qty, 0)) 
-					from `tabMaterial Request Item` 
-					where item_code = %s and sales_order_no = %s and 
+				already_indented = frappe.db.sql("""select sum(ifnull(qty, 0))
+					from `tabMaterial Request Item`
+					where item_code = %s and sales_order_no = %s and
 					docstatus = 1 and parent != %s""", (item, so_no, self.name))
 				already_indented = already_indented and flt(already_indented[0][0]) or 0
-				
-				actual_so_qty = frappe.db.sql("""select sum(ifnull(qty, 0)) from `tabSales Order Item` 
+
+				actual_so_qty = frappe.db.sql("""select sum(ifnull(qty, 0)) from `tabSales Order Item`
 					where parent = %s and item_code = %s and docstatus = 1""", (so_no, item))
 				actual_so_qty = actual_so_qty and flt(actual_so_qty[0][0]) or 0
-				
+
 				if actual_so_qty and (flt(so_items[so_no][item]) + already_indented > actual_so_qty):
 					frappe.throw("You can raise indent of maximum qty: %s for item: %s against sales order: %s\
 						\n Anyway, you can add more qty in new row for the same item."
 						% (actual_so_qty - already_indented, item, so_no))
-				
+
 	def validate_schedule_date(self):
 		for d in self.get('indent_details'):
 			if d.schedule_date < self.transaction_date:
 				frappe.throw(_("Expected Date cannot be before Material Request Date"))
-				
+
 	# Validate
 	# ---------------------
 	def validate(self):
 		super(MaterialRequest, self).validate()
-		
+
 		self.validate_schedule_date()
 		self.validate_uom_is_integer("uom", "qty")
-		
+
 		if not self.status:
 			self.status = "Draft"
 
 		from erpnext.utilities import validate_status
 		validate_status(self.status, ["Draft", "Submitted", "Stopped", "Cancelled"])
-		
+
 		self.validate_value("material_request_type", "in", ["Purchase", "Transfer"])
 
 		pc_obj = frappe.get_doc('Purchase Common')
 		pc_obj.validate_for_items(self)
-		
+
 		# self.validate_qty_against_so()
 		# NOTE: Since Item BOM and FG quantities are combined, using current data, it cannot be validated
 		# Though the creation of Material Request from a Production Plan can be rethought to fix this
-	
+
 	def update_bin(self, is_submit, is_stopped):
 		""" Update Quantity Requested for Purchase in Bin for Material Request of type 'Purchase'"""
-		
+
 		from erpnext.stock.utils import update_bin
 		for d in self.get('indent_details'):
 			if frappe.db.get_value("Item", d.item_code, "is_stock_item") == "Yes":
 				if not d.warehouse:
-					frappe.throw("Please Enter Warehouse for Item %s as it is stock item" 
+					frappe.throw("Please Enter Warehouse for Item %s as it is stock item"
 						% cstr(d.item_code))
-					
+
 				qty =flt(d.qty)
 				if is_stopped:
 					qty = (d.qty > d.ordered_qty) and flt(flt(d.qty) - flt(d.ordered_qty)) or 0
-			
+
 				args = {
 					"item_code": d.item_code,
 					"warehouse": d.warehouse,
 					"indented_qty": (is_submit and 1 or -1) * flt(qty),
 					"posting_date": self.transaction_date
 				}
-				update_bin(args)		
-		
+				update_bin(args)
+
 	def on_submit(self):
 		frappe.db.set(self, 'status', 'Submitted')
 		self.update_bin(is_submit = 1, is_stopped = 0)
-	
+
 	def check_modified_date(self):
-		mod_db = frappe.db.sql("""select modified from `tabMaterial Request` where name = %s""", 
+		mod_db = frappe.db.sql("""select modified from `tabMaterial Request` where name = %s""",
 			self.name)
 		date_diff = frappe.db.sql("""select TIMEDIFF('%s', '%s')"""
 			% (mod_db[0][0], cstr(self.modified)))
-		
+
 		if date_diff and date_diff[0][0]:
 			frappe.throw(cstr(self.doctype) + " => " + cstr(self.name) + " has been modified. Please Refresh.")
 
@@ -115,93 +115,93 @@
 		# Step 1:=> Update Bin
 		self.update_bin(is_submit = (status == 'Submitted') and 1 or 0, is_stopped = 1)
 
-		# Step 2:=> Set status 
+		# Step 2:=> Set status
 		frappe.db.set(self, 'status', cstr(status))
-		
+
 		# Step 3:=> Acknowledge User
 		msgprint(self.doctype + ": " + self.name + " has been %s." % ((status == 'Submitted') and 'Unstopped' or cstr(status)))
- 
+
 
 	def on_cancel(self):
 		# Step 1:=> Get Purchase Common Obj
 		pc_obj = frappe.get_doc('Purchase Common')
-		
+
 		# Step 2:=> Check for stopped status
 		pc_obj.check_for_stopped_status(self.doctype, self.name)
-		
+
 		# Step 3:=> Check if Purchase Order has been submitted against current Material Request
 		pc_obj.check_docstatus(check = 'Next', doctype = 'Purchase Order', docname = self.name, detail_doctype = 'Purchase Order Item')
 		# Step 4:=> Update Bin
 		self.update_bin(is_submit = 0, is_stopped = (cstr(self.status) == 'Stopped') and 1 or 0)
-		
+
 		# Step 5:=> Set Status
 		frappe.db.set(self,'status','Cancelled')
-		
+
 	def update_completed_qty(self, mr_items=None):
 		if self.material_request_type != "Transfer":
 			return
-			
+
 		item_doclist = self.get("indent_details")
-		
+
 		if not mr_items:
 			mr_items = [d.name for d in item_doclist]
-		
+
 		per_ordered = 0.0
 		for d in item_doclist:
 			if d.name in mr_items:
-				d.ordered_qty =  flt(frappe.db.sql("""select sum(transfer_qty) 
-					from `tabStock Entry Detail` where material_request = %s 
-					and material_request_item = %s and docstatus = 1""", 
+				d.ordered_qty =  flt(frappe.db.sql("""select sum(transfer_qty)
+					from `tabStock Entry Detail` where material_request = %s
+					and material_request_item = %s and docstatus = 1""",
 					(self.name, d.name))[0][0])
 				frappe.db.set_value(d.doctype, d.name, "ordered_qty", d.ordered_qty)
-				
+
 			# note: if qty is 0, its row is still counted in len(item_doclist)
 			# hence adding 1 to per_ordered
 			if (d.ordered_qty > d.qty) or not d.qty:
 				per_ordered += 1.0
 			elif d.qty > 0:
 				per_ordered += flt(d.ordered_qty / flt(d.qty))
-		
+
 		self.per_ordered = flt((per_ordered / flt(len(item_doclist))) * 100.0, 2)
 		frappe.db.set_value(self.doctype, self.name, "per_ordered", self.per_ordered)
-		
+
 def update_completed_qty(doc, method):
 	if doc.doctype == "Stock Entry":
 		material_request_map = {}
-		
+
 		for d in doc.get("mtn_details"):
 			if d.material_request:
 				material_request_map.setdefault(d.material_request, []).append(d.material_request_item)
-			
+
 		for mr_name, mr_items in material_request_map.items():
 			mr_obj = frappe.get_doc("Material Request", mr_name)
 			mr_doctype = frappe.get_meta("Material Request")
-			
+
 			if mr_obj.status in ["Stopped", "Cancelled"]:
-				frappe.throw(_("Material Request") + ": %s, " % mr_obj.name 
+				frappe.throw(_("Material Request") + ": %s, " % mr_obj.name
 					+ _(mr_doctype.get_label("status")) + " = %s. " % _(mr_obj.status)
 					+ _("Cannot continue."), exc=frappe.InvalidStatusError)
-				
+
 			_update_requested_qty(doc, mr_obj, mr_items)
-			
+
 			# update ordered percentage and qty
 			mr_obj.update_completed_qty(mr_items)
-			
+
 def _update_requested_qty(doc, mr_obj, mr_items):
 	"""update requested qty (before ordered_qty is updated)"""
 	from erpnext.stock.utils import update_bin
 	for mr_item_name in mr_items:
 		mr_item = mr_obj.get("indent_details", {"name": mr_item_name})
-		se_detail = doc.get("mtn_details", {"material_request": mr_obj.name, 
+		se_detail = doc.get("mtn_details", {"material_request": mr_obj.name,
 			"material_request_item": mr_item_name})
-	
+
 		if mr_item and se_detail:
 			mr_item = mr_item[0]
 			se_detail = se_detail[0]
 			mr_item.ordered_qty = flt(mr_item.ordered_qty)
 			mr_item.qty = flt(mr_item.qty)
 			se_detail.transfer_qty = flt(se_detail.transfer_qty)
-	
+
 			if se_detail.docstatus == 2 and mr_item.ordered_qty > mr_item.qty \
 					and se_detail.transfer_qty == mr_item.ordered_qty:
 				add_indented_qty = mr_item.qty
@@ -210,7 +210,7 @@
 				add_indented_qty = mr_item.qty - mr_item.ordered_qty
 			else:
 				add_indented_qty = se_detail.transfer_qty
-	
+
 			update_bin({
 				"item_code": se_detail.item_code,
 				"warehouse": se_detail.t_warehouse,
@@ -221,7 +221,7 @@
 def set_missing_values(source, target_doc):
 	po = frappe.get_doc(target_doc)
 	po.run_method("set_missing_values")
-	
+
 def update_item(obj, target, source_parent):
 	target.conversion_factor = 1
 	target.qty = flt(obj.qty) - flt(obj.ordered_qty)
@@ -232,18 +232,18 @@
 
 	doclist = get_mapped_doc("Material Request", source_name, 	{
 		"Material Request": {
-			"doctype": "Purchase Order", 
+			"doctype": "Purchase Order",
 			"validation": {
 				"docstatus": ["=", 1],
 				"material_request_type": ["=", "Purchase"]
 			}
-		}, 
+		},
 		"Material Request Item": {
-			"doctype": "Purchase Order Item", 
+			"doctype": "Purchase Order Item",
 			"field_map": [
-				["name", "prevdoc_detail_docname"], 
-				["parent", "prevdoc_docname"], 
-				["parenttype", "prevdoc_doctype"], 
+				["name", "prevdoc_detail_docname"],
+				["parent", "prevdoc_docname"],
+				["parenttype", "prevdoc_doctype"],
 				["uom", "stock_uom"],
 				["uom", "uom"]
 			],
@@ -252,7 +252,7 @@
 	}, target_doc, set_missing_values)
 
 	return doclist.as_dict()
-	
+
 @frappe.whitelist()
 def make_purchase_order_based_on_supplier(source_name, target_doc=None):
 	from frappe.model.mapper import get_mapped_doc
@@ -261,44 +261,44 @@
 			import json
 			target_doc = frappe.get_doc(json.loads(target_doc))
 		target_doc = target_doc.get({"parentfield": ["!=", "po_details"]})
-		
+
 	material_requests, supplier_items = get_material_requests_based_on_supplier(source_name)
-	
+
 	def postprocess(source, target_doc):
 		target_doc[0].supplier = source_name
 		set_missing_values(source, target_doc)
-		
+
 		po_items = target_doc.get({"parentfield": "po_details"})
 		target_doc = target_doc.get({"parentfield": ["!=", "po_details"]}) + \
-			[d for d in po_items 
+			[d for d in po_items
 				if d.get("item_code") in supplier_items and d.get("qty") > 0]
-		
+
 		return target_doc
-		
+
 	for mr in material_requests:
 		target_doc = get_mapped_doc("Material Request", mr, 	{
 			"Material Request": {
-				"doctype": "Purchase Order", 
-			}, 
+				"doctype": "Purchase Order",
+			},
 			"Material Request Item": {
-				"doctype": "Purchase Order Item", 
+				"doctype": "Purchase Order Item",
 				"field_map": [
-					["name", "prevdoc_detail_docname"], 
-					["parent", "prevdoc_docname"], 
-					["parenttype", "prevdoc_doctype"], 
+					["name", "prevdoc_detail_docname"],
+					["parent", "prevdoc_docname"],
+					["parenttype", "prevdoc_doctype"],
 					["uom", "stock_uom"],
 					["uom", "uom"]
 				],
 				"postprocess": update_item
 			}
 		}, target_doc, postprocess)
-	
+
 	return target_doc.as_dict()
-	
+
 def get_material_requests_based_on_supplier(supplier):
-	supplier_items = [d[0] for d in frappe.db.get_values("Item", 
+	supplier_items = [d[0] for d in frappe.db.get_values("Item",
 		{"default_supplier": supplier})]
-	material_requests = frappe.db.sql_list("""select distinct mr.name 
+	material_requests = frappe.db.sql_list("""select distinct mr.name
 		from `tabMaterial Request` mr, `tabMaterial Request Item` mr_item
 		where mr.name = mr_item.parent
 		and mr_item.item_code in (%s)
@@ -308,59 +308,59 @@
 		and mr.status != 'Stopped'""" % ', '.join(['%s']*len(supplier_items)),
 		tuple(supplier_items))
 	return material_requests, supplier_items
-	
+
 @frappe.whitelist()
 def make_supplier_quotation(source_name, target_doc=None):
 	from frappe.model.mapper import get_mapped_doc
 
 	doclist = get_mapped_doc("Material Request", source_name, {
 		"Material Request": {
-			"doctype": "Supplier Quotation", 
+			"doctype": "Supplier Quotation",
 			"validation": {
 				"docstatus": ["=", 1],
 				"material_request_type": ["=", "Purchase"]
 			}
-		}, 
+		},
 		"Material Request Item": {
-			"doctype": "Supplier Quotation Item", 
+			"doctype": "Supplier Quotation Item",
 			"field_map": {
-				"name": "prevdoc_detail_docname", 
-				"parent": "prevdoc_docname", 
+				"name": "prevdoc_detail_docname",
+				"parent": "prevdoc_docname",
 				"parenttype": "prevdoc_doctype"
 			}
 		}
 	}, target_doc, set_missing_values)
 
 	return doclist.as_dict()
-	
+
 @frappe.whitelist()
 def make_stock_entry(source_name, target_doc=None):
 	from frappe.model.mapper import get_mapped_doc
-	
+
 	def update_item(obj, target, source_parent):
 		target.conversion_factor = 1
 		target.qty = flt(obj.qty) - flt(obj.ordered_qty)
 		target.transfer_qty = flt(obj.qty) - flt(obj.ordered_qty)
-	
+
 	def set_missing_values(source, target):
-		target[0].purpose = "Material Transfer"
+		target.purpose = "Material Transfer"
 		se = frappe.get_doc(target)
 		se.run_method("get_stock_and_rate")
 
 	doclist = get_mapped_doc("Material Request", source_name, {
 		"Material Request": {
-			"doctype": "Stock Entry", 
+			"doctype": "Stock Entry",
 			"validation": {
 				"docstatus": ["=", 1],
 				"material_request_type": ["=", "Transfer"]
 			}
-		}, 
+		},
 		"Material Request Item": {
-			"doctype": "Stock Entry Detail", 
+			"doctype": "Stock Entry Detail",
 			"field_map": {
-				"name": "material_request_item", 
-				"parent": "material_request", 
-				"uom": "stock_uom", 
+				"name": "material_request_item",
+				"parent": "material_request",
+				"uom": "stock_uom",
 				"warehouse": "t_warehouse"
 			},
 			"postprocess": update_item
diff --git a/erpnext/stock/doctype/material_request/test_material_request.py b/erpnext/stock/doctype/material_request/test_material_request.py
index 6d10d40..f27fadb 100644
--- a/erpnext/stock/doctype/material_request/test_material_request.py
+++ b/erpnext/stock/doctype/material_request/test_material_request.py
@@ -17,89 +17,89 @@
 
 		mr = frappe.copy_doc(test_records[0]).insert()
 
-		self.assertRaises(frappe.ValidationError, make_purchase_order, 
+		self.assertRaises(frappe.ValidationError, make_purchase_order,
 			mr.name)
 
 		mr = frappe.get_doc("Material Request", mr.name)
 		mr.submit()
 		po = make_purchase_order(mr.name)
-		
+
 		self.assertEquals(po[0]["doctype"], "Purchase Order")
 		self.assertEquals(len(po), len(mr))
-		
+
 	def test_make_supplier_quotation(self):
 		from erpnext.stock.doctype.material_request.material_request import make_supplier_quotation
 
 		mr = frappe.copy_doc(test_records[0]).insert()
 
-		self.assertRaises(frappe.ValidationError, make_supplier_quotation, 
+		self.assertRaises(frappe.ValidationError, make_supplier_quotation,
 			mr.name)
 
 		mr = frappe.get_doc("Material Request", mr.name)
 		mr.submit()
 		sq = make_supplier_quotation(mr.name)
-		
+
 		self.assertEquals(sq[0]["doctype"], "Supplier Quotation")
 		self.assertEquals(len(sq), len(mr))
-		
-			
+
+
 	def test_make_stock_entry(self):
 		from erpnext.stock.doctype.material_request.material_request import make_stock_entry
 
 		mr = frappe.copy_doc(test_records[0]).insert()
 
-		self.assertRaises(frappe.ValidationError, make_stock_entry, 
+		self.assertRaises(frappe.ValidationError, make_stock_entry,
 			mr.name)
 
 		mr = frappe.get_doc("Material Request", mr.name)
 		mr.material_request_type = "Transfer"
 		mr.submit()
 		se = make_stock_entry(mr.name)
-		
+
 		self.assertEquals(se[0]["doctype"], "Stock Entry")
 		self.assertEquals(len(se), len(mr))
-	
+
 	def _test_expected(self, doc, expected_values):
 		for i, expected in enumerate(expected_values):
 			for fieldname, val in expected.items():
-				self.assertEquals(val, doc[i].get(fieldname))
-				
+				self.assertEquals(val, doc.get(fieldname))
+
 	def _test_requested_qty(self, qty1, qty2):
 		self.assertEqual(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item Home Desktop 100",
 			"warehouse": "_Test Warehouse - _TC"}, "indented_qty")), qty1)
 		self.assertEqual(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item Home Desktop 200",
 			"warehouse": "_Test Warehouse - _TC"}, "indented_qty")), qty2)
-			
+
 	def _insert_stock_entry(self, qty1, qty2):
 		se = frappe.get_doc({
-				"company": "_Test Company", 
-				"doctype": "Stock Entry", 
-				"posting_date": "2013-03-01", 
-				"posting_time": "00:00:00", 
+				"company": "_Test Company",
+				"doctype": "Stock Entry",
+				"posting_date": "2013-03-01",
+				"posting_time": "00:00:00",
 				"purpose": "Material Receipt",
 				"fiscal_year": "_Test Fiscal Year 2013",
 				"mtn_details": [
 					{
-						"conversion_factor": 1.0, 
-						"doctype": "Stock Entry Detail", 
+						"conversion_factor": 1.0,
+						"doctype": "Stock Entry Detail",
 						"item_code": "_Test Item Home Desktop 100",
-						"parentfield": "mtn_details", 
+						"parentfield": "mtn_details",
 						"incoming_rate": 100,
-						"qty": qty1, 
-						"stock_uom": "_Test UOM 1", 
-						"transfer_qty": qty1, 
+						"qty": qty1,
+						"stock_uom": "_Test UOM 1",
+						"transfer_qty": qty1,
 						"uom": "_Test UOM 1",
 						"t_warehouse": "_Test Warehouse 1 - _TC",
 					},
 					{
-						"conversion_factor": 1.0, 
-						"doctype": "Stock Entry Detail", 
+						"conversion_factor": 1.0,
+						"doctype": "Stock Entry Detail",
 						"item_code": "_Test Item Home Desktop 200",
-						"parentfield": "mtn_details", 
+						"parentfield": "mtn_details",
 						"incoming_rate": 100,
-						"qty": qty2, 
-						"stock_uom": "_Test UOM 1", 
-						"transfer_qty": qty2, 
+						"qty": qty2,
+						"stock_uom": "_Test UOM 1",
+						"transfer_qty": qty2,
 						"uom": "_Test UOM 1",
 						"t_warehouse": "_Test Warehouse 1 - _TC",
 					}
@@ -107,20 +107,20 @@
 			})
 		se.insert()
 		se.submit()
-				
+
 	def test_completed_qty_for_purchase(self):
 		frappe.db.sql("""delete from `tabBin`""")
-		
+
 		# submit material request of type Purchase
 		mr = frappe.copy_doc(test_records[0])
 		mr.insert()
 		mr.submit()
-		
+
 		# check if per complete is None
 		self._test_expected(mr, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
-		
+
 		self._test_requested_qty(54.0, 3.0)
-		
+
 		# map a purchase order
 		from erpnext.stock.doctype.material_request.material_request import make_purchase_order
 		po_doc = make_purchase_order(mr.name)
@@ -131,34 +131,34 @@
 		po_doc.get("po_details")[0]["schedule_date"] = "2013-07-09"
 		po_doc.get("po_details")[1]["schedule_date"] = "2013-07-09"
 
-		
+
 		# check for stopped status of Material Request
 		po = frappe.copy_doc(po_doc)
 		po.insert()
-		mr.obj.update_status('Stopped')
+		mr.update_status('Stopped')
 		self.assertRaises(frappe.ValidationError, po.submit)
 		self.assertRaises(frappe.ValidationError, po.cancel)
 
-		mr.obj.update_status('Submitted')
+		mr.update_status('Submitted')
 		po = frappe.copy_doc(po_doc)
 		po.insert()
 		po.submit()
-		
+
 		# check if per complete is as expected
 		mr.load_from_db()
 		self._test_expected(mr, [{"per_ordered": 50}, {"ordered_qty": 27.0}, {"ordered_qty": 1.5}])
 		self._test_requested_qty(27.0, 1.5)
-		
+
 		po.cancel()
 		# check if per complete is as expected
 		mr.load_from_db()
 		self._test_expected(mr, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
 		self._test_requested_qty(54.0, 3.0)
-		
+
 	def test_completed_qty_for_transfer(self):
 		frappe.db.sql("""delete from `tabBin`""")
 		frappe.db.sql("""delete from `tabStock Ledger Entry`""")
-		
+
 		# submit material request of type Purchase
 		mr = frappe.copy_doc(test_records[0])
 		mr.material_request_type = "Transfer"
@@ -167,11 +167,11 @@
 
 		# check if per complete is None
 		self._test_expected(mr, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
-		
+
 		self._test_requested_qty(54.0, 3.0)
 
 		from erpnext.stock.doctype.material_request.material_request import make_stock_entry
-				
+
 		# map a stock entry
 		se_doc = make_stock_entry(mr.name)
 		se_doc.update({
@@ -191,37 +191,37 @@
 			"s_warehouse": "_Test Warehouse 1 - _TC",
 			"incoming_rate": 1.0
 		})
-		
+
 		# make available the qty in _Test Warehouse 1 before transfer
 		self._insert_stock_entry(27.0, 1.5)
-		
+
 		# check for stopped status of Material Request
 		se = frappe.copy_doc(se_doc)
 		se.insert()
-		mr.obj.update_status('Stopped')
+		mr.update_status('Stopped')
 		self.assertRaises(frappe.ValidationError, se.submit)
 		self.assertRaises(frappe.ValidationError, se.cancel)
-		
-		mr.obj.update_status('Submitted')
+
+		mr.update_status('Submitted')
 		se = frappe.copy_doc(se_doc)
 		se.insert()
 		se.submit()
-		
+
 		# check if per complete is as expected
 		mr.load_from_db()
 		self._test_expected(mr, [{"per_ordered": 50}, {"ordered_qty": 27.0}, {"ordered_qty": 1.5}])
 		self._test_requested_qty(27.0, 1.5)
-		
+
 		# check if per complete is as expected for Stock Entry cancelled
 		se.cancel()
 		mr.load_from_db()
 		self._test_expected(mr, [{"per_ordered": 0}, {"ordered_qty": 0}, {"ordered_qty": 0}])
 		self._test_requested_qty(54.0, 3.0)
-		
+
 	def test_completed_qty_for_over_transfer(self):
 		frappe.db.sql("""delete from `tabBin`""")
 		frappe.db.sql("""delete from `tabStock Ledger Entry`""")
-		
+
 		# submit material request of type Purchase
 		mr = frappe.copy_doc(test_records[0])
 		mr.material_request_type = "Transfer"
@@ -230,9 +230,9 @@
 
 		# check if per complete is None
 		self._test_expected(mr, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
-		
+
 		self._test_requested_qty(54.0, 3.0)
-		
+
 		# map a stock entry
 		from erpnext.stock.doctype.material_request.material_request import make_stock_entry
 
@@ -257,30 +257,30 @@
 
 		# make available the qty in _Test Warehouse 1 before transfer
 		self._insert_stock_entry(60.0, 3.0)
-		
+
 		# check for stopped status of Material Request
 		se = frappe.copy_doc(se_doc)
 		se.insert()
-		mr.obj.update_status('Stopped')
+		mr.update_status('Stopped')
 		self.assertRaises(frappe.ValidationError, se.submit)
 		self.assertRaises(frappe.ValidationError, se.cancel)
-		
-		mr.obj.update_status('Submitted')
+
+		mr.update_status('Submitted')
 		se = frappe.copy_doc(se_doc)
 		se.insert()
 		se.submit()
-		
+
 		# check if per complete is as expected
 		mr.load_from_db()
 		self._test_expected(mr, [{"per_ordered": 100}, {"ordered_qty": 60.0}, {"ordered_qty": 3.0}])
 		self._test_requested_qty(0.0, 0.0)
-		
+
 		# check if per complete is as expected for Stock Entry cancelled
 		se.cancel()
 		mr.load_from_db()
 		self._test_expected(mr, [{"per_ordered": 0}, {"ordered_qty": 0}, {"ordered_qty": 0}])
 		self._test_requested_qty(54.0, 3.0)
-		
+
 	def test_incorrect_mapping_of_stock_entry(self):
 		# submit material request of type Purchase
 		mr = frappe.copy_doc(test_records[0])
@@ -290,7 +290,7 @@
 
 		# map a stock entry
 		from erpnext.stock.doctype.material_request.material_request import make_stock_entry
-		
+
 		se_doc = make_stock_entry(mr.name)
 		se_doc.update({
 			"posting_date": "2013-03-01",
@@ -310,11 +310,11 @@
 			"s_warehouse": "_Test Warehouse 1 - _TC",
 			"incoming_rate": 1.0
 		})
-		
+
 		# check for stopped status of Material Request
 		se = frappe.copy_doc(se_doc)
 		self.assertRaises(frappe.MappingMismatchError, se.insert)
-		
+
 	def test_warehouse_company_validation(self):
 		from erpnext.stock.utils import InvalidWarehouseCompany
 		mr = frappe.copy_doc(test_records[0])
@@ -322,4 +322,4 @@
 		self.assertRaises(InvalidWarehouseCompany, mr.insert)
 
 test_dependencies = ["Currency Exchange"]
-test_records = frappe.get_test_records('Material Request')
\ No newline at end of file
+test_records = frappe.get_test_records('Material Request')
