Merge pull request #7187 from rohitwaghchaure/budget_report_issue

[Fix] Budget variance report based on cost center/project
diff --git a/erpnext/config/schools.py b/erpnext/config/schools.py
index f9696d0..1d33d4d 100644
--- a/erpnext/config/schools.py
+++ b/erpnext/config/schools.py
@@ -68,7 +68,7 @@
 				},
 				{
 					"type": "doctype",
-					"name": "Student Batch Attendance Tool"
+					"name": "Student Attendance Tool"
 				},
 				{
 					"type": "report",
diff --git a/erpnext/public/build.json b/erpnext/public/build.json
index ac1c7c3..30b0900 100644
--- a/erpnext/public/build.json
+++ b/erpnext/public/build.json
@@ -1,37 +1,38 @@
 {
-	"css/erpnext.css": [
-		"public/css/erpnext.css"
-	],
-	"js/erpnext-web.min.js": [
-		"public/js/website_utils.js",
-		"public/js/shopping_cart.js"
-	],
-	"js/erpnext.min.js": [
-		"public/js/conf.js",
-		"public/js/utils.js",
-		"public/js/queries.js",
-		"public/js/sms_manager.js",
-		"public/js/utils/party.js",
-		"public/js/templates/address_list.html",
-		"public/js/templates/contact_list.html",
-		"public/js/controllers/stock_controller.js",
-		"public/js/payment/payments.js",
-		"public/js/controllers/taxes_and_totals.js",
-		"public/js/controllers/transaction.js",
-		"public/js/pos/pos.html",
-		"public/js/pos/pos_bill_item.html",
-		"public/js/pos/pos_item.html",
-		"public/js/pos/pos_tax_row.html",
-		"public/js/pos/pos_invoice_list.html",
-		"public/js/payment/pos_payment.html",
-		"public/js/payment/payment_details.html",
-		"public/js/templates/item_selector.html",
-		"public/js/utils/item_selector.js",
-		"public/js/help_links.js"
-	],
-	"js/item-dashboard.min.js": [
-		"stock/dashboard/item_dashboard.html",
-		"stock/dashboard/item_dashboard_list.html",
-		"stock/dashboard/item_dashboard.js"
-	]
-}
+    "css/erpnext.css": [
+        "public/css/erpnext.css"
+    ],
+    "js/erpnext-web.min.js": [
+        "public/js/website_utils.js",
+        "public/js/shopping_cart.js"
+    ],
+    "js/erpnext.min.js": [
+        "public/js/conf.js",
+        "public/js/utils.js",
+        "public/js/queries.js",
+        "public/js/sms_manager.js",
+        "public/js/utils/party.js",
+        "public/js/templates/address_list.html",
+        "public/js/templates/contact_list.html",
+        "public/js/controllers/stock_controller.js",
+        "public/js/payment/payments.js",
+        "public/js/controllers/taxes_and_totals.js",
+        "public/js/controllers/transaction.js",
+        "public/js/pos/pos.html",
+        "public/js/pos/pos_bill_item.html",
+        "public/js/pos/pos_item.html",
+        "public/js/pos/pos_tax_row.html",
+        "public/js/pos/pos_invoice_list.html",
+        "public/js/payment/pos_payment.html",
+        "public/js/payment/payment_details.html",
+        "public/js/templates/item_selector.html",
+        "public/js/utils/item_selector.js",
+        "public/js/help_links.js",
+        "public/js/schools/student_button.html"
+    ],
+    "js/item-dashboard.min.js": [
+        "stock/dashboard/item_dashboard.html",
+        "stock/dashboard/item_dashboard_list.html",
+        "stock/dashboard/item_dashboard.js"
+    ]
+}
\ No newline at end of file
diff --git a/erpnext/public/js/schools/student_button.html b/erpnext/public/js/schools/student_button.html
new file mode 100644
index 0000000..dabaf26
--- /dev/null
+++ b/erpnext/public/js/schools/student_button.html
@@ -0,0 +1,20 @@
+<div class="col-sm-3">
+    <div class="checkbox {% if status %} text-muted {% endif %}">
+        <label>
+            <input 
+                type="checkbox"
+                data-idx="{{idx}}" 
+                data-student="{{student}}"
+                data-student-name="{{student_name}}"
+                class="students-check" 
+                {% if status %} 
+                disabled="true"
+                {% endif %}
+                {% if status === "Present" %}
+                checked
+                {% endif %}
+                >
+            {{ idx }} - {{ student_name }}
+        </label>
+    </div>
+</div>
\ No newline at end of file
diff --git a/erpnext/schools/api.py b/erpnext/schools/api.py
index 7cb02a3..bf09351 100644
--- a/erpnext/schools/api.py
+++ b/erpnext/schools/api.py
@@ -52,8 +52,10 @@
 	:param student_batch: Student Batch.
 	:param date: Date.
 	"""
+	 
 	present = json.loads(students_present)
 	absent = json.loads(students_absent)
+	
 	for d in present:
 		make_attendance_records(d["student"], d["student_name"], "Present", course_schedule, student_batch, date)
 
diff --git a/erpnext/schools/doctype/course_schedule/course_schedule.js b/erpnext/schools/doctype/course_schedule/course_schedule.js
index 04a8cde..12e8522 100644
--- a/erpnext/schools/doctype/course_schedule/course_schedule.js
+++ b/erpnext/schools/doctype/course_schedule/course_schedule.js
@@ -1,134 +1,15 @@
 frappe.provide("schools")
 
 frappe.ui.form.on("Course Schedule", {
-    onload: function(frm) {
-        if (frm.doc.from_datetime && frm.doc.to_datetime) {
-            var from_datetime = moment(frm.doc.from_datetime);
-            var to_datetime = moment(frm.doc.to_datetime);
-            frm.doc.schedule_date = from_datetime.format(moment.defaultFormat);
-            frm.doc.from_time = from_datetime.format("HH:mm:ss");
-            frm.doc.to_time = to_datetime.format("HH:mm:ss");
-        }
-    },
-
     refresh: function(frm) {
-        if (!frm.doc.__islocal && frm.doc.student_group) {
-            frappe.call({
-                method: "erpnext.schools.api.check_attendance_records_exist",
-                args: {
-                    "course_schedule": frm.doc.name
-                },
-                callback: function(r) {
-                    if (r.message) {
-                        hide_field('attendance');
-                        frm.events.view_attendance(frm)
-                    } else {
-                        frappe.call({
-                            method: "erpnext.schools.api.get_student_group_students",
-                            args: {
-                                "student_group": frm.doc.student_group
-                            },
-                            callback: function(r) {
-                                if (r.message) {
-                                    frm.events.get_students(frm, r.message)
-                                }
-                            }
-                        });
-                    }
+        if (!frm.doc.__islocal) {
+            frm.add_custom_button(__("Attendance"), function() {
+                frappe.route_options = {
+                    based_on: "Course Schedule",
+                    course_schedule: frm.doc.name
                 }
+                frappe.set_route("Form", "Student Attendance Tool");
             });
-        } else {
-            hide_field('attendance');
         }
-    },
-
-    view_attendance: function(frm) {
-        hide_field('attendance');
-        frm.add_custom_button(__("View attendance"), function() {
-            frappe.route_options = {
-                course_schedule: frm.doc.name
-            }
-            frappe.set_route("List", "Student Attendance");
-        });
-    },
-
-    get_students: function(frm, students) {
-        if (!frm.students_area) {
-            frm.students_area = $('<div>')
-                .appendTo(frm.fields_dict.students_html.wrapper);
-        }
-        frm.students_editor = new schools.StudentsEditor(frm, frm.students_area, students)
     }
-});
-
-
-schools.StudentsEditor = Class.extend({
-    init: function(frm, wrapper, students) {
-        this.wrapper = wrapper;
-        this.frm = frm;
-        this.make(frm, students);
-    },
-    make: function(frm, students) {
-        var me = this;
-
-        $(this.wrapper).empty();
-        var student_toolbar = $('<p>\
-			<button class="btn btn-default btn-add btn-xs" style="margin-right: 5px;"></button>\
-			<button class="btn btn-xs btn-default btn-remove" style="margin-right: 5px;"></button>\
-			<button class="btn btn-default btn-primary btn-mark-att btn-xs"></button></p>').appendTo($(this.wrapper));
-
-        student_toolbar.find(".btn-add")
-            .html(__('Check all'))
-            .on("click", function() {
-                $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
-                    if (!$(check).is(":checked")) {
-                        check.checked = true;
-                    }
-                });
-            });
-
-        student_toolbar.find(".btn-remove")
-            .html(__('Uncheck all'))
-            .on("click", function() {
-                $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
-                    if ($(check).is(":checked")) {
-                        check.checked = false;
-                    }
-                });
-            });
-
-        student_toolbar.find(".btn-mark-att")
-            .html(__('Mark Attendence'))
-            .on("click", function() {
-                var students_present = [];
-                var students_absent = [];
-                $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
-                    if ($(check).is(":checked")) {
-                        students_present.push(students[i]);
-                    } else {
-                        students_absent.push(students[i]);
-                    }
-                });
-                frappe.call({
-                    method: "erpnext.schools.api.mark_attendance",
-                    args: {
-                        "students_present": students_present,
-                        "students_absent": students_absent,
-                        "course_schedule": frm.doc.name
-                    },
-                    callback: function(r) {
-                        frm.events.view_attendance(frm)
-                    }
-                });
-            });
-
-
-        $.each(students, function(i, m) {
-            $(repl('<div class="col-sm-6">\
-				<div class="checkbox">\
-				<label><input type="checkbox" class="students-check" student="%(student)s">\
-				%(student)s</label>\
-			</div></div>', { student: m.student_name })).appendTo(me.wrapper);
-        });
-    }
-})
\ No newline at end of file
+});
\ No newline at end of file
diff --git a/erpnext/schools/doctype/course_schedule/course_schedule.json b/erpnext/schools/doctype/course_schedule/course_schedule.json
index 122285e..450d7cf 100644
--- a/erpnext/schools/doctype/course_schedule/course_schedule.json
+++ b/erpnext/schools/doctype/course_schedule/course_schedule.json
@@ -385,62 +385,6 @@
   {
    "allow_on_submit": 0, 
    "bold": 0, 
-   "collapsible": 1, 
-   "columns": 0, 
-   "fieldname": "attendance", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Attendance", 
-   "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": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "students_html", 
-   "fieldtype": "HTML", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Students HTML", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
    "fieldname": "title", 
@@ -478,7 +422,7 @@
  "istable": 0, 
  "max_attachments": 0, 
  "menu_index": 0, 
- "modified": "2016-12-01 12:59:25.086606", 
+ "modified": "2016-12-09 17:00:02.822788", 
  "modified_by": "Administrator", 
  "module": "Schools", 
  "name": "Course Schedule", 
diff --git a/erpnext/schools/doctype/student_attendance/student_attendance.py b/erpnext/schools/doctype/student_attendance/student_attendance.py
index 45b3014..e2d01b5 100644
--- a/erpnext/schools/doctype/student_attendance/student_attendance.py
+++ b/erpnext/schools/doctype/student_attendance/student_attendance.py
@@ -31,9 +31,9 @@
 				(self.student, self.course_schedule, self.name))
 		else:
 			attendance_records= frappe.db.sql("""select name from `tabStudent Attendance` where \
-				student= %s and date= %s and name != %s and docstatus=1 and \
+				student= %s and student_batch= %s and date= %s and name != %s and docstatus=1 and \
 				(course_schedule is Null or course_schedule='')""",
-				(self.student, self.date, self.name))
+				(self.student, self.student_batch, self.date, self.name))
 			
 		if attendance_records:
 			frappe.throw(_("Attendance Record {0} exists against Student {1}")
diff --git a/erpnext/schools/doctype/student_batch_attendance_tool/__init__.py b/erpnext/schools/doctype/student_attendance_tool/__init__.py
similarity index 100%
rename from erpnext/schools/doctype/student_batch_attendance_tool/__init__.py
rename to erpnext/schools/doctype/student_attendance_tool/__init__.py
diff --git a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js
new file mode 100644
index 0000000..7dd9dda
--- /dev/null
+++ b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js
@@ -0,0 +1,150 @@
+// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
+// For license information, please see license.txt
+frappe.provide("schools")
+
+frappe.ui.form.on('Student Attendance Tool', {
+    refresh: function(frm) {
+        frm.disable_save();
+    },
+
+    based_on: function(frm) {
+        if (frm.doc.based_on == "Student Batch") {
+            frm.set_value("course_schedule", "");
+        } else {
+            frm.set_value("student_batch", "");
+        }
+    },
+
+    student_batch: function(frm) {
+        if ((frm.doc.student_batch && frm.doc.date) || frm.doc.course_schedule) {
+            var method = "erpnext.schools.doctype.student_attendance_tool.student_attendance_tool.get_student_attendance_records";
+
+            frappe.call({
+                method: method,
+                args: {
+                    based_on: frm.doc.based_on,
+                    student_batch: frm.doc.student_batch,
+                    date: frm.doc.date,
+                    course_schedule: frm.doc.course_schedule
+                },
+                callback: function(r) {
+                    frm.events.get_students(frm, r.message);
+                }
+            })
+        }
+    },
+
+    date: function(frm) {
+        frm.trigger("student_batch");
+    },
+
+    course_schedule: function(frm) {
+        frm.trigger("student_batch");
+    },
+
+    get_students: function(frm, students) {
+        if (!frm.students_area) {
+            frm.students_area = $('<div>')
+                .appendTo(frm.fields_dict.students_html.wrapper);
+        }
+        frm.students_editor = new schools.StudentsEditor(frm, frm.students_area, students)
+    }
+});
+
+
+schools.StudentsEditor = Class.extend({
+    init: function(frm, wrapper, students) {
+        this.wrapper = wrapper;
+        this.frm = frm;
+        this.make(frm, students);
+    },
+    make: function(frm, students) {
+        var me = this;
+
+        $(this.wrapper).empty();
+        var student_toolbar = $('<p>\
+			<button class="btn btn-default btn-add btn-xs" style="margin-right: 5px;"></button>\
+			<button class="btn btn-xs btn-default btn-remove" style="margin-right: 5px;"></button>\
+			<button class="btn btn-default btn-primary btn-mark-att btn-xs"></button></p>').appendTo($(this.wrapper));
+
+        student_toolbar.find(".btn-add")
+            .html(__('Check all'))
+            .on("click", function() {
+                $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
+                    if (!$(check).prop("disabled")) {
+                        check.checked = true;
+                    }
+                });
+            });
+
+        student_toolbar.find(".btn-remove")
+            .html(__('Uncheck all'))
+            .on("click", function() {
+                $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
+                    if (!$(check).prop("disabled")) {
+                        check.checked = false;
+                    }
+                });
+            });
+
+        var get_present_student = function(student) {
+            return students.filter(function(s) {
+                return s.idx === idx;
+            })
+        }
+        var get_absent_student = function(idx) {
+            return students.filter(function(s) {
+                return s.idx === idx;
+            })
+        }
+
+        student_toolbar.find(".btn-mark-att")
+            .html(__('Mark Attendence'))
+            .on("click", function() {
+                var studs = [];
+                $(me.wrapper.find('input[type="checkbox"]')).each(function(i, check) {
+                    var $check = $(check);
+                    studs.push({
+                        student: $check.data().student,
+                        student_name: $check.data().studentName,
+                        idx: $check.data().idx,
+                        disabled: $check.prop("disabled"),
+                        checked: $check.is(":checked")
+                    });
+                });
+
+                var students_present = studs.filter(function(stud) {
+                    return !stud.disabled && stud.checked;
+                });
+
+                var students_absent = studs.filter(function(stud) {
+                    return !stud.disabled && !stud.checked;
+                });
+
+                frappe.call({
+                    method: "erpnext.schools.api.mark_attendance",
+                    args: {
+                        "students_present": students_present,
+                        "students_absent": students_absent,
+                        "student_batch": frm.doc.student_batch,
+                        "course_schedule": frm.doc.course_schedule,
+                        "date": frm.doc.date
+                    },
+                    callback: function(r) {
+                        frm.trigger("student_batch");
+                    }
+                });
+            });
+
+        var htmls = students.map(function(student) {
+            return frappe.render_template("student_button", {
+                student: student.student,
+                student_name: student.student_name,
+                idx: student.idx,
+                status: student.status
+            })
+        });
+
+        $(htmls.join("")).appendTo(me.wrapper);
+    }
+});
\ No newline at end of file
diff --git a/erpnext/schools/doctype/student_batch_attendance_tool/student_batch_attendance_tool.json b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.json
similarity index 72%
rename from erpnext/schools/doctype/student_batch_attendance_tool/student_batch_attendance_tool.json
rename to erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.json
index defc886..092af04 100644
--- a/erpnext/schools/doctype/student_batch_attendance_tool/student_batch_attendance_tool.json
+++ b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.json
@@ -16,18 +16,19 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "student_batch", 
-   "fieldtype": "Link", 
+   "default": "", 
+   "fieldname": "based_on", 
+   "fieldtype": "Select", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Student Batch", 
+   "label": "Based On", 
    "length": 0, 
    "no_copy": 0, 
-   "options": "Student Batch", 
+   "options": "Student Batch\nCourse Schedule", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -35,7 +36,7 @@
    "read_only": 0, 
    "remember_last_selected_value": 0, 
    "report_hide": 0, 
-   "reqd": 1, 
+   "reqd": 0, 
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
@@ -72,6 +73,67 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "depends_on": "eval:doc.based_on ==\"Student Batch\"", 
+   "fieldname": "student_batch", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Student Batch", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Student Batch", 
+   "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, 
+   "depends_on": "eval:doc.based_on ==\"Course Schedule\"", 
+   "fieldname": "course_schedule", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Course Schedule", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Course Schedule", 
+   "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, 
+   "depends_on": "eval:doc.based_on ==\"Student Batch\"", 
    "fieldname": "date", 
    "fieldtype": "Date", 
    "hidden": 0, 
@@ -100,7 +162,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "depends_on": "", 
+   "depends_on": "eval: (doc.course_schedule \n|| (doc.student_batch && doc.date))", 
    "fieldname": "attendance", 
    "fieldtype": "Section Break", 
    "hidden": 0, 
@@ -163,10 +225,10 @@
  "issingle": 1, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2016-12-01 12:58:31.822014", 
+ "modified": "2016-12-09 17:36:28.739318", 
  "modified_by": "Administrator", 
  "module": "Schools", 
- "name": "Student Batch Attendance Tool", 
+ "name": "Student Attendance Tool", 
  "name_case": "", 
  "owner": "Administrator", 
  "permissions": [
diff --git a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.py b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.py
new file mode 100644
index 0000000..30a692c
--- /dev/null
+++ b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe.model.document import Document
+
+class StudentAttendanceTool(Document):
+	pass
+
+@frappe.whitelist()
+def get_student_attendance_records(based_on, date=None, student_batch=None, course_schedule=None):
+	student_list = []
+	student_attendance_list = []
+
+	if based_on=="Course Schedule":
+		student_group = frappe.db.get_value("Course Schedule", course_schedule, "student_group")
+		if student_group:
+			student_list = frappe.get_list("Student Group Student", fields=["student", "student_name", "idx"] , \
+			filters={"parent": student_group}, order_by= "idx")
+		else:
+			student_batch = frappe.db.get_value("Course Schedule", course_schedule, "student_batch")
+	if not student_list: 
+		student_list = frappe.get_list("Student Batch Student", fields=["student", "student_name", "idx"] , filters={"parent": student_batch}, order_by= "idx")
+	
+	if course_schedule:
+		student_attendance_list= frappe.db.sql("""select student, status from `tabStudent Attendance` where \
+			course_schedule= %s and docstatus=1""", (course_schedule), as_dict=1)
+	else:
+		student_attendance_list= frappe.db.sql("""select student, status from `tabStudent Attendance` where \
+			student_batch= %s and date= %s and docstatus=1 and \
+			(course_schedule is Null or course_schedule='')""",
+			(student_batch, date), as_dict=1)
+	
+	for attendance in student_attendance_list:
+		for student in student_list:
+			if student.student == attendance.student:
+				student.status = attendance.status
+	return student_list
\ No newline at end of file
diff --git a/erpnext/schools/doctype/student_batch_attendance_tool/student_batch_attendance_tool.js b/erpnext/schools/doctype/student_batch_attendance_tool/student_batch_attendance_tool.js
deleted file mode 100644
index 2dc6a85..0000000
--- a/erpnext/schools/doctype/student_batch_attendance_tool/student_batch_attendance_tool.js
+++ /dev/null
@@ -1,136 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-frappe.provide("schools")
-
-frappe.ui.form.on('Student Batch Attendance Tool', {
-    refresh: function(frm) {
-        frm.disable_save();
-        hide_field('attendance');
-    },
-
-    student_batch: function(frm) {
-        if (frm.doc.student_batch && frm.doc.date) {
-            frappe.call({
-                method: "erpnext.schools.api.check_attendance_records_exist",
-                args: {
-                    "student_batch": frm.doc.student_batch,
-                    "date": frm.doc.date
-                },
-                callback: function(r) {
-                    if (r.message) {
-                        frappe.msgprint("Attendance already marked.");
-                        hide_field('attendance');
-                    } else {
-                        frappe.call({
-                            method: "erpnext.schools.api.get_student_batch_students",
-                            args: {
-                                "student_batch": frm.doc.student_batch
-                            },
-                            callback: function(r) {
-                                if (r.message) {
-                                    unhide_field('attendance');
-                                    frm.events.get_students(frm, r.message)
-                                }
-                            }
-                        });
-                    }
-                }
-            });
-        }
-    },
-
-    date: function(frm) {
-        frm.trigger("student_batch");
-    },
-
-    get_students: function(frm, students) {
-        if (!frm.students_area) {
-            frm.students_area = $('<div>')
-                .appendTo(frm.fields_dict.students_html.wrapper);
-        }
-        frm.students_editor = new schools.StudentsEditor(frm, frm.students_area, students)
-    }
-});
-
-
-schools.StudentsEditor = Class.extend({
-    init: function(frm, wrapper, students) {
-        this.wrapper = wrapper;
-        this.frm = frm;
-        this.make(frm, students);
-    },
-    make: function(frm, students) {
-        var me = this;
-
-        $(this.wrapper).empty();
-        var student_toolbar = $('<p>\
-			<button class="btn btn-default btn-add btn-xs" style="margin-right: 5px;"></button>\
-			<button class="btn btn-xs btn-default btn-remove" style="margin-right: 5px;"></button>\
-			<button class="btn btn-default btn-primary btn-mark-att btn-xs"></button></p>').appendTo($(this.wrapper));
-
-        student_toolbar.find(".btn-add")
-            .html(__('Check all'))
-            .on("click", function() {
-                $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
-                    if (!$(check).is(":checked")) {
-                        check.checked = true;
-                    }
-                });
-            });
-
-        student_toolbar.find(".btn-remove")
-            .html(__('Uncheck all'))
-            .on("click", function() {
-                $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
-                    if ($(check).is(":checked")) {
-                        check.checked = false;
-                    }
-                });
-            });
-
-        var get_student = function(idx) {
-            return students.filter(function(s) {
-                return s.idx === idx;
-            })[0]
-        }
-
-        student_toolbar.find(".btn-mark-att")
-            .html(__('Mark Attendence'))
-            .on("click", function() {
-                var students_present = [];
-                var students_absent = [];
-                $(me.wrapper).find('input[type="checkbox"]').each(function(i, check) {
-                    var idx = $(check).data().idx;
-                    if ($(check).is(":checked")) {
-                        students_present.push(get_student(idx));
-                    } else {
-                        students_absent.push(get_student(idx));
-                    }
-                });
-                frappe.call({
-                    method: "erpnext.schools.api.mark_attendance",
-                    args: {
-                        "students_present": students_present,
-                        "students_absent": students_absent,
-                        "student_batch": frm.doc.student_batch,
-                        "date": frm.doc.date
-                    },
-                    callback: function(r) {
-                        hide_field('attendance');
-                    }
-                });
-            });
-
-
-        $.each(students, function(i, m) {
-            $(repl('<div class="col-sm-6">\
-				<div class="checkbox">\
-				<label><input data-idx="%(idx)s" type="checkbox" class="students-check" data-student="%(name)s">\
-				%(idx)s - %(name)s</label>\
-			</div></div>', {
-                name: m.student_name,
-                idx: m.idx
-            })).appendTo(me.wrapper);
-        });
-    }
-});
\ No newline at end of file
diff --git a/erpnext/schools/doctype/student_batch_attendance_tool/student_batch_attendance_tool.py b/erpnext/schools/doctype/student_batch_attendance_tool/student_batch_attendance_tool.py
deleted file mode 100644
index 49a5ae8..0000000
--- a/erpnext/schools/doctype/student_batch_attendance_tool/student_batch_attendance_tool.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.document import Document
-
-class StudentBatchAttendanceTool(Document):
-	pass