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