diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 9129e1f..dd60085 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -493,7 +493,7 @@
 					"against": self.against_income_account,
 					"debit": self.base_grand_total,
 					"remarks": self.remarks,
-					"against_voucher": self.against_invoice if cint(self.is_return) else self.name,
+					"against_voucher": self.return_against if cint(self.is_return) else self.name,
 					"against_voucher_type": self.doctype
 				})
 			)
@@ -541,7 +541,7 @@
 					"against": self.cash_bank_account,
 					"credit": self.paid_amount,
 					"remarks": self.remarks,
-					"against_voucher": self.against_invoice if cint(self.is_return) else self.name,
+					"against_voucher": self.return_against if cint(self.is_return) else self.name,
 					"against_voucher_type": self.doctype,
 				})
 			)
@@ -565,7 +565,7 @@
 					"against": self.write_off_account,
 					"credit": self.write_off_amount,
 					"remarks": self.remarks,
-					"against_voucher": self.against_invoice if cint(self.is_return) else self.name,
+					"against_voucher": self.return_against if cint(self.is_return) else self.name,
 					"against_voucher_type": self.doctype,
 				})
 			)
diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
index cf752af..6d54f0a 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -4,11 +4,10 @@
 
 import frappe
 import unittest, copy
-import time
-from frappe.utils import nowdate, add_days
-from erpnext.accounts.utils import get_stock_and_account_difference
+from frappe.utils import nowdate, add_days, flt
 from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
 from erpnext.projects.doctype.time_log_batch.test_time_log_batch import *
+from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry, get_qty_after_transaction
 
 
 class TestSalesInvoice(unittest.TestCase):
@@ -772,6 +771,53 @@
 		si1 = create_sales_invoice(posting_date="2015-07-05")		
 		self.assertEqual(si1.due_date, "2015-08-31")
 		
+	def test_return_sales_invoice(self):
+		set_perpetual_inventory()
+		
+		make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=50, incoming_rate=100)
+		
+		actual_qty_0 = get_qty_after_transaction()
+		
+		si = create_sales_invoice(qty=5, rate=500, update_stock=1)
+
+		actual_qty_1 = get_qty_after_transaction()
+		self.assertEquals(actual_qty_0 - 5, actual_qty_1)
+		
+		# outgoing_rate
+		outgoing_rate = frappe.db.get_value("Stock Ledger Entry", {"voucher_type": "Sales Invoice", 
+			"voucher_no": si.name}, "stock_value_difference") / 5
+		
+		# return entry
+		si1 = create_sales_invoice(is_return=1, return_against=si.name, qty=-2, rate=500, update_stock=1)
+
+		actual_qty_2 = get_qty_after_transaction()
+			
+		self.assertEquals(actual_qty_1 + 2, actual_qty_2)
+		
+		incoming_rate, stock_value_difference = frappe.db.get_value("Stock Ledger Entry", 
+			{"voucher_type": "Sales Invoice", "voucher_no": si1.name}, 
+			["incoming_rate", "stock_value_difference"])
+			
+		self.assertEquals(flt(incoming_rate, 3), abs(flt(outgoing_rate, 3)))
+		
+		
+		# Check gl entry
+		gle_warehouse_amount = frappe.db.get_value("GL Entry", {"voucher_type": "Sales Invoice", 
+			"voucher_no": si1.name, "account": "_Test Warehouse - _TC"}, "debit")
+			
+		self.assertEquals(gle_warehouse_amount, stock_value_difference)
+		
+		party_credited = frappe.db.get_value("GL Entry", {"voucher_type": "Sales Invoice", 
+			"voucher_no": si1.name, "account": "Debtors - _TC", "party": "_Test Customer"}, "credit")
+			
+		self.assertEqual(party_credited, 1000)
+		
+		# Check outstanding amount
+		self.assertFalse(si1.outstanding_amount)
+		self.assertEqual(frappe.db.get_value("Sales Invoice", si.name, "outstanding_amount"), 1500)
+		
+		set_perpetual_inventory(0)
+		
 
 def create_sales_invoice(**args):
 	si = frappe.new_doc("Sales Invoice")
@@ -784,6 +830,10 @@
 	si.debit_to = args.debit_to or "Debtors - _TC"
 	si.update_stock = args.update_stock
 	si.is_pos = args.is_pos
+	si.is_return = args.is_return
+	si.return_against = args.return_against
+	si.currency="INR"
+	si.conversion_rate = 1
 
 	si.append("items", {
 		"item_code": args.item or args.item_code or "_Test Item",
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 61b3c52..eb7b73f 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -86,8 +86,7 @@
 				ref_posting_datetime = "%s %s" % (ref_doc.posting_date, ref_doc.get("posting_time") or "00:00:00")
 				
 				if get_datetime(return_posting_datetime) < get_datetime(ref_posting_datetime):
-					frappe.throw(_("Posting timestamp must be after {0}")
-						.format(datetime_in_user_format(ref_posting_datetime)))
+					frappe.throw(_("Posting timestamp must be after {0}").format(format_datetime(ref_posting_datetime)))
 				
 				# validate same exchange rate
 				if self.conversion_rate != ref_doc.conversion_rate:
@@ -105,6 +104,11 @@
 		for d in frappe.db.sql("""select item_code, sum(qty) as qty, rate from `tab{0} Item` 
 			where parent = %s group by item_code""".format(self.doctype), self.return_against, as_dict=1):
 				valid_items.setdefault(d.item_code, d)
+		
+		if self.doctype in ("Delivery Note", "Sales Invoice"):
+			for d in frappe.db.sql("""select item_code, sum(qty) as qty from `tabPacked Item` 
+				where parent = %s group by item_code""".format(self.doctype), self.return_against, as_dict=1):
+					valid_items.setdefault(d.item_code, d)
 				
 		already_returned_items = self.get_already_returned_items()
 		
@@ -124,7 +128,7 @@
 					elif abs(d.qty) > max_return_qty:
 						frappe.throw(_("Row # {0}: Cannot return more than {1} for Item {2}")
 							.format(d.idx, ref.qty, d.item_code), StockOverReturnError)
-					elif flt(d.rate) != ref.rate:
+					elif ref.rate and flt(d.rate) != ref.rate:
 						frappe.throw(_("Row # {0}: Rate must be same as {1} {2}")
 							.format(d.idx, self.doctype, self.return_against))
 					
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index cd501da..d0fff0b 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -257,7 +257,7 @@
 					
 				sl_entries.append(self.get_sl_entries(d, {
 					"actual_qty": -1*flt(d['qty']),
-					incoming_rate: incoming_rate
+					"incoming_rate": incoming_rate
 				}))
 
 		self.make_sl_entries(sl_entries)
diff --git a/erpnext/stock/doctype/delivery_note/test_delivery_note.py b/erpnext/stock/doctype/delivery_note/test_delivery_note.py
index 978e968..6f2196a 100644
--- a/erpnext/stock/doctype/delivery_note/test_delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/test_delivery_note.py
@@ -13,8 +13,10 @@
 from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt \
 	import get_gl_entries, set_perpetual_inventory
 from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_invoice
-from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry, make_serialized_item
+from erpnext.stock.doctype.stock_entry.test_stock_entry \
+	import make_stock_entry, make_serialized_item, get_qty_after_transaction
 from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos, SerialNoStatusError
+from erpnext.stock.doctype.stock_reconciliation.test_stock_reconciliation import create_stock_reconciliation
 
 class TestDeliveryNote(unittest.TestCase):
 	def test_over_billing_against_dn(self):
@@ -177,7 +179,113 @@
 	def check_serial_no_values(self, serial_no, field_values):
 		for field, value in field_values.items():
 			self.assertEquals(cstr(frappe.db.get_value("Serial No", serial_no, field)), value)
+			
+	def test_sales_return_for_non_bundled_items(self):
+		set_perpetual_inventory()
+		
+		make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=50, incoming_rate=100)
+		
+		actual_qty_0 = get_qty_after_transaction()
+		
+		dn = create_delivery_note(qty=5, rate=500)
 
+		actual_qty_1 = get_qty_after_transaction()
+		self.assertEquals(actual_qty_0 - 5, actual_qty_1)
+		
+		# outgoing_rate
+		outgoing_rate = frappe.db.get_value("Stock Ledger Entry", {"voucher_type": "Delivery Note", 
+			"voucher_no": dn.name}, "stock_value_difference") / 5
+		
+		# return entry
+		dn1 = create_delivery_note(is_return=1, return_against=dn.name, qty=-2, rate=500)
+
+		actual_qty_2 = get_qty_after_transaction()
+			
+		self.assertEquals(actual_qty_1 + 2, actual_qty_2)
+		
+		incoming_rate, stock_value_difference = frappe.db.get_value("Stock Ledger Entry", 
+			{"voucher_type": "Delivery Note", "voucher_no": dn1.name}, 
+			["incoming_rate", "stock_value_difference"])
+			
+		self.assertEquals(flt(incoming_rate, 3), abs(flt(outgoing_rate, 3)))
+		
+		gle_warehouse_amount = frappe.db.get_value("GL Entry", {"voucher_type": "Delivery Note", 
+			"voucher_no": dn1.name, "account": "_Test Warehouse - _TC"}, "debit")
+			
+		self.assertEquals(gle_warehouse_amount, stock_value_difference)
+		
+		set_perpetual_inventory(0)
+		
+	def test_return_single_item_from_bundled_items(self):
+		set_perpetual_inventory()
+		
+		create_stock_reconciliation(item_code="_Test Item", target="_Test Warehouse - _TC", qty=50, rate=100)
+		create_stock_reconciliation(item_code="_Test Item Home Desktop 100", target="_Test Warehouse - _TC", 
+			qty=50, rate=100)
+				
+		dn = create_delivery_note(item_code="_Test Product Bundle Item", qty=5, rate=500)
+
+		# Qty after delivery
+		actual_qty_1 = get_qty_after_transaction()
+		self.assertEquals(actual_qty_1,  25)
+		
+		# outgoing_rate
+		outgoing_rate = frappe.db.get_value("Stock Ledger Entry", {"voucher_type": "Delivery Note", 
+			"voucher_no": dn.name, "item_code": "_Test Item"}, "stock_value_difference") / 25
+		
+		# return 'test item' from packed items
+		dn1 = create_delivery_note(is_return=1, return_against=dn.name, qty=-10, rate=500)
+
+		# qty after return
+		actual_qty_2 = get_qty_after_transaction()
+		self.assertEquals(actual_qty_2, 35)
+		
+		# Check incoming rate for return entry
+		incoming_rate, stock_value_difference = frappe.db.get_value("Stock Ledger Entry", 
+			{"voucher_type": "Delivery Note", "voucher_no": dn1.name}, 
+			["incoming_rate", "stock_value_difference"])
+			
+		self.assertEquals(flt(incoming_rate, 3), abs(flt(outgoing_rate, 3)))
+		
+		# Check gl entry for warehouse
+		gle_warehouse_amount = frappe.db.get_value("GL Entry", {"voucher_type": "Delivery Note", 
+			"voucher_no": dn1.name, "account": "_Test Warehouse - _TC"}, "debit")
+			
+		self.assertEquals(gle_warehouse_amount, stock_value_difference)
+		
+		set_perpetual_inventory(0)
+		
+	def test_return_entire_bundled_items(self):
+		set_perpetual_inventory()
+		
+		create_stock_reconciliation(item_code="_Test Item", target="_Test Warehouse - _TC", qty=50, rate=100)
+		create_stock_reconciliation(item_code="_Test Item Home Desktop 100", target="_Test Warehouse - _TC", 
+			qty=50, rate=100)
+		
+		dn = create_delivery_note(item_code="_Test Product Bundle Item", qty=5, rate=500)
+		
+		#  return bundled item
+		dn1 = create_delivery_note(item_code='_Test Product Bundle Item', is_return=1, 
+			return_against=dn.name, qty=-2, rate=500)
+
+		# qty after return
+		actual_qty = get_qty_after_transaction()
+		self.assertEquals(actual_qty, 35)
+		
+		# Check incoming rate for return entry
+		incoming_rate, stock_value_difference = frappe.db.get_value("Stock Ledger Entry",
+			{"voucher_type": "Delivery Note", "voucher_no": dn1.name},
+			["incoming_rate", "stock_value_difference"])
+
+		self.assertEquals(incoming_rate, 100)
+
+		# Check gl entry for warehouse
+		gle_warehouse_amount = frappe.db.get_value("GL Entry", {"voucher_type": "Delivery Note",
+			"voucher_no": dn1.name, "account": "_Test Warehouse - _TC"}, "debit")
+			
+		self.assertEquals(gle_warehouse_amount, 1400)
+		
+		set_perpetual_inventory(0)
 
 def create_delivery_note(**args):
 	dn = frappe.new_doc("Delivery Note")
@@ -190,6 +298,8 @@
 	dn.company = args.company or "_Test Company"
 	dn.customer = args.customer or "_Test Customer"
 	dn.currency = args.currency or "INR"
+	dn.is_return = args.is_return
+	dn.return_against = args.return_against
 
 	dn.append("items", {
 		"item_code": args.item or args.item_code or "_Test Item",
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 58a1331..b290a07 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -13,7 +13,6 @@
 from erpnext.manufacturing.doctype.bom.bom import validate_bom_no
 from erpnext.accounts.utils import validate_fiscal_year
 
-class NotUpdateStockError(frappe.ValidationError): pass
 class IncorrectValuationRateError(frappe.ValidationError): pass
 class DuplicateEntryForProductionOrderError(frappe.ValidationError): pass
 class OperationsNotCompleteError(frappe.ValidationError): pass
diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
index 95196cc..d283c3d 100644
--- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
@@ -4,15 +4,12 @@
 from __future__ import unicode_literals
 import frappe, unittest
 import frappe.defaults
-from frappe.utils import flt, nowdate, nowtime, getdate
+from frappe.utils import flt, nowdate, nowtime
 from erpnext.stock.doctype.serial_no.serial_no import *
 from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt \
-	import set_perpetual_inventory, make_purchase_receipt
+	import set_perpetual_inventory
 from erpnext.stock.doctype.stock_ledger_entry.stock_ledger_entry import StockFreezeError
-from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice
 from erpnext.stock.stock_ledger import get_previous_sle
-from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order, create_dn_against_so
-from erpnext.stock.doctype.stock_entry.stock_entry import NotUpdateStockError
 from erpnext.stock.doctype.stock_reconciliation.test_stock_reconciliation import create_stock_reconciliation
 
 def get_sle(**args):
@@ -303,263 +300,6 @@
 			self.assertEquals(expected_gl_entries[i][1], gle[1])
 			self.assertEquals(expected_gl_entries[i][2], gle[2])
 
-	# def _test_sales_invoice_return(self, item_code, delivered_qty, returned_qty):
-	# 	from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
-	#
-	# 	si = create_sales_invoice(item_code=item_code, qty=delivered_qty)
-	#
-	# 	se = make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=returned_qty,
-	# 		purpose="Sales Return", sales_invoice_no=si.name, do_not_save=True)
-	# 	self.assertRaises(NotUpdateStockError, se.insert)
-	#
-	# 	make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=200, incoming_rate=100)
-	#
-	# 	# check currency available qty in bin
-	# 	actual_qty_0 = get_qty_after_transaction()
-	#
-	# 	# insert a pos invoice with update stock
-	# 	si = create_sales_invoice(update_stock=1, item_code=item_code, qty=5)
-	#
-	# 	# check available bin qty after invoice submission
-	# 	actual_qty_1 = get_qty_after_transaction()
-	#
-	# 	self.assertEquals(actual_qty_0 - delivered_qty, actual_qty_1)
-	#
-	# 	# check if item is validated
-	# 	se = make_stock_entry(item_code="_Test Item Home Desktop 200", target="_Test Warehouse - _TC",
-	# 		qty=returned_qty, purpose="Sales Return", sales_invoice_no=si.name, do_not_save=True)
-	#
-	# 	self.assertRaises(frappe.DoesNotExistError, se.insert)
-	#
-	# 	# try again
-	# 	se = make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC",
-	# 		qty=returned_qty, purpose="Sales Return", sales_invoice_no=si.name)
-	#
-	# 	# check if available qty is increased
-	# 	actual_qty_2 = get_qty_after_transaction()
-	#
-	# 	self.assertEquals(actual_qty_1 + returned_qty, actual_qty_2)
-	#
-	# 	return se
-	#
-	# def test_sales_invoice_return_of_non_packing_item(self):
-	# 	self._test_sales_invoice_return("_Test Item", 5, 2)
-	#
-	# def test_sales_invoice_return_of_packing_item(self):
-	# 	self._test_sales_invoice_return("_Test Product Bundle Item", 25, 20)
-	#
-	# def _test_delivery_note_return(self, item_code, delivered_qty, returned_qty):
-	# 	from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note
-	#
-	# 	from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_invoice
-	#
-	# 	make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=50, incoming_rate=100)
-	#
-	# 	actual_qty_0 = get_qty_after_transaction()
-	# 	# make a delivery note based on this invoice
-	# 	dn = create_delivery_note(item_code="_Test Item",
-	# 		warehouse="_Test Warehouse - _TC", qty=delivered_qty)
-	#
-	# 	actual_qty_1 = get_qty_after_transaction()
-	#
-	# 	self.assertEquals(actual_qty_0 - delivered_qty, actual_qty_1)
-	#
-	# 	si = make_sales_invoice(dn.name)
-	# 	si.insert()
-	# 	si.submit()
-	#
-	# 	# insert and submit stock entry for sales return
-	# 	se = make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC",
-	# 		qty=returned_qty, purpose="Sales Return", delivery_note_no=dn.name)
-	#
-	# 	actual_qty_2 = get_qty_after_transaction()
-	# 	self.assertEquals(actual_qty_1 + returned_qty, actual_qty_2)
-	#
-	# 	return se
-	#
-	# def test_delivery_note_return_of_non_packing_item(self):
-	# 	self._test_delivery_note_return("_Test Item", 5, 2)
-	#
-	# def test_delivery_note_return_of_packing_item(self):
-	# 	self._test_delivery_note_return("_Test Product Bundle Item", 25, 20)
-	#
-	# def _test_sales_return_jv(self, se):
-	# 	jv = make_return_jv(se.name)
-	#
-	# 	self.assertEqual(len(jv.get("accounts")), 2)
-	# 	self.assertEqual(jv.get("voucher_type"), "Credit Note")
-	# 	self.assertEqual(jv.get("posting_date"), getdate(se.posting_date))
-	# 	self.assertEqual(jv.get("accounts")[0].get("account"), "Debtors - _TC")
-	# 	self.assertEqual(jv.get("accounts")[0].get("party_type"), "Customer")
-	# 	self.assertEqual(jv.get("accounts")[0].get("party"), "_Test Customer")
-	# 	self.assertEqual(jv.get("accounts")[1].get("account"), "Sales - _TC")
-	#
-	# def test_make_return_jv_for_sales_invoice_non_packing_item(self):
-	# 	se = self._test_sales_invoice_return("_Test Item", 5, 2)
-	# 	self._test_sales_return_jv(se)
-	#
-	# def test_make_return_jv_for_sales_invoice_packing_item(self):
-	# 	se = self._test_sales_invoice_return("_Test Product Bundle Item", 25, 20)
-	# 	self._test_sales_return_jv(se)
-	#
-	# def test_make_return_jv_for_delivery_note_non_packing_item(self):
-	# 	se = self._test_delivery_note_return("_Test Item", 5, 2)
-	# 	self._test_sales_return_jv(se)
-	#
-	# 	se = self._test_delivery_note_return_against_sales_order("_Test Item", 5, 2)
-	# 	self._test_sales_return_jv(se)
-	#
-	# def test_make_return_jv_for_delivery_note_packing_item(self):
-	# 	se = self._test_delivery_note_return("_Test Product Bundle Item", 25, 20)
-	# 	self._test_sales_return_jv(se)
-	#
-	# 	se = self._test_delivery_note_return_against_sales_order("_Test Product Bundle Item", 25, 20)
-	# 	self._test_sales_return_jv(se)
-	#
-	# def _test_delivery_note_return_against_sales_order(self, item_code, delivered_qty, returned_qty):
-	# 	from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice
-	#
-	# 	actual_qty_0 = get_qty_after_transaction()
-	#
-	# 	so = make_sales_order(qty=50)
-	#
-	# 	dn = create_dn_against_so(so.name, delivered_qty)
-	#
-	# 	actual_qty_1 = get_qty_after_transaction()
-	# 	self.assertEquals(actual_qty_0 - delivered_qty, actual_qty_1)
-	#
-	# 	si = make_sales_invoice(so.name)
-	# 	si.insert()
-	# 	si.submit()
-	#
-	# 	# insert and submit stock entry for sales return
-	# 	se = make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC",
-	# 		qty=returned_qty, purpose="Sales Return", delivery_note_no=dn.name)
-	#
-	# 	actual_qty_2 = get_qty_after_transaction()
-	# 	self.assertEquals(actual_qty_1 + returned_qty, actual_qty_2)
-	#
-	# 	return se
-	#
-	# def test_purchase_receipt_return(self):
-	# 	actual_qty_0 = get_qty_after_transaction()
-	#
-	# 	# submit purchase receipt
-	# 	pr = make_purchase_receipt(item_code="_Test Item", warehouse="_Test Warehouse - _TC", qty=5)
-	#
-	# 	actual_qty_1 = get_qty_after_transaction()
-	#
-	# 	self.assertEquals(actual_qty_0 + 5, actual_qty_1)
-	#
-	# 	pi_doc = make_purchase_invoice(pr.name)
-	#
-	# 	pi = frappe.get_doc(pi_doc)
-	# 	pi.posting_date = pr.posting_date
-	# 	pi.credit_to = "_Test Payable - _TC"
-	# 	for d in pi.get("items"):
-	# 		d.expense_account = "_Test Account Cost for Goods Sold - _TC"
-	# 		d.cost_center = "_Test Cost Center - _TC"
-	#
-	# 	for d in pi.get("taxes"):
-	# 		d.cost_center = "_Test Cost Center - _TC"
-	#
-	# 	pi.insert()
-	# 	pi.submit()
-	#
-	# 	# submit purchase return
-	# 	se = make_stock_entry(item_code="_Test Item", source="_Test Warehouse - _TC",
-	# 		qty=5, purpose="Purchase Return", purchase_receipt_no=pr.name)
-	#
-	# 	actual_qty_2 = get_qty_after_transaction()
-	#
-	# 	self.assertEquals(actual_qty_1 - 5, actual_qty_2)
-	#
-	# 	return se, pr.name
-	#
-	# def test_over_stock_return(self):
-	# 	from erpnext.stock.doctype.stock_entry.stock_entry import StockOverReturnError
-	#
-	# 	# out of 10, 5 gets returned
-	# 	prev_se, pr_docname = self.test_purchase_receipt_return()
-	#
-	# 	se = make_stock_entry(item_code="_Test Item", source="_Test Warehouse - _TC",
-	# 		qty=6, purpose="Purchase Return", purchase_receipt_no=pr_docname, do_not_save=True)
-	#
-	# 	self.assertRaises(StockOverReturnError, se.insert)
-	#
-	# def _test_purchase_return_jv(self, se):
-	# 	jv = make_return_jv(se.name)
-	#
-	# 	self.assertEqual(len(jv.get("accounts")), 2)
-	# 	self.assertEqual(jv.get("voucher_type"), "Debit Note")
-	# 	self.assertEqual(jv.get("posting_date"), getdate(se.posting_date))
-	# 	self.assertEqual(jv.get("accounts")[0].get("account"), "_Test Payable - _TC")
-	# 	self.assertEqual(jv.get("accounts")[0].get("party"), "_Test Supplier")
-	# 	self.assertEqual(jv.get("accounts")[1].get("account"), "_Test Account Cost for Goods Sold - _TC")
-	#
-	# def test_make_return_jv_for_purchase_receipt(self):
-	# 	se, pr_name = self.test_purchase_receipt_return()
-	# 	self._test_purchase_return_jv(se)
-	#
-	# 	se, pr_name = self._test_purchase_return_return_against_purchase_order()
-	# 	self._test_purchase_return_jv(se)
-	#
-	# def _test_purchase_return_return_against_purchase_order(self):
-	#
-	# 	actual_qty_0 = get_qty_after_transaction()
-	#
-	# 	from erpnext.buying.doctype.purchase_order.test_purchase_order \
-	# 		import test_records as purchase_order_test_records
-	#
-	# 	from erpnext.buying.doctype.purchase_order.purchase_order import \
-	# 		make_purchase_receipt, make_purchase_invoice
-	#
-	# 	# submit purchase receipt
-	# 	po = frappe.copy_doc(purchase_order_test_records[0])
-	# 	po.transaction_date = nowdate()
-	# 	po.is_subcontracted = None
-	# 	po.get("items")[0].item_code = "_Test Item"
-	# 	po.get("items")[0].rate = 50
-	# 	po.insert()
-	# 	po.submit()
-	#
-	# 	pr_doc = make_purchase_receipt(po.name)
-	#
-	# 	pr = frappe.get_doc(pr_doc)
-	# 	pr.posting_date = po.transaction_date
-	# 	pr.insert()
-	# 	pr.submit()
-	#
-	# 	actual_qty_1 = get_qty_after_transaction()
-	#
-	# 	self.assertEquals(actual_qty_0 + 10, actual_qty_1)
-	#
-	# 	pi_doc = make_purchase_invoice(po.name)
-	#
-	# 	pi = frappe.get_doc(pi_doc)
-	# 	pi.posting_date = pr.posting_date
-	# 	pi.credit_to = "_Test Payable - _TC"
-	# 	for d in pi.get("items"):
-	# 		d.expense_account = "_Test Account Cost for Goods Sold - _TC"
-	# 		d.cost_center = "_Test Cost Center - _TC"
-	# 	for d in pi.get("taxes"):
-	# 		d.cost_center = "_Test Cost Center - _TC"
-	#
-	# 	pi.run_method("calculate_taxes_and_totals")
-	# 	pi.bill_no = "NA"
-	# 	pi.insert()
-	# 	pi.submit()
-	#
-	# 	# submit purchase return
-	# 	se = make_stock_entry(item_code="_Test Item", source="_Test Warehouse - _TC",
-	# 		qty=5, purpose="Purchase Return", purchase_receipt_no=pr.name)
-	#
-	# 	actual_qty_2 = get_qty_after_transaction()
-	#
-	# 	self.assertEquals(actual_qty_1 - 5, actual_qty_2)
-	#
-	# 	return se, pr.name
-
 	def test_serial_no_not_reqd(self):
 		se = frappe.copy_doc(test_records[0])
 		se.get("items")[0].serial_no = "ABCD"
