diff --git a/erpnext/schools/doctype/student_leave_application/student_leave_application.json b/erpnext/schools/doctype/student_leave_application/student_leave_application.json
index 2a8dfb2..ad6d498 100644
--- a/erpnext/schools/doctype/student_leave_application/student_leave_application.json
+++ b/erpnext/schools/doctype/student_leave_application/student_leave_application.json
@@ -103,7 +103,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "date", 
+   "fieldname": "from_date", 
    "fieldtype": "Date", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -111,7 +111,7 @@
    "in_filter": 0, 
    "in_list_view": 1, 
    "in_standard_filter": 1, 
-   "label": "Date", 
+   "label": "From Date", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
@@ -131,6 +131,35 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fieldname": "to_date", 
+   "fieldtype": "Date", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 1, 
+   "in_standard_filter": 0, 
+   "label": "To Date", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 1, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "description": "Will show the student as Present in Student Monthly Attendance Report", 
    "fieldname": "mark_as_present", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -248,7 +277,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2016-12-20 15:08:40.750278", 
+ "modified": "2016-12-21 18:58:00.256114", 
  "modified_by": "Administrator", 
  "module": "Schools", 
  "name": "Student Leave Application", 
diff --git a/erpnext/schools/report/absent_student_report/absent_student_report.py b/erpnext/schools/report/absent_student_report/absent_student_report.py
index 82a20aa..32026c9 100644
--- a/erpnext/schools/report/absent_student_report/absent_student_report.py
+++ b/erpnext/schools/report/absent_student_report/absent_student_report.py
@@ -55,6 +55,6 @@
 def get_leave_applications(date):
 	leave_applicants = []
 	for student in frappe.db.sql("""select student from `tabStudent Leave Application` 
-		where docstatus = 1 and date = %s""", date):
+	where docstatus = 1 and from_date <= %s and to_date >= %s""", (date, date)):
 		leave_applicants.append(student[0])
 	return leave_applicants
\ No newline at end of file
diff --git a/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.js b/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.js
index 32c0551..8d914cb 100644
--- a/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.js
+++ b/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.js
@@ -3,40 +3,40 @@
 
 
 frappe.query_reports["Student Monthly Attendance Sheet"] = {
-	"filters": [
-		{
-			"fieldname":"month",
-			"label": __("Month"),
-			"fieldtype": "Select",
-			"options": "Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug\nSep\nOct\nNov\nDec",
-			"default": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov",
-				"Dec"][frappe.datetime.str_to_obj(frappe.datetime.get_today()).getMonth()],
-		},
-		{
-			"fieldname":"year",
-			"label": __("Year"),
-			"fieldtype": "Select",
-			"reqd": 1
-		},
-		{
-			"fieldname":"student_batch",
-			"label": __("Student Batch"),
-			"fieldtype": "Link",
-			"options": "Student Batch",
-			"reqd": 1
-		}
-	],
+    "filters": [{
+            "fieldname": "month",
+            "label": __("Month"),
+            "fieldtype": "Select",
+            "options": "Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug\nSep\nOct\nNov\nDec",
+            "default": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov",
+                "Dec"
+            ][frappe.datetime.str_to_obj(frappe.datetime.get_today()).getMonth()],
+        },
+        {
+            "fieldname": "year",
+            "label": __("Year"),
+            "fieldtype": "Select",
+            "reqd": 1
+        },
+        {
+            "fieldname": "student_batch",
+            "label": __("Student Batch"),
+            "fieldtype": "Link",
+            "options": "Student Batch",
+            "reqd": 1
+        }
+    ],
 
-	"onload": function() {
-		return  frappe.call({
-			method: "erpnext.schools.report.student_monthly_attendance_sheet.student_monthly_attendance_sheet.get_attendance_years",
-			callback: function(r) {
-				var year_filter = frappe.query_report_filters_by_name.year;
-				year_filter.df.options = r.message;
-				year_filter.df.default = r.message.split("\n")[0];
-				year_filter.refresh();
-				year_filter.set_input(year_filter.df.default);
-			}
-		});
-	}
-}
+    "onload": function() {
+        return frappe.call({
+            method: "erpnext.schools.report.student_monthly_attendance_sheet.student_monthly_attendance_sheet.get_attendance_years",
+            callback: function(r) {
+                var year_filter = frappe.query_report_filters_by_name.year;
+                year_filter.df.options = r.message;
+                year_filter.df.default = r.message.split("\n")[0];
+                year_filter.refresh();
+                year_filter.set_input(year_filter.df.default);
+            }
+        });
+    }
+}
\ No newline at end of file
diff --git a/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.py b/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.py
index 025e078..1599a89 100644
--- a/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.py
+++ b/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.py
@@ -3,7 +3,7 @@
 
 from __future__ import unicode_literals
 import frappe
-from frappe.utils import cstr, cint, getdate
+from frappe.utils import cstr, cint, getdate, get_first_day, get_last_day, date_diff, add_days
 from frappe import msgprint, _
 from calendar import monthrange
 from erpnext.schools.api import get_student_batch_students
@@ -11,86 +11,69 @@
 def execute(filters=None):
 	if not filters: filters = {}
 
-	conditions, filters = get_conditions(filters)
-	columns = get_columns(filters)
-	att_map = get_attendance_list(conditions, filters)
+	from_date = get_first_day(filters["month"] + '-' + filters["year"])
+	to_date = get_last_day(filters["month"] + '-' + filters["year"])
+	total_days_in_month = date_diff(to_date, from_date) +1
+	columns = get_columns(total_days_in_month)
+	att_map = get_attendance_list(from_date, to_date, filters.get("student_batch"))
 	students = get_student_batch_students(filters.get("student_batch"))
 	data = []
 	for stud in students:
 		row = [stud.student, stud.student_name]
-
+		date = from_date
 		total_p = total_a = 0.0
-		for day in range(filters["total_days_in_month"]):
+		for day in range(total_days_in_month):
 			status="None"
 			if att_map.get(stud.student):
-				status = att_map.get(stud.student).get(day + 1, "None")
+				status = att_map.get(stud.student).get(date, "None")
 			status_map = {"Present": "P", "Absent": "A", "None": ""}
 			row.append(status_map[status])
-
 			if status == "Present":
 				total_p += 1
 			elif status == "Absent":
 				total_a += 1
-
+			date = add_days(date, 1)
 		row += [total_p, total_a]
 		data.append(row)
-
 	return columns, data
 
-def get_columns(filters):
+def get_columns(days_in_month):
 	columns = [ _("Student") + ":Link/Student:90", _("Student Name") + "::150"]
-
-	for day in range(filters["total_days_in_month"]):
+	for day in range(days_in_month):
 		columns.append(cstr(day+1) +"::20")
-
 	columns += [_("Total Present") + ":Int:95", _("Total Absent") + ":Int:90"]
 	return columns
 
-def get_attendance_list(conditions, filters):
-	attendance_list = frappe.db.sql("""select student, day(date) as day_of_month,
-		status from `tabStudent Attendance` where docstatus = 1 %s order by student, date""" %
-		conditions, filters, as_dict=1)
-
-	students_with_leave_application = get_students_with_leave_application(filters)
-
+def get_attendance_list(from_date, to_date, student_batch):
+	attendance_list = frappe.db.sql("""select student, date, status 
+		from `tabStudent Attendance` where docstatus = 1 and student_batch = %s 
+		and date between %s and %s
+		order by student, date""",
+		(student_batch, from_date, to_date), as_dict=1)
 	att_map = {}
 	for d in attendance_list:
-		att_map.setdefault(d.student, frappe._dict()).setdefault(d.day_of_month, "")
-		for stud in students_with_leave_application:
-			if stud.student== d.student and stud.day_of_month== d.day_of_month:
-				att_map[d.student][d.day_of_month] = "Present"
-				break
-			else:		
-				att_map[d.student][d.day_of_month] = d.status
-
+		att_map.setdefault(d.student, frappe._dict()).setdefault(d.date, "")
+		students_with_leave_application = get_students_with_leave_application(d.date)
+		if students_with_leave_application:
+			for stud in students_with_leave_application:
+				if stud.student== d.student:
+					att_map[d.student][d.date] = "Present"
+					break
+				else:		
+					att_map[d.student][d.date] = d.status
+		else:
+			att_map[d.student][d.date] = d.status
 	return att_map
 
-def get_students_with_leave_application(filters):
-	students_with_leave_application = frappe.db.sql("""select student, day(date) as day_of_month
-		from `tabStudent Leave Application` where mark_as_present and docstatus = 1 
-		and month(date) = %(month)s and year(date) = %(year)s
-		order by student, date""", filters, as_dict=1)
-	return students_with_leave_application 
-
-def get_conditions(filters):
-	if not (filters.get("month") and filters.get("year")):
-		msgprint(_("Please select month and year"), raise_exception=1)
-	
-	filters["month"] = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov",
-		"Dec"].index(filters.month) + 1
-
-	filters["total_days_in_month"] = monthrange(cint(filters.year), filters.month)[1]
-	
-	conditions = " and month(date) = %(month)s and year(date) = %(year)s"
-
-	if filters.get("student_batch"): conditions += " and student_batch = %(student_batch)s"
-	
-	return conditions, filters
+def get_students_with_leave_application(date):
+	students_with_leave_application = frappe.db.sql("""select student from 
+		`tabStudent Leave Application` where mark_as_present and docstatus = 1 and 
+		%s between from_date and to_date""", date, as_dict=1)	
+	return students_with_leave_application
 
 @frappe.whitelist()
 def get_attendance_years():
 	year_list = frappe.db.sql_list("""select distinct YEAR(date) from `tabStudent Attendance` ORDER BY YEAR(date) DESC""")
 	if not year_list:
 		year_list = [getdate().year]
-
 	return "\n".join(str(year) for year in year_list)
