diff --git a/stock/doctype/stock_entry/test_stock_entry.py b/stock/doctype/stock_entry/test_stock_entry.py
index d6f34f6..b88f1c9 100644
--- a/stock/doctype/stock_entry/test_stock_entry.py
+++ b/stock/doctype/stock_entry/test_stock_entry.py
@@ -6,7 +6,7 @@
 from webnotes.utils import flt
 from stock.doctype.serial_no.serial_no import *
 from stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
-
+from stock.doctype.stock_ledger_entry.stock_ledger_entry import StockFreezeError
 
 class TestStockEntry(unittest.TestCase):
 	def tearDown(self):
@@ -18,7 +18,7 @@
 		webnotes.conn.sql("""delete from `tabMaterial Request Item`""")
 		webnotes.conn.sql("""delete from `tabMaterial Request`""")
 		self._clear_stock_account_balance()
-		
+
 		webnotes.conn.set_value("Stock Settings", None, "auto_indent", True)
 
 		st1 = webnotes.bean(copy=test_records[0])
@@ -28,15 +28,15 @@
 		st2 = webnotes.bean(copy=test_records[1])
 		st2.insert()
 		st2.submit()
-		
+
 		from stock.utils import reorder_item
 		reorder_item()
-		
+
 		mr_name = webnotes.conn.sql("""select parent from `tabMaterial Request Item`
 			where item_code='_Test Item'""")
-			
+
 		self.assertTrue(mr_name)
-		
+
 		webnotes.conn.set_default("company", self.old_default_company)
 
 	def test_warehouse_company_validation(self):
@@ -51,7 +51,7 @@
 		st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1"
 		st1.insert()
 		self.assertRaises(InvalidWarehouseCompany, st1.submit)
-		
+
 		webnotes.session.user = "Administrator"
 
 	def test_warehouse_user(self):
@@ -76,111 +76,111 @@
 		st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1"
 		st1.insert()
 		st1.submit()
-		
+
 		webnotes.session.user = "Administrator"
 
 	def test_material_receipt_gl_entry(self):
 		self._clear_stock_account_balance()
 		set_perpetual_inventory()
-		
+
 		mr = webnotes.bean(copy=test_records[0])
 		mr.insert()
 		mr.submit()
-		
-		stock_in_hand_account = webnotes.conn.get_value("Account", {"account_type": "Warehouse", 
+
+		stock_in_hand_account = webnotes.conn.get_value("Account", {"account_type": "Warehouse",
 			"master_name": mr.doclist[1].t_warehouse})
-		
-		self.check_stock_ledger_entries("Stock Entry", mr.doc.name, 
+
+		self.check_stock_ledger_entries("Stock Entry", mr.doc.name,
 			[["_Test Item", "_Test Warehouse - _TC", 50.0]])
-			
-		self.check_gl_entries("Stock Entry", mr.doc.name, 
+
+		self.check_gl_entries("Stock Entry", mr.doc.name,
 			sorted([
-				[stock_in_hand_account, 5000.0, 0.0], 
+				[stock_in_hand_account, 5000.0, 0.0],
 				["Stock Adjustment - _TC", 0.0, 5000.0]
 			])
 		)
-		
+
 		mr.cancel()
-		
-		self.assertFalse(webnotes.conn.sql("""select * from `tabStock Ledger Entry` 
-			where voucher_type='Stock Entry' and voucher_no=%s""", mr.doc.name))			
-		
-		self.assertFalse(webnotes.conn.sql("""select * from `tabGL Entry` 
+
+		self.assertFalse(webnotes.conn.sql("""select * from `tabStock Ledger Entry`
 			where voucher_type='Stock Entry' and voucher_no=%s""", mr.doc.name))
-		
+
+		self.assertFalse(webnotes.conn.sql("""select * from `tabGL Entry`
+			where voucher_type='Stock Entry' and voucher_no=%s""", mr.doc.name))
+
 
 	def test_material_issue_gl_entry(self):
 		self._clear_stock_account_balance()
 		set_perpetual_inventory()
-		
+
 		self._insert_material_receipt()
-		
+
 		mi = webnotes.bean(copy=test_records[1])
 		mi.insert()
 		mi.submit()
-		
-		self.check_stock_ledger_entries("Stock Entry", mi.doc.name, 
+
+		self.check_stock_ledger_entries("Stock Entry", mi.doc.name,
 			[["_Test Item", "_Test Warehouse - _TC", -40.0]])
-		
-		stock_in_hand_account = webnotes.conn.get_value("Account", {"account_type": "Warehouse", 
+
+		stock_in_hand_account = webnotes.conn.get_value("Account", {"account_type": "Warehouse",
 			"master_name": mi.doclist[1].s_warehouse})
 
-		self.check_gl_entries("Stock Entry", mi.doc.name, 
+		self.check_gl_entries("Stock Entry", mi.doc.name,
 			sorted([
-				[stock_in_hand_account, 0.0, 4000.0], 
+				[stock_in_hand_account, 0.0, 4000.0],
 				["Stock Adjustment - _TC", 4000.0, 0.0]
 			])
 		)
-		
+
 		mi.cancel()
-		self.assertFalse(webnotes.conn.sql("""select * from `tabStock Ledger Entry` 
-			where voucher_type='Stock Entry' and voucher_no=%s""", mi.doc.name))			
-		
-		self.assertFalse(webnotes.conn.sql("""select * from `tabGL Entry` 
+		self.assertFalse(webnotes.conn.sql("""select * from `tabStock Ledger Entry`
 			where voucher_type='Stock Entry' and voucher_no=%s""", mi.doc.name))
-			
-		self.assertEquals(webnotes.conn.get_value("Bin", {"warehouse": mi.doclist[1].s_warehouse, 
+
+		self.assertFalse(webnotes.conn.sql("""select * from `tabGL Entry`
+			where voucher_type='Stock Entry' and voucher_no=%s""", mi.doc.name))
+
+		self.assertEquals(webnotes.conn.get_value("Bin", {"warehouse": mi.doclist[1].s_warehouse,
 			"item_code": mi.doclist[1].item_code}, "actual_qty"), 50)
-			
-		self.assertEquals(webnotes.conn.get_value("Bin", {"warehouse": mi.doclist[1].s_warehouse, 
+
+		self.assertEquals(webnotes.conn.get_value("Bin", {"warehouse": mi.doclist[1].s_warehouse,
 			"item_code": mi.doclist[1].item_code}, "stock_value"), 5000)
-		
+
 	def test_material_transfer_gl_entry(self):
 		self._clear_stock_account_balance()
 		set_perpetual_inventory()
 
 		self._insert_material_receipt()
-		
+
 		mtn = webnotes.bean(copy=test_records[2])
 		mtn.insert()
 		mtn.submit()
 
-		self.check_stock_ledger_entries("Stock Entry", mtn.doc.name, 
+		self.check_stock_ledger_entries("Stock Entry", mtn.doc.name,
 			[["_Test Item", "_Test Warehouse - _TC", -45.0], ["_Test Item", "_Test Warehouse 1 - _TC", 45.0]])
 
-		stock_in_hand_account = webnotes.conn.get_value("Account", {"account_type": "Warehouse", 
+		stock_in_hand_account = webnotes.conn.get_value("Account", {"account_type": "Warehouse",
 			"master_name": mtn.doclist[1].s_warehouse})
 
-		fixed_asset_account = webnotes.conn.get_value("Account", {"account_type": "Warehouse", 
+		fixed_asset_account = webnotes.conn.get_value("Account", {"account_type": "Warehouse",
 			"master_name": mtn.doclist[1].t_warehouse})
 
-			
-		self.check_gl_entries("Stock Entry", mtn.doc.name, 
+
+		self.check_gl_entries("Stock Entry", mtn.doc.name,
 			sorted([
-				[stock_in_hand_account, 0.0, 4500.0], 
+				[stock_in_hand_account, 0.0, 4500.0],
 				[fixed_asset_account, 4500.0, 0.0],
 			])
 		)
 
-		
+
 		mtn.cancel()
-		self.assertFalse(webnotes.conn.sql("""select * from `tabStock Ledger Entry` 
-			where voucher_type='Stock Entry' and voucher_no=%s""", mtn.doc.name))			
-		
-		self.assertFalse(webnotes.conn.sql("""select * from `tabGL Entry` 
+		self.assertFalse(webnotes.conn.sql("""select * from `tabStock Ledger Entry`
 			where voucher_type='Stock Entry' and voucher_no=%s""", mtn.doc.name))
-		
-				
+
+		self.assertFalse(webnotes.conn.sql("""select * from `tabGL Entry`
+			where voucher_type='Stock Entry' and voucher_no=%s""", mtn.doc.name))
+
+
 	def test_repack_no_change_in_valuation(self):
 		self._clear_stock_account_balance()
 		set_perpetual_inventory()
@@ -190,47 +190,47 @@
 		repack = webnotes.bean(copy=test_records[3])
 		repack.insert()
 		repack.submit()
-		
-		self.check_stock_ledger_entries("Stock Entry", repack.doc.name, 
-			[["_Test Item", "_Test Warehouse - _TC", -50.0], 
+
+		self.check_stock_ledger_entries("Stock Entry", repack.doc.name,
+			[["_Test Item", "_Test Warehouse - _TC", -50.0],
 				["_Test Item Home Desktop 100", "_Test Warehouse - _TC", 1]])
-				
+
 		gl_entries = webnotes.conn.sql("""select account, debit, credit
 			from `tabGL Entry` where voucher_type='Stock Entry' and voucher_no=%s
 			order by account desc""", repack.doc.name, as_dict=1)
 		self.assertFalse(gl_entries)
-		
+
 		set_perpetual_inventory(0)
-		
+
 	def test_repack_with_change_in_valuation(self):
 		self._clear_stock_account_balance()
 		set_perpetual_inventory()
 
 		self._insert_material_receipt()
-		
+
 		repack = webnotes.bean(copy=test_records[3])
 		repack.doclist[2].incoming_rate = 6000
 		repack.insert()
 		repack.submit()
-		
-		stock_in_hand_account = webnotes.conn.get_value("Account", {"account_type": "Warehouse", 
+
+		stock_in_hand_account = webnotes.conn.get_value("Account", {"account_type": "Warehouse",
 			"master_name": repack.doclist[2].t_warehouse})
-			
-		self.check_gl_entries("Stock Entry", repack.doc.name, 
+
+		self.check_gl_entries("Stock Entry", repack.doc.name,
 			sorted([
-				[stock_in_hand_account, 1000.0, 0.0], 
+				[stock_in_hand_account, 1000.0, 0.0],
 				["Stock Adjustment - _TC", 0.0, 1000.0],
 			])
 		)
 		set_perpetual_inventory(0)
-			
+
 	def check_stock_ledger_entries(self, voucher_type, voucher_no, expected_sle):
 		expected_sle.sort(key=lambda x: x[0])
-		
+
 		# check stock ledger entries
-		sle = webnotes.conn.sql("""select item_code, warehouse, actual_qty 
-			from `tabStock Ledger Entry` where voucher_type = %s 
-			and voucher_no = %s order by item_code, warehouse, actual_qty""", 
+		sle = webnotes.conn.sql("""select item_code, warehouse, actual_qty
+			from `tabStock Ledger Entry` where voucher_type = %s
+			and voucher_no = %s order by item_code, warehouse, actual_qty""",
 			(voucher_type, voucher_no), as_list=1)
 		self.assertTrue(sle)
 		sle.sort(key=lambda x: x[0])
@@ -239,61 +239,61 @@
 			self.assertEquals(expected_sle[i][0], sle[0])
 			self.assertEquals(expected_sle[i][1], sle[1])
 			self.assertEquals(expected_sle[i][2], sle[2])
-		
+
 	def check_gl_entries(self, voucher_type, voucher_no, expected_gl_entries):
 		expected_gl_entries.sort(key=lambda x: x[0])
-		
+
 		gl_entries = webnotes.conn.sql("""select account, debit, credit
-			from `tabGL Entry` where voucher_type=%s and voucher_no=%s 
+			from `tabGL Entry` where voucher_type=%s and voucher_no=%s
 			order by account asc, debit asc""", (voucher_type, voucher_no), as_list=1)
 		self.assertTrue(gl_entries)
 		gl_entries.sort(key=lambda x: x[0])
-		
+
 		for i, gle in enumerate(gl_entries):
 			self.assertEquals(expected_gl_entries[i][0], gle[0])
 			self.assertEquals(expected_gl_entries[i][1], gle[1])
 			self.assertEquals(expected_gl_entries[i][2], gle[2])
-		
+
 	def _insert_material_receipt(self):
 		self._clear_stock_account_balance()
 		se1 = webnotes.bean(copy=test_records[0])
 		se1.insert()
 		se1.submit()
-		
+
 		se2 = webnotes.bean(copy=test_records[0])
 		se2.doclist[1].item_code = "_Test Item Home Desktop 100"
 		se2.insert()
 		se2.submit()
-		
+
 		webnotes.conn.set_default("company", self.old_default_company)
-		
+
 	def _get_actual_qty(self):
-		return flt(webnotes.conn.get_value("Bin", {"item_code": "_Test Item", 
+		return flt(webnotes.conn.get_value("Bin", {"item_code": "_Test Item",
 			"warehouse": "_Test Warehouse - _TC"}, "actual_qty"))
-			
+
 	def _test_sales_invoice_return(self, item_code, delivered_qty, returned_qty):
 		from stock.doctype.stock_entry.stock_entry import NotUpdateStockError
-		
+
 		from accounts.doctype.sales_invoice.test_sales_invoice \
 			import test_records as sales_invoice_test_records
-		
+
 		# invalid sales invoice as update stock not checked
 		si = webnotes.bean(copy=sales_invoice_test_records[1])
 		si.insert()
 		si.submit()
-		
+
 		se = webnotes.bean(copy=test_records[0])
 		se.doc.purpose = "Sales Return"
 		se.doc.sales_invoice_no = si.doc.name
 		se.doclist[1].qty = returned_qty
 		se.doclist[1].transfer_qty = returned_qty
 		self.assertRaises(NotUpdateStockError, se.insert)
-		
+
 		self._insert_material_receipt()
-		
+
 		# check currency available qty in bin
 		actual_qty_0 = self._get_actual_qty()
-		
+
 		# insert a pos invoice with update stock
 		si = webnotes.bean(copy=sales_invoice_test_records[1])
 		si.doc.is_pos = si.doc.update_stock = 1
@@ -302,12 +302,12 @@
 		si.doclist[1].qty = 5.0
 		si.insert()
 		si.submit()
-		
+
 		# check available bin qty after invoice submission
 		actual_qty_1 = self._get_actual_qty()
-		
+
 		self.assertEquals(actual_qty_0 - delivered_qty, actual_qty_1)
-		
+
 		# check if item is validated
 		se = webnotes.bean(copy=test_records[0])
 		se.doc.purpose = "Sales Return"
@@ -317,10 +317,10 @@
 		se.doclist[1].item_code = "_Test Item Home Desktop 200"
 		se.doclist[1].qty = returned_qty
 		se.doclist[1].transfer_qty = returned_qty
-		
+
 		# check if stock entry gets submitted
 		self.assertRaises(webnotes.DoesNotExistError, se.insert)
-		
+
 		# try again
 		se = webnotes.bean(copy=test_records[0])
 		se.doc.purpose = "Sales Return"
@@ -331,45 +331,45 @@
 		se.doclist[1].transfer_qty = returned_qty
 		# in both cases item code remains _Test Item when returning
 		se.insert()
-		
+
 		se.submit()
-		
+
 		# check if available qty is increased
 		actual_qty_2 = self._get_actual_qty()
-		
+
 		self.assertEquals(actual_qty_1 + returned_qty, actual_qty_2)
-		
+
 		return se
-	
+
 	def test_sales_invoice_return_of_non_packing_item(self):
 		self._clear_stock_account_balance()
 		self._test_sales_invoice_return("_Test Item", 5, 2)
-			
+
 	def test_sales_invoice_return_of_packing_item(self):
 		self._clear_stock_account_balance()
 		self._test_sales_invoice_return("_Test Sales BOM Item", 25, 20)
-		
+
 	def _test_delivery_note_return(self, item_code, delivered_qty, returned_qty):
 		self._insert_material_receipt()
-		
+
 		from stock.doctype.delivery_note.test_delivery_note \
 			import test_records as delivery_note_test_records
 
 		from stock.doctype.delivery_note.delivery_note import make_sales_invoice
-		
+
 		actual_qty_0 = self._get_actual_qty()
 		# make a delivery note based on this invoice
 		dn = webnotes.bean(copy=delivery_note_test_records[0])
 		dn.doclist[1].item_code = item_code
 		dn.insert()
 		dn.submit()
-		
+
 		actual_qty_1 = self._get_actual_qty()
-		
+
 		self.assertEquals(actual_qty_0 - delivered_qty, actual_qty_1)
-		
+
 		si_doclist = make_sales_invoice(dn.doc.name)
-			
+
 		si = webnotes.bean(si_doclist)
 		si.doc.posting_date = dn.doc.posting_date
 		si.doc.debit_to = "_Test Customer - _TC"
@@ -378,7 +378,7 @@
 			d.cost_center = "_Test Cost Center - _TC"
 		si.insert()
 		si.submit()
-		
+
 		# insert and submit stock entry for sales return
 		se = webnotes.bean(copy=test_records[0])
 		se.doc.purpose = "Sales Return"
@@ -386,60 +386,60 @@
 		se.doc.posting_date = "2013-03-10"
 		se.doc.fiscal_year = "_Test Fiscal Year 2013"
 		se.doclist[1].qty = se.doclist[1].transfer_qty = returned_qty
-		
+
 		se.insert()
 		se.submit()
-		
+
 		actual_qty_2 = self._get_actual_qty()
 		self.assertEquals(actual_qty_1 + returned_qty, actual_qty_2)
-		
+
 		return se
-		
+
 	def test_delivery_note_return_of_non_packing_item(self):
 		self._clear_stock_account_balance()
 		self._test_delivery_note_return("_Test Item", 5, 2)
-		
+
 	def test_delivery_note_return_of_packing_item(self):
 		self._clear_stock_account_balance()
 		self._test_delivery_note_return("_Test Sales BOM Item", 25, 20)
-		
+
 	def _test_sales_return_jv(self, se):
 		from stock.doctype.stock_entry.stock_entry import make_return_jv
 		jv_list = make_return_jv(se.doc.name)
-		
+
 		self.assertEqual(len(jv_list), 3)
 		self.assertEqual(jv_list[0].get("voucher_type"), "Credit Note")
 		self.assertEqual(jv_list[0].get("posting_date"), se.doc.posting_date)
 		self.assertEqual(jv_list[1].get("account"), "_Test Customer - _TC")
 		self.assertEqual(jv_list[2].get("account"), "Sales - _TC")
 		self.assertTrue(jv_list[1].get("against_invoice"))
-		
+
 	def test_make_return_jv_for_sales_invoice_non_packing_item(self):
 		self._clear_stock_account_balance()
 		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):
 		self._clear_stock_account_balance()
 		se = self._test_sales_invoice_return("_Test Sales BOM Item", 25, 20)
 		self._test_sales_return_jv(se)
-		
+
 	def test_make_return_jv_for_delivery_note_non_packing_item(self):
 		self._clear_stock_account_balance()
 		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):
 		self._clear_stock_account_balance()
 		se = self._test_delivery_note_return("_Test Sales BOM Item", 25, 20)
 		self._test_sales_return_jv(se)
-		
+
 		se = self._test_delivery_note_return_against_sales_order("_Test Sales BOM Item", 25, 20)
 		self._test_sales_return_jv(se)
-		
+
 	def _test_delivery_note_return_against_sales_order(self, item_code, delivered_qty, returned_qty):
 		self._insert_material_receipt()
 
@@ -447,13 +447,13 @@
 		from selling.doctype.sales_order.sales_order import make_sales_invoice, make_delivery_note
 
 		actual_qty_0 = self._get_actual_qty()
-		
+
 		so = webnotes.bean(copy=sales_order_test_records[0])
 		so.doclist[1].item_code = item_code
 		so.doclist[1].qty = 5.0
 		so.insert()
 		so.submit()
-		
+
 		dn_doclist = make_delivery_note(so.doc.name)
 
 		dn = webnotes.bean(dn_doclist)
@@ -461,7 +461,7 @@
 		dn.doc.posting_date = so.doc.delivery_date
 		dn.insert()
 		dn.submit()
-		
+
 		actual_qty_1 = self._get_actual_qty()
 
 		self.assertEquals(actual_qty_0 - delivered_qty, actual_qty_1)
@@ -492,43 +492,43 @@
 		self.assertEquals(actual_qty_1 + returned_qty, actual_qty_2)
 
 		return se
-		
+
 	def test_purchase_receipt_return(self):
 		self._clear_stock_account_balance()
-		
+
 		actual_qty_0 = self._get_actual_qty()
-		
+
 		from stock.doctype.purchase_receipt.test_purchase_receipt \
 			import test_records as purchase_receipt_test_records
 
 		from stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice
-		
+
 		# submit purchase receipt
 		pr = webnotes.bean(copy=purchase_receipt_test_records[0])
 		pr.insert()
 		pr.submit()
-		
+
 		actual_qty_1 = self._get_actual_qty()
-		
+
 		self.assertEquals(actual_qty_0 + 5, actual_qty_1)
-		
+
 		pi_doclist = make_purchase_invoice(pr.doc.name)
-			
+
 		pi = webnotes.bean(pi_doclist)
 		pi.doc.posting_date = pr.doc.posting_date
 		pi.doc.credit_to = "_Test Supplier - _TC"
 		for d in pi.doclist.get({"parentfield": "entries"}):
 			d.expense_head = "_Test Account Cost for Goods Sold - _TC"
 			d.cost_center = "_Test Cost Center - _TC"
-			
+
 		for d in pi.doclist.get({"parentfield": "purchase_tax_details"}):
 			d.cost_center = "_Test Cost Center - _TC"
-		
+
 		pi.run_method("calculate_taxes_and_totals")
 		pi.doc.bill_no = "NA"
 		pi.insert()
 		pi.submit()
-		
+
 		# submit purchase return
 		se = webnotes.bean(copy=test_records[0])
 		se.doc.purpose = "Purchase Return"
@@ -539,22 +539,22 @@
 		se.doclist[1].s_warehouse = "_Test Warehouse - _TC"
 		se.insert()
 		se.submit()
-		
+
 		actual_qty_2 = self._get_actual_qty()
-		
+
 		self.assertEquals(actual_qty_1 - 5, actual_qty_2)
-		
+
 		webnotes.conn.set_default("company", self.old_default_company)
-		
+
 		return se, pr.doc.name
-		
+
 	def test_over_stock_return(self):
 		from stock.doctype.stock_entry.stock_entry import StockOverReturnError
 		self._clear_stock_account_balance()
-		
+
 		# out of 10, 5 gets returned
 		prev_se, pr_docname = self.test_purchase_receipt_return()
-		
+
 		# submit purchase return - return another 6 qtys so that exception is raised
 		se = webnotes.bean(copy=test_records[0])
 		se.doc.purpose = "Purchase Return"
@@ -563,20 +563,20 @@
 		se.doc.fiscal_year = "_Test Fiscal Year 2013"
 		se.doclist[1].qty = se.doclist[1].transfer_qty = 6
 		se.doclist[1].s_warehouse = "_Test Warehouse - _TC"
-		
+
 		self.assertRaises(StockOverReturnError, se.insert)
-		
+
 	def _test_purchase_return_jv(self, se):
 		from stock.doctype.stock_entry.stock_entry import make_return_jv
 		jv_list = make_return_jv(se.doc.name)
-		
+
 		self.assertEqual(len(jv_list), 3)
 		self.assertEqual(jv_list[0].get("voucher_type"), "Debit Note")
 		self.assertEqual(jv_list[0].get("posting_date"), se.doc.posting_date)
 		self.assertEqual(jv_list[1].get("account"), "_Test Supplier - _TC")
 		self.assertEqual(jv_list[2].get("account"), "_Test Account Cost for Goods Sold - _TC")
 		self.assertTrue(jv_list[1].get("against_voucher"))
-		
+
 	def test_make_return_jv_for_purchase_receipt(self):
 		self._clear_stock_account_balance()
 		se, pr_name = self.test_purchase_receipt_return()
@@ -584,18 +584,18 @@
 
 		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):
 		self._clear_stock_account_balance()
-		
+
 		actual_qty_0 = self._get_actual_qty()
-		
+
 		from buying.doctype.purchase_order.test_purchase_order \
 			import test_records as purchase_order_test_records
-		
+
 		from buying.doctype.purchase_order.purchase_order import \
 			make_purchase_receipt, make_purchase_invoice
-		
+
 		# submit purchase receipt
 		po = webnotes.bean(copy=purchase_order_test_records[0])
 		po.doc.is_subcontracted = None
@@ -603,20 +603,20 @@
 		po.doclist[1].import_rate = 50
 		po.insert()
 		po.submit()
-		
+
 		pr_doclist = make_purchase_receipt(po.doc.name)
-		
+
 		pr = webnotes.bean(pr_doclist)
 		pr.doc.posting_date = po.doc.transaction_date
 		pr.insert()
 		pr.submit()
-		
+
 		actual_qty_1 = self._get_actual_qty()
-		
+
 		self.assertEquals(actual_qty_0 + 10, actual_qty_1)
-		
+
 		pi_doclist = make_purchase_invoice(po.doc.name)
-			
+
 		pi = webnotes.bean(pi_doclist)
 		pi.doc.posting_date = pr.doc.posting_date
 		pi.doc.credit_to = "_Test Supplier - _TC"
@@ -625,12 +625,12 @@
 			d.cost_center = "_Test Cost Center - _TC"
 		for d in pi.doclist.get({"parentfield": "purchase_tax_details"}):
 			d.cost_center = "_Test Cost Center - _TC"
-		
+
 		pi.run_method("calculate_taxes_and_totals")
 		pi.doc.bill_no = "NA"
 		pi.insert()
 		pi.submit()
-		
+
 		# submit purchase return
 		se = webnotes.bean(copy=test_records[0])
 		se.doc.purpose = "Purchase Return"
@@ -641,23 +641,23 @@
 		se.doclist[1].s_warehouse = "_Test Warehouse - _TC"
 		se.insert()
 		se.submit()
-		
+
 		actual_qty_2 = self._get_actual_qty()
-		
+
 		self.assertEquals(actual_qty_1 - 5, actual_qty_2)
-		
+
 		webnotes.conn.set_default("company", self.old_default_company)
-		
+
 		return se, pr.doc.name
-		
+
 	def _clear_stock_account_balance(self):
 		webnotes.conn.sql("delete from `tabStock Ledger Entry`")
 		webnotes.conn.sql("""delete from `tabBin`""")
 		webnotes.conn.sql("""delete from `tabGL Entry`""")
-		
+
 		self.old_default_company = webnotes.conn.get_default("company")
 		webnotes.conn.set_default("company", "_Test Company")
-		
+
 	def test_serial_no_not_reqd(self):
 		se = webnotes.bean(copy=test_records[0])
 		se.doclist[1].serial_no = "ABCD"
@@ -689,7 +689,7 @@
 		se.doclist[1].transfer_qty = 2
 		se.insert()
 		self.assertRaises(SerialNoQtyError, se.submit)
-		
+
 	def test_serial_no_transfer_in(self):
 		self._clear_stock_account_balance()
 		se = webnotes.bean(copy=test_records[0])
@@ -699,13 +699,13 @@
 		se.doclist[1].transfer_qty = 2
 		se.insert()
 		se.submit()
-		
+
 		self.assertTrue(webnotes.conn.exists("Serial No", "ABCD"))
 		self.assertTrue(webnotes.conn.exists("Serial No", "EFGH"))
-		
+
 		se.cancel()
 		self.assertFalse(webnotes.conn.get_value("Serial No", "ABCD", "warehouse"))
-		
+
 	def test_serial_no_not_exists(self):
 		self._clear_stock_account_balance()
 		se = webnotes.bean(copy=test_records[0])
@@ -718,11 +718,11 @@
 		se.doclist[1].transfer_qty = 2
 		se.insert()
 		self.assertRaises(SerialNoNotExistsError, se.submit)
-		
+
 	def test_serial_duplicate(self):
 		self._clear_stock_account_balance()
 		self.test_serial_by_series()
-		
+
 		se = webnotes.bean(copy=test_records[0])
 		se.doclist[1].item_code = "_Test Serialized Item With Series"
 		se.doclist[1].qty = 1
@@ -730,22 +730,22 @@
 		se.doclist[1].transfer_qty = 1
 		se.insert()
 		self.assertRaises(SerialNoDuplicateError, se.submit)
-		
+
 	def test_serial_by_series(self):
 		self._clear_stock_account_balance()
 		se = make_serialized_item()
 
 		serial_nos = get_serial_nos(se.doclist[1].serial_no)
-		
+
 		self.assertTrue(webnotes.conn.exists("Serial No", serial_nos[0]))
 		self.assertTrue(webnotes.conn.exists("Serial No", serial_nos[1]))
-		
+
 		return se
 
 	def test_serial_item_error(self):
 		self._clear_stock_account_balance()
 		self.test_serial_by_series()
-		
+
 		se = webnotes.bean(copy=test_records[0])
 		se.doc.purpose = "Material Transfer"
 		se.doclist[1].item_code = "_Test Serialized Item"
@@ -761,7 +761,7 @@
 		self._clear_stock_account_balance()
 		se = make_serialized_item()
 		serial_no = get_serial_nos(se.doclist[1].serial_no)[0]
-		
+
 		se = webnotes.bean(copy=test_records[0])
 		se.doc.purpose = "Material Transfer"
 		se.doclist[1].item_code = "_Test Serialized Item With Series"
@@ -773,14 +773,14 @@
 		se.insert()
 		se.submit()
 		self.assertTrue(webnotes.conn.get_value("Serial No", serial_no, "warehouse"), "_Test Warehouse 1 - _TC")
-		
+
 		se.cancel()
 		self.assertTrue(webnotes.conn.get_value("Serial No", serial_no, "warehouse"), "_Test Warehouse - _TC")
 
 	def test_serial_warehouse_error(self):
 		self._clear_stock_account_balance()
 		make_serialized_item()
-		
+
 		se = webnotes.bean(copy=test_records[0])
 		se.doc.purpose = "Material Transfer"
 		se.doclist[1].item_code = "_Test Serialized Item With Series"
@@ -791,15 +791,32 @@
 		se.doclist[1].t_warehouse = "_Test Warehouse - _TC"
 		se.insert()
 		self.assertRaises(SerialNoWarehouseError, se.submit)
-		
+
 	def test_serial_cancel(self):
 		self._clear_stock_account_balance()
 		se = self.test_serial_by_series()
 		se.cancel()
-		
+
 		serial_no = get_serial_nos(se.doclist[1].serial_no)[0]
 		self.assertFalse(webnotes.conn.get_value("Serial No", serial_no, "warehouse"))
 
+	def test_freeze_stocks (self):
+		self._clear_stock_account_balance()
+		stock_auth_role = webnotes.conn.set_value('Stock Settings', None,'stock_auth_role', '')
+
+		# test freeze_stocks_upto
+		date_newer_than_test_records = add_days(getdate(test_records[0][0]['posting_date']), 5)
+		webnotes.conn.set_value("Stock Settings", None, "stock_frozen_upto", date_newer_than_test_records)
+		se = webnotes.bean(copy=test_records[0]).insert()
+		self.assertRaises (StockFreezeError, se.submit)
+		webnotes.conn.set_value("Stock Settings", None, "stock_frozen_upto", '')
+
+		# test freeze_stocks_upto_days
+		webnotes.conn.set_value("Stock Settings", None, "stock_frozen_upto_days", 7)
+		se = webnotes.bean(copy=test_records[0]).insert()
+		self.assertRaises (StockFreezeError, se.submit)
+		webnotes.conn.set_value("Stock Settings", None, "stock_frozen_upto_days", 0)
+
 def make_serialized_item():
 	se = webnotes.bean(copy=test_records[0])
 	se.doclist[1].item_code = "_Test Serialized Item With Series"
@@ -812,70 +829,70 @@
 test_records = [
 	[
 		{
-			"company": "_Test Company", 
-			"doctype": "Stock Entry", 
-			"posting_date": "2013-01-01", 
-			"posting_time": "17:14:24", 
+			"company": "_Test Company",
+			"doctype": "Stock Entry",
+			"posting_date": "2013-01-01",
+			"posting_time": "17:14:24",
 			"purpose": "Material Receipt",
-			"fiscal_year": "_Test Fiscal Year 2013", 
-		}, 
+			"fiscal_year": "_Test Fiscal Year 2013",
+		},
 		{
-			"conversion_factor": 1.0, 
-			"doctype": "Stock Entry Detail", 
-			"item_code": "_Test Item", 
-			"parentfield": "mtn_details", 
+			"conversion_factor": 1.0,
+			"doctype": "Stock Entry Detail",
+			"item_code": "_Test Item",
+			"parentfield": "mtn_details",
 			"incoming_rate": 100,
-			"qty": 50.0, 
-			"stock_uom": "_Test UOM", 
-			"transfer_qty": 50.0, 
+			"qty": 50.0,
+			"stock_uom": "_Test UOM",
+			"transfer_qty": 50.0,
 			"uom": "_Test UOM",
 			"t_warehouse": "_Test Warehouse - _TC",
 			"expense_account": "Stock Adjustment - _TC",
 			"cost_center": "_Test Cost Center - _TC"
-		}, 
+		},
 	],
 	[
 		{
-			"company": "_Test Company", 
-			"doctype": "Stock Entry", 
-			"posting_date": "2013-01-25", 
-			"posting_time": "17:15", 
+			"company": "_Test Company",
+			"doctype": "Stock Entry",
+			"posting_date": "2013-01-25",
+			"posting_time": "17:15",
 			"purpose": "Material Issue",
-			"fiscal_year": "_Test Fiscal Year 2013", 
-		}, 
+			"fiscal_year": "_Test Fiscal Year 2013",
+		},
 		{
-			"conversion_factor": 1.0, 
-			"doctype": "Stock Entry Detail", 
-			"item_code": "_Test Item", 
-			"parentfield": "mtn_details", 
+			"conversion_factor": 1.0,
+			"doctype": "Stock Entry Detail",
+			"item_code": "_Test Item",
+			"parentfield": "mtn_details",
 			"incoming_rate": 100,
-			"qty": 40.0, 
-			"stock_uom": "_Test UOM", 
-			"transfer_qty": 40.0, 
+			"qty": 40.0,
+			"stock_uom": "_Test UOM",
+			"transfer_qty": 40.0,
 			"uom": "_Test UOM",
 			"s_warehouse": "_Test Warehouse - _TC",
 			"expense_account": "Stock Adjustment - _TC",
 			"cost_center": "_Test Cost Center - _TC"
-		}, 
+		},
 	],
 	[
 		{
-			"company": "_Test Company", 
-			"doctype": "Stock Entry", 
-			"posting_date": "2013-01-25", 
-			"posting_time": "17:14:24", 
+			"company": "_Test Company",
+			"doctype": "Stock Entry",
+			"posting_date": "2013-01-25",
+			"posting_time": "17:14:24",
 			"purpose": "Material Transfer",
-			"fiscal_year": "_Test Fiscal Year 2013", 
-		}, 
+			"fiscal_year": "_Test Fiscal Year 2013",
+		},
 		{
-			"conversion_factor": 1.0, 
-			"doctype": "Stock Entry Detail", 
-			"item_code": "_Test Item", 
-			"parentfield": "mtn_details", 
+			"conversion_factor": 1.0,
+			"doctype": "Stock Entry Detail",
+			"item_code": "_Test Item",
+			"parentfield": "mtn_details",
 			"incoming_rate": 100,
-			"qty": 45.0, 
-			"stock_uom": "_Test UOM", 
-			"transfer_qty": 45.0, 
+			"qty": 45.0,
+			"stock_uom": "_Test UOM",
+			"transfer_qty": 45.0,
 			"uom": "_Test UOM",
 			"s_warehouse": "_Test Warehouse - _TC",
 			"t_warehouse": "_Test Warehouse 1 - _TC",
@@ -885,40 +902,40 @@
 	],
 	[
 		{
-			"company": "_Test Company", 
-			"doctype": "Stock Entry", 
-			"posting_date": "2013-01-25", 
-			"posting_time": "17:14:24", 
+			"company": "_Test Company",
+			"doctype": "Stock Entry",
+			"posting_date": "2013-01-25",
+			"posting_time": "17:14:24",
 			"purpose": "Manufacture/Repack",
-			"fiscal_year": "_Test Fiscal Year 2013", 
-		}, 
+			"fiscal_year": "_Test Fiscal Year 2013",
+		},
 		{
-			"conversion_factor": 1.0, 
-			"doctype": "Stock Entry Detail", 
-			"item_code": "_Test Item", 
-			"parentfield": "mtn_details", 
+			"conversion_factor": 1.0,
+			"doctype": "Stock Entry Detail",
+			"item_code": "_Test Item",
+			"parentfield": "mtn_details",
 			"incoming_rate": 100,
-			"qty": 50.0, 
-			"stock_uom": "_Test UOM", 
-			"transfer_qty": 50.0, 
+			"qty": 50.0,
+			"stock_uom": "_Test UOM",
+			"transfer_qty": 50.0,
 			"uom": "_Test UOM",
 			"s_warehouse": "_Test Warehouse - _TC",
 			"expense_account": "Stock Adjustment - _TC",
 			"cost_center": "_Test Cost Center - _TC"
-		}, 
+		},
 		{
-			"conversion_factor": 1.0, 
-			"doctype": "Stock Entry Detail", 
-			"item_code": "_Test Item Home Desktop 100", 
-			"parentfield": "mtn_details", 
+			"conversion_factor": 1.0,
+			"doctype": "Stock Entry Detail",
+			"item_code": "_Test Item Home Desktop 100",
+			"parentfield": "mtn_details",
 			"incoming_rate": 5000,
-			"qty": 1, 
-			"stock_uom": "_Test UOM", 
-			"transfer_qty": 1, 
+			"qty": 1,
+			"stock_uom": "_Test UOM",
+			"transfer_qty": 1,
 			"uom": "_Test UOM",
 			"t_warehouse": "_Test Warehouse - _TC",
 			"expense_account": "Stock Adjustment - _TC",
 			"cost_center": "_Test Cost Center - _TC"
 		},
 	],
-]
\ No newline at end of file
+]
diff --git a/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
index f059451..277992b 100644
--- a/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
+++ b/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
@@ -1,11 +1,15 @@
+
 # Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
 # License: GNU General Public License v3. See license.txt
 
 from __future__ import unicode_literals
 import webnotes
 from webnotes import msgprint
-from webnotes.utils import flt, getdate
+from webnotes.utils import flt, getdate, add_days
 from webnotes.model.controller import DocListController
+from datetime import date
+
+class StockFreezeError(webnotes.ValidationError): pass
 
 class DocType(DocListController):
 	def __init__(self, doc, doclist=[]):
@@ -19,30 +23,30 @@
 		validate_warehouse_user(self.doc.warehouse)
 		validate_warehouse_company(self.doc.warehouse, self.doc.company)
 		self.scrub_posting_time()
-		
+
 		from accounts.utils import validate_fiscal_year
 		validate_fiscal_year(self.doc.posting_date, self.doc.fiscal_year, self.meta.get_label("posting_date"))
-		
+
 	def on_submit(self):
 		self.check_stock_frozen_date()
 		self.actual_amt_check()
-		
+
 		from stock.doctype.serial_no.serial_no import process_serial_no
 		process_serial_no(self.doc)
-		
+
 	#check for item quantity available in stock
 	def actual_amt_check(self):
 		if self.doc.batch_no:
-			batch_bal_after_transaction = flt(webnotes.conn.sql("""select sum(actual_qty) 
-				from `tabStock Ledger Entry` 
-				where warehouse=%s and item_code=%s and batch_no=%s""", 
+			batch_bal_after_transaction = flt(webnotes.conn.sql("""select sum(actual_qty)
+				from `tabStock Ledger Entry`
+				where warehouse=%s and item_code=%s and batch_no=%s""",
 				(self.doc.warehouse, self.doc.item_code, self.doc.batch_no))[0][0])
-			
+
 			if batch_bal_after_transaction < 0:
 				self.doc.fields.update({
 					'batch_bal': batch_bal_after_transaction - self.doc.actual_qty
 				})
-				
+
 				webnotes.throw("""Not enough quantity (requested: %(actual_qty)s, \
 					current: %(batch_bal)s in Batch <b>%(batch_no)s</b> for Item \
 					<b>%(item_code)s</b> at Warehouse <b>%(warehouse)s</b> \
@@ -60,41 +64,49 @@
 					msgprint("Warehouse: '%s' does not exist in the system. Please check." % self.doc.fields.get(k), raise_exception = 1)
 
 	def validate_item(self):
-		item_det = webnotes.conn.sql("""select name, has_batch_no, docstatus, 
-			is_stock_item, has_serial_no, serial_no_series 
-			from tabItem where name=%s""", 
+		item_det = webnotes.conn.sql("""select name, has_batch_no, docstatus,
+			is_stock_item, has_serial_no, serial_no_series
+			from tabItem where name=%s""",
 			self.doc.item_code, as_dict=True)[0]
 
 		if item_det.is_stock_item != 'Yes':
 			webnotes.throw("""Item: "%s" is not a Stock Item.""" % self.doc.item_code)
-			
+
 		# check if batch number is required
 		if item_det.has_batch_no =='Yes' and self.doc.voucher_type != 'Stock Reconciliation':
 			if not self.doc.batch_no:
 				webnotes.throw("Batch number is mandatory for Item '%s'" % self.doc.item_code)
-		
+
 			# check if batch belongs to item
-			if not webnotes.conn.sql("""select name from `tabBatch` 
+			if not webnotes.conn.sql("""select name from `tabBatch`
 				where item='%s' and name ='%s' and docstatus != 2""" % (self.doc.item_code, self.doc.batch_no)):
 				webnotes.throw("'%s' is not a valid Batch Number for Item '%s'" % (self.doc.batch_no, self.doc.item_code))
-				
+
 		if not self.doc.stock_uom:
 			self.doc.stock_uom = item_det.stock_uom
-					
+
 	def check_stock_frozen_date(self):
 		stock_frozen_upto = webnotes.conn.get_value('Stock Settings', None, 'stock_frozen_upto') or ''
 		if stock_frozen_upto:
 			stock_auth_role = webnotes.conn.get_value('Stock Settings', None,'stock_auth_role')
 			if getdate(self.doc.posting_date) <= getdate(stock_frozen_upto) and not stock_auth_role in webnotes.user.get_roles():
-				msgprint("You are not authorized to do / modify back dated stock entries before %s" % getdate(stock_frozen_upto).strftime('%d-%m-%Y'), raise_exception=1)
+				msgprint("You are not authorized to do / modify back dated stock entries before %s" % getdate(stock_frozen_upto).strftime('%d-%m-%Y'), raise_exception=StockFreezeError)
+
+		stock_frozen_upto_days = int(webnotes.conn.get_value('Stock Settings', None, 'stock_frozen_upto_days') or 0)
+		if stock_frozen_upto_days:
+			stock_auth_role = webnotes.conn.get_value('Stock Settings', None,'stock_auth_role')
+			older_than_x_days_ago = (add_days(getdate(self.doc.posting_date), stock_frozen_upto_days) <= date.today())
+			if older_than_x_days_ago and not stock_auth_role in webnotes.user.get_roles():
+				msgprint("You are not authorized to do / modify back dated stock entries older than %d days ago" %stock_frozen_upto_days, raise_exception=StockFreezeError)
+
 
 	def scrub_posting_time(self):
 		if not self.doc.posting_time or self.doc.posting_time == '00:0':
 			self.doc.posting_time = '00:00'
 
 def on_doctype_update():
-	if not webnotes.conn.sql("""show index from `tabStock Ledger Entry` 
+	if not webnotes.conn.sql("""show index from `tabStock Ledger Entry`
 		where Key_name="posting_sort_index" """):
 		webnotes.conn.commit()
-		webnotes.conn.sql("""alter table `tabStock Ledger Entry` 
+		webnotes.conn.sql("""alter table `tabStock Ledger Entry`
 			add index posting_sort_index(posting_date, posting_time, name)""")
\ No newline at end of file
diff --git a/stock/doctype/stock_settings/stock_settings.py b/stock/doctype/stock_settings/stock_settings.py
index 48e1ee1..87e940d 100644
--- a/stock/doctype/stock_settings/stock_settings.py
+++ b/stock/doctype/stock_settings/stock_settings.py
@@ -5,18 +5,23 @@
 
 from __future__ import unicode_literals
 import webnotes
-
+from webnotes import _
 
 class DocType:
 	def __init__(self, d, dl):
 		self.doc, self.doclist = d, dl
-	
+
 	def validate(self):
-		for key in ["item_naming_by", "item_group", "stock_uom", 
+		for key in ["item_naming_by", "item_group", "stock_uom",
 			"allow_negative_stock"]:
 			webnotes.conn.set_default(key, self.doc.fields.get(key, ""))
-			
+
 		from setup.doctype.naming_series.naming_series import set_by_naming_series
-		set_by_naming_series("Item", "item_code", 
+		set_by_naming_series("Item", "item_code",
 			self.doc.get("item_naming_by")=="Naming Series", hide_name_field=True)
-			
+
+		stock_frozen_limit = 356
+		submitted_stock_frozen = self.doc.stock_frozen_upto_days
+		if submitted_stock_frozen > stock_frozen_limit:
+			self.doc.stock_frozen_upto_days = stock_frozen_limit
+			webnotes.msgprint (_("`Freeze Stocks Older Than` should be smaller than %d days.") %stock_frozen_limit)
diff --git a/stock/doctype/stock_settings/stock_settings.txt b/stock/doctype/stock_settings/stock_settings.txt
index 634ee3a..a179091 100644
--- a/stock/doctype/stock_settings/stock_settings.txt
+++ b/stock/doctype/stock_settings/stock_settings.txt
@@ -1,128 +1,134 @@
 [
  {
-  "creation": "2013-06-24 16:37:54", 
-  "docstatus": 0, 
-  "modified": "2013-11-02 19:41:56", 
-  "modified_by": "Administrator", 
+  "creation": "2013-06-24 16:37:54",
+  "docstatus": 0,
+  "modified": "2014-01-27 20:00:56",
+  "modified_by": "Administrator",
   "owner": "Administrator"
- }, 
+ },
  {
-  "description": "Settings", 
-  "doctype": "DocType", 
-  "icon": "icon-cog", 
-  "issingle": 1, 
-  "module": "Stock", 
+  "description": "Settings",
+  "doctype": "DocType",
+  "icon": "icon-cog",
+  "issingle": 1,
+  "module": "Stock",
   "name": "__common__"
- }, 
+ },
  {
-  "doctype": "DocField", 
-  "name": "__common__", 
-  "parent": "Stock Settings", 
-  "parentfield": "fields", 
-  "parenttype": "DocType", 
+  "doctype": "DocField",
+  "name": "__common__",
+  "parent": "Stock Settings",
+  "parentfield": "fields",
+  "parenttype": "DocType",
   "permlevel": 0
- }, 
+ },
  {
-  "create": 1, 
-  "doctype": "DocPerm", 
-  "name": "__common__", 
-  "parent": "Stock Settings", 
-  "parentfield": "permissions", 
-  "parenttype": "DocType", 
-  "permlevel": 0, 
-  "read": 1, 
-  "role": "Material Manager", 
+  "create": 1,
+  "doctype": "DocPerm",
+  "name": "__common__",
+  "parent": "Stock Settings",
+  "parentfield": "permissions",
+  "parenttype": "DocType",
+  "permlevel": 0,
+  "read": 1,
+  "role": "Material Manager",
   "write": 1
- }, 
+ },
  {
-  "doctype": "DocType", 
+  "doctype": "DocType",
   "name": "Stock Settings"
- }, 
+ },
  {
-  "doctype": "DocField", 
-  "fieldname": "item_naming_by", 
-  "fieldtype": "Select", 
-  "label": "Item Naming By", 
+  "doctype": "DocField",
+  "fieldname": "item_naming_by",
+  "fieldtype": "Select",
+  "label": "Item Naming By",
   "options": "Item Code\nNaming Series"
- }, 
+ },
  {
-  "description": "<a href=\"#Sales Browser/Item Group\">Add / Edit</a>", 
-  "doctype": "DocField", 
-  "fieldname": "item_group", 
-  "fieldtype": "Link", 
-  "label": "Default Item Group", 
+  "description": "<a href=\"#Sales Browser/Item Group\">Add / Edit</a>",
+  "doctype": "DocField",
+  "fieldname": "item_group",
+  "fieldtype": "Link",
+  "label": "Default Item Group",
   "options": "Item Group"
- }, 
+ },
  {
-  "doctype": "DocField", 
-  "fieldname": "stock_uom", 
-  "fieldtype": "Link", 
-  "label": "Default Stock UOM", 
+  "doctype": "DocField",
+  "fieldname": "stock_uom",
+  "fieldtype": "Link",
+  "label": "Default Stock UOM",
   "options": "UOM"
- }, 
+ },
  {
-  "doctype": "DocField", 
-  "fieldname": "column_break_4", 
+  "doctype": "DocField",
+  "fieldname": "column_break_4",
   "fieldtype": "Column Break"
- }, 
+ },
  {
-  "doctype": "DocField", 
-  "fieldname": "allow_negative_stock", 
-  "fieldtype": "Check", 
+  "doctype": "DocField",
+  "fieldname": "allow_negative_stock",
+  "fieldtype": "Check",
   "label": "Allow Negative Stock"
- }, 
+ },
  {
-  "doctype": "DocField", 
-  "fieldname": "valuation_method", 
-  "fieldtype": "Select", 
-  "label": "Default Valuation Method", 
+  "doctype": "DocField",
+  "fieldname": "valuation_method",
+  "fieldtype": "Select",
+  "label": "Default Valuation Method",
   "options": "FIFO\nMoving Average"
- }, 
+ },
  {
-  "description": "Percentage you are allowed to receive or deliver more against the quantity ordered. For example: If you have ordered 100 units. and your Allowance is 10% then you are allowed to receive 110 units.", 
-  "doctype": "DocField", 
-  "fieldname": "tolerance", 
-  "fieldtype": "Float", 
+  "description": "Percentage you are allowed to receive or deliver more against the quantity ordered. For example: If you have ordered 100 units. and your Allowance is 10% then you are allowed to receive 110 units.",
+  "doctype": "DocField",
+  "fieldname": "tolerance",
+  "fieldtype": "Float",
   "label": "Allowance Percent"
- }, 
+ },
  {
-  "doctype": "DocField", 
-  "fieldname": "auto_material_request", 
-  "fieldtype": "Section Break", 
+  "doctype": "DocField",
+  "fieldname": "auto_material_request",
+  "fieldtype": "Section Break",
   "label": "Auto Material Request"
- }, 
+ },
  {
-  "doctype": "DocField", 
-  "fieldname": "auto_indent", 
-  "fieldtype": "Check", 
+  "doctype": "DocField",
+  "fieldname": "auto_indent",
+  "fieldtype": "Check",
   "label": "Raise Material Request when stock reaches re-order level"
- }, 
+ },
  {
-  "doctype": "DocField", 
-  "fieldname": "reorder_email_notify", 
-  "fieldtype": "Check", 
+  "doctype": "DocField",
+  "fieldname": "reorder_email_notify",
+  "fieldtype": "Check",
   "label": "Notify by Email on creation of automatic Material Request"
- }, 
+ },
  {
-  "doctype": "DocField", 
-  "fieldname": "freeze_stock_entries", 
-  "fieldtype": "Section Break", 
+  "doctype": "DocField",
+  "fieldname": "freeze_stock_entries",
+  "fieldtype": "Section Break",
   "label": "Freeze Stock Entries"
- }, 
+ },
  {
-  "doctype": "DocField", 
-  "fieldname": "stock_frozen_upto", 
-  "fieldtype": "Date", 
+  "doctype": "DocField",
+  "fieldname": "stock_frozen_upto",
+  "fieldtype": "Date",
   "label": "Stock Frozen Upto"
- }, 
+ },
  {
-  "doctype": "DocField", 
-  "fieldname": "stock_auth_role", 
-  "fieldtype": "Link", 
-  "label": "Role Allowed to edit frozen stock", 
+  "doctype": "DocField",
+  "fieldname": "stock_frozen_upto_days",
+  "fieldtype": "Int",
+  "label": "Freeze Stocks Older Than [Days]"
+ },
+ {
+  "doctype": "DocField",
+  "fieldname": "stock_auth_role",
+  "fieldtype": "Link",
+  "label": "Role Allowed to edit frozen stock",
   "options": "Role"
- }, 
+ },
  {
   "doctype": "DocPerm"
  }
-]
\ No newline at end of file
+]
