[fixes] patch, test cases and validations
diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.json b/erpnext/hr/doctype/leave_allocation/leave_allocation.json
index 7108fc0..070e518 100644
--- a/erpnext/hr/doctype/leave_allocation/leave_allocation.json
+++ b/erpnext/hr/doctype/leave_allocation/leave_allocation.json
@@ -160,7 +160,7 @@
    "print_hide": 0, 
    "read_only": 0, 
    "report_hide": 0, 
-   "reqd": 0, 
+   "reqd": 1, 
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
@@ -182,7 +182,7 @@
    "print_hide": 0, 
    "read_only": 0, 
    "report_hide": 0, 
-   "reqd": 0, 
+   "reqd": 1, 
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
@@ -306,7 +306,7 @@
  "is_submittable": 1, 
  "issingle": 0, 
  "istable": 0, 
- "modified": "2015-10-28 14:52:26.724671", 
+ "modified": "2015-10-28 18:18:29.137427", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "Leave Allocation", 
diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.py b/erpnext/hr/doctype/leave_allocation/leave_allocation.py
index 1b6c899..146c3fa 100755
--- a/erpnext/hr/doctype/leave_allocation/leave_allocation.py
+++ b/erpnext/hr/doctype/leave_allocation/leave_allocation.py
@@ -22,7 +22,6 @@
 		self.validate_new_leaves_allocated_value()
 
 	def on_update(self):
-		pass
 		self.get_total_allocated_leaves()
 	
 	def validate_period(self):
@@ -87,6 +86,11 @@
 
 	def get_total_allocated_leaves(self):
 		leave_det = self.get_carry_forwarded_leaves()
+		self.validate_total_leaves_allocated(leave_det)
 		frappe.db.set(self,'carry_forwarded_leaves',flt(leave_det['carry_forwarded_leaves']))
 		frappe.db.set(self,'total_leaves_allocated',flt(leave_det['total_leaves_allocated']))
 
+	def validate_total_leaves_allocated(self, leave_det):
+		if date_diff(self.to_date, self.from_date) <= leave_det['total_leaves_allocated']:
+			frappe.throw(_("Total allocated leaves are more than period"))
+		
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py b/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py
index fe4f01b..d36fb2c 100644
--- a/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py
+++ b/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py
@@ -1,4 +1,69 @@
 from __future__ import unicode_literals
 import frappe
+import unittest
+from frappe.utils import getdate
 
-test_records = frappe.get_test_records('Leave Allocation')
+class TestLeaveAllocation(unittest.TestCase):
+	def test_overlapping_allocation(self):		
+		employee = frappe.get_doc("Employee", frappe.db.sql_list("select name from tabEmployee limit 1")[0])
+		leaves = [
+			{
+				"doctype": "Leave Allocation",
+				"__islocal": 1,
+				"employee": employee.name,
+				"employee_name": employee.employee_name,
+				"leave_type": "_Test Leave Type",
+				"from_date": getdate("2015-10-1"),
+				"to_date": getdate("2015-10-31"),
+				"new_leaves_allocated": 5,
+				"docstatus": 1			
+			},
+			{
+				"doctype": "Leave Allocation",
+				"__islocal": 1,
+				"employee": employee.name,
+				"employee_name": employee.employee_name,
+				"leave_type": "_Test Leave Type",
+				"from_date": getdate("2015-09-1"),
+				"to_date": getdate("2015-11-30"),
+				"new_leaves_allocated": 5			
+			}
+		]
+
+		frappe.get_doc(leaves[0]).save()
+		self.assertRaises(frappe.ValidationError, frappe.get_doc(leaves[1]).save)
+		
+	def test_invalid_period(self):		
+		employee = frappe.get_doc("Employee", frappe.db.sql_list("select name from tabEmployee limit 1")[0])
+		
+		d = frappe.get_doc({
+			"doctype": "Leave Allocation",
+			"__islocal": 1,
+			"employee": employee.name,
+			"employee_name": employee.employee_name,
+			"leave_type": "_Test Leave Type",
+			"from_date": getdate("2015-09-30"),
+			"to_date": getdate("2015-09-1"),
+			"new_leaves_allocated": 5			
+		})
+		
+		#invalid period
+		self.assertRaises(frappe.ValidationError, d.save)
+	
+	def test_allocated_leave_days_over_period(self):
+		employee = frappe.get_doc("Employee", frappe.db.sql_list("select name from tabEmployee limit 1")[0])
+		d = frappe.get_doc({
+			"doctype": "Leave Allocation",
+			"__islocal": 1,
+			"employee": employee.name,
+			"employee_name": employee.employee_name,
+			"leave_type": "_Test Leave Type",
+			"from_date": getdate("2015-09-1"),
+			"to_date": getdate("2015-09-30"),
+			"new_leaves_allocated": 35			
+		})
+		
+		#allocated leave more than period 
+		self.assertRaises(frappe.ValidationError, d.save)
+		
+test_dependencies = ["Employee", "Leave Type"]
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_allocation/test_records.json b/erpnext/hr/doctype/leave_allocation/test_records.json
index 036dc49..0637a08 100644
--- a/erpnext/hr/doctype/leave_allocation/test_records.json
+++ b/erpnext/hr/doctype/leave_allocation/test_records.json
@@ -1,18 +1 @@
-[
- {
-  "docstatus": 1,
-  "doctype": "Leave Allocation",
-  "employee": "_T-Employee-0001",
-  "fiscal_year": "_Test Fiscal Year 2013",
-  "leave_type": "_Test Leave Type",
-  "new_leaves_allocated": 15
- },
- {
-  "docstatus": 1,
-  "doctype": "Leave Allocation",
-  "employee": "_T-Employee-0002",
-  "fiscal_year": "_Test Fiscal Year 2013",
-  "leave_type": "_Test Leave Type",
-  "new_leaves_allocated": 15
- }
-]
+[]
\ No newline at end of file
diff --git a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js
index 4f97c43..41b1421 100644
--- a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js
+++ b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js
@@ -4,11 +4,16 @@
 frappe.query_reports["Employee Leave Balance"] = {
 	"filters": [
 		{
-			"fieldname":"fiscal_year",
-			"label": __("Fiscal Year"),
-			"fieldtype": "Link",
-			"options": "Fiscal Year",
-			"default": frappe.defaults.get_user_default("fiscal_year")
+			"fieldname":"from_date",
+			"label": __("From Date"),
+			"fieldtype": "Date",
+			"default": frappe.datetime.year_start()
+		},
+		{
+			"fieldname":"to_date",
+			"label": __("To Date"),
+			"fieldtype": "Date",
+			"default": frappe.datetime.year_end()
 		},
 		{
 			"fieldname":"company",
diff --git a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
index d6f865b..0aa88a8 100644
--- a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
+++ b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
@@ -24,52 +24,47 @@
 
 	leave_types = frappe.db.sql_list("select name from `tabLeave Type`")
 
-	if filters.get("fiscal_year"):
-		fiscal_years = [filters["fiscal_year"]]
-	else:
-		fiscal_years = frappe.db.sql_list("select name from `tabFiscal Year` order by name desc")
-
 	employee_names = [d.name for d in employees]
 
-	allocations = frappe.db.sql("""select employee, fiscal_year, leave_type, total_leaves_allocated
+	allocations = frappe.db.sql("""select employee, leave_type, sum(new_leaves_allocated) as leaves_allocated
 	 	from `tabLeave Allocation`
-		where docstatus=1 and employee in (%s)""" %
-		','.join(['%s']*len(employee_names)), employee_names, as_dict=True)
-
-	applications = frappe.db.sql("""select employee, fiscal_year, leave_type,
+		where docstatus=1 and employee in (%s) and from_date >= '%s' and to_date <= '%s'""" %
+		(','.join(['%s']*len(employee_names)), filters.get("from_date"),
+		 filters.get("to_date")), employee_names, as_dict=True)
+		
+	applications = frappe.db.sql("""select employee, leave_type,
 			SUM(total_leave_days) as leaves
 		from `tabLeave Application`
 		where status="Approved" and docstatus = 1 and employee in (%s)
-		group by employee, fiscal_year, leave_type""" %
-			','.join(['%s']*len(employee_names)), employee_names, as_dict=True)
+		and from_date >= '%s' and to_date <= '%s'
+		group by employee, leave_type""" %
+		(','.join(['%s']*len(employee_names)), filters.get("from_date"),
+		 filters.get("to_date")), employee_names, as_dict=True)
 
 	columns = [
-		_("Fiscal Year"), _("Employee") + ":Link/Employee:150", _("Employee Name") + "::200", _("Department") +"::150"
+		_("Employee") + ":Link/Employee:150", _("Employee Name") + "::200", _("Department") +"::150"
 	]
 
 	for leave_type in leave_types:
-		columns.append(_(leave_type) + " " + _("Allocated") + ":Float")
+		columns.append(_(leave_type) + " " + _("Opening") + ":Float")
 		columns.append(_(leave_type) + " " + _("Taken") + ":Float")
 		columns.append(_(leave_type) + " " + _("Balance") + ":Float")
 
 	data = {}
 	for d in allocations:
-		data.setdefault((d.fiscal_year, d.employee,
-			d.leave_type), frappe._dict()).allocation = d.total_leaves_allocated
+		data.setdefault((d.employee,d.leave_type), frappe._dict()).allocation = d.leaves_allocated
 
 	for d in applications:
-		data.setdefault((d.fiscal_year, d.employee,
-			d.leave_type), frappe._dict()).leaves = d.leaves
+		data.setdefault((d.employee, d.leave_type), frappe._dict()).leaves = d.leaves
 
 	result = []
-	for fiscal_year in fiscal_years:
-		for employee in employees:
-			row = [fiscal_year, employee.name, employee.employee_name, employee.department]
-			result.append(row)
-			for leave_type in leave_types:
-				tmp = data.get((fiscal_year, employee.name, leave_type), frappe._dict())
-				row.append(tmp.allocation or 0)
-				row.append(tmp.leaves or 0)
-				row.append((tmp.allocation or 0) - (tmp.leaves or 0))
+	for employee in employees:
+		row = [employee.name, employee.employee_name, employee.department]
+		result.append(row)
+		for leave_type in leave_types:
+			tmp = data.get((employee.name, leave_type), frappe._dict())
+			row.append(tmp.allocation or 0)
+			row.append(tmp.leaves or 0)
+			row.append((tmp.allocation or 0) - (tmp.leaves or 0))
 
 	return columns, result
diff --git a/erpnext/patches/v6_6/remove_fiscal_year_from_leave_allocation.py b/erpnext/patches/v6_6/remove_fiscal_year_from_leave_allocation.py
new file mode 100644
index 0000000..1b24841
--- /dev/null
+++ b/erpnext/patches/v6_6/remove_fiscal_year_from_leave_allocation.py
@@ -0,0 +1,15 @@
+from __future__ import unicode_literals
+import frappe
+
+def execute():
+	for leave_allocation in frappe.db.sql("select name, fiscal_year from `tabLeave Allocation`", as_dict=True):
+		year_start_date, year_end_date = frappe.db.get_value("Fiscal Year", leave_allocation["fiscal_year"],
+			["year_start_date", "year_end_date"])
+		
+		frappe.db.sql("""update `tabLeave Allocation` 
+			set from_date=%s, to_date=%s where name=%s""", 
+			(year_start_date, year_end_date, leave_allocation["name"]))
+			
+		frappe.db.commit()
+			
+		
\ No newline at end of file