test case fixed
This commit is contained in:
parent
810e483757
commit
6293263095
@ -13,7 +13,7 @@ class CourseSchedule(Document):
|
|||||||
self.set_title()
|
self.set_title()
|
||||||
self.validate_mandatory()
|
self.validate_mandatory()
|
||||||
self.validate_course()
|
self.validate_course()
|
||||||
self.set_student_batch()
|
# self.set_student_batch()
|
||||||
self.validate_date()
|
self.validate_date()
|
||||||
self.validate_overlap()
|
self.validate_overlap()
|
||||||
|
|
||||||
|
@ -24,28 +24,28 @@ class TestCourseSchedule(unittest.TestCase):
|
|||||||
cs1 = make_course_schedule_test_record(simulate= True)
|
cs1 = make_course_schedule_test_record(simulate= True)
|
||||||
|
|
||||||
cs2 = make_course_schedule_test_record(from_time= cs1.from_time, to_time= cs1.to_time,
|
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)
|
self.assertRaises(OverlapError, cs2.save)
|
||||||
|
|
||||||
def test_room_conflict(self):
|
def test_room_conflict(self):
|
||||||
cs1 = make_course_schedule_test_record(simulate= True)
|
cs1 = make_course_schedule_test_record(simulate= True)
|
||||||
|
|
||||||
cs2 = make_course_schedule_test_record(from_time= cs1.from_time, to_time= cs1.to_time,
|
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)
|
self.assertRaises(OverlapError, cs2.save)
|
||||||
|
|
||||||
def test_no_conflict(self):
|
def test_no_conflict(self):
|
||||||
cs1 = make_course_schedule_test_record(simulate= True)
|
cs1 = make_course_schedule_test_record(simulate= True)
|
||||||
|
|
||||||
make_course_schedule_test_record(from_time= cs1.from_time, to_time= cs1.to_time,
|
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):
|
def make_course_schedule_test_record(**args):
|
||||||
args = frappe._dict(args)
|
args = frappe._dict(args)
|
||||||
|
|
||||||
course_schedule = frappe.new_doc("Course Schedule")
|
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.student_group = args.student_group or "Course-TC101-2014-2015 (_Test Academic Term)"
|
||||||
course_schedule.course = args.course or "TC100"
|
course_schedule.course = args.course or "TC101"
|
||||||
course_schedule.instructor = args.instructor or "_T-Instructor-00001"
|
course_schedule.instructor = args.instructor or "_T-Instructor-00001"
|
||||||
course_schedule.room = args.room or "RM0001"
|
course_schedule.room = args.room or "RM0001"
|
||||||
|
|
||||||
|
@ -71,31 +71,47 @@ frappe.ui.form.on("Student Group", {
|
|||||||
frm.trigger("set_name");
|
frm.trigger("set_name");
|
||||||
},
|
},
|
||||||
|
|
||||||
update_students: function(frm) {
|
get_students: function(frm) {
|
||||||
if (frm.doc.students.length === 0) {
|
if (frm.doc.group_based_on != "Activity") {
|
||||||
frm.doc.next_group_roll_number = 1;
|
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({
|
frappe.call({
|
||||||
method: "update_students",
|
method: "erpnext.schools.doctype.student_group.student_group.get_students",
|
||||||
doc:frm.doc,
|
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) {
|
callback: function(r) {
|
||||||
if(r.message) {
|
if(r.message) {
|
||||||
$.each(r.message, function(i, d) {
|
$.each(r.message, function(i, d) {
|
||||||
|
if(!in_list(student_list, d.student)) {
|
||||||
var s = frm.add_child("students");
|
var s = frm.add_child("students");
|
||||||
s.student = d.student;
|
s.student = d.student;
|
||||||
s.student_name = d.student_name;
|
s.student_name = d.student_name;
|
||||||
if (d.active === 0) {
|
if (d.active === 0) {
|
||||||
s.active = 0;
|
s.active = 0;
|
||||||
}
|
}
|
||||||
s.group_roll_number = frm.doc.next_group_roll_number;
|
s.group_roll_number = ++max_roll_no;
|
||||||
frm.doc.next_group_roll_number += 1;
|
}
|
||||||
});
|
});
|
||||||
frm.save();
|
frm.save();
|
||||||
} else {
|
} else {
|
||||||
frappe.msgprint(__("Group already updated"))
|
frappe.msgprint(__("Student Group is already updated."))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
frappe.msgprint(__("Select students manually for the Activity based Group"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
@ -14,6 +14,7 @@
|
|||||||
"engine": "InnoDB",
|
"engine": "InnoDB",
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -44,6 +45,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -74,6 +76,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -104,6 +107,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -132,6 +136,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -162,6 +167,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -193,6 +199,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -224,6 +231,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -255,6 +263,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -285,6 +294,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -316,11 +326,12 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"fieldname": "update_students",
|
"fieldname": "get_students",
|
||||||
"fieldtype": "Button",
|
"fieldtype": "Button",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
@ -329,7 +340,7 @@
|
|||||||
"in_global_search": 0,
|
"in_global_search": 0,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Update Students",
|
"label": "Get Students",
|
||||||
"length": 0,
|
"length": 0,
|
||||||
"no_copy": 0,
|
"no_copy": 0,
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
@ -345,6 +356,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 1,
|
"allow_on_submit": 1,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -375,6 +387,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -404,6 +417,7 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
@ -432,35 +446,6 @@
|
|||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
"unique": 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,
|
"has_web_view": 0,
|
||||||
@ -474,7 +459,7 @@
|
|||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"menu_index": 0,
|
"menu_index": 0,
|
||||||
"modified": "2017-04-19 12:48:46.526133",
|
"modified": "2017-04-24 15:53:35.593913",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Schools",
|
"module": "Schools",
|
||||||
"name": "Student Group",
|
"name": "Student Group",
|
||||||
|
@ -27,38 +27,35 @@ class StudentGroup(Document):
|
|||||||
frappe.throw(_("""Cannot enroll more than {0} students for this student group.""").format(self.max_strength))
|
frappe.throw(_("""Cannot enroll more than {0} students for this student group.""").format(self.max_strength))
|
||||||
|
|
||||||
def validate_students(self):
|
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
|
students = [d.student for d in program_enrollment] if program_enrollment else None
|
||||||
for d in self.students:
|
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)))
|
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:
|
if not frappe.db.get_value("Student", d.student, "enabled") and d.active:
|
||||||
d.active = 0
|
d.active = 0
|
||||||
frappe.throw(_("{0} - {1} is inactive student".format(d.student, d.student_name)))
|
frappe.throw(_("{0} - {1} is inactive student".format(d.student, d.student_name)))
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
def update_students(self):
|
def get_students(academic_year, group_based_on, program=None, batch=None, course=None):
|
||||||
enrolled_students = self.get_program_enrollment()
|
enrolled_students = get_program_enrollment(academic_year, group_based_on, program, batch, course)
|
||||||
group_student_list = [student.student for student in self.students]
|
|
||||||
|
|
||||||
if enrolled_students:
|
if enrolled_students:
|
||||||
student_list = [];
|
student_list = []
|
||||||
for s in enrolled_students:
|
for s in enrolled_students:
|
||||||
if s.student not in group_student_list:
|
if frappe.db.get_value("Student", s.student, "enabled"):
|
||||||
student_list.append(s.update({"active": 1}) if frappe.db.get_value("Student", s.student, "enabled")
|
s.update({"active": 1})
|
||||||
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:
|
else:
|
||||||
frappe.throw(_("Select students manually for the Activity based Group"))
|
s.update({"active": 0})
|
||||||
|
student_list.append(s)
|
||||||
|
return student_list
|
||||||
|
|
||||||
def get_program_enrollment(self):
|
def get_program_enrollment(academic_year, group_based_on, program=None, batch=None, course=None):
|
||||||
if self.group_based_on == "Batch":
|
if group_based_on == "Batch":
|
||||||
return frappe.db.sql('''select student, student_name from `tabProgram Enrollment` where academic_year = %s
|
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)
|
and program = %s and student_batch_name = %s order by student_name asc''',(academic_year, program, batch), as_dict=1)
|
||||||
|
|
||||||
elif self.group_based_on == "Course":
|
elif group_based_on == "Course":
|
||||||
return frappe.db.sql('''
|
return frappe.db.sql('''
|
||||||
select
|
select
|
||||||
pe.student, pe.student_name
|
pe.student, pe.student_name
|
||||||
@ -68,6 +65,4 @@ class StudentGroup(Document):
|
|||||||
pe.name = pec.parent and pec.course = %s
|
pe.name = pec.parent and pec.course = %s
|
||||||
order by
|
order by
|
||||||
pe.student_name asc
|
pe.student_name asc
|
||||||
''', (self.course), as_dict=1)
|
''', (course), as_dict=1)
|
||||||
else:
|
|
||||||
return
|
|
@ -14,6 +14,13 @@
|
|||||||
"academic_year": "2014-2015",
|
"academic_year": "2014-2015",
|
||||||
"academic_term": "2014-2015 (_Test Academic Term)"
|
"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)",
|
"student_group_name": "Activity-2014-2015 (_Test Academic Term)",
|
||||||
"group_based_on": "Activity",
|
"group_based_on": "Activity",
|
||||||
|
Loading…
Reference in New Issue
Block a user