Course Scheduling Tool (#11676)

* [education] Fix Course Scheduling Tool

* minor
diff --git a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.js b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.js
index f92f738..20503f9 100644
--- a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.js
+++ b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.js
@@ -1,20 +1,39 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-cur_frm.add_fetch("student_group", "program", "program");
-cur_frm.add_fetch("student_group", "course", "course");
-cur_frm.add_fetch("student_group", "academic_year", "academic_year");
-cur_frm.add_fetch("student_group", "academic_term", "academic_term");
 
-frappe.ui.form.on("Course Scheduling Tool", {
-
-	refresh: function(frm) {
+frappe.ui.form.on('Course Scheduling Tool', {
+	setup(frm) {
+		frm.add_fetch('student_group', 'program', 'program');
+		frm.add_fetch('student_group', 'course', 'course');
+		frm.add_fetch('student_group', 'academic_year', 'academic_year');
+		frm.add_fetch('student_group', 'academic_term', 'academic_term');
+	},
+	refresh(frm) {
 		frm.disable_save();
-		frm.page.set_primary_action(__("Schedule Course"), function() {
-			frappe.call({
-				method: "schedule_course",
-				doc: frm.doc
-			})
+		frm.page.set_primary_action(__('Schedule Course'), () => {
+			frm.call('schedule_course')
+				.then(r => {
+					if (!r.message) {
+						frappe.throw(__('There were errors creating Course Schedule'));
+					}
+					const { course_schedules } = r.message;
+					if (course_schedules) {
+						const html = `
+						<table class="table table-bordered">
+							<caption>${__('Following course schedules were created')}</caption>
+							<thead><tr><th>${__("Course")}</th><th>${__("Date")}</th></tr></thead>
+							<tbody>
+								${course_schedules.map(
+									c => `<tr><td><a href="#Form/Course Schedule/${c.name}">${c.name}</a></td>
+									<td>${c.schedule_date}</td></tr>`
+								).join('')}
+							</tbody>
+						</table>`
+
+						frappe.msgprint(html);
+					}
+				});
 		});
 	}
 });
\ No newline at end of file
diff --git a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.json b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.json
index e0fc1e2..9bb99d7 100644
--- a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.json
+++ b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.json
@@ -476,7 +476,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "rechedule", 
+   "fieldname": "reschedule", 
    "fieldtype": "Check", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -485,7 +485,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Rechedule", 
+   "label": "Reschedule", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
@@ -602,7 +602,7 @@
  "istable": 0, 
  "max_attachments": 0, 
  "menu_index": 0, 
- "modified": "2017-06-30 08:21:47.696063", 
+ "modified": "2017-11-21 16:47:58.091740", 
  "modified_by": "Administrator", 
  "module": "Schools", 
  "name": "Course Scheduling Tool", 
diff --git a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.py b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.py
index 4e07922..647d34b 100644
--- a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.py
+++ b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.py
@@ -10,71 +10,85 @@
 from frappe.utils import add_days, getdate
 from erpnext.schools.utils import OverlapError
 
+
 class CourseSchedulingTool(Document):
+
 	def schedule_course(self):
-		"""Creates course schedules as per specified parametes"""
-		
-		course_schedules= []
-		course_schedules_errors= []
-		rescheduled= []
-		reschedule_errors= []
-		
+		"""Creates course schedules as per specified parameters"""
+
+		course_schedules = []
+		course_schedules_errors = []
+		rescheduled = []
+		reschedule_errors = []
+
 		self.validate_mandatory()
 		self.validate_date()
-		self.instructor_name= frappe.db.get_value("Instructor", self.instructor, "instructor_name")
+		self.instructor_name = frappe.db.get_value(
+			"Instructor", self.instructor, "instructor_name")
 
-		group_based_on, course = frappe.db.get_value("Student Group", self.student_group, ["group_based_on", "course"])
+		group_based_on, course = frappe.db.get_value(
+			"Student Group", self.student_group, ["group_based_on", "course"])
+
 		if group_based_on == "Course":
-			self.course = course	
+			self.course = course
 
-		if self.rechedule:
-			rescheduled, reschedule_errors = self.delete_course_schedule(rescheduled, reschedule_errors)
-		
+		if self.reschedule:
+			rescheduled, reschedule_errors = self.delete_course_schedule(
+				rescheduled, reschedule_errors)
+
 		date = self.course_start_date
-		while(date < self.course_end_date):
+		while date < self.course_end_date:
 			if self.day == calendar.day_name[getdate(date).weekday()]:
 				course_schedule = self.make_course_schedule(date)
 				try:
+					print('pass')
 					course_schedule.save()
 				except OverlapError:
+					print('fail')
 					course_schedules_errors.append(date)
 				else:
-					course_schedules.append(course_schedule.name + " on " + date)
-				
+					course_schedules.append(course_schedule)
+
 				date = add_days(date, 7)
 			else:
 				date = add_days(date, 1)
-			
-		frappe.local.message_log = []
-		if course_schedules:
-			frappe.msgprint(_("Course Schedules created:") + "\n" + "\n".join(course_schedules))
-		if course_schedules_errors:
-			frappe.msgprint(_("There were errors while scheduling course on :") + "\n" + "\n".join(course_schedules_errors))
-		if rescheduled:
-			frappe.msgprint(_("Course Schedules deleted:") + "\n" + "\n".join(rescheduled))
-		if reschedule_errors:
-			frappe.msgprint(_("There were errors while deleting following schedules:") + "\n" + "\n".join(reschedule_errors))
-			
+
+		return dict(
+			course_schedules=course_schedules,
+			course_schedules_errors=course_schedules_errors,
+			rescheduled=rescheduled,
+			reschedule_errors=reschedule_errors
+		)
+
 	def validate_mandatory(self):
 		"""Validates all mandatory fields"""
-		
-		fields = ['course', 'room', 'instructor', 'from_time', 'to_time', 'course_start_date', 'course_end_date', 'day']
-		for d in  fields:
+
+		fields = ['course', 'room', 'instructor', 'from_time',
+				  'to_time', 'course_start_date', 'course_end_date', 'day']
+		for d in fields:
 			if not self.get(d):
-				frappe.throw(_("{0} is mandatory").format(self.meta.get_label(d)))	
+				frappe.throw(_("{0} is mandatory").format(
+					self.meta.get_label(d)))
 
 	def validate_date(self):
 		"""Validates if Course Start Date is greater than Course End Date"""
 		if self.course_start_date > self.course_end_date:
-			frappe.throw("Course Start Date cannot be greater than Course End Date.")
+			frappe.throw(
+				"Course Start Date cannot be greater than Course End Date.")
 
 	def delete_course_schedule(self, rescheduled, reschedule_errors):
 		"""Delete all course schedule within the Date range and specified filters"""
-		schedules = frappe.get_list("Course Schedule", fields=["name", "schedule_date"], filters = 
-			[["student_group", "=", self.student_group],
-			["course", "=", self.course],
-			["schedule_date", ">=", self.course_start_date], 
-			["schedule_date", "<=", self.course_end_date]])
+
+		schedules = frappe.get_list("Course Schedule",
+			fields=["name", "schedule_date"],
+			filters=[
+				["student_group", "=", self.student_group],
+				["course", "=", self.course],
+				["schedule_date", ">=", self.course_start_date],
+				["schedule_date", "<=", self.course_end_date]
+			]
+		)
+
 		for d in schedules:
 			try:
 				if self.day == calendar.day_name[getdate(d.schedule_date).weekday()]:
@@ -83,19 +97,18 @@
 			except:
 				reschedule_errors.append(d.name)
 		return rescheduled, reschedule_errors
-			
+
 	def make_course_schedule(self, date):
 		"""Makes a new Course Schedule.
 		:param date: Date on which Course Schedule will be created."""
-		
+
 		course_schedule = frappe.new_doc("Course Schedule")
 		course_schedule.student_group = self.student_group
 		course_schedule.course = self.course
 		course_schedule.instructor = self.instructor
 		course_schedule.instructor_name = self.instructor_name
 		course_schedule.room = self.room
-		course_schedule.schedule_date= date
-		course_schedule.from_time= self.from_time
-		course_schedule.to_time= self.to_time
+		course_schedule.schedule_date = date
+		course_schedule.from_time = self.from_time
+		course_schedule.to_time = self.to_time
 		return course_schedule
-	
\ No newline at end of file