diff --git a/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/accounts/doctype/purchase_invoice/test_purchase_invoice.py
index 861c289..606ebb9 100644
--- a/accounts/doctype/purchase_invoice/test_purchase_invoice.py
+++ b/accounts/doctype/purchase_invoice/test_purchase_invoice.py
@@ -166,106 +166,5 @@
 		for d in gl_entries:
 			self.assertEqual([d.debit, d.credit], expected_gl_entries.get(d.account))
 
-	# def test_purchase_invoice(self):
-	# 	from webnotes.model.doclist import DocList
-	# 	controller = webnotes.insert(DocList(purchase_invoice_doclist))
-	# 	controller.load_from_db()
-	# 	
-	# 	from controllers.tax_controller import TaxController
-	# 	tax_controller = TaxController(controller.doc, controller.doclist)
-	# 	tax_controller.item_table_field = "entries"
-	# 	tax_controller.calculate_taxes_and_totals()
-	# 	
-	# 	controller.doc = tax_controller.doc
-	# 	controller.doclist = tax_controller.doclist
-	# 	
-	# 	controller.save()
-	# 	controller.load_from_db()
-	# 	dl = controller.doclist
-	# 
-	# 	# test net total
-	# 	self.assertEqual(dl[0].net_total, 1250)
-	# 	
-	# 	# test tax amounts and totals
-	# 	expected_values = [
-	# 		["Shipping Charges - %s" % abbr, 100, 1350],
-	# 		["Customs Duty - %s" % abbr, 125, 1350],
-	# 		["Excise Duty - %s" % abbr, 140, 1490],
-	# 		["Education Cess - %s" % abbr, 2.8, 1492.8],
-	# 		["S&H Education Cess - %s" % abbr, 1.4, 1494.2],
-	# 		["CST - %s" % abbr, 29.88, 1524.08],
-	# 		["VAT - Test - %s" % abbr, 156.25, 1680.33],
-	# 		["Discount - %s" % abbr, -168.03, 1512.30],
-	# 	]		
-	# 	for i, tax in enumerate(dl.get({"parentfield": "other_charges"})):
-	# 		self.assertEqual(tax.account_head, expected_values[i][0])
-	# 		self.assertEqual(tax.tax_amount, expected_values[i][1])
-	# 		self.assertEqual(tax.total, expected_values[i][2])
-	# 	
-	# 	# test item tax amount
-	# 	expected_values = [
-	# 		["Home Desktop 100", 90],
-	# 		["Home Desktop 200", 135]
-	# 	]
-	# 	for i, item in enumerate(dl.get({"parentfield": "purchase_invoice_items"})):
-	# 		self.assertEqual(item.item_code, expected_values[i][0])
-	# 		self.assertEqual(item.item_tax_amount, expected_values[i][1])
-	# 
-	# 		
-	# def test_purchase_invoice_having_zero_amount_items(self):
-	# 	from webnotes.model.doclist import DocList
-	# 	sample_purchase_invoice_doclist = [] + purchase_invoice_doclist
-	# 	
-	# 	# set rate and amount as 0
-	# 	sample_purchase_invoice_doclist[1]["import_rate"] = 0
-	# 	sample_purchase_invoice_doclist[2]["import_rate"] = 0
-	# 	
-	# 	
-	# 	controller = webnotes.insert(DocList(sample_purchase_invoice_doclist))
-	# 	controller.load_from_db()
-	# 	
-	# 	from controllers.tax_controller import TaxController
-	# 	tax_controller = TaxController(controller.doc, controller.doclist)
-	# 	tax_controller.item_table_field = "entries"
-	# 	tax_controller.calculate_taxes_and_totals()
-	# 	
-	# 	controller.doc = tax_controller.doc
-	# 	controller.doclist = tax_controller.doclist
-	# 	
-	# 	controller.save()
-	# 	controller.load_from_db()
-	# 	dl = controller.doclist
-	# 	
-	# 	# test net total
-	# 	self.assertEqual(dl[0].net_total, 0)
-	# 	
-	# 	# test tax amounts and totals
-	# 	expected_values = [
-	# 		["Shipping Charges - %s" % abbr, 100, 100],
-	# 		["Customs Duty - %s" % abbr, 0, 100],
-	# 		["Excise Duty - %s" % abbr, 0, 100],
-	# 		["Education Cess - %s" % abbr, 0, 100],
-	# 		["S&H Education Cess - %s" % abbr, 0, 100],
-	# 		["CST - %s" % abbr, 2, 102],
-	# 		["VAT - Test - %s" % abbr, 0, 102],
-	# 		["Discount - %s" % abbr, -10.2, 91.8],
-	# 	]
-	# 	for i, tax in enumerate(dl.get({"parentfield": "other_charges"})):
-	# 		# print tax.account_head, tax.tax_amount, tax.total
-	# 		self.assertEqual(tax.account_head, expected_values[i][0])
-	# 		self.assertEqual(tax.tax_amount, expected_values[i][1])
-	# 		self.assertEqual(tax.total, expected_values[i][2])
-	# 	
-	# 	# test item tax amount
-	# 	expected_values = [
-	# 		["Home Desktop 100", 0],
-	# 		["Home Desktop 200", 0]
-	# 	]
-	# 	for i, item in enumerate(dl.get({"parentfield": "purchase_invoice_items"})):
-	# 		self.assertEqual(item.item_code, expected_values[i][0])
-	# 		self.assertEqual(item.item_tax_amount, expected_values[i][1])
-
-			
-		
 	def tearDown(self):
 		webnotes.conn.rollback()
\ No newline at end of file
diff --git a/accounts/doctype/sales_invoice/test_sales_invoice.py b/accounts/doctype/sales_invoice/test_sales_invoice.py
index cf0fbda..bb2157c 100644
--- a/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -228,321 +228,6 @@
 		
 		for gle in gl_entries:
 			self.assertEqual([gle.debit, gle.credit], expected_gl_entries[gle.account])
-		
-		# 	
-		# def test_inclusive_rate_validations(self):
-		# 	doclist = [] + [d.copy() for d in sales_invoice_doclist]
-		# 	doclist[1]["export_rate"] = 62.5
-		# 	doclist[2]["export_rate"] = 191
-		# 	for i in [3, 5, 6, 7, 8, 9]:
-		# 		doclist[i]["included_in_print_rate"] = 1
-		# 	
-		# 	# tax type "Actual" cannot be inclusive
-		# 	self.assertRaises(webnotes.ValidationError, webnotes.insert,
-		# 		DocList(doclist))
-		# 	
-		# 	doclist[3]["included_in_print_rate"] = 0
-		# 	# taxes above included type 'On Previous Row Total' should also be included
-		# 	self.assertRaises(webnotes.ValidationError, webnotes.insert,
-		# 		DocList(doclist))
-		# 
-		# def test_sales_invoice_with_inclusive_tax(self):
-		# 	doclist = [
-		# 		# parent
-		# 		{
-		# 			"doctype": "Sales Invoice", 
-		# 			"debit_to": "West Wind Inc. - %s" % abbr,
-		# 			"customer_name": "West Wind Inc.",
-		# 			"naming_series": "INV", "posting_date": nowdate(),
-		# 			"company": company,
-		# 			"fiscal_year": webnotes.conn.get_default("fiscal_year"), 
-		# 			"currency": webnotes.conn.get_default("currency"),
-		# 			"price_list_currency": webnotes.conn.get_default("currency"),
-		# 			"conversion_rate": 1.0, "plc_conversion_rate": 1.0,
-		# 			"grand_total_export": 0
-		# 		},
-		# 		# items
-		# 		{
-		# 			"doctype": "Sales Invoice Item", "warehouse": "Default Warehouse",
-		# 			"item_code": "Home Desktop 100", "qty": 10, "export_rate": 62.503,
-		# 			"parentfield": "entries",
-		# 			"uom": "Nos", "item_tax_rate": json.dumps({"Excise Duty - %s" % abbr: 10})
-		# 		},
-		# 		{
-		# 			"doctype": "Sales Invoice Item", "warehouse": "Default Warehouse",
-		# 			"item_code": "Home Desktop 200", "qty": 5, "export_rate": 190.6608,
-		# 			"parentfield": "entries",
-		# 			"uom": "Nos"
-		# 		},
-		# 		# taxes
-		# 		{
-		# 			"doctype": "Sales Taxes and Charges", "charge_type": "On Net Total",
-		# 			"account_head": "Excise Duty - %s" % abbr, "rate": 12,
-		# 			"parentfield": "other_charges", "included_in_print_rate": 1
-		# 		},
-		# 		{
-		# 			"doctype": "Sales Taxes and Charges",
-		# 			"charge_type": "On Previous Row Amount",
-		# 			"account_head": "Education Cess - %s" % abbr, "rate": 2, "row_id": 1,
-		# 			"parentfield": "other_charges", "included_in_print_rate": 1
-		# 		},
-		# 		{
-		# 			"doctype": "Sales Taxes and Charges",
-		# 			"charge_type": "On Previous Row Amount",
-		# 			"account_head": "S&H Education Cess - %s" % abbr, "rate": 1, "row_id": 1,
-		# 			"parentfield": "other_charges", "included_in_print_rate": 1
-		# 		},
-		# 		{
-		# 			"doctype": "Sales Taxes and Charges", 
-		# 			"charge_type": "On Previous Row Total",
-		# 			"account_head": "CST - %s" % abbr, "rate": 2, "row_id": 3,
-		# 			"parentfield": "other_charges", "included_in_print_rate": 1,
-		# 			"cost_center_other_charges": "Default Cost Center - %s" % abbr
-		# 		},
-		# 		{
-		# 			"doctype": "Sales Taxes and Charges", "charge_type": "On Net Total",
-		# 			"account_head": "VAT - Test - %s" % abbr, "rate": 12.5,
-		# 			"parentfield": "other_charges", "included_in_print_rate": 1
-		# 		},
-		# 		{
-		# 			"doctype": "Sales Taxes and Charges", "charge_type": "On Net Total",
-		# 			"account_head": "Customs Duty - %s" % abbr, "rate": 10,
-		# 			"parentfield": "other_charges",
-		# 			"cost_center_other_charges": "Default Cost Center - %s" % abbr
-		# 		},
-		# 		{
-		# 			"doctype": "Sales Taxes and Charges", "charge_type": "Actual",
-		# 			"account_head": "Shipping Charges - %s" % abbr, "rate": 100, 
-		# 			"parentfield": "other_charges",
-		# 			"cost_center_other_charges": "Default Cost Center - %s" % abbr
-		# 		},
-		# 		{
-		# 			"doctype": "Sales Taxes and Charges",
-		# 			"charge_type": "On Previous Row Total",
-		# 			"account_head": "adj_rate - %s" % abbr, "rate": -10, "row_id": 7,
-		# 			"parentfield": "other_charges",
-		# 			"cost_center_other_charges": "Default Cost Center - %s" % abbr
-		# 		},
-		# 	]
-		# 	
-		# 	controller = webnotes.insert(DocList(doclist))
-		# 	controller.load_from_db()
-		# 	
-		# 	from controllers.tax_controller import TaxController
-		# 	tax_controller = TaxController(controller.doc, controller.doclist)
-		# 	tax_controller.item_table_field = "entries"
-		# 	tax_controller.calculate_taxes_and_totals()
-		# 	
-		# 	controller.doc = tax_controller.doc
-		# 	controller.doclist = tax_controller.doclist
-		# 	
-		# 	controller.save()
-		# 	controller.load_from_db()
-		# 	dl = controller.doclist
-		# 
-		# 	# test item values calculation
-		# 	expected_values = [
-		# 		{
-		# 			"item_code": "Home Desktop 100",
-		# 			"ref_rate": 62.503,
-		# 			"adj_rate": 0,
-		# 			"export_amount": 625.03,
-		# 			"base_ref_rate": 50,
-		# 			"basic_rate": 50,
-		# 			"amount": 500
-		# 		},
-		# 		{
-		# 			"item_code": "Home Desktop 200",
-		# 			"ref_rate": 190.6608,
-		# 			"adj_rate": 0,
-		# 			"export_amount": 953.3,
-		# 			"base_ref_rate": 150,
-		# 			"basic_rate": 150,
-		# 			"amount": 750
-		# 		},
-		# 	]
-		# 	for i, item in enumerate(dl.get({"parentfield": "entries"})):
-		# 		for key, val in expected_values[i].items():
-		# 			self.assertEqual(item.fields.get(key), val)
-		# 	
-		# 	# test tax amounts and totals
-		# 	expected_values = [
-		# 		["Excise Duty - %s" % abbr, 140, 1390, 0, 1578.33],
-		# 		["Education Cess - %s" % abbr, 2.8, 1392.8, 0, 1578.33],
-		# 		["S&H Education Cess - %s" % abbr, 1.4, 1394.2, 0, 1578.33],
-		# 		["CST - %s" % abbr, 27.88, 1422.08, 0, 1578.33],
-		# 		["VAT - Test - %s" % abbr, 156.25, 1578.33, 0, 1578.33],
-		# 		["Customs Duty - %s" % abbr, 125, 1703.33, 125, 1703.33],
-		# 		["Shipping Charges - %s" % abbr, 100, 1803.33, 100, 1803.33],
-		# 		["adj_rate - %s" % abbr, -180.33, 1623, -180.33, 1623],
-		# 	]		
-		# 	for i, tax in enumerate(dl.get({"parentfield": "other_charges"})):
-		# 		# print tax.account_head, tax.tax_amount, tax.total, tax.tax_amount_print, \
-		# 		# 	tax.total_print
-		# 		self.assertEqual(tax.account_head, expected_values[i][0])
-		# 		self.assertEqual(tax.tax_amount, expected_values[i][1])
-		# 		self.assertEqual(tax.total, expected_values[i][2])
-		# 		# self.assertEqual(tax.tax_amount_print, expected_values[i][3])
-		# 		self.assertEqual(tax.total_print, expected_values[i][4])
-		# 		
-		# 	# test net total
-		# 	self.assertEqual(dl[0].net_total, 1250)
-		# 
-		# 	# # test grand total
-		# 	self.assertEqual(dl[0].grand_total, 1623)
-		# 	self.assertEqual(dl[0].grand_total_export, 1623)
-		# 	
-		# def test_usd_sales_invoice_with_inclusive_tax(self):
-		# 	# print
-		# 	# print "-"*80
-		# 	# print "test_usd_sales_invoice_with_inclusive_tax"
-		# 	# print "-"*80
-		# 	
-		# 	# Note: below values were obtained through manual calculation and verified by test
-		# 	
-		# 	doclist = [
-		# 		# parent
-		# 		{
-		# 			"doctype": "Sales Invoice", 
-		# 			"debit_to": "West Wind Inc. - %s" % abbr,
-		# 			"customer_name": "West Wind Inc.",
-		# 			"naming_series": "INV", "posting_date": nowdate(),
-		# 			"company": company,
-		# 			"fiscal_year": webnotes.conn.get_default("fiscal_year"), 
-		# 			"currency": "USD", "price_list_currency": "USD", "conversion_rate": 50.0,
-		# 			"plc_conversion_rate": 50.0, "grand_total_export": 0
-		# 		},
-		# 		# items
-		# 		{
-		# 			"doctype": "Sales Invoice Item", "warehouse": "Default Warehouse",
-		# 			"item_code": "Home Desktop 100", "qty": 10, "export_rate": 50,
-		# 			"adj_rate": 10, "parentfield": "entries",
-		# 			"uom": "Nos", "item_tax_rate": json.dumps({"Excise Duty - %s" % abbr: 10})
-		# 		},
-		# 		{
-		# 			"doctype": "Sales Invoice Item", "warehouse": "Default Warehouse",
-		# 			"item_code": "Home Desktop 200", "qty": 5, "export_rate": 150,
-		# 			"adj_rate": 20, "parentfield": "entries",
-		# 			"uom": "Nos"
-		# 		},
-		# 		# taxes
-		# 		{
-		# 			"doctype": "Sales Taxes and Charges", "charge_type": "On Net Total",
-		# 			"account_head": "Excise Duty - %s" % abbr, "rate": 12,
-		# 			"parentfield": "other_charges", "included_in_print_rate": 1
-		# 		},
-		# 		{
-		# 			"doctype": "Sales Taxes and Charges",
-		# 			"charge_type": "On Previous Row Amount",
-		# 			"account_head": "Education Cess - %s" % abbr, "rate": 2, "row_id": 1,
-		# 			"parentfield": "other_charges", "included_in_print_rate": 1
-		# 		},
-		# 		{
-		# 			"doctype": "Sales Taxes and Charges",
-		# 			"charge_type": "On Previous Row Amount",
-		# 			"account_head": "S&H Education Cess - %s" % abbr, "rate": 1, "row_id": 1,
-		# 			"parentfield": "other_charges", "included_in_print_rate": 1
-		# 		},
-		# 		{
-		# 			"doctype": "Sales Taxes and Charges", 
-		# 			"charge_type": "On Previous Row Total",
-		# 			"account_head": "CST - %s" % abbr, "rate": 2, "row_id": 3,
-		# 			"parentfield": "other_charges", "included_in_print_rate": 1,
-		# 			"cost_center_other_charges": "Default Cost Center - %s" % abbr
-		# 		},
-		# 		{
-		# 			"doctype": "Sales Taxes and Charges", "charge_type": "On Net Total",
-		# 			"account_head": "VAT - Test - %s" % abbr, "rate": 12.5,
-		# 			"parentfield": "other_charges", "included_in_print_rate": 1
-		# 		},
-		# 		{
-		# 			"doctype": "Sales Taxes and Charges", "charge_type": "On Net Total",
-		# 			"account_head": "Customs Duty - %s" % abbr, "rate": 10,
-		# 			"parentfield": "other_charges",
-		# 			"cost_center_other_charges": "Default Cost Center - %s" % abbr
-		# 		},
-		# 		{
-		# 			"doctype": "Sales Taxes and Charges", "charge_type": "Actual",
-		# 			"account_head": "Shipping Charges - %s" % abbr, "rate": 100, 
-		# 			"parentfield": "other_charges",
-		# 			"cost_center_other_charges": "Default Cost Center - %s" % abbr
-		# 		},
-		# 		{
-		# 			"doctype": "Sales Taxes and Charges",
-		# 			"charge_type": "On Previous Row Total",
-		# 			"account_head": "adj_rate - %s" % abbr, "rate": -10, "row_id": 7,
-		# 			"parentfield": "other_charges",
-		# 			"cost_center_other_charges": "Default Cost Center - %s" % abbr
-		# 		},
-		# 	]
-		# 	
-		# 	controller = webnotes.insert(DocList(doclist))
-		# 	controller.load_from_db()
-		# 	
-		# 	from controllers.tax_controller import TaxController
-		# 	tax_controller = TaxController(controller.doc, controller.doclist)
-		# 	tax_controller.item_table_field = "entries"
-		# 	tax_controller.calculate_taxes_and_totals()
-		# 	
-		# 	controller.doc = tax_controller.doc
-		# 	controller.doclist = tax_controller.doclist
-		# 	
-		# 	controller.save()
-		# 	controller.load_from_db()
-		# 	dl = controller.doclist
-		# 
-		# 	# test item values calculation
-		# 	expected_values = [
-		# 		{
-		# 			"item_code": "Home Desktop 100",
-		# 			"ref_rate": 55.5556,
-		# 			"adj_rate": 10,
-		# 			"export_amount": 500,
-		# 			"base_ref_rate": 2222.1156,
-		# 			"basic_rate": 1999.904,
-		# 			"amount": 19999.04
-		# 		},
-		# 		{
-		# 			"item_code": "Home Desktop 200",
-		# 			"ref_rate": 187.5,
-		# 			"adj_rate": 20,
-		# 			"export_amount": 750,
-		# 			"base_ref_rate": 7375.664,
-		# 			"basic_rate": 5900.5312,
-		# 			"amount": 29502.66
-		# 		},
-		# 	]
-		# 	for i, item in enumerate(dl.get({"parentfield": "entries"})):
-		# 		for key, val in expected_values[i].items():
-		# 			self.assertEqual(item.fields.get(key), val)
-		# 	
-		# 	# test tax amounts and totals
-		# 	expected_values = [
-		# 		["Excise Duty - %s" % abbr, 5540.22, 55041.92, 0, 1250],
-		# 		["Education Cess - %s" % abbr, 110.81, 55152.73, 0, 1250],
-		# 		["S&H Education Cess - %s" % abbr, 55.4, 55208.13, 0, 1250],
-		# 		["CST - %s" % abbr, 1104.16, 56312.29, 0, 1250],
-		# 		["VAT - Test - %s" % abbr, 6187.71, 62500, 0, 1250],
-		# 		["Customs Duty - %s" % abbr, 4950.17, 67450.17, 99.01, 1349.01],
-		# 		["Shipping Charges - %s" % abbr, 5000, 72450.17, 100, 1449.01],
-		# 		["adj_rate - %s" % abbr, -7245.01, 65205.16, -144.9, 1304.11],
-		# 	]		
-		# 	for i, tax in enumerate(dl.get({"parentfield": "other_charges"})):
-		# 		# print tax.account_head, tax.tax_amount, tax.total, tax.tax_amount_print, \
-		# 		# 	tax.total_print
-		# 		self.assertEqual(tax.account_head, expected_values[i][0])
-		# 		self.assertEqual(tax.tax_amount, expected_values[i][1])
-		# 		self.assertEqual(tax.total, expected_values[i][2])
-		# 		# self.assertEqual(tax.tax_amount_print, expected_values[i][3])
-		# 		self.assertEqual(tax.total_print, expected_values[i][4])
-		# 		
-		# 	# test net total
-		# 	self.assertEqual(dl[0].net_total, 49501.7)
-		# 
-		# 	# # test grand total
-		# 	self.assertEqual(dl[0].grand_total, 65205.16)
-		# 	self.assertEqual(dl[0].grand_total_export, 1304.11)
-		# 	
 
 	def tearDown(self):
 		webnotes.conn.rollback()
\ No newline at end of file
diff --git a/controllers/tax_controller.py b/controllers/tax_controller.py
deleted file mode 100644
index 617c4cc..0000000
--- a/controllers/tax_controller.py
+++ /dev/null
@@ -1,456 +0,0 @@
-# ERPNext - web based ERP (http://erpnext.com)
-# Copyright (C) 2012 Web Notes Technologies Pvt Ltd
-# 
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-from __future__ import unicode_literals
-import webnotes
-import webnotes.model
-from webnotes import _, msgprint
-from webnotes.utils import cint, flt
-from webnotes.model.utils import round_floats_in_doc
-import json
-
-from controllers.transaction_controller import TransactionController
-
-class TaxController(TransactionController):
-	def append_taxes(self):
-		"""append taxes as per tax master link field"""
-		# clear tax table
-		self.doclist = self.doclist.get({"parentfield": ["!=",
-			self.fmap.taxes_and_charges]})
-		
-		tax_master_doctype = self.meta.get_options(self.fmap.taxes_and_charges_master)
-		master_tax_list = webnotes.get_doclist(tax_master_doctype,
-			self.doc.fields.get(self.fmap.taxes_and_charges_master)).get(
-			{"parentfield": self.fmap.taxes_and_charges})
-			
-		for base_tax in master_tax_list:
-			tax = _dict([[field, base_tax.fields.get(field)]
-				for field in base_tax.fields
-				if field not in webnotes.model.default_fields])
-			tax.update({
-				"doctype": self.meta.get_options(self.fmap.taxes_and_charges),
-				"parentfield": self.fmap.taxes_and_charges,
-				"rate": flt(tax.rate, self.precision.tax.rate),
-			})
-			self.doclist.append(tax)
-	
-	def calculate_taxes_and_totals(self):
-		"""
-			Calculates:
-				* amount for each item
-				* valuation_tax_amount for each item, 
-				* tax amount and tax total for each tax
-				* net total
-				* total taxes
-				* grand total
-		"""
-		self.doc.fields[self.fmap.exchange_rate] = \
-			flt(self.doc.fields.get(self.fmap.exchange_rate),
-			self.precision.main[self.fmap.exchange_rate])
-		
-		self.calculate_item_values()
-		
-		self.initialize_taxes()
-		if self.meta.get_field("included_in_print_rate",
-				parentfield=self.fmap.taxes_and_charges):
-			self.determine_exclusive_rate()
-		
-		self.calculate_net_total()
-		self.calculate_taxes()
-		self.calculate_totals()
-		self.set_amount_in_words()
-		self.cleanup()
-		
-	def calculate_item_values(self):
-		def _set_base(item, print_field, base_field):
-			"""set values in base currency"""
-			item.fields[base_field] = flt((flt(item.fields[print_field],
-				self.precision.item[print_field]) * \
-				self.doc.fields.get(self.fmap.exchange_rate)),
-				self.precision.item[base_field])
-		
-		for item in self.item_doclist:
-			round_floats_in_doc(item, self.precision.item)
-			
-			if item.fields.get(self.fmap.discount) == 100:
-				if not item.fields.get(self.fmap.print_ref_rate):
-					item.fields[self.fmap.print_ref_rate] = \
-						item.fields.get(self.fmap.print_rate)
-				item.fields[self.fmap.print_rate] = 0
-			else:
-				if item.fields.get(self.fmap.print_ref_rate):
-					item.fields[self.fmap.print_rate] = \
-						flt(item.fields.get(self.fmap.print_ref_rate) *
-						(1.0 - (item.fields.get(self.fmap.discount) / 100.0)),
-						self.precision.item[self.fmap.print_rate])
-				else:
-					# assume that print rate and discount are specified
-					item.fields[self.fmap.print_ref_rate] = \
-						flt(item.fields.get(self.fmap.print_rate) / 
-						(1.0 - (item.fields.get(self.fmap.discount) / 100.0)),
-						self.precision.item[self.fmap.print_ref_rate])
-						
-			item.fields[self.fmap.print_amount] = \
-				flt(item.fields.get(self.fmap.print_rate) * \
-				item.fields.get("qty"),
-				self.precision.item[self.fmap.print_amount])
-				
-			_set_base(item, self.fmap.print_ref_rate, self.fmap.ref_rate)
-			_set_base(item, self.fmap.print_rate, self.fmap.rate)
-			_set_base(item, self.fmap.print_amount, "amount")
-			
-	def initialize_taxes(self):
-		for tax in self.tax_doclist:
-			# initialize totals to 0
-			tax.tax_amount = tax.total = tax.total_print = 0
-			tax.grand_total_for_current_item = tax.tax_amount_for_current_item = 0
-			
-			# for actual type, user can mention actual tax amount in tax.tax_amount_print
-			if tax.charge_type != "Actual" or tax.rate:
-				tax.tax_amount_print = 0
-			
-			self.validate_on_previous_row(tax)
-			self.validate_included_tax(tax)
-			
-			# round relevant values
-			round_floats_in_doc(tax, self.precision.tax)
-			
-	def calculate_net_total(self):
-		self.doc.net_total = 0
-		self.doc.fields[self.fmap.net_total_print] = 0
-		
-		for item in self.item_doclist:
-			self.doc.net_total += item.amount
-			self.doc.fields[self.fmap.net_total_print] += \
-				item.fields.get(self.fmap.print_amount)
-				
-		self.doc.net_total = flt(self.doc.net_total, self.precision.main.net_total)
-		self.doc.fields[self.fmap.net_total_print] = \
-			flt(self.doc.fields.get(self.fmap.net_total_print),
-			self.precision.main.get(self.fmap.net_total_print))
-			
-	def calculate_taxes(self):
-		for item in self.item_doclist:
-			item_tax_map = self._load_item_tax_rate(item.item_tax_rate)
-			item.fields[self.fmap.valuation_tax_amount] = 0
-			
-			for i, tax in enumerate(self.tax_doclist):
-				# tax_amount represents the amount of tax for the current step
-				current_tax_amount = self.get_current_tax_amount(item, tax, item_tax_map)
-				
-				if hasattr(self, "set_valuation_tax_amount"):
-					self.set_valuation_tax_amount(item, tax, current_tax_amount)
-				
-				# case when net total is 0 but there is an actual type charge
-				# in this case add the actual amount to tax.tax_amount
-				# and tax.grand_total_for_current_item for the first such iteration
-				if not (current_tax_amount or self.doc.net_total or tax.tax_amount) and \
-						tax.charge_type=="Actual":
-					zero_net_total_adjustment = flt((tax.tax_amount_print * 
-						self.doc.fields.get(self.fmap.exchange_rate)) or tax.rate, 
-						self.precision.tax.tax_amount)
-					current_tax_amount += zero_net_total_adjustment
-				
-				# store tax_amount for current item as it will be used for
-				# charge type = 'On Previous Row Amount'
-				tax.tax_amount_for_current_item = current_tax_amount
-				
-				# accumulate tax amount into tax.tax_amount
-				tax.tax_amount += tax.tax_amount_for_current_item
-				
-				# accumulate tax_amount_print only if tax is not included
-				# and if tax amount of actual type is entered in 'rate' field
-				if not cint(tax.included_in_print_rate) and (tax.charge_type != "Actual"
-						or tax.rate):
-					tax.tax_amount_print += flt((tax.tax_amount_for_current_item /
-						self.doc.fields.get(self.fmap.exchange_rate)),
-						self.precision.tax.tax_amount_print)
-				
-				if tax.category == "Valuation":
-					# if just for valuation, do not add the tax amount in total
-					# hence, setting it as 0 for further steps
-					current_tax_amount = 0
-				
-				# Calculate tax.total viz. grand total till that step
-				# note: grand_total_for_current_item contains the contribution of 
-				# item's amount, previously applied tax and the current tax on that item
-				if i==0:
-					tax.grand_total_for_current_item = flt(item.amount +
-						current_tax_amount, self.precision.tax.total)
-					
-					# if inclusive pricing, current_tax_amount should not be considered
-					if cint(tax.included_in_print_rate):
-						current_tax_amount = 0
-						
-					tax.grand_total_print_for_current_item = \
-						flt(item.fields.get(self.fmap.print_amount) +
-						(current_tax_amount / self.doc.fields.get(
-							self.fmap.exchange_rate)),
-						self.precision.tax.total_print)
-				else:
-					tax.grand_total_for_current_item = \
-						flt(self.tax_doclist[i-1].grand_total_for_current_item +
-							current_tax_amount, self.precision.tax.total)
-					
-					# if inclusive pricing, current_tax_amount should not be considered
-					if cint(tax.included_in_print_rate):
-						current_tax_amount = 0
-					
-					tax.grand_total_print_for_current_item = \
-						flt(self.tax_doclist[i-1].grand_total_print_for_current_item +
-							(current_tax_amount / self.doc.fields.get(
-								self.fmap.exchange_rate)),
-							self.precision.tax.total_print)
-
-				# in tax.total, accumulate grand total of each item
-				tax.total += tax.grand_total_for_current_item
-				tax.total_print += tax.grand_total_print_for_current_item
-				
-				# TODO store tax_breakup for each item
-				
-	def get_current_tax_amount(self, item, tax, item_tax_map):
-		tax_rate = self._get_tax_rate(tax, item_tax_map)
-
-		if tax.charge_type == "Actual":
-			# distribute the tax amount proportionally to each item row
-			actual = flt(tax.rate or (tax.tax_amount_print * \
-				self.doc.fields.get(self.fmap.exchange_rate)),
-				self.precision.tax.tax_amount)
-			current_tax_amount = (self.doc.net_total
-				and ((item.amount / self.doc.net_total) * actual)
-				or 0)
-		elif tax.charge_type == "On Net Total":
-			current_tax_amount = (tax_rate / 100.0) * item.amount
-		elif tax.charge_type == "On Previous Row Amount":
-			current_tax_amount = (tax_rate / 100.0) * \
-				self.tax_doclist[cint(tax.row_id) - 1].tax_amount_for_current_item
-		elif tax.charge_type == "On Previous Row Total":
-			current_tax_amount = (tax_rate / 100.0) * \
-				self.tax_doclist[cint(tax.row_id) - 1].grand_total_for_current_item
-
-		return flt(current_tax_amount, self.precision.tax.tax_amount)
-		
-	def calculate_totals(self):
-		if self.tax_doclist:
-			self.doc.grand_total = flt(self.tax_doclist[-1].total,
-				self.precision.main.grand_total)
-			self.doc.fields[self.fmap.grand_total_print] = \
-				flt(self.tax_doclist[-1].total_print,
-				self.precision.main[self.fmap.grand_total_print])
-		else:
-			self.doc.grand_total = flt(self.doc.net_total,
-				self.precision.main.grand_total)
-			self.doc.fields[self.fmap.grand_total_print] = \
-				flt(self.doc.fields.get(self.fmap.net_total_print),
-				self.precision.main[self.fmap.grand_total_print])
-		
-		self.doc.fields[self.fmap.taxes_and_charges_total] = \
-			flt(self.doc.grand_total - self.doc.net_total,
-			self.precision.main[self.fmap.taxes_and_charges_total])
-			
-		self.doc.taxes_and_charges_total_print = \
-			flt(self.doc.fields.get(self.fmap.grand_total_print) - \
-			self.doc.fields.get(self.fmap.net_total_print),
-			self.precision.main.taxes_and_charges_total_print)
-		
-		self.doc.rounded_total = round(self.doc.grand_total)
-		self.doc.fields[self.fmap.rounded_total_print] = \
-			round(self.doc.fields.get(self.fmap.grand_total_print))
-			
-	def set_amount_in_words(self):
-		from webnotes.utils import money_in_words
-		base_currency = webnotes.conn.get_value("Company", self.doc.currency,
-			"default_currency")
-		
-		self.doc.fields[self.fmap.grand_total_in_words] = \
-			money_in_words(self.doc.grand_total, base_currency)
-		self.doc.fields[self.fmap.rounded_total_in_words] = \
-			money_in_words(self.doc.rounded_total, base_currency)
-		
-		self.doc.fields[self.fmap.grand_total_in_words_print] = \
-			money_in_words(self.doc.fields.get(self.fmap.grand_total_print),
-			self.doc.currency)
-		self.doc.fields[self.fmap.rounded_total_in_words_print] = \
-			money_in_words(self.doc.fields.get(self.fmap.rounded_total_print),
-			self.doc.currency)
-			
-	def validate_on_previous_row(self, tax):
-		"""
-			validate if a valid row id is mentioned in case of
-			On Previous Row Amount and On Previous Row Total
-		"""
-		if tax.charge_type in ["On Previous Row Amount", "On Previous Row Total"] and \
-				(not tax.row_id or cint(tax.row_id) >= tax.idx):
-			msgprint((_("Row") + " # %(idx)s [%(taxes_doctype)s]: " + \
-				_("Please specify a valid") + " %(row_id_label)s") % {
-					"idx": tax.idx,
-					"taxes_doctype": tax.parenttype,
-					"row_id_label": self.meta.get_label("row_id",
-						parentfield=self.fmap.taxes_and_charges)
-				}, raise_exception=True)
-	
-	def validate_included_tax(self, tax):
-		"""
-			validate conditions related to "Is this Tax Included in Rate?"
-		"""
-		def _on_previous_row_error(tax, row_range):
-			msgprint((_("Row") + " # %(idx)s [%(taxes_doctype)s]: " + \
-				_("If") + " '%(inclusive_label)s' " + _("is checked for") + \
-				" '%(charge_type_label)s' = '%(charge_type)s', " + _("then") + " " + \
-				_("Row") + " # %(row_range)s " + _("should also have") + \
-				" '%(inclusive_label)s' = " + _("checked")) % {
-					"idx": tax.idx,
-					"taxes_doctype": tax.doctype,
-					"inclusive_label": self.meta.get_label("included_in_print_rate",
-						parentfield=self.fmap.taxes_and_charges),
-					"charge_type_label": self.meta.get_label("charge_type",
-						parentfield=self.fmap.taxes_and_charges),
-					"charge_type": tax.charge_type,
-					"row_range": row_range,
-				}, raise_exception=True)
-		
-		if cint(tax.included_in_print_rate):
-			if tax.charge_type == "Actual":
-				# now inclusive rate for type 'Actual'
-				msgprint((_("Row") + " # %(idx)s [%(taxes_doctype)s]: " + \
-					"'%(charge_type_label)s' = '%(charge_type)s' " + \
-					_("cannot be included in item's rate")) % {
-						"idx": tax.idx,
-						"taxes_doctype": self.meta.get_options(
-							self.fmap.taxes_and_charges),
-						"charge_type_label": self.meta.get_label("charge_type",
-							parentfield=self.fmap.taxes_and_charges),
-						"charge_type": tax.charge_type,
-					}, raise_exception=True)
-					
-			elif tax.charge_type == "On Previous Row Amount" and \
-					not cint(self.tax_doclist[cint(tax.row_id) - 1]\
-						.included_in_print_rate):
-				# for an inclusive tax of type "On Previous Row Amount",
-				# dependent row should also be inclusive
-				_on_previous_row_error(tax, tax.row_id)
-				
-			elif tax.charge_type == "On Previous Row Total" and \
-					not all([cint(t.included_in_print_rate) \
-						for t in self.tax_doclist[:tax.idx - 1]]):
-				# for an inclusive tax of type "On Previous Row Total", 
-				# all rows above it should also be inclusive
-				_on_previous_row_error(tax, "1 - %d" % (tax.idx - 1))
-		
-	def determine_exclusive_rate(self):
-		if not any((cint(tax.included_in_print_rate) for tax in self.tax_doclist)):
-			# if no tax is marked as included in print rate, no need to proceed further
-			return
-		
-		for item in self.item_doclist:
-			item_tax_map = self._load_item_tax_rate(item.item_tax_rate)
-			
-			cumulated_tax_fraction = 0
-			
-			for i, tax in enumerate(self.tax_doclist):
-				if cint(tax.included_in_print_rate):
-					tax.tax_fraction_for_current_item = \
-						self.get_current_tax_fraction(tax, item_tax_map)
-				else:
-					tax.tax_fraction_for_current_item = 0
-				
-				if i==0:
-					tax.grand_total_fraction_for_current_item = 1 + \
-						tax.tax_fraction_for_current_item
-				else:
-					tax.grand_total_fraction_for_current_item = \
-						self.tax_doclist[i-1].grand_total_fraction_for_current_item \
-						+ tax.tax_fraction_for_current_item
-						
-				cumulated_tax_fraction += tax.tax_fraction_for_current_item
-			
-			if cumulated_tax_fraction:
-				item.fields[self.fmap.rate] = \
-					flt((item.fields.get(self.fmap.print_rate) * \
-					self.doc.fields.get(self.fmap.exchange_rate)) / 
-					(1 + cumulated_tax_fraction), self.precision.item[self.fmap.rate])
-				
-				item.amount = flt(item.fields.get(self.fmap.rate) * item.qty,
-					self.precision.item.amount)
-				
-				item.fields[self.fmap.ref_rate] = \
-					flt(item.fields.get(self.fmap.rate) / (1 - \
-					(item.fields.get(self.fmap.discount) / 100.0)),
-					self.precision.item[self.fmap.ref_rate])
-		
-				# print item.print_rate, 1+cumulated_tax_fraction, item.rate, item.amount
-				# print "-"*10
-
-	def get_current_tax_fraction(self, tax, item_tax_map):
-		"""
-			Get tax fraction for calculating tax exclusive amount
-			from tax inclusive amount
-		"""
-		current_tax_fraction = 0
-		
-		if cint(tax.included_in_print_rate):
-			tax_rate = self._get_tax_rate(tax, item_tax_map)
-			
-			if tax.charge_type == "On Net Total":
-				current_tax_fraction = tax_rate / 100.0
-			
-			elif tax.charge_type == "On Previous Row Amount":
-				current_tax_fraction = (tax_rate / 100.0) * \
-					self.tax_doclist[cint(tax.row_id) - 1]\
-						.tax_fraction_for_current_item
-			
-			elif tax.charge_type == "On Previous Row Total":
-				current_tax_fraction = (tax_rate / 100.0) * \
-					self.tax_doclist[cint(tax.row_id) - 1]\
-						.grand_total_fraction_for_current_item
-						
-			# print tax.account_head, tax_rate, current_tax_fraction
-
-		return current_tax_fraction
-	
-	def _load_item_tax_rate(self, item_tax_rate):
-		if not item_tax_rate:
-			return {}
-
-		return json.loads(item_tax_rate)
-		
-	def _get_tax_rate(self, tax, item_tax_map):
-		if item_tax_map.has_key(tax.account_head):
-			return flt(item_tax_map.get(tax.account_head), self.precision.tax.rate)
-		else:
-			return tax.rate
-			
-	def cleanup(self):
-		def _del(f, doc):
-			if f in doc.fields:
-				del doc.fields[f]
-			elif self.fmap.get(f) and self.fmap.get(f) in doc.fields:
-				del doc.fields[self.fmap.get(f)]
-		
-		for f in ["taxes_and_charges_total_print", "rounded_total_in_words_print",
-				"rounded_total_print", "rounded_total_in_words", "rounded_total"]:
-			_del(f, self.doc)
-		
-		for f in ["grand_total_print_for_current_item", "tax_amount_print",
-				"grand_total_for_current_item", "tax_amount_for_current_item",
-				"total_print"]:
-			for doc in self.doclist.get({"parentfield": self.fmap.taxes_and_charges}):
-				_del(f, doc)
-			
-		for f in ["item_tax_amount"]:
-			for doc in self.doclist.get({"parentfield": self.item_table_field}):
-				_del(f, doc)
-				
diff --git a/controllers/transaction_controller.py b/controllers/transaction_controller.py
deleted file mode 100644
index 3e4d62e..0000000
--- a/controllers/transaction_controller.py
+++ /dev/null
@@ -1,123 +0,0 @@
-# ERPNext - web based ERP (http://erpnext.com)
-# Copyright (C) 2012 Web Notes Technologies Pvt Ltd
-# 
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-from __future__ import unicode_literals
-import webnotes
-import webnotes.model
-from webnotes import _, _dict
-from webnotes.utils import cint
-import json
-
-from webnotes.model.controller import DocListController
-
-class TransactionController(DocListController):
-	def __init__(self, doc, doclist):
-		super(TransactionController, self).__init__(doc, doclist)
-		self.cur_docstatus = cint(webnotes.conn.get_value(self.doc.doctype, 
-			self.doc.name, "docstatus"))
-		
-	@property
-	def precision(self):
-		if not hasattr(self, "_precision"):
-			self._precision = _dict()
-			self._precision.main = self.meta.get_precision_map()
-			self._precision.item = self.meta.get_precision_map(parentfield = \
-				self.item_table_field)
-			if self.meta.get_field(self.fmap.taxes_and_charges):
-				self._precision.tax = self.meta.get_precision_map(parentfield = \
-					self.fmap.taxes_and_charges)
-		return self._precision
-		
-	@property
-	def item_doclist(self):
-		if not hasattr(self, "_item_doclist"):
-			self._item_doclist = self.doclist.get({"parentfield": self.item_table_field})
-		return self._item_doclist
-
-	@property
-	def tax_doclist(self):
-		if not hasattr(self, "_tax_doclist"):
-			self._tax_doclist = self.doclist.get(
-				{"parentfield": self.fmap.taxes_and_charges})
-		return self._tax_doclist
-	
-	@property
-	def stock_items(self):
-		if not hasattr(self, "_stock_items"):
-			item_codes = list(set(item.item_code for item in self.item_doclist))
-			self._stock_items = [r[0] for r in webnotes.conn.sql("""select name
-				from `tabItem` where name in (%s) and is_stock_item='Yes'""" % \
-				(", ".join((["%s"]*len(item_codes))),), item_codes)]
-
-		return self._stock_items
-	
-	@property
-	def fmap(self):
-		if not hasattr(self, "_fmap"):
-			if self.doc.doctype in ["Lead", "Quotation", "Sales Order", "Sales Invoice",
-					"Delivery Note"]:
-				self._fmap = webnotes._dict(	{
-					"exchange_rate": "conversion_rate",
-					"taxes_and_charges": "other_charges",
-					"taxes_and_charges_master": "charge",
-					"taxes_and_charges_total": "other_charges_total",
-					"net_total_print": "net_total_print",
-					"grand_total_print": "grand_total_export",
-					"grand_total_in_words": "grand_total_in_words",
-					"grand_total_in_words_print": "grand_total_in_words_print",
-					"rounded_total_print": "rounded_total_export",
-					"rounded_total_in_words": "in_words",
-					"rounded_total_in_words_print": "in_words_export",
-					"print_ref_rate": "ref_rate",
-					"discount": "adj_rate",
-					"print_rate": "export_rate",
-					"print_amount": "export_amount",
-					"ref_rate": "base_ref_rate",
-					"rate": "basic_rate",
-					
-					"plc_exchange_rate": "plc_conversion_rate",
-					"tax_calculation": "other_charges_calculation",
-					"cost_center": "cost_center_other_charges",
-				})
-			else:
-				self._fmap = webnotes._dict({
-					"exchange_rate": "conversion_rate",
-					"taxes_and_charges": "purchase_tax_details",
-					"taxes_and_charges_master": "purchase_other_charges",
-					"taxes_and_charges_total": "total_tax",
-					"net_total_print": "net_total_import",
-					"grand_total_print": "grand_total_import",
-					"grand_total_in_words": "in_words",
-					"grand_total_in_words_print": "in_words_import",
-					"rounded_total_print": "rounded_total_print",
-					"rounded_total_in_words": "rounded_total_in_words",
-					"rounded_total_in_words_print": "rounded_total_in_words_print",
-					"print_ref_rate": "import_ref_rate",
-					"discount": "discount_rate",
-					"print_rate": "import_rate",
-					"print_amount": "import_amount",
-					"ref_rate": "purchase_ref_rate",
-					"rate": "purchase_rate",
-					
-					"valuation_tax_amount": "item_tax_amount"
-				})
-				
-				if self.doc.doctype == "Purchase Invoice":
-					self._fmap.update({
-						"rate": "rate"
-					})
-			
-		return self._fmap or webnotes._dict()
\ No newline at end of file
diff --git a/hr/doctype/employee/employee.py b/hr/doctype/employee/employee.py
index 4360c7e..d08da1a 100644
--- a/hr/doctype/employee/employee.py
+++ b/hr/doctype/employee/employee.py
@@ -70,6 +70,11 @@
 			webnotes.conn.set_default("employee", self.doc.name, self.doc.user_id)
 			webnotes.conn.set_default("employee_name", self.doc.employee_name, self.doc.user_id)
 			webnotes.conn.set_default("company", self.doc.company, self.doc.user_id)
+			
+			# add employee role if missing
+			if not "Employee" in webnotes.conn.sql_list("""select role from tabUserRole
+				where parent=%s""", self.doc.user_id):
+				webnotes.get_obj("Profile", self.doc.user_id).add_role("Employee")
 	
 	def validate_date(self):
 		import datetime
@@ -134,4 +139,15 @@
 	"status": "Active",
 	"company": "_Test Company",
 	"user_id": "test@erpnext.com"
+}],
+[{
+	"doctype":"Employee",
+	"employee_name": "_Test Employee 1",
+	"naming_series": "_T-Employee-",
+	"date_of_joining": "2010-01-01",
+	"date_of_birth": "1980-01-01",
+	"gender": "Male",
+	"status": "Active",
+	"company": "_Test Company",
+	"user_id": "test1@erpnext.com"
 }]]
\ No newline at end of file
diff --git a/hr/doctype/holiday_block_list/holiday_block_list.py b/hr/doctype/holiday_block_list/holiday_block_list.py
index 4ebe49e..619f373 100644
--- a/hr/doctype/holiday_block_list/holiday_block_list.py
+++ b/hr/doctype/holiday_block_list/holiday_block_list.py
@@ -31,4 +31,11 @@
 		"parentfield": "holiday_block_list_dates",
 		"block_date": "2013-01-02",
 		"reason": "First work day"
-	}]]
\ No newline at end of file
+	}, {
+		"doctype": "Holiday Block List Allow",
+		"parent": "_Test Holiday Block List",
+		"parenttype": "Holiday Block List",
+		"parentfield": "holiday_block_list_allowed",
+		"allow_user": "test1@erpnext.com",
+		}
+	]]
\ No newline at end of file
diff --git a/hr/doctype/holiday_block_list/holiday_block_list.txt b/hr/doctype/holiday_block_list/holiday_block_list.txt
index 732e783..31b2f98 100644
--- a/hr/doctype/holiday_block_list/holiday_block_list.txt
+++ b/hr/doctype/holiday_block_list/holiday_block_list.txt
@@ -2,7 +2,7 @@
  {
   "creation": "2013-02-04 15:31:29", 
   "docstatus": 0, 
-  "modified": "2013-02-04 15:38:57", 
+  "modified": "2013-02-06 14:39:09", 
   "modified_by": "Administrator", 
   "owner": "Administrator"
  }, 
@@ -54,6 +54,13 @@
   "reqd": 1
  }, 
  {
+  "description": "Stop users from making Leave Applications on following days.", 
+  "doctype": "DocField", 
+  "fieldname": "block_days", 
+  "fieldtype": "Section Break", 
+  "label": "Block Days"
+ }, 
+ {
   "doctype": "DocField", 
   "fieldname": "holiday_block_list_dates", 
   "fieldtype": "Table", 
@@ -61,6 +68,20 @@
   "options": "Holiday Block List Date"
  }, 
  {
+  "description": "Allow the following users to make Leave Applications for block days.", 
+  "doctype": "DocField", 
+  "fieldname": "allow_list", 
+  "fieldtype": "Section Break", 
+  "label": "Allow Users"
+ }, 
+ {
+  "doctype": "DocField", 
+  "fieldname": "holiday_block_list_allowed", 
+  "fieldtype": "Table", 
+  "label": "Holiday Block List Allowed", 
+  "options": "Holiday Block List Allow"
+ }, 
+ {
   "doctype": "DocPerm"
  }
 ]
\ No newline at end of file
diff --git a/hr/doctype/holiday_block_list_allow/__init__.py b/hr/doctype/holiday_block_list_allow/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/holiday_block_list_allow/__init__.py
diff --git a/hr/doctype/holiday_block_list_allow/holiday_block_list_allow.py b/hr/doctype/holiday_block_list_allow/holiday_block_list_allow.py
new file mode 100644
index 0000000..928aa9f
--- /dev/null
+++ b/hr/doctype/holiday_block_list_allow/holiday_block_list_allow.py
@@ -0,0 +1,8 @@
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import webnotes
+
+class DocType:
+	def __init__(self, d, dl):
+		self.doc, self.doclist = d, dl
\ No newline at end of file
diff --git a/hr/doctype/holiday_block_list_allow/holiday_block_list_allow.txt b/hr/doctype/holiday_block_list_allow/holiday_block_list_allow.txt
new file mode 100644
index 0000000..bdbd2a0
--- /dev/null
+++ b/hr/doctype/holiday_block_list_allow/holiday_block_list_allow.txt
@@ -0,0 +1,35 @@
+[
+ {
+  "creation": "2013-02-06 14:31:03", 
+  "docstatus": 0, 
+  "modified": "2013-02-06 14:31:03", 
+  "modified_by": "Administrator", 
+  "owner": "Administrator"
+ }, 
+ {
+  "doctype": "DocType", 
+  "istable": 1, 
+  "module": "HR", 
+  "name": "__common__"
+ }, 
+ {
+  "doctype": "DocField", 
+  "fieldname": "allow_user", 
+  "fieldtype": "Link", 
+  "label": "Allow User", 
+  "name": "__common__", 
+  "options": "Profile", 
+  "parent": "Holiday Block List Allow", 
+  "parentfield": "fields", 
+  "parenttype": "DocType", 
+  "permlevel": 0, 
+  "width": "200px"
+ }, 
+ {
+  "doctype": "DocType", 
+  "name": "Holiday Block List Allow"
+ }, 
+ {
+  "doctype": "DocField"
+ }
+]
\ No newline at end of file
diff --git a/hr/doctype/leave_application/leave_application.py b/hr/doctype/leave_application/leave_application.py
index 8c7124e..cab8f17 100755
--- a/hr/doctype/leave_application/leave_application.py
+++ b/hr/doctype/leave_application/leave_application.py
@@ -53,6 +53,8 @@
 		if department:
 			block_list = webnotes.conn.get_value("Department", department, "holiday_block_list")
 			if block_list:
+				if self.is_user_in_allow_list(block_list):
+					return
 				for d in webnotes.conn.sql("""select block_date, reason from
 					`tabHoliday Block List Date` where parent=%s""", block_list, as_dict=1):
 					block_date = getdate(d.block_date)
@@ -61,6 +63,10 @@
 							+ ": " + formatdate(d.block_date) + _(" Reason: ") + d.reason)
 						raise LeaveDayBlockedError
 
+	def is_user_in_allow_list(self, block_list):
+		return webnotes.session.user in webnotes.conn.sql_list("""select allow_user
+			from `tabHoliday Block List Allow` where parent=%s""", block_list)
+
 	def get_holidays(self):
 		tot_hol = webnotes.conn.sql("""select count(*) from `tabHoliday` h1, `tabHoliday List` h2, `tabEmployee` e1 
 			where e1.name = %s and h1.parent = h2.name and e1.holiday_list = h2.name 
@@ -147,23 +153,4 @@
 
 def is_lwp(leave_type):
 	lwp = webnotes.conn.sql("select is_lwp from `tabLeave Type` where name = %s", leave_type)
-	return lwp and cint(lwp[0][0]) or 0
-
-test_records = [
-	[{
-		"doctype": "Leave Allocation",
-		"leave_type": "_Test Leave Type",
-		"fiscal_year": "_Test Fiscal Year",
-		"employee":"_T-Employee-0001",
-		"new_leaves_allocated": 15,
-		"docstatus": 1
-	}],
-	[{
-		"doctype": "Leave Application",
-		"leave_type": "_Test Leave Type",
-		"from_date": "2013-05-01",
-		"to_date": "2013-05-05",
-		"posting_date": "2013-01-02",
-		"fiscal_year": "_Test Fiscal Year",
-		"employee": "_T-Employee-0001"
-	}]]
\ No newline at end of file
+	return lwp and cint(lwp[0][0]) or 0
\ No newline at end of file
diff --git a/hr/doctype/leave_application/test_leave_application.py b/hr/doctype/leave_application/test_leave_application.py
index fac3685..e485289 100644
--- a/hr/doctype/leave_application/test_leave_application.py
+++ b/hr/doctype/leave_application/test_leave_application.py
@@ -1,26 +1,50 @@
-	import sys
-	import unittest
+import sys
+import unittest
 
-	from hr.doctype.leave_application.leave_application import test_records, LeaveDayBlockedError
+from hr.doctype.leave_application.leave_application import LeaveDayBlockedError
 
-	class TestLeaveApplication(unittest.TestCase):
-		def setUp(self):
-			from webnotes.test_runner import make_test_records
-			make_test_records("Leave Application")
-	
-		def test_block_list(self):
-			import webnotes
-			webnotes.conn.set_value("Employee", "_T-Employee-0001", "department", 
-				"_Test Department with Block List")
-			
-			application = webnotes.model_wrapper(test_records[1])
-			application.doc.from_date = "2013-01-01"
-			application.doc.to_date = "2013-01-05"
-			self.assertRaises(LeaveDayBlockedError, application.insert)
-		
-	if __name__=="__main__":
-		sys.path.extend(["app", "lib"])
+class TestLeaveApplication(unittest.TestCase):
+	def test_block_list(self):
 		import webnotes
-		webnotes.connect()
-		unittest.main()
-	
\ No newline at end of file
+		webnotes.conn.set_value("Employee", "_T-Employee-0001", "department", 
+			"_Test Department with Block List")
+		
+		application = webnotes.model_wrapper(test_records[1])
+		application.doc.from_date = "2013-01-01"
+		application.doc.to_date = "2013-01-05"
+		self.assertRaises(LeaveDayBlockedError, application.insert)
+		
+		webnotes.session.user = "test1@erpnext.com"
+		webnotes.get_obj("Profile", "test1@erpnext.com").add_role("HR User")
+		self.assertTrue(application.insert())
+		
+
+test_records = [
+	[{
+		"doctype": "Leave Allocation",
+		"leave_type": "_Test Leave Type",
+		"fiscal_year": "_Test Fiscal Year",
+		"employee":"_T-Employee-0001",
+		"new_leaves_allocated": 15,
+		"docstatus": 1
+	}],
+	[{
+		"doctype": "Leave Application",
+		"leave_type": "_Test Leave Type",
+		"from_date": "2013-05-01",
+		"to_date": "2013-05-05",
+		"posting_date": "2013-01-02",
+		"fiscal_year": "_Test Fiscal Year",
+		"employee": "_T-Employee-0001"
+	}]]
+
+if __name__=="__main__":
+	sys.path.extend(["app", "lib"])
+	import webnotes
+	webnotes.connect()
+
+	from webnotes.test_runner import make_test_records
+	make_test_records("Leave Application")
+
+	unittest.main()
+
diff --git a/patches/february_2013/remove_account_utils_folder.py b/patches/february_2013/remove_account_utils_folder.py
new file mode 100644
index 0000000..5d0313b
--- /dev/null
+++ b/patches/february_2013/remove_account_utils_folder.py
@@ -0,0 +1,8 @@
+def execute():
+	from webnotes.utils import get_base_path
+	import shutil
+	import os
+	
+	utils_path = os.path.join(get_base_path(), "app", "accounts", "utils")
+	if os.path.exists(utils_path):
+		shutil.rmtree(utils_path)
\ No newline at end of file
diff --git a/patches/patch_list.py b/patches/patch_list.py
index 80cdb4d..cf9c189 100644
--- a/patches/patch_list.py
+++ b/patches/patch_list.py
@@ -165,4 +165,5 @@
 	"patches.february_2013.payment_reconciliation_reset_values",
 	"patches.february_2013.remove_sales_order_pending_items",
 	"patches.february_2013.account_negative_balance",
+	"patches.february_2013.remove_account_utils_folder",
 ]
\ No newline at end of file
diff --git a/public/js/toolbar.js b/public/js/toolbar.js
index fd7109a..8fd3d98 100644
--- a/public/js/toolbar.js
+++ b/public/js/toolbar.js
@@ -52,7 +52,7 @@
 	$('<li class="dropdown">\
 		<a class="dropdown-toggle" data-toggle="dropdown" href="#"\
 			title="'+wn._("Modules")+'"\
-			onclick="return false;"><i class="icon-th"></i> <b class="caret"></b></a>\
+			onclick="return false;"><i class="icon-th"></i></a>\
 		<ul class="dropdown-menu modules">\
 		</ul>\
 		</li>').prependTo('.navbar .nav:first');
