diff --git a/erpnext/demo/setup_data.py b/erpnext/demo/setup_data.py
index 3367527..cb33cb1 100644
--- a/erpnext/demo/setup_data.py
+++ b/erpnext/demo/setup_data.py
@@ -32,6 +32,7 @@
 	setup_employee()
 	setup_salary_structure()
 	setup_salary_structure_for_timesheet()
+	setup_leave_allocation()
 	setup_mode_of_payment()
 	setup_account_to_expense_type()
 	setup_user_roles()
@@ -430,3 +431,23 @@
 	})
 
 	pos.insert()
+
+def setup_leave_allocation():
+	year = now_datetime().year
+	for employee in frappe.get_all('Employee', fields=['name']):
+		leave_types = frappe.get_all("Leave Type", fields=['name', 'max_days_allowed'])
+		for leave_type in leave_types:
+			if not leave_type.max_days_allowed:
+				leave_type.max_days_allowed = 10
+	
+		leave_allocation = frappe.get_doc({
+			"doctype": "Leave Allocation",
+			"employee": employee.name,
+			"from_date": "{0}-01-01".format(year),
+			"to_date": "{0}-12-31".format(year),
+			"leave_type": leave_type.name,
+			"new_leaves_allocated": random.randint(1, int(leave_type.max_days_allowed))
+		})
+		leave_allocation.insert()
+		leave_allocation.submit()
+		frappe.db.commit()			
diff --git a/erpnext/demo/user/hr.py b/erpnext/demo/user/hr.py
index 28966ec..3d5ac83 100644
--- a/erpnext/demo/user/hr.py
+++ b/erpnext/demo/user/hr.py
@@ -1,15 +1,19 @@
 from __future__ import unicode_literals
 import frappe
 import random
-from frappe.utils import random_string
+from frappe.utils import random_string, add_days
 from erpnext.projects.doctype.timesheet.test_timesheet import make_timesheet
 from erpnext.projects.doctype.timesheet.timesheet import make_salary_slip, make_sales_invoice
 from frappe.utils.make_random import how_many, get_random
 from erpnext.hr.doctype.expense_claim.expense_claim import get_expense_approver, make_bank_entry
+from erpnext.hr.doctype.leave_application.leave_application import get_leave_balance_on, OverlapError
 
 def work():
 	frappe.set_user(frappe.db.get_global('demo_hr_user'))
 	year, month = frappe.flags.current_date.strftime("%Y-%m").split("-")
+	
+	mark_attendance()
+	make_leave_application()
 
 	# process payroll
 	if not frappe.db.get_value("Salary Slip", {"month": month, "fiscal_year": year}):
@@ -123,4 +127,53 @@
 	sales_invoice.calculate_taxes_and_totals()
 	sales_invoice.insert()
 	sales_invoice.submit()
-	frappe.db.commit()
\ No newline at end of file
+	frappe.db.commit()
+	
+def make_leave_application():
+	allocated_leaves = frappe.get_all("Leave Allocation", fields=['employee', 'leave_type'])
+	
+	for allocated_leave in allocated_leaves:
+		leave_balance = get_leave_balance_on(allocated_leave.employee, allocated_leave.leave_type, frappe.flags.current_date,
+			consider_all_leaves_in_the_allocation_period=True)
+		if leave_balance != 0:
+			if leave_balance == 1:
+				to_date = frappe.flags.current_date
+			else:
+				to_date = add_days(frappe.flags.current_date, random.randint(0, leave_balance-1))
+				
+			leave_application = frappe.get_doc({
+				"doctype": "Leave Application",
+				"employee": allocated_leave.employee,
+				"from_date": frappe.flags.current_date,
+				"to_date": to_date,
+				"leave_type": allocated_leave.leave_type,
+				"status": "Approved"
+			})
+			try:
+				leave_application.insert()
+				leave_application.submit()
+				frappe.db.commit()
+			except (OverlapError):
+				frappe.db.rollback()
+			
+def mark_attendance():
+	att_date = frappe.flags.current_date
+	for employee in frappe.get_all('Employee', fields=['name'], filters = {'status': 'Active'}):
+		
+		if not frappe.db.get_value("Attendance", {"employee": employee.name, "att_date": att_date}):
+			attendance = frappe.get_doc({
+				"doctype": "Attendance",
+				"employee": employee.name,
+				"att_date": att_date
+			})
+			leave = frappe.db.sql("""select name from `tabLeave Application`
+				where employee = %s and %s between from_date and to_date and status = 'Approved'
+				and docstatus = 1""", (employee.name, att_date))
+			
+			if leave:
+				attendance.status = "Absent"
+			else:
+				attendance.status = "Present"		
+			attendance.save()
+			attendance.submit()		
+			frappe.db.commit()	
\ No newline at end of file
