diff --git a/erpnext/hr/doctype/leave_period/leave_period.js b/erpnext/hr/doctype/leave_period/leave_period.js
index 2a6010e..9229f0b 100644
--- a/erpnext/hr/doctype/leave_period/leave_period.js
+++ b/erpnext/hr/doctype/leave_period/leave_period.js
@@ -2,7 +2,26 @@
 // For license information, please see license.txt
 
 frappe.ui.form.on('Leave Period', {
-	refresh: function(frm) {
-
+	refresh: (frm)=>{
+		frm.set_df_property("grant_leaves", "hidden", frm.doc.__islocal ? 1:0);
+	},
+	from_date: (frm)=>{
+		if (frm.doc.from_date && !frm.doc.to_date) {
+			var a_year_from_start = frappe.datetime.add_months(frm.doc.from_date, 12);
+			frm.set_value("to_date", frappe.datetime.add_days(a_year_from_start, -1));
+		}
+	},
+	grant: (frm)=>{
+		frappe.call({
+			doc: frm.doc,
+			method: "grant_leave_allocation",
+			callback: function(r) {
+				if(!r.exc){
+					frm.reload_doc();
+				}
+			},
+			freeze: true,
+			freeze_message: __("Grant allocations......")
+		});
 	}
 });
diff --git a/erpnext/hr/doctype/leave_period/leave_period.json b/erpnext/hr/doctype/leave_period/leave_period.json
index 516d52d..0f3cad4 100644
--- a/erpnext/hr/doctype/leave_period/leave_period.json
+++ b/erpnext/hr/doctype/leave_period/leave_period.json
@@ -478,7 +478,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2018-05-04 18:25:06.719932", 
+ "modified": "2018-05-07 18:25:06.719932", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "Leave Period", 
diff --git a/erpnext/hr/doctype/leave_period/leave_period.py b/erpnext/hr/doctype/leave_period/leave_period.py
index 619336a..1ef6f19 100644
--- a/erpnext/hr/doctype/leave_period/leave_period.py
+++ b/erpnext/hr/doctype/leave_period/leave_period.py
@@ -4,7 +4,78 @@
 
 from __future__ import unicode_literals
 import frappe
+from frappe import _
+from frappe.utils import getdate, cstr
 from frappe.model.document import Document
+from erpnext.hr.utils import validate_overlap, get_employee_leave_policy
 
 class LeavePeriod(Document):
-	pass
+	def get_employees(self):
+		conditions, values = [], []
+		for field in ["grade", "designation", "department"]:
+			if self.get(field):
+				conditions.append("{0}=%s".format(field))
+				values.append(self.get(field))
+
+		condition_str = " and " + " and ".join(conditions) if len(conditions) else ""
+
+		e = frappe.db.sql("select name from tabEmployee where status='Active' {condition}"
+			.format(condition=condition_str), tuple(values))
+
+		return e
+
+	def validate(self):
+		self.validate_dates()
+		validate_overlap(self, self.from_date, self.to_date, self.company)
+
+	def grant_leave_allocation(self):
+		if self.employee:
+			self.grant_leave_alloc(self.employee)
+		else:
+			self.grant_leave_alloc_for_employees()
+
+	def grant_leave_alloc_for_employees(self):
+		employees = self.get_employees()
+		if employees:
+			for employee in employees:
+				self.grant_leave_alloc(cstr(employee[0]))
+		else:
+			frappe.msgprint(_("No employee found"))
+
+	def grant_leave_alloc(self, employee):
+		self.validate_allocation_exists(employee)
+		leave_policy = get_employee_leave_policy(employee)
+		if leave_policy:
+			for leave_policy_detail in leave_policy.leave_policy_details:
+				if not frappe.db.get_value("Leave Type", leave_policy_detail.leave_type, "is_lwp"):
+					self.create_leave_allocation(employee, leave_policy_detail.leave_type, leave_policy_detail.annual_allocation)
+
+	def validate_allocation_exists(self, employee):
+		leave_alloc = frappe.db.exists({
+				"doctype": "Leave Allocation",
+				"employee": employee,
+				"leave_period": self.name,
+				"docstatus": 1})
+		if leave_alloc:
+			frappe.throw(_("Employee {0} already have Leave Allocation {1} for this period").format(employee, leave_alloc[0][0])\
+			+ """ <b><a href="#Form/Leave Allocation/{0}">{0}</a></b>""".format(leave_alloc[0][0]))
+
+
+	def validate_dates(self):
+		if getdate(self.from_date) >= getdate(self.to_date):
+			frappe.throw(_("To date can not be equal or less than from date"))
+
+	def create_leave_allocation(self, employee, leave_type, new_leaves_allocated):
+		allocation = frappe.new_doc("Leave Allocation")
+		allocation.employee = employee
+		allocation.employee_name = frappe.db.get_value("Employee", employee, "employee_name")
+		allocation.leave_type = leave_type
+		allocation.from_date = self.from_date
+		allocation.to_date = self.to_date
+		allocation.new_leaves_allocated = new_leaves_allocated
+		allocation.leave_period = self.name
+		if self.carry_forward_leaves:
+			if frappe.db.get_value("Leave Type", leave_type, "is_carry_forward"):
+				allocation.carry_forward = self.carry_forward_leaves
+		allocation.save(ignore_permissions = True)
+		allocation.submit()
