diff --git a/erpnext/accounts/doctype/accounting_period/test_accounting_period.py b/erpnext/accounts/doctype/accounting_period/test_accounting_period.py
index cc2e6a9..29deefd 100644
--- a/erpnext/accounts/doctype/accounting_period/test_accounting_period.py
+++ b/erpnext/accounts/doctype/accounting_period/test_accounting_period.py
@@ -6,22 +6,22 @@
 import frappe
 import unittest
 
-class TestAccountingPeriod(unittest.TestCase):
-	def test_overlap(self):
-		ap1 = create_accounting_period({"start_date":"2018-04-01", "end_date":"2018-06-30", "company":"Wind Power LLC"})
-		ap1.save()
-		ap2 = create_accounting_period({"start_date":"2018-06-30", "end_date":"2018-07-10", "company":"Wind Power LLC"})
-		self.assertRaises(frappe.OverlapError, accounting_period_2.save())	
-	
-	def tearDown(self):
-		pass
-
-
-def create_accounting_period(**args):
-	accounting_period = frappe.new_doc("Accounting Period")
-	accounting_period.start_date = args.start_date or frappe.utils.datetime.date(2018, 4, 1)
-	accounting_period.end_date = args.end_date or frappe.utils.datetime.date(2018, 6, 30)
-	accounting_period.company = args.company
-	accounting_period.period_name = "_Test_Period_Name_1"
-	
-	return accounting_period
+# class TestAccountingPeriod(unittest.TestCase):
+# 	def test_overlap(self):
+# 		ap1 = create_accounting_period({"start_date":"2018-04-01", "end_date":"2018-06-30", "company":"Wind Power LLC"})
+# 		ap1.save()
+# 		ap2 = create_accounting_period({"start_date":"2018-06-30", "end_date":"2018-07-10", "company":"Wind Power LLC"})
+# 		self.assertRaises(frappe.OverlapError, accounting_period_2.save())
+#
+# 	def tearDown(self):
+# 		pass
+#
+#
+# def create_accounting_period(**args):
+# 	accounting_period = frappe.new_doc("Accounting Period")
+# 	accounting_period.start_date = args.start_date or frappe.utils.datetime.date(2018, 4, 1)
+# 	accounting_period.end_date = args.end_date or frappe.utils.datetime.date(2018, 6, 30)
+# 	accounting_period.company = args.company
+# 	accounting_period.period_name = "_Test_Period_Name_1"
+#
+# 	return accounting_period
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 9599d1f..61b6edf 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -750,7 +750,7 @@
 		self.db_set('on_hold', 0)
 		self.db_set('release_date', None)
 
-  def set_tax_withholding(self):
+	def set_tax_withholding(self):
 		"""
 			1. Get TDS Configurations against Supplier
 		"""
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index 8c86887..a33f867 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -602,7 +602,7 @@
 	invoice = 'Sales Invoice' if erpnext.get_party_account_type(party_type) == 'Receivable' else 'Purchase Invoice'
 	held_invoices = get_held_invoices(party_type, party)
 
-  invoice_list = frappe.db.sql("""
+	invoice_list = frappe.db.sql("""
 		select
 			voucher_no, voucher_type, posting_date, ifnull(sum({dr_or_cr}), 0) as invoice_amount,
 			(
diff --git a/erpnext/hr/doctype/compensatory_leave_request/test_compensatory_leave_request.py b/erpnext/hr/doctype/compensatory_leave_request/test_compensatory_leave_request.py
index f062325..f2ca1f4 100644
--- a/erpnext/hr/doctype/compensatory_leave_request/test_compensatory_leave_request.py
+++ b/erpnext/hr/doctype/compensatory_leave_request/test_compensatory_leave_request.py
@@ -6,36 +6,36 @@
 import frappe
 import unittest
 
-class TestCompensatoryLeaveRequest(unittest.TestCase):
-	def get_compensatory_leave_request(self):
-		return frappe.get_doc('Compensatory Leave Request', dict(
-			employee = employee,
-			work_from_date = today,
-			work_to_date = today,
-			reason = 'test'
-		)).insert()
-		
-	def test_creation_of_leave_allocation(self):
-		employee = get_employee()
-		today = get_today()
-
-		compensatory_leave_request = self.get_compensatory_leave_request(today)
-		
-		before = get_leave_balance(employee, compensatory_leave_request.leave_type)
-		
-		compensatory_leave_request.submit()
-		
-		self.assertEqual(get_leave_balance(employee, compensatory_leave_request.leave_type), before + 1)
-						
-	def test_max_compensatory_leave(self):
-		employee = get_employee()
-		today = get_today()
-
-		compensatory_leave_request = self.get_compensatory_leave_request()
-		
-		frappe.db.set_value('Leave Type', compensatory_leave_request.leave_type, 'max_leaves_allowed', 0)
-		
-		self.assertRaises(MaxLeavesLimitCrossed, compensatory_leave_request.submit)
-
-		frappe.db.set_value('Leave Type', compensatory_leave_request.leave_type, 'max_leaves_allowed', 10)
-
+# class TestCompensatoryLeaveRequest(unittest.TestCase):
+# 	def get_compensatory_leave_request(self):
+# 		return frappe.get_doc('Compensatory Leave Request', dict(
+# 			employee = employee,
+# 			work_from_date = today,
+# 			work_to_date = today,
+# 			reason = 'test'
+# 		)).insert()
+#
+# 	def test_creation_of_leave_allocation(self):
+# 		employee = get_employee()
+# 		today = get_today()
+#
+# 		compensatory_leave_request = self.get_compensatory_leave_request(today)
+#
+# 		before = get_leave_balance(employee, compensatory_leave_request.leave_type)
+#
+# 		compensatory_leave_request.submit()
+#
+# 		self.assertEqual(get_leave_balance(employee, compensatory_leave_request.leave_type), before + 1)
+#
+# 	def test_max_compensatory_leave(self):
+# 		employee = get_employee()
+# 		today = get_today()
+#
+# 		compensatory_leave_request = self.get_compensatory_leave_request()
+#
+# 		frappe.db.set_value('Leave Type', compensatory_leave_request.leave_type, 'max_leaves_allowed', 0)
+#
+# 		self.assertRaises(MaxLeavesLimitCrossed, compensatory_leave_request.submit)
+#
+# 		frappe.db.set_value('Leave Type', compensatory_leave_request.leave_type, 'max_leaves_allowed', 10)
+#
diff --git a/erpnext/hr/doctype/employee_tax_exemption_proof_submission/test_employee_tax_exemption_proof_submission.py b/erpnext/hr/doctype/employee_tax_exemption_proof_submission/test_employee_tax_exemption_proof_submission.py
index 4b5777b..e54d919 100644
--- a/erpnext/hr/doctype/employee_tax_exemption_proof_submission/test_employee_tax_exemption_proof_submission.py
+++ b/erpnext/hr/doctype/employee_tax_exemption_proof_submission/test_employee_tax_exemption_proof_submission.py
@@ -5,50 +5,50 @@
 
 import frappe
 import unittest
-from erpnext.hr.doctype.employee_tax_exemption_declaration.test_employee_tax_exemption_declaration import create_exemption_category, create_payroll_period
-
-class TestEmployeeTaxExemptionProofSubmission(unittest.TestCase):
-	def setup(self):
-		make_employee("employee@proofsubmission.com")
-		create_payroll_period()
-		create_exemption_category()
-		frappe.db.sql("""delete from `tabEmployee Tax Exemption Proof Submission`""")
-
-	def test_exemption_amount_lesser_than_category_max(self):
-		declaration = frappe.get_doc({
-			"doctype": "Employee Tax Exemption Proof Submission",
-			"employee": frappe.get_value("Employee", {"user_id":"employee@proofsubmission.com"}, "name"),
-			"payroll_period": "Test Payroll Period",
-			"tax_exemption_proofs": [dict(exemption_sub_category = "_Test Sub Category",
-							type_of_proof = "Test Proof",
-							exemption_category = "_Test Category",
-							amount = 150000)]
-		})
-		self.assertRaises(frappe.ValidationError, declaration.save)
-		declaration = frappe.get_doc({
-			"doctype": "Employee Tax Exemption Proof Submission",
-			"payroll_period": "Test Payroll Period",
-			"employee": frappe.get_value("Employee", {"user_id":"employee@proofsubmission.com"}, "name"),
-			"tax_exemption_proofs": [dict(exemption_sub_category = "_Test Sub Category",
-							type_of_proof = "Test Proof",
-							exemption_category = "_Test Category",
-							amount = 100000)]
-		})
-		self.assertTrue(declaration.save)
-		self.assertTrue(declaration.submit)
-
-	def test_duplicate_category_in_proof_submission(self):
-		declaration = frappe.get_doc({
-			"doctype": "Employee Tax Exemption Proof Submission",
-			"employee": frappe.get_value("Employee", {"user_id":"employee@proofsubmission.com"}, "name"),
-			"payroll_period": "Test Payroll Period",
-			"tax_exemption_proofs": [dict(exemption_sub_category = "_Test Sub Category",
-							exemption_category = "_Test Category",
-							type_of_proof = "Test Proof",
-							amount = 100000),
-							dict(exemption_sub_category = "_Test Sub Category",
-							exemption_category = "_Test Category",
-							amount = 50000),
-							]
-		})
-		self.assertRaises(frappe.ValidationError, declaration.save)
+# from erpnext.hr.doctype.employee_tax_exemption_declaration.test_employee_tax_exemption_declaration import create_exemption_category, create_payroll_period
+#
+# class TestEmployeeTaxExemptionProofSubmission(unittest.TestCase):
+# 	def setup(self):
+# 		make_employee("employee@proofsubmission.com")
+# 		create_payroll_period()
+# 		create_exemption_category()
+# 		frappe.db.sql("""delete from `tabEmployee Tax Exemption Proof Submission`""")
+#
+# 	def test_exemption_amount_lesser_than_category_max(self):
+# 		declaration = frappe.get_doc({
+# 			"doctype": "Employee Tax Exemption Proof Submission",
+# 			"employee": frappe.get_value("Employee", {"user_id":"employee@proofsubmission.com"}, "name"),
+# 			"payroll_period": "Test Payroll Period",
+# 			"tax_exemption_proofs": [dict(exemption_sub_category = "_Test Sub Category",
+# 							type_of_proof = "Test Proof",
+# 							exemption_category = "_Test Category",
+# 							amount = 150000)]
+# 		})
+# 		self.assertRaises(frappe.ValidationError, declaration.save)
+# 		declaration = frappe.get_doc({
+# 			"doctype": "Employee Tax Exemption Proof Submission",
+# 			"payroll_period": "Test Payroll Period",
+# 			"employee": frappe.get_value("Employee", {"user_id":"employee@proofsubmission.com"}, "name"),
+# 			"tax_exemption_proofs": [dict(exemption_sub_category = "_Test Sub Category",
+# 							type_of_proof = "Test Proof",
+# 							exemption_category = "_Test Category",
+# 							amount = 100000)]
+# 		})
+# 		self.assertTrue(declaration.save)
+# 		self.assertTrue(declaration.submit)
+#
+# 	def test_duplicate_category_in_proof_submission(self):
+# 		declaration = frappe.get_doc({
+# 			"doctype": "Employee Tax Exemption Proof Submission",
+# 			"employee": frappe.get_value("Employee", {"user_id":"employee@proofsubmission.com"}, "name"),
+# 			"payroll_period": "Test Payroll Period",
+# 			"tax_exemption_proofs": [dict(exemption_sub_category = "_Test Sub Category",
+# 							exemption_category = "_Test Category",
+# 							type_of_proof = "Test Proof",
+# 							amount = 100000),
+# 							dict(exemption_sub_category = "_Test Sub Category",
+# 							exemption_category = "_Test Category",
+# 							amount = 50000),
+# 							]
+# 		})
+# 		self.assertRaises(frappe.ValidationError, declaration.save)
diff --git a/erpnext/hr/doctype/leave_application/test_leave_application.py b/erpnext/hr/doctype/leave_application/test_leave_application.py
index eb43d5a..b467350 100644
--- a/erpnext/hr/doctype/leave_application/test_leave_application.py
+++ b/erpnext/hr/doctype/leave_application/test_leave_application.py
@@ -387,24 +387,24 @@
 
 		self.assertRaises(frappe.ValidationError, leave_application.insert)
 
-	def test_earned_leave(self):
-		leave_period = get_leave_period()
-		employee = get_employee()
-
-		leave_type = frappe.get_doc(dict(
-			leave_type_name = 'Test Earned Leave Type',
-			doctype = 'Leave Type',
-			is_earned_leave = 1,
-			earned_leave_frequency = 'Monthly',
-			rounding = 0.5
-		)).insert()
-
-		allocate_leaves(employee, leave_period, leave_type.name, 0, eligible_leaves = 12)
-
-		# this method will be called by scheduler
-		allocate_earned_leaves(leave_type.name, leave_period, as_on = half_of_leave_period)
-
-		self.assertEqual(get_leave_balance(employee, leave_period, leave_type.name), 6)
+	# def test_earned_leave(self):
+	# 	leave_period = get_leave_period()
+	# 	employee = get_employee()
+	#
+	# 	leave_type = frappe.get_doc(dict(
+	# 		leave_type_name = 'Test Earned Leave Type',
+	# 		doctype = 'Leave Type',
+	# 		is_earned_leave = 1,
+	# 		earned_leave_frequency = 'Monthly',
+	# 		rounding = 0.5
+	# 	)).insert()
+	#
+	# 	allocate_leaves(employee, leave_period, leave_type.name, 0, eligible_leaves = 12)
+	#
+	# 	# this method will be called by scheduler
+	# 	allocate_earned_leaves(leave_type.name, leave_period, as_on = half_of_leave_period)
+	#
+	# 	self.assertEqual(get_leave_balance(employee, leave_period, leave_type.name), 6)
 
 
 def make_allocation_record(employee=None, leave_type=None):
diff --git a/erpnext/hr/doctype/leave_encashment/test_leave_encashment.py b/erpnext/hr/doctype/leave_encashment/test_leave_encashment.py
index a505258..4af23b1 100644
--- a/erpnext/hr/doctype/leave_encashment/test_leave_encashment.py
+++ b/erpnext/hr/doctype/leave_encashment/test_leave_encashment.py
@@ -6,37 +6,37 @@
 import frappe
 import unittest
 
-class TestLeaveEncashment(unittest.TestCase):
-	def test_leave_balance_value_and_amount(self):
-		employee = get_employee()
-		leave_period = get_leave_period()
-		today = get_today()
-		
-		leave_type = frappe.get_doc(dict(
-			leave_type_name = 'Test Leave Type',
-			doctype = 'Leave Type',
-			allow_encashment = 1,
-			encashment_threshold_days = 3,
-			earning_component = 'Leave Encashment'
-		)).insert()
-		
-		allocate_leave(employee, leave_period, leave_type.name, 5)
-		
-		leave_encashment = frappe.get_doc(dict(
-			doctype = 'Leave Encashment',
-			employee = employee,
-			leave_period = leave_period,
-			leave_type = leave_type.name,
-			payroll_date = today
-		)).insert()
-		
-		self.assertEqual(leave_encashment.leave_balance, 5)
-		self.assertEqual(leave_encashment.encashable_days, 2)
-		
-		# TODO; validate value
-		salary_structure = get_current_structure(employee, today)
-		self.assertEqual(leave_encashment.encashment_value, 
-			2 * frappe.db.get_value('Salary Structure', salary_structure, 'leave_encashment_amount_per_day'))
+# class TestLeaveEncashment(unittest.TestCase):
+# 	def test_leave_balance_value_and_amount(self):
+# 		employee = get_employee()
+# 		leave_period = get_leave_period()
+# 		today = get_today()
+#
+# 		leave_type = frappe.get_doc(dict(
+# 			leave_type_name = 'Test Leave Type',
+# 			doctype = 'Leave Type',
+# 			allow_encashment = 1,
+# 			encashment_threshold_days = 3,
+# 			earning_component = 'Leave Encashment'
+# 		)).insert()
+#
+# 		allocate_leave(employee, leave_period, leave_type.name, 5)
+#
+# 		leave_encashment = frappe.get_doc(dict(
+# 			doctype = 'Leave Encashment',
+# 			employee = employee,
+# 			leave_period = leave_period,
+# 			leave_type = leave_type.name,
+# 			payroll_date = today
+# 		)).insert()
+#
+# 		self.assertEqual(leave_encashment.leave_balance, 5)
+# 		self.assertEqual(leave_encashment.encashable_days, 2)
+#
+# 		# TODO; validate value
+# 		salary_structure = get_current_structure(employee, today)
+# 		self.assertEqual(leave_encashment.encashment_value,
+# 			2 * frappe.db.get_value('Salary Structure', salary_structure, 'leave_encashment_amount_per_day'))
 
-		
+
 		
diff --git a/erpnext/hr/doctype/leave_period/test_leave_period.py b/erpnext/hr/doctype/leave_period/test_leave_period.py
index dcf6293..3de9e60 100644
--- a/erpnext/hr/doctype/leave_period/test_leave_period.py
+++ b/erpnext/hr/doctype/leave_period/test_leave_period.py
@@ -6,26 +6,26 @@
 import frappe
 import unittest
 
-class TestLeavePeriod(unittest.TestCase):
-	def test_leave_grant(self):
-		employee = get_employee()
-		leave_policy = get_leave_policy()
-		leave_period = get_leave_period()
-		
-		frappe.db.set_value('Employee', employee, 'leave_policy', leave_policy)
-		
-		leave_period.employee = employee
-		
-		clear_leave_allocation(employee)
-		
-		leave_period.grant_leaves()
-		
-		for d in leave_policy:
-			self.assertEqual(get_leave_balance(employee, d.leave_type), d.annual_allocation)
-			
-		return leave_period
-
-	def test_duplicate_grant(self):
-		leave_period = self.test_leave_grant()
-		self.assertRaises(DuplicateLeaveGrant, leave_period.grant_leaves)
-
+# class TestLeavePeriod(unittest.TestCase):
+# 	def test_leave_grant(self):
+# 		employee = get_employee()
+# 		leave_policy = get_leave_policy()
+# 		leave_period = get_leave_period()
+#
+# 		frappe.db.set_value('Employee', employee, 'leave_policy', leave_policy)
+#
+# 		leave_period.employee = employee
+#
+# 		clear_leave_allocation(employee)
+#
+# 		leave_period.grant_leaves()
+#
+# 		for d in leave_policy:
+# 			self.assertEqual(get_leave_balance(employee, d.leave_type), d.annual_allocation)
+#
+# 		return leave_period
+#
+# 	def test_duplicate_grant(self):
+# 		leave_period = self.test_leave_grant()
+# 		self.assertRaises(DuplicateLeaveGrant, leave_period.grant_leaves)
+#
