test case fixed
diff --git a/erpnext/schools/doctype/course_schedule/course_schedule.py b/erpnext/schools/doctype/course_schedule/course_schedule.py
index 7550ab1..02a842e 100644
--- a/erpnext/schools/doctype/course_schedule/course_schedule.py
+++ b/erpnext/schools/doctype/course_schedule/course_schedule.py
@@ -13,7 +13,7 @@
self.set_title()
self.validate_mandatory()
self.validate_course()
- self.set_student_batch()
+ # self.set_student_batch()
self.validate_date()
self.validate_overlap()
diff --git a/erpnext/schools/doctype/course_schedule/test_course_schedule.py b/erpnext/schools/doctype/course_schedule/test_course_schedule.py
index 795486a..6a3456f 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="TC1-TP2--2014-2015-2014-2015 (_Test Academic Term)", room="RM0002", do_not_save= 1)
+ student_group="Course-TC101-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="TC1-TP2--2014-2015-2014-2015 (_Test Academic Term)", instructor="_T-Instructor-00002", do_not_save= 1)
+ student_group="Course-TC101-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="TC1-TP2-2014-2015-2014-2015 (_Test Academic Term)", instructor="_T-Instructor-00002", room="RM0002")
+ student_group="Course-TC102-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-TP1-2014-2015-2014-2015 (_Test Academic Term)"
- course_schedule.course = args.course or "TC100"
+ course_schedule.student_group = args.student_group or "Course-TC101-2014-2015 (_Test Academic Term)"
+ course_schedule.course = args.course or "TC101"
course_schedule.instructor = args.instructor or "_T-Instructor-00001"
course_schedule.room = args.room or "RM0001"
diff --git a/erpnext/schools/doctype/student_group/student_group.js b/erpnext/schools/doctype/student_group/student_group.js
index 2e2e121..2068644 100644
--- a/erpnext/schools/doctype/student_group/student_group.js
+++ b/erpnext/schools/doctype/student_group/student_group.js
@@ -71,31 +71,47 @@
frm.trigger("set_name");
},
- update_students: function(frm) {
- if (frm.doc.students.length === 0) {
- frm.doc.next_group_roll_number = 1;
- }
- frappe.call({
- method: "update_students",
- doc:frm.doc,
- callback: function(r) {
- if(r.message) {
- $.each(r.message, function(i, d) {
- var s = frm.add_child("students");
- s.student = d.student;
- s.student_name = d.student_name;
- if (d.active === 0) {
- s.active = 0;
- }
- s.group_roll_number = frm.doc.next_group_roll_number;
- frm.doc.next_group_roll_number += 1;
- });
- frm.save();
- } else {
- frappe.msgprint(__("Group already updated"))
+ get_students: function(frm) {
+ if (frm.doc.group_based_on != "Activity") {
+ var student_list = [];
+ var max_roll_no = 0;
+ $.each(frm.doc.students, function(i,d) {
+ student_list.push(d.student);
+ if (d.group_roll_number>max_roll_no) {
+ max_roll_no = d.group_roll_number;
}
- }
- })
+ });
+ frappe.call({
+ method: "erpnext.schools.doctype.student_group.student_group.get_students",
+ args: {
+ "academic_year": frm.doc.academic_year,
+ "group_based_on": frm.doc.group_based_on,
+ "program": frm.doc.program,
+ "batch" : frm.doc.batch,
+ "course": frm.doc.course
+ },
+ callback: function(r) {
+ if(r.message) {
+ $.each(r.message, function(i, d) {
+ if(!in_list(student_list, d.student)) {
+ var s = frm.add_child("students");
+ s.student = d.student;
+ s.student_name = d.student_name;
+ if (d.active === 0) {
+ s.active = 0;
+ }
+ s.group_roll_number = ++max_roll_no;
+ }
+ });
+ frm.save();
+ } else {
+ frappe.msgprint(__("Student Group is already updated."))
+ }
+ }
+ })
+ } else {
+ frappe.msgprint(__("Select students manually for the Activity based Group"));
+ }
}
});
\ No newline at end of file
diff --git a/erpnext/schools/doctype/student_group/student_group.json b/erpnext/schools/doctype/student_group/student_group.json
index 8474f74..59c5eab 100644
--- a/erpnext/schools/doctype/student_group/student_group.json
+++ b/erpnext/schools/doctype/student_group/student_group.json
@@ -14,6 +14,7 @@
"engine": "InnoDB",
"fields": [
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -44,6 +45,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -74,6 +76,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -104,6 +107,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -132,6 +136,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -162,6 +167,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -193,6 +199,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -224,6 +231,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -255,6 +263,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -285,6 +294,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -316,11 +326,12 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "update_students",
+ "fieldname": "get_students",
"fieldtype": "Button",
"hidden": 0,
"ignore_user_permissions": 0,
@@ -329,7 +340,7 @@
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
- "label": "Update Students",
+ "label": "Get Students",
"length": 0,
"no_copy": 0,
"permlevel": 0,
@@ -345,6 +356,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 1,
"bold": 0,
"collapsible": 0,
@@ -375,6 +387,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -404,6 +417,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -432,35 +446,6 @@
"search_index": 0,
"set_only_once": 0,
"unique": 0
- },
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "next_group_roll_number",
- "fieldtype": "Int",
- "hidden": 1,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Next Group Roll Number",
- "length": 0,
- "no_copy": 0,
- "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,
@@ -474,7 +459,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
- "modified": "2017-04-19 12:48:46.526133",
+ "modified": "2017-04-24 15:53:35.593913",
"modified_by": "Administrator",
"module": "Schools",
"name": "Student Group",
diff --git a/erpnext/schools/doctype/student_group/student_group.py b/erpnext/schools/doctype/student_group/student_group.py
index 56c3524..dba8c92 100644
--- a/erpnext/schools/doctype/student_group/student_group.py
+++ b/erpnext/schools/doctype/student_group/student_group.py
@@ -27,47 +27,42 @@
frappe.throw(_("""Cannot enroll more than {0} students for this student group.""").format(self.max_strength))
def validate_students(self):
- program_enrollment = self.get_program_enrollment()
+ program_enrollment = get_program_enrollment(self.academic_year, self.group_based_on, self.program, self.batch, self.course)
students = [d.student for d in program_enrollment] if program_enrollment else None
for d in self.students:
- if d.student not in students:
+ if self.group_based_on != "Activity" and d.student not in students:
frappe.throw(_("{0} - {1} is not enrolled in the given {2}".format(d.student, d.student_name, self.group_based_on)))
if not frappe.db.get_value("Student", d.student, "enabled") and d.active:
d.active = 0
frappe.throw(_("{0} - {1} is inactive student".format(d.student, d.student_name)))
+@frappe.whitelist()
+def get_students(academic_year, group_based_on, program=None, batch=None, course=None):
+ enrolled_students = get_program_enrollment(academic_year, group_based_on, program, batch, course)
- def update_students(self):
- enrolled_students = self.get_program_enrollment()
- group_student_list = [student.student for student in self.students]
+ if enrolled_students:
+ student_list = []
+ for s in enrolled_students:
+ if frappe.db.get_value("Student", s.student, "enabled"):
+ s.update({"active": 1})
+ else:
+ s.update({"active": 0})
+ student_list.append(s)
+ return student_list
- if enrolled_students:
- student_list = [];
- for s in enrolled_students:
- if s.student not in group_student_list:
- student_list.append(s.update({"active": 1}) if frappe.db.get_value("Student", s.student, "enabled")
- else s.update({"active": 0}))
- return student_list
- elif self.group_based_on != "Activity":
- frappe.throw(_("No students are enrolled in the given {}".format(self.group_based_on)))
- else:
- frappe.throw(_("Select students manually for the Activity based Group"))
+def get_program_enrollment(academic_year, group_based_on, program=None, batch=None, course=None):
+ if group_based_on == "Batch":
+ return frappe.db.sql('''select student, student_name from `tabProgram Enrollment` where academic_year = %s
+ and program = %s and student_batch_name = %s order by student_name asc''',(academic_year, program, batch), as_dict=1)
- def get_program_enrollment(self):
- if self.group_based_on == "Batch":
- return frappe.db.sql('''select student, student_name from `tabProgram Enrollment` where academic_year = %s
- and program = %s and student_batch_name = %s order by student_name asc''',(self.academic_year, self.program, self.batch), as_dict=1)
-
- elif self.group_based_on == "Course":
- return frappe.db.sql('''
- select
- pe.student, pe.student_name
- from
- `tabProgram Enrollment` pe, `tabProgram Enrollment Course` pec
- where
- pe.name = pec.parent and pec.course = %s
- order by
- pe.student_name asc
- ''', (self.course), as_dict=1)
- else:
- return
+ elif group_based_on == "Course":
+ return frappe.db.sql('''
+ select
+ pe.student, pe.student_name
+ from
+ `tabProgram Enrollment` pe, `tabProgram Enrollment Course` pec
+ where
+ pe.name = pec.parent and pec.course = %s
+ order by
+ pe.student_name asc
+ ''', (course), as_dict=1)
\ No newline at end of file
diff --git a/erpnext/schools/doctype/student_group/test_records.json b/erpnext/schools/doctype/student_group/test_records.json
index 106368d..c36c9b2 100644
--- a/erpnext/schools/doctype/student_group/test_records.json
+++ b/erpnext/schools/doctype/student_group/test_records.json
@@ -15,6 +15,13 @@
"academic_term": "2014-2015 (_Test Academic Term)"
},
{
+ "student_group_name": "Course-TC102-2014-2015 (_Test Academic Term)",
+ "group_based_on": "Course",
+ "course": "TC102",
+ "academic_year": "2014-2015",
+ "academic_term": "2014-2015 (_Test Academic Term)"
+ },
+ {
"student_group_name": "Activity-2014-2015 (_Test Academic Term)",
"group_based_on": "Activity",
"academic_year": "2014-2015",