Changes in Program Enrollment and Report for Student Contact Details (#8176)
* Added the student house name in the program enrollment
* added report for the student contact details
* Enabled tag in Student master and fix in student enrollment tool
* [Fix] School House and Report
diff --git a/erpnext/schools/doctype/program_enrollment/program_enrollment.json b/erpnext/schools/doctype/program_enrollment/program_enrollment.json
index 331f79e..b1941c7 100644
--- a/erpnext/schools/doctype/program_enrollment/program_enrollment.json
+++ b/erpnext/schools/doctype/program_enrollment/program_enrollment.json
@@ -1,5 +1,6 @@
{
"allow_copy": 0,
+ "allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"autoname": "PE.#####",
@@ -107,19 +108,19 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "student_batch_name",
+ "fieldname": "school_house",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
- "in_global_search": 1,
+ "in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
- "label": "Student Batch Name",
+ "label": "School House",
"length": 0,
"no_copy": 0,
- "options": "Student Batch Name",
+ "options": "School House",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -195,6 +196,36 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "student_batch_name",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 1,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Batch Name",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Student Batch Name",
+ "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": "academic_year",
"fieldtype": "Link",
"hidden": 0,
@@ -369,19 +400,19 @@
"unique": 0
}
],
+ "has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 0,
"image_field": "image",
"image_view": 0,
"in_create": 0,
- "in_dialog": 0,
"is_submittable": 1,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
- "modified": "2017-02-20 13:19:29.456157",
+ "modified": "2017-03-29 15:30:03.359985",
"modified_by": "Administrator",
"module": "Schools",
"name": "Program Enrollment",
diff --git a/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.py b/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.py
index 6c10880..2e7daa7 100644
--- a/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.py
+++ b/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.py
@@ -23,6 +23,16 @@
else:
students = frappe.db.sql("select student, student_name from \
`tabProgram Enrollment` where program = %s and academic_year = %s",(self.program, self.academic_year), as_dict=1)
+ student_list = [d.student for d in students]
+
+ inactive_students = frappe.db.sql('''
+ select name as student, title as student_name from `tabStudent` where name in (%s) and enabled = 0''' %
+ ', '.join(['%s']*len(student_list)), tuple(student_list), as_dict=1)
+
+ for student in students:
+ if student.student in [d.student for d in inactive_students]:
+ students.remove(student)
+
if students:
return students
else:
diff --git a/erpnext/schools/doctype/school_house/__init__.py b/erpnext/schools/doctype/school_house/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/schools/doctype/school_house/__init__.py
diff --git a/erpnext/schools/doctype/school_house/school_house.js b/erpnext/schools/doctype/school_house/school_house.js
new file mode 100644
index 0000000..cf1dcd4
--- /dev/null
+++ b/erpnext/schools/doctype/school_house/school_house.js
@@ -0,0 +1,8 @@
+// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
+// For license information, please see license.txt
+
+frappe.ui.form.on('School House', {
+ refresh: function(frm) {
+
+ }
+});
diff --git a/erpnext/schools/doctype/school_house/school_house.json b/erpnext/schools/doctype/school_house/school_house.json
new file mode 100644
index 0000000..60d0976
--- /dev/null
+++ b/erpnext/schools/doctype/school_house/school_house.json
@@ -0,0 +1,92 @@
+{
+ "allow_copy": 0,
+ "allow_guest_to_view": 0,
+ "allow_import": 0,
+ "allow_rename": 0,
+ "autoname": "field:house_name",
+ "beta": 0,
+ "creation": "2017-03-27 15:19:54.672995",
+ "custom": 0,
+ "docstatus": 0,
+ "doctype": "DocType",
+ "document_type": "Setup",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "fields": [
+ {
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "house_name",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "House Name",
+ "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
+ }
+ ],
+ "has_web_view": 0,
+ "hide_heading": 0,
+ "hide_toolbar": 0,
+ "idx": 0,
+ "image_view": 0,
+ "in_create": 0,
+ "is_submittable": 0,
+ "issingle": 0,
+ "istable": 0,
+ "max_attachments": 0,
+ "modified": "2017-03-29 15:33:15.757309",
+ "modified_by": "Administrator",
+ "module": "Schools",
+ "name": "School House",
+ "name_case": "",
+ "owner": "Administrator",
+ "permissions": [
+ {
+ "amend": 0,
+ "apply_user_permissions": 0,
+ "cancel": 0,
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "if_owner": 0,
+ "import": 0,
+ "permlevel": 0,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Academics User",
+ "set_user_permissions": 0,
+ "share": 1,
+ "submit": 0,
+ "write": 1
+ }
+ ],
+ "quick_entry": 1,
+ "read_only": 0,
+ "read_only_onload": 0,
+ "show_name_in_global_search": 0,
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "track_changes": 0,
+ "track_seen": 0
+}
\ No newline at end of file
diff --git a/erpnext/schools/doctype/school_house/school_house.py b/erpnext/schools/doctype/school_house/school_house.py
new file mode 100644
index 0000000..8751e5c
--- /dev/null
+++ b/erpnext/schools/doctype/school_house/school_house.py
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2017, 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 SchoolHouse(Document):
+ pass
diff --git a/erpnext/schools/doctype/school_house/test_school_house.py b/erpnext/schools/doctype/school_house/test_school_house.py
new file mode 100644
index 0000000..5cf96d5
--- /dev/null
+++ b/erpnext/schools/doctype/school_house/test_school_house.py
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
+# See license.txt
+from __future__ import unicode_literals
+
+import frappe
+import unittest
+
+class TestSchoolHouse(unittest.TestCase):
+ pass
diff --git a/erpnext/schools/doctype/student/student.json b/erpnext/schools/doctype/student/student.json
index 08b0f17..c685fcb 100644
--- a/erpnext/schools/doctype/student/student.json
+++ b/erpnext/schools/doctype/student/student.json
@@ -18,6 +18,92 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "section_break_1",
+ "fieldtype": "Section Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "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,
+ "default": "1",
+ "fieldname": "enabled",
+ "fieldtype": "Check",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Enabled",
+ "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": "section_break_3",
+ "fieldtype": "Section Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "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": "first_name",
"fieldtype": "Data",
"hidden": 0,
@@ -992,7 +1078,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
- "modified": "2017-03-15 17:50:09.677184",
+ "modified": "2017-03-29 12:57:26.293876",
"modified_by": "Administrator",
"module": "Schools",
"name": "Student",
diff --git a/erpnext/schools/report/student_and_guardian_contact_details/__init__.py b/erpnext/schools/report/student_and_guardian_contact_details/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/schools/report/student_and_guardian_contact_details/__init__.py
diff --git a/erpnext/schools/report/student_and_guardian_contact_details/student_and_guardian_contact_details.js b/erpnext/schools/report/student_and_guardian_contact_details/student_and_guardian_contact_details.js
new file mode 100644
index 0000000..2734b53
--- /dev/null
+++ b/erpnext/schools/report/student_and_guardian_contact_details/student_and_guardian_contact_details.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
+// For license information, please see license.txt
+
+frappe.query_reports["Student and Guardian Contact Details"] = {
+ "filters": [
+ {
+ "fieldname":"academic_year",
+ "label": __("Academic Year"),
+ "fieldtype": "Link",
+ "options": "Academic Year",
+ "reqd": 1,
+ },
+ {
+ "fieldname":"program",
+ "label": __("Program"),
+ "fieldtype": "Link",
+ "options": "Program",
+ "reqd": 1
+ },
+ {
+ "fieldname":"student_batch_name",
+ "label": __("Batch Name"),
+ "fieldtype": "Link",
+ "options": "Student Batch Name",
+ "reqd": 1
+ },
+
+ ]
+}
diff --git a/erpnext/schools/report/student_and_guardian_contact_details/student_and_guardian_contact_details.json b/erpnext/schools/report/student_and_guardian_contact_details/student_and_guardian_contact_details.json
new file mode 100644
index 0000000..e822549
--- /dev/null
+++ b/erpnext/schools/report/student_and_guardian_contact_details/student_and_guardian_contact_details.json
@@ -0,0 +1,26 @@
+{
+ "add_total_row": 0,
+ "apply_user_permissions": 1,
+ "creation": "2017-03-27 17:47:16.831433",
+ "disabled": 0,
+ "docstatus": 0,
+ "doctype": "Report",
+ "idx": 0,
+ "is_standard": "Yes",
+ "modified": "2017-03-27 18:34:08.867661",
+ "modified_by": "Administrator",
+ "module": "Schools",
+ "name": "Student and Guardian Contact Details",
+ "owner": "Administrator",
+ "ref_doctype": "Program Enrollment",
+ "report_name": "Student and Guardian Contact Details",
+ "report_type": "Script Report",
+ "roles": [
+ {
+ "role": "Instructor"
+ },
+ {
+ "role": "Academics User"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/erpnext/schools/report/student_and_guardian_contact_details/student_and_guardian_contact_details.py b/erpnext/schools/report/student_and_guardian_contact_details/student_and_guardian_contact_details.py
new file mode 100644
index 0000000..5258bf4
--- /dev/null
+++ b/erpnext/schools/report/student_and_guardian_contact_details/student_and_guardian_contact_details.py
@@ -0,0 +1,82 @@
+# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe import _
+
+
+def execute(filters=None):
+ columns, data = [], []
+
+ academic_year = filters.get("academic_year")
+ program = filters.get("program")
+ student_batch_name = filters.get("student_batch_name")
+
+ columns = get_columns()
+
+ program_enrollments = frappe.get_list("Program Enrollment", fields=["student", "student_name"],
+ filters={"academic_year": academic_year, "program": program, "student_batch_name": student_batch_name})
+
+ student_list = [d.student for d in program_enrollments]
+ if not student_list:
+ return columns, []
+
+ student_mobile_map = get_student_mobile_no(student_list)
+ guardian_map = get_guardian_map(student_list)
+
+ for d in program_enrollments:
+ row = [d.student, d.student_name, student_mobile_map.get(d.student)]
+
+ student_guardians = guardian_map.get(d.student)
+
+ if student_guardians:
+ for i in xrange(2):
+ if i < len(student_guardians):
+ g = student_guardians[i]
+ row += [g.guardian_name, g.relation, g.mobile_number]
+
+ data.append(row)
+
+ return columns, data
+
+
+def get_columns():
+ columns = [
+ _("Student ID") + ":Link/Student:90",
+ _("Student Name") + "::150",
+ _("Student Mobile No.") + "::110",
+ _("Guardian1 Name") + "::150",
+ _("Relation with Guardian1") + "::80",
+ _("Guardian1 Mobile No") + "::125",
+ _("Guardian2 Name") + "::150",
+ _("Relation with Guardian2") + "::80",
+ _("Guardian2 Mobile No") + "::125",
+ ]
+ return columns
+
+def get_student_mobile_no(student_list):
+ student_mobile_map = frappe._dict()
+ student_mobile_no = frappe.db.sql('''
+ select name, student_mobile_number from `tabStudent` where name in (%s)''' %
+ ', '.join(['%s']*len(student_list)), tuple(student_list), as_dict=1)
+ for s in student_mobile_no:
+ student_mobile_map[s.name] = s.student_mobile_number
+ return student_mobile_map
+
+def get_guardian_map(student_list):
+ guardian_map = frappe._dict()
+ guardian_details = frappe.db.sql('''
+ select parent, guardian, guardian_name, relation from `tabStudent Guardian` where parent in (%s)''' %
+ ', '.join(['%s']*len(student_list)), tuple(student_list), as_dict=1)
+
+ guardian_list = list(set([g.guardian for g in guardian_details]))
+
+ guardian_mobile_no = dict(frappe.db.sql("""select name, mobile_number from `tabGuardian`
+ where name in (%s)""" % ", ".join(['%s']*len(guardian_list)), tuple(guardian_list)))
+
+ for guardian in guardian_details:
+ guardian["mobile_number"] = guardian_mobile_no.get(guardian.guardian)
+ guardian_map.setdefault(guardian.parent, []).append(guardian)
+
+ return guardian_map
\ No newline at end of file