Merge branch 'develop' into payment-terms
diff --git a/erpnext/docs/assets/img/schools/admission/student-admission.gif b/erpnext/docs/assets/img/schools/admission/student-admission.gif
new file mode 100644
index 0000000..26caea9
--- /dev/null
+++ b/erpnext/docs/assets/img/schools/admission/student-admission.gif
Binary files differ
diff --git a/erpnext/docs/user/manual/en/schools/admission/student_admission.md b/erpnext/docs/user/manual/en/schools/admission/student_admission.md
index eeaa977..7a63fa7 100644
--- a/erpnext/docs/user/manual/en/schools/admission/student_admission.md
+++ b/erpnext/docs/user/manual/en/schools/admission/student_admission.md
@@ -1,13 +1,14 @@
 # Student Admission
 
-The admission process begins with filling the admission form. The Student Admission record enables to intitate your admission process for a given **Academic year**. ERPNext admission module allow you to create an admission record which can be then published on the ERPNext generate website. 
+The admission process begins with filling the admission form. The Student Admission record enables to initiate your admission process for a given **Academic year**. ERPNext admission module allows you to create an admission record which can be then published on the ERPNext generate website.
 
 To create a Student Admission record  go to :
 
 **Schools** >> **Admissions** >> **Student Admission** >>
 
 
-<img class="screenshot" alt="Student Applicant" src="/docs/assets/img/schools/student/student-admission.gif">
+<img class="screenshot" alt="Student Applicant" src="/docs/assets/img/schools/admission/student-admission.gif">
 
+Once an admission record is created, the age eligibility criteria can be determined for the every program. Similarly, you can also determine the application fee and naming series for every student applicant. If you keep the naming series blank then the default naming series will be applied for every student applicant.
 
-Once a admission record is created it can be published on the website and the student can apply from the web portal itself. 
\ No newline at end of file
+The information provided in the Student Admission records will be used for the validation and creation of the Student Admission records (only if student admission link is filled there)
\ No newline at end of file
diff --git a/erpnext/hr/doctype/training_event/training_event.json b/erpnext/hr/doctype/training_event/training_event.json
index f3c0e41..cb8518b 100644
--- a/erpnext/hr/doctype/training_event/training_event.json
+++ b/erpnext/hr/doctype/training_event/training_event.json
@@ -79,6 +79,37 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "depends_on": "eval:doc.type == 'Seminar' || doc.type == 'Workshop' || doc.type == 'Conference' || doc.type == 'Exam'", 
+   "fieldname": "has_certificate", 
+   "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": "Has Certificate", 
+   "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_bulk_edit": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
    "fieldname": "column_break_2", 
    "fieldtype": "Column Break", 
    "hidden": 0, 
@@ -139,6 +170,38 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "depends_on": "eval:doc.type == 'Seminar' || doc.type == 'Workshop' || doc.type == 'Exam'", 
+   "fieldname": "level", 
+   "fieldtype": "Select", 
+   "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": "Level", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "\nBeginner\nExpert\nAdvance", 
+   "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_bulk_edit": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
    "fieldname": "company", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -715,7 +778,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2017-10-05 05:57:08.212658", 
+ "modified": "2017-10-06 10:59:09.217283", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "Training Event", 
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index d5b606d..7bc947e 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -450,6 +450,7 @@
 erpnext.patches.v8_9.update_billing_gstin_for_indian_account
 erpnext.patches.v9_0.fix_subscription_next_date
 erpnext.patches.v9_0.set_schedule_date_for_material_request_and_purchase_order
+erpnext.patches.v9_0.student_admission_childtable_migrate
 erpnext.patches.v8_10.add_due_date_to_gle
 erpnext.patches.v8_10.update_gl_due_date_for_pi_and_si
 erpnext.patches.v8_10.add_payment_terms_field_to_supplier
diff --git a/erpnext/patches/v9_0/student_admission_childtable_migrate.py b/erpnext/patches/v9_0/student_admission_childtable_migrate.py
new file mode 100644
index 0000000..dcbbeeb
--- /dev/null
+++ b/erpnext/patches/v9_0/student_admission_childtable_migrate.py
@@ -0,0 +1,28 @@
+# Copyright (c) 2017, Frappe and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+
+def execute():
+	frappe.reload_doc('schools', 'doctype', 'Student Admission Program')
+	frappe.reload_doctype('Student Admission')
+
+	if "program" not in frappe.db.get_table_columns("Student Admission"):
+		return
+
+	student_admissions = frappe.get_all("Student Admission", fields=["name", "application_fee", \
+		"naming_series_for_student_applicant", "program", "introduction", "eligibility"])
+	for student_admission in student_admissions:
+		doc = frappe.get_doc("Student Admission", student_admission.name)
+		doc.append("program_details", {
+			"program": student_admission.get("program"),
+			"application_fee": student_admission.get("application_fee"),
+			"applicant_naming_series": student_admission.get("naming_series_for_student_applicant"),
+		})
+		if student_admission.eligibility and student_admission.introduction:
+			doc.introduction = student_admission.introduction + "<br><div>" + \
+				student_admission.eligibility + "</div>"
+		doc.flags.ignore_validate = True
+		doc.flags.ignore_mandatory = True
+		doc.save()
diff --git a/erpnext/schools/doctype/student_admission/test_student_admission.js b/erpnext/schools/doctype/student_admission/test_student_admission.js
index 0d7c997..3e997ca 100644
--- a/erpnext/schools/doctype/student_admission/test_student_admission.js
+++ b/erpnext/schools/doctype/student_admission/test_student_admission.js
@@ -11,23 +11,29 @@
 				{admission_start_date: '2016-04-20'},
 				{admission_end_date: '2016-05-31'},
 				{title: '2016-17 Admissions'},
-				{program: 'Standard Test'},
-				{application_fee: 1000},
-				{naming_series_for_student_applicant: 'AP'},
+				{application_form_route: 'student-applicant'},
 				{introduction: 'Test intro'},
-				{eligibility: 'Test eligibility'}
+				{program_details: [
+					[
+						{'program': 'Standard Test'},
+						{'application_fee': 1000},
+						{'applicant_naming_series': 'AP'},
+					]
+				]}
 			]);
 		},
+		() => cur_frm.save(),
 		() => {
 			assert.ok(cur_frm.doc.academic_year == '2016-17');
 			assert.ok(cur_frm.doc.admission_start_date == '2016-04-20');
 			assert.ok(cur_frm.doc.admission_end_date == '2016-05-31');
 			assert.ok(cur_frm.doc.title == '2016-17 Admissions');
-			assert.ok(cur_frm.doc.program == 'Standard Test', 'Program correctly selected');
-			assert.ok(cur_frm.doc.application_fee == 1000);
-			assert.ok(cur_frm.doc.naming_series_for_student_applicant == 'AP');
+			assert.ok(cur_frm.doc.application_form_route == 'student-applicant');
 			assert.ok(cur_frm.doc.introduction == 'Test intro');
-			assert.ok(cur_frm.doc.eligibility == 'Test eligibility');
+			assert.ok(cur_frm.doc.program_details[0].program == 'Standard Test', 'Program correctly selected');
+			assert.ok(cur_frm.doc.program_details[0].application_fee == 1000);
+			assert.ok(cur_frm.doc.program_details[0].applicant_naming_series == 'AP');
+			assert.ok(cur_frm.doc.route == 'admissions/2016-17-Admissions', "Route successfully set");
 		},
 		() => done()
 	]);