From 331361d03b91e3f672ecc8faaa6b868b50403e42 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Mon, 28 Nov 2016 16:57:02 +0530 Subject: [PATCH] Added Absent Student Report --- erpnext/config/schools.py | 6 ++ .../report/absent_student_report/__init__.py | 0 .../absent_student_report.js | 15 +++++ .../absent_student_report.json | 17 ++++++ .../absent_student_report.py | 60 +++++++++++++++++++ 5 files changed, 98 insertions(+) create mode 100644 erpnext/schools/report/absent_student_report/__init__.py create mode 100644 erpnext/schools/report/absent_student_report/absent_student_report.js create mode 100644 erpnext/schools/report/absent_student_report/absent_student_report.json create mode 100644 erpnext/schools/report/absent_student_report/absent_student_report.py diff --git a/erpnext/config/schools.py b/erpnext/config/schools.py index b494268372..2299305a5e 100644 --- a/erpnext/config/schools.py +++ b/erpnext/config/schools.py @@ -70,6 +70,12 @@ def get_data(): "type": "doctype", "name": "Student Batch Attendance Tool" }, + { + "type": "report", + "is_query_report": True, + "name": "Absent Student Report", + "doctype": "Attendance" + }, { "type": "report", "is_query_report": True, diff --git a/erpnext/schools/report/absent_student_report/__init__.py b/erpnext/schools/report/absent_student_report/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/schools/report/absent_student_report/absent_student_report.js b/erpnext/schools/report/absent_student_report/absent_student_report.js new file mode 100644 index 0000000000..7515f2203b --- /dev/null +++ b/erpnext/schools/report/absent_student_report/absent_student_report.js @@ -0,0 +1,15 @@ +// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// License: GNU General Public License v3. See license.txt + + +frappe.query_reports["Absent Student Report"] = { + "filters": [ + { + "fieldname":"date", + "label": __("Date"), + "fieldtype": "Date", + "default": get_today(), + "reqd": 1 + } + ] +} diff --git a/erpnext/schools/report/absent_student_report/absent_student_report.json b/erpnext/schools/report/absent_student_report/absent_student_report.json new file mode 100644 index 0000000000..26989d197b --- /dev/null +++ b/erpnext/schools/report/absent_student_report/absent_student_report.json @@ -0,0 +1,17 @@ +{ + "add_total_row": 0, + "apply_user_permissions": 1, + "creation": "2013-05-13 14:04:03", + "docstatus": 0, + "doctype": "Report", + "idx": 1, + "is_standard": "Yes", + "modified": "2014-06-03 07:18:17.181332", + "modified_by": "Administrator", + "module": "Schools", + "name": "Absent Student Report", + "owner": "Administrator", + "ref_doctype": "Attendance", + "report_name": "Absent Student Report", + "report_type": "Script Report" +} \ No newline at end of file diff --git a/erpnext/schools/report/absent_student_report/absent_student_report.py b/erpnext/schools/report/absent_student_report/absent_student_report.py new file mode 100644 index 0000000000..a138ca6ba9 --- /dev/null +++ b/erpnext/schools/report/absent_student_report/absent_student_report.py @@ -0,0 +1,60 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe +from frappe.utils import cstr, cint, getdate +from frappe import msgprint, _ + +def execute(filters=None): + if not filters: filters = {} + + if not filters.get("date"): + msgprint(_("Please select date"), raise_exception=1) + + columns = get_columns(filters) + + absent_students = get_absent_students(filters.get("date")) + leave_applicants = get_leave_applications(filters.get("date")) + + data = [] + for student in absent_students: + if not student.student in leave_applicants: + row = [student.student, student.student_name, student.student_batch] + stud_details = frappe.db.get_value("Student", student.student, ['student_email_id', 'student_mobile_number'], as_dict=True) + + if stud_details.student_email_id: + row+=[stud_details.student_email_id] + else: + row+= [""] + + if stud_details.student_mobile_number: + row+=[stud_details.student_mobile_number] + else: + row+= [""] + + data.append(row) + + return columns, data + +def get_columns(filters): + columns = [ + _("Student") + ":Link/Student:90", + _("Student Name") + "::150", + _("Student Batch") + "::180", + _("Student Email ID") + "::180", + _("Student Mobile No.") + "::150", + ] + return columns + +def get_absent_students(date): + absent_students = frappe.db.sql("""select student, student_name, student_batch from `tabStudent Attendance` + where docstatus = 1 and date = %s order by student_batch, student_name""", date, as_dict=1) + return absent_students + +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): + leave_applicants.append(student[0]) + return leave_applicants \ No newline at end of file