Changes in the program enrollment
diff --git a/erpnext/schools/doctype/course/course.json b/erpnext/schools/doctype/course/course.json
index ad4c60e..b6eda12 100644
--- a/erpnext/schools/doctype/course/course.json
+++ b/erpnext/schools/doctype/course/course.json
@@ -47,18 +47,19 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "course_code", 
-   "fieldtype": "Data", 
+   "fieldname": "department", 
+   "fieldtype": "Link", 
    "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": "Course Code", 
+   "in_list_view": 1, 
+   "in_standard_filter": 1, 
+   "label": "Department", 
    "length": 0, 
    "no_copy": 0, 
+   "options": "Department", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -66,7 +67,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
@@ -133,6 +134,35 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fieldname": "course_code", 
+   "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": "Course Code", 
+   "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, 
    "fieldname": "course_abbreviation", 
    "fieldtype": "Data", 
    "hidden": 0, 
@@ -162,36 +192,6 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "department", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 1, 
-   "label": "Department", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Department", 
-   "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_6", 
    "fieldtype": "Section Break", 
    "hidden": 0, 
@@ -345,7 +345,7 @@
  "istable": 0, 
  "max_attachments": 0, 
  "menu_index": 0, 
- "modified": "2017-04-10 14:54:59.943676", 
+ "modified": "2017-04-12 20:44:42.048564", 
  "modified_by": "Administrator", 
  "module": "Schools", 
  "name": "Course", 
@@ -396,7 +396,7 @@
  "quick_entry": 0, 
  "read_only": 0, 
  "read_only_onload": 0, 
- "search_fields": "department", 
+ "search_fields": "course_name", 
  "show_name_in_global_search": 1, 
  "sort_field": "modified", 
  "sort_order": "DESC", 
diff --git a/erpnext/schools/doctype/course_schedule/test_course_schedule.py b/erpnext/schools/doctype/course_schedule/test_course_schedule.py
index e9fce4b..795486a 100644
--- a/erpnext/schools/doctype/course_schedule/test_course_schedule.py
+++ b/erpnext/schools/doctype/course_schedule/test_course_schedule.py
@@ -24,28 +24,28 @@
 		cs1 = make_course_schedule_test_record(simulate= True)
 		
 		cs2 = make_course_schedule_test_record(from_time= cs1.from_time, to_time= cs1.to_time, 
-			student_group="TC2-TP-2014-2015-2014-2015 (_Test Academic Term)", room="RM0002", do_not_save= 1)
+			student_group="TC1-TP2--2014-2015-2014-2015 (_Test Academic Term)", room="RM0002", do_not_save= 1)
 		self.assertRaises(OverlapError, cs2.save)
 
 	def test_room_conflict(self):
 		cs1 = make_course_schedule_test_record(simulate= True)
 		
 		cs2 = make_course_schedule_test_record(from_time= cs1.from_time, to_time= cs1.to_time, 
-			student_group="TC2-TP-2014-2015-2014-2015 (_Test Academic Term)", instructor="_T-Instructor-00002", do_not_save= 1)
+			student_group="TC1-TP2--2014-2015-2014-2015 (_Test Academic Term)", instructor="_T-Instructor-00002", do_not_save= 1)
 		self.assertRaises(OverlapError, cs2.save)
 		
 	def test_no_conflict(self):
 		cs1 = make_course_schedule_test_record(simulate= True)
 		
 		make_course_schedule_test_record(from_time= cs1.from_time, to_time= cs1.to_time, 
-			student_group="TC2-TP-2014-2015-2014-2015 (_Test Academic Term)", instructor="_T-Instructor-00002", room="RM0002")
+			student_group="TC1-TP2-2014-2015-2014-2015 (_Test Academic Term)", instructor="_T-Instructor-00002", room="RM0002")
 
 def make_course_schedule_test_record(**args):
 	args = frappe._dict(args)
 
 	course_schedule = frappe.new_doc("Course Schedule")
-	course_schedule.student_group = args.student_group or "TC-TP-2014-2015-2014-2015 (_Test Academic Term)"
-	course_schedule.course = args.course or "_Test Course"
+	course_schedule.student_group = args.student_group or "TC-TP1-2014-2015-2014-2015 (_Test Academic Term)"
+	course_schedule.course = args.course or "TC100"
 	course_schedule.instructor = args.instructor or "_T-Instructor-00001"
 	course_schedule.room = args.room or "RM0001"
 	
diff --git a/erpnext/schools/doctype/program/program.json b/erpnext/schools/doctype/program/program.json
index 3b0a92e..9d6ba1c 100644
--- a/erpnext/schools/doctype/program/program.json
+++ b/erpnext/schools/doctype/program/program.json
@@ -3,7 +3,7 @@
  "allow_guest_to_view": 0, 
  "allow_import": 1, 
  "allow_rename": 1, 
- "autoname": "field:program_name", 
+ "autoname": "field:program_code", 
  "beta": 0, 
  "creation": "2015-09-07 12:54:03.609282", 
  "custom": 0, 
@@ -25,7 +25,7 @@
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_global_search": 0, 
-   "in_list_view": 0, 
+   "in_list_view": 1, 
    "in_standard_filter": 0, 
    "label": "Program Name", 
    "length": 0, 
@@ -47,47 +47,19 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "program_code", 
-   "fieldtype": "Data", 
+   "fieldname": "department", 
+   "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_global_search": 0, 
    "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Program Code", 
+   "in_standard_filter": 1, 
+   "label": "Department", 
    "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": "program_abbreviation", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Program Abbreviation", 
-   "length": 0, 
-   "no_copy": 0, 
+   "options": "Department", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -133,19 +105,47 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "department", 
-   "fieldtype": "Link", 
+   "fieldname": "program_code", 
+   "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": "Program Code", 
+   "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, 
+   "fieldname": "program_abbreviation", 
+   "fieldtype": "Data", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_global_search": 0, 
    "in_list_view": 1, 
-   "in_standard_filter": 1, 
-   "label": "Department", 
+   "in_standard_filter": 0, 
+   "label": "Program Abbreviation", 
    "length": 0, 
    "no_copy": 0, 
-   "options": "Department", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -288,7 +288,7 @@
  "istable": 0, 
  "max_attachments": 0, 
  "menu_index": 0, 
- "modified": "2017-04-07 17:57:37.392266", 
+ "modified": "2017-04-12 20:40:53.542488", 
  "modified_by": "Administrator", 
  "module": "Schools", 
  "name": "Program", 
@@ -319,7 +319,7 @@
  "quick_entry": 0, 
  "read_only": 0, 
  "read_only_onload": 0, 
- "search_fields": "department", 
+ "search_fields": "program_name", 
  "show_name_in_global_search": 1, 
  "sort_field": "modified", 
  "sort_order": "DESC", 
diff --git a/erpnext/schools/doctype/program/test_records.json b/erpnext/schools/doctype/program/test_records.json
index b2374d6..e5eda70 100644
--- a/erpnext/schools/doctype/program/test_records.json
+++ b/erpnext/schools/doctype/program/test_records.json
@@ -1,10 +1,12 @@
 [
 	{
 		"program_name": "_Test Program",
-		"program_abbreviation": "TP"
+		"program_code": "_TP1",
+		"program_abbreviation": "TP1"
 	},
 	{
 		"program_name": "_Test Program 2",
+		"program_code": "_TP2",
 		"program_abbreviation": "TP2"
 	}
 ]
diff --git a/erpnext/schools/doctype/program_enrollment/program_enrollment.js b/erpnext/schools/doctype/program_enrollment/program_enrollment.js
index 96c8f96..f117ee2 100644
--- a/erpnext/schools/doctype/program_enrollment/program_enrollment.js
+++ b/erpnext/schools/doctype/program_enrollment/program_enrollment.js
@@ -3,7 +3,35 @@
 
 cur_frm.add_fetch('fee_structure', 'total_amount', 'amount');
 
-frappe.ui.form.on("Program Enrollment", {
+frappe.ui.form.on("Program Enrollment", {	
+	onload: function(frm, cdt, cdn){
+		frm.set_query("academic_term", "fees", function(){
+			return{
+				"filters":{
+					"academic_year": (frm.doc.academic_year)
+				}
+			};
+		});
+				
+		frm.fields_dict['fees'].grid.get_field('fee_structure').get_query = function(doc, cdt, cdn) {
+			var d = locals[cdt][cdn];
+			return {
+				filters: {'academic_term': d.academic_term}
+			}
+		};
+
+		if (frm.doc.program) {
+			frm.set_query("course", "courses", function(doc, cdt, cdn) {
+				return{
+					query: "erpnext.schools.doctype.program_enrollment.program_enrollment.get_program_courses",
+					filters: {
+						'program': frm.doc.program	
+					}
+				}
+			});
+		}
+	},
+
 	program: function(frm) {
 		if (frm.doc.program) {
 			frappe.call({
@@ -18,28 +46,32 @@
 					}
 				}
 			});
+			frm.trigger.onload()
 		}
 	},
 	
 	student_category: function() {
 		frappe.ui.form.trigger("Program Enrollment", "program");
 	},
-	
-	onload: function(frm, cdt, cdn){
-		cur_frm.set_query("academic_term", "fees", function(){
-			return{
-				"filters":{
-					"academic_year": (frm.doc.academic_year)
+
+	get_courses: function(frm) {
+		if (frm.doc.program) {
+			frm.set_value("courses",[]);
+			frappe.call({
+				method: "get_courses",
+				doc:frm.doc,
+				callback: function(r) {
+					if(r.message) {
+						frm.set_value("courses", r.message);
+					}
+					else {
+						frappe.msgprint(__("There is no mandatory course for the program {0}",[frm.doc.program]));
+					}
 				}
-			};
-		});
-				
-		cur_frm.fields_dict['fees'].grid.get_field('fee_structure').get_query = function(doc, cdt, cdn) {
-			var d = locals[cdt][cdn];
-			return {
-				filters: {'academic_term': d.academic_term}
-			}
-		};
-		
+			})
+		}
+		else {
+			frappe.throw(__("Select the Program to fetch mandatory courses."))
+		}
 	}
 });
diff --git a/erpnext/schools/doctype/program_enrollment/program_enrollment.json b/erpnext/schools/doctype/program_enrollment/program_enrollment.json
index ae60472..988af05 100644
--- a/erpnext/schools/doctype/program_enrollment/program_enrollment.json
+++ b/erpnext/schools/doctype/program_enrollment/program_enrollment.json
@@ -78,7 +78,37 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "student_category", 
+   "fieldname": "academic_year", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 1, 
+   "in_standard_filter": 1, 
+   "label": "Academic Year", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Academic Year", 
+   "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": 1, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "fieldname": "academic_term", 
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -87,10 +117,10 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Student Category", 
+   "label": "Academic Term", 
    "length": 0, 
    "no_copy": 0, 
-   "options": "Student Category", 
+   "options": "Academic Term", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -108,8 +138,9 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "school_house", 
-   "fieldtype": "Link", 
+   "default": "Today", 
+   "fieldname": "enrollment_date", 
+   "fieldtype": "Date", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
@@ -117,10 +148,9 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "School House", 
+   "label": "Enrollment Date", 
    "length": 0, 
    "no_copy": 0, 
-   "options": "School House", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -128,7 +158,7 @@
    "read_only": 0, 
    "remember_last_selected_value": 0, 
    "report_hide": 0, 
-   "reqd": 0, 
+   "reqd": 1, 
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
@@ -192,7 +222,7 @@
    "unique": 0
   }, 
   {
-   "allow_on_submit": 0, 
+   "allow_on_submit": 1, 
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
@@ -226,19 +256,19 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "academic_year", 
+   "fieldname": "student_category", 
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 1, 
-   "label": "Academic Year", 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Student Category", 
    "length": 0, 
    "no_copy": 0, 
-   "options": "Academic Year", 
+   "options": "Student Category", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -246,7 +276,37 @@
    "read_only": 0, 
    "remember_last_selected_value": 0, 
    "report_hide": 0, 
-   "reqd": 1, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 1, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "fieldname": "school_house", 
+   "fieldtype": "Link", 
+   "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": "School House", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "School House", 
+   "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
@@ -256,9 +316,8 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "default": "Today", 
-   "fieldname": "enrollment_date", 
-   "fieldtype": "Date", 
+   "fieldname": "enrolled_courses", 
+   "fieldtype": "Section Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
@@ -266,7 +325,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Enrollment Date", 
+   "label": "Enrolled courses", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
@@ -276,7 +335,66 @@
    "read_only": 0, 
    "remember_last_selected_value": 0, 
    "report_hide": 0, 
-   "reqd": 1, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "fieldname": "get_courses", 
+   "fieldtype": "Button", 
+   "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": "Get Courses", 
+   "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": 1, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "fieldname": "courses", 
+   "fieldtype": "Table", 
+   "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": "Courses", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Program Enrollment Course", 
+   "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
@@ -295,7 +413,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "", 
+   "label": "Fees", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
@@ -412,7 +530,7 @@
  "istable": 0, 
  "max_attachments": 0, 
  "menu_index": 0, 
- "modified": "2017-04-06 15:21:43.137852", 
+ "modified": "2017-04-12 12:12:10.148274", 
  "modified_by": "Administrator", 
  "module": "Schools", 
  "name": "Program Enrollment", 
diff --git a/erpnext/schools/doctype/program_enrollment/program_enrollment.py b/erpnext/schools/doctype/program_enrollment/program_enrollment.py
index 02c6fe7..feb4c2f 100644
--- a/erpnext/schools/doctype/program_enrollment/program_enrollment.py
+++ b/erpnext/schools/doctype/program_enrollment/program_enrollment.py
@@ -6,6 +6,7 @@
 import frappe
 from frappe import msgprint, _
 from frappe.model.document import Document
+from frappe.desk.reportview import get_match_cond, get_filters_cond
 from frappe.utils import comma_and
 
 class ProgramEnrollment(Document):
@@ -53,4 +54,26 @@
 		if fee_list:
 			fee_list = ["""<a href="#Form/Fees/%s" target="_blank">%s</a>""" % \
 				(fee, fee) for fee in fee_list]
-			msgprint(_("Fee Records Created - {0}").format(comma_and(fee_list)))
\ No newline at end of file
+			msgprint(_("Fee Records Created - {0}").format(comma_and(fee_list)))
+
+	def get_courses(self):
+		return frappe.db.sql('''select course, course_name from `tabProgram Course` where parent = %s and required = 1''', (self.program), as_dict=1)
+
+
+@frappe.whitelist()
+def get_program_courses(doctype, txt, searchfield, start, page_len, filters):
+	if filters.get('program'):
+		return frappe.db.sql("""select course, course_name from `tabProgram Course`
+			where  parent = %(program)s and course like %(txt)s {match_cond}
+			order by
+				if(locate(%(_txt)s, course), locate(%(_txt)s, course), 99999),
+				idx desc,
+				`tabProgram Course`.course asc
+			limit {start}, {page_len}""".format(
+				match_cond=get_match_cond(doctype),
+				start=start,
+				page_len=page_len), {
+					"txt": "%{0}%".format(txt),
+					"_txt": txt.replace('%', ''),
+					"program": filters['program']
+				})
diff --git a/erpnext/schools/doctype/program_enrollment_course/__init__.py b/erpnext/schools/doctype/program_enrollment_course/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/schools/doctype/program_enrollment_course/__init__.py
diff --git a/erpnext/schools/doctype/program_enrollment_course/program_enrollment_course.json b/erpnext/schools/doctype/program_enrollment_course/program_enrollment_course.json
new file mode 100644
index 0000000..5c5e220
--- /dev/null
+++ b/erpnext/schools/doctype/program_enrollment_course/program_enrollment_course.json
@@ -0,0 +1,101 @@
+{
+ "allow_copy": 0, 
+ "allow_guest_to_view": 0, 
+ "allow_import": 0, 
+ "allow_rename": 0, 
+ "beta": 0, 
+ "creation": "2017-04-10 19:28:19.616308", 
+ "custom": 0, 
+ "docstatus": 0, 
+ "doctype": "DocType", 
+ "document_type": "", 
+ "editable_grid": 1, 
+ "engine": "InnoDB", 
+ "fields": [
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "fieldname": "course", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 1, 
+   "in_standard_filter": 0, 
+   "label": "Course", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Course", 
+   "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, 
+   "fieldname": "course_name", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 1, 
+   "in_standard_filter": 0, 
+   "label": "Course Name", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "course.course_name", 
+   "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
+  }
+ ], 
+ "has_web_view": 0, 
+ "hide_heading": 0, 
+ "hide_toolbar": 0, 
+ "idx": 0, 
+ "image_view": 0, 
+ "in_create": 0, 
+ "is_submittable": 0, 
+ "issingle": 0, 
+ "istable": 1, 
+ "max_attachments": 0, 
+ "modified": "2017-04-12 11:49:50.433280", 
+ "modified_by": "Administrator", 
+ "module": "Schools", 
+ "name": "Program Enrollment Course", 
+ "name_case": "", 
+ "owner": "Administrator", 
+ "permissions": [], 
+ "quick_entry": 1, 
+ "read_only": 0, 
+ "read_only_onload": 0, 
+ "show_name_in_global_search": 0, 
+ "sort_field": "modified", 
+ "sort_order": "DESC", 
+ "track_changes": 1, 
+ "track_seen": 0
+}
\ No newline at end of file
diff --git a/erpnext/schools/doctype/program_enrollment_course/program_enrollment_course.py b/erpnext/schools/doctype/program_enrollment_course/program_enrollment_course.py
new file mode 100644
index 0000000..e1f564e
--- /dev/null
+++ b/erpnext/schools/doctype/program_enrollment_course/program_enrollment_course.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 ProgramEnrollmentCourse(Document):
+	pass
diff --git a/erpnext/schools/doctype/school_settings/school_settings.py b/erpnext/schools/doctype/school_settings/school_settings.py
index a5f68e8..5a1c6fe 100644
--- a/erpnext/schools/doctype/school_settings/school_settings.py
+++ b/erpnext/schools/doctype/school_settings/school_settings.py
@@ -4,7 +4,23 @@
 
 from __future__ import unicode_literals
 import frappe
+import frappe.defaults
 from frappe.model.document import Document
 
+school_keydict = {
+	# "key in defaults": "key in Global Defaults"
+	"academic_year": "current_academic_year",
+	"academic_term": "current_academic_term",
+}
+
 class SchoolSettings(Document):
-	pass
+	def on_update(self):
+		"""update defaults"""
+		for key in school_keydict:
+			frappe.db.set_default(key, self.get(school_keydict[key], ''))
+
+		# clear cache
+		frappe.clear_cache()
+
+	def get_defaults(self):
+		return frappe.defaults.get_defaults()
diff --git a/erpnext/schools/doctype/student/test_records.json b/erpnext/schools/doctype/student/test_records.json
index e280794..36da06f 100644
--- a/erpnext/schools/doctype/student/test_records.json
+++ b/erpnext/schools/doctype/student/test_records.json
@@ -3,7 +3,7 @@
 		"first_name": "_Test",
 		"middle_name": "Student",
 		"last_name": "Name",
-		"program": "_Test Program",
+		"program": "TC101",
 		"date_of_birth": "2000-01-01",
 		"gender": "Male",
 		"blood_group": "A+"
@@ -13,7 +13,7 @@
 		"first_name": "_Test",
 		"middle_name": "Student",
 		"last_name": "Name 1",
-		"program": "_Test Program",
+		"program": "TC101",
 		"date_of_birth": "2000-01-01",
 		"gender": "Male",
 		"blood_group": "A+"
@@ -23,7 +23,7 @@
 		"first_name": "_Test",
 		"middle_name": "Student",
 		"last_name": "Name 2",
-		"program": "_Test Program",
+		"program": "TC101",
 		"date_of_birth": "2000-01-01",
 		"gender": "Male",
 		"blood_group": "A+"
diff --git a/erpnext/schools/doctype/student_group/test_records.json b/erpnext/schools/doctype/student_group/test_records.json
index 27cd181..06cb086 100644
--- a/erpnext/schools/doctype/student_group/test_records.json
+++ b/erpnext/schools/doctype/student_group/test_records.json
@@ -1,13 +1,13 @@
 [
 	{
-		"program": "_Test Program",
-		"course": "_Test Course",
+		"program": "_TP1",
+		"course": "TC100",
 		"academic_year": "2014-2015",
 		"academic_term": "2014-2015 (_Test Academic Term)"
 	},
 	{
-		"program": "_Test Program",
-		"course": "_Test Course 2",
+		"program": "_TP2",
+		"course": "TC101",
 		"academic_year": "2014-2015",
 		"academic_term": "2014-2015 (_Test Academic Term)"
 	}
diff --git a/erpnext/schools/utils.py b/erpnext/schools/utils.py
index 3adbae4..2ca46d5 100644
--- a/erpnext/schools/utils.py
+++ b/erpnext/schools/utils.py
@@ -9,9 +9,9 @@
 class OverlapError(frappe.ValidationError): pass
 
 def validate_overlap_for(doc, doctype, fieldname, value=None):
-	"""Checks overlap for specified feild.
+	"""Checks overlap for specified field.
 	
-	:param fieldname: Checks Overlap for this feild 
+	:param fieldname: Checks Overlap for this field 
 	"""
 	
 	existing = get_overlap_for(doc, doctype, fieldname, value)
@@ -20,9 +20,9 @@
 			doc.meta.get_label(fieldname) if not value else fieldname , value or doc.get(fieldname)), OverlapError)
 	
 def get_overlap_for(doc, doctype, fieldname, value=None):
-	"""Returns overlaping document for specified feild.
+	"""Returns overlaping document for specified field.
 	
-	:param fieldname: Checks Overlap for this feild 
+	:param fieldname: Checks Overlap for this field 
 	"""
 
 	existing = frappe.db.sql("""select name, from_time, to_time from `tab{0}`