diff --git a/erpnext/schools/doctype/student_group/student_group.js b/erpnext/schools/doctype/student_group/student_group.js index 29d8bdbe6d..c2c6912ba0 100644 --- a/erpnext/schools/doctype/student_group/student_group.js +++ b/erpnext/schools/doctype/student_group/student_group.js @@ -1,4 +1,4 @@ - cur_frm.add_fetch("student", "title", "student_name"); +cur_frm.add_fetch("student", "title", "student_name"); frappe.ui.form.on("Student Group", { onload: function(frm) { @@ -39,41 +39,6 @@ frappe.ui.form.on("Student Group", { if (frm.doc.group_based_on == "Batch") { frm.doc.course = null; } - else if (frm.doc.group_based_on == "Course") { - frm.doc.program = null; - frm.doc.batch = null; - } - else if (frm.doc.group_based_on == "Activity") { - frm.doc.program =null; - frm.doc.batch =null; - frm.doc.CourseQ =null; - } - frm.trigger("set_name"); - }, - - set_name: function(frm) { - var name; - if (frm.doc.group_based_on == "Course") { - name = "Course-" + frm.doc.course + "-" + (frm.doc.academic_term?frm.doc.academic_term:frm.doc.academic_year); - } else if (frm.doc.group_based_on == "Batch") { - name = "Batch-" + frm.doc.program + "-" + frm.doc.batch + "-" - + (frm.doc.academic_term?frm.doc.academic_term:frm.doc.academic_year); - } else if (frm.doc.group_based_on == "Activity") { - name = "Activity" + "-" + (frm.doc.academic_term?frm.doc.academic_term:frm.doc.academic_year); - } - frm.set_value("student_group_name", name); - }, - - program:function(frm) { - frm.trigger("set_name"); - }, - - batch:function(frm) { - frm.trigger("set_name"); - }, - - course:function(frm) { - frm.trigger("set_name"); }, get_students: function(frm) { @@ -90,6 +55,7 @@ frappe.ui.form.on("Student Group", { method: "erpnext.schools.doctype.student_group.student_group.get_students", args: { "academic_year": frm.doc.academic_year, + "academic_term": frm.doc.academic_term, "group_based_on": frm.doc.group_based_on, "program": frm.doc.program, "batch" : frm.doc.batch, @@ -119,5 +85,4 @@ frappe.ui.form.on("Student Group", { 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 2caaa7ca1b..a82ac0ff1b 100644 --- a/erpnext/schools/doctype/student_group/student_group.json +++ b/erpnext/schools/doctype/student_group/student_group.json @@ -72,7 +72,7 @@ "report_hide": 0, "reqd": 1, "search_index": 0, - "set_only_once": 1, + "set_only_once": 0, "unique": 0 }, { @@ -81,7 +81,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval: doc.batch || doc.course || doc.group_based_on == \"Activity\"", + "depends_on": "", "fieldname": "student_group_name", "fieldtype": "Data", "hidden": 0, @@ -101,7 +101,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 @@ -194,7 +194,7 @@ "report_hide": 0, "reqd": 0, "search_index": 0, - "set_only_once": 1, + "set_only_once": 0, "unique": 0 }, { @@ -203,7 +203,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval:doc.group_based_on == 'Batch' || doc.group_based_on == 'Course' ", + "depends_on": "", "fieldname": "program", "fieldtype": "Link", "hidden": 0, @@ -226,7 +226,7 @@ "report_hide": 0, "reqd": 0, "search_index": 0, - "set_only_once": 1, + "set_only_once": 0, "unique": 0 }, { @@ -235,7 +235,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval:doc.group_based_on == 'Batch' || doc.group_based_on == 'Course' ", + "depends_on": "", "fieldname": "batch", "fieldtype": "Link", "hidden": 0, @@ -258,7 +258,7 @@ "report_hide": 0, "reqd": 0, "search_index": 0, - "set_only_once": 1, + "set_only_once": 0, "unique": 0 }, { @@ -290,7 +290,7 @@ "report_hide": 0, "reqd": 0, "search_index": 0, - "set_only_once": 1, + "set_only_once": 0, "unique": 0 }, { @@ -459,7 +459,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-04-25 18:26:27.414487", + "modified": "2017-04-28 11:46:51.946103", "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 afcf970097..5520ec7b5e 100644 --- a/erpnext/schools/doctype/student_group/student_group.py +++ b/erpnext/schools/doctype/student_group/student_group.py @@ -13,34 +13,34 @@ class StudentGroup(Document): def validate(self): self.validate_mandatory_fields() self.validate_strength() - if frappe.defaults.get_defaults().student_validation_setting + if frappe.defaults.get_defaults().student_validation_setting: self.validate_students() validate_duplicate_student(self.students) def validate_mandatory_fields(self): if self.group_based_on == "Course" and not self.course: frappe.throw(_("Please select Course")) - elif self.group_based_on == "Batch" and (not self.program or not self.batch): - frappe.throw(_("Please select Program and Batch")) + if self.group_based_on == "Course" and (not self.program and self.batch): + frappe.throw(_("Please select Program")) + if self.group_based_on == "Batch" and not self.program: + frappe.throw(_("Please select Program")) def validate_strength(self): if self.max_strength and len(self.students) > self.max_strength: frappe.throw(_("""Cannot enroll more than {0} students for this student group.""").format(self.max_strength)) def validate_students(self): - program_enrollment = get_program_enrollment(self.academic_year, self.group_based_on, self.program, self.batch, self.course) + program_enrollment = get_program_enrollment(self.academic_year, self.academic_term, 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 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 self.group_based_on != "Activity" and d.student not in students and d.active == 1: + frappe.throw(_("{0} - {1} is not enrolled in the given {2}".format(d.group_roll_number, 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.throw(_("{0} - {1} is inactive student".format(d.group_roll_number, 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) - print enrolled_students +def get_students(academic_year, group_based_on, academic_term=None, program=None, batch=None, course=None): + enrolled_students = get_program_enrollment(academic_year, academic_term, program, batch, course) if enrolled_students: student_list = [] @@ -51,32 +51,32 @@ def get_students(academic_year, group_based_on, program=None, batch=None, course s.update({"active": 0}) student_list.append(s) return student_list + else: + frappe.throw(_("No students found")) -def get_program_enrollment(academic_year, group_based_on, program=None, batch=None, course=None): +def get_program_enrollment(academic_year, academic_term=None, program=None, batch=None, course=None): - condition_course = " and pe.name = pec.parent and pec.course = %(course)s" - condition1_course = ", `tabProgram Enrollment Course` pec" - condition_batch = " and pe.program = %(program)s and pe.student_batch_name = %(batch)s" - - if group_based_on == "Batch": - condition1 = "" - condition2 = condition_batch - elif group_based_on == "Course" and not (program and batch): - condition1 = condition1_course - condition2 = condition_course - elif group_based_on == "Course" and program and batch: - condition1 = condition1_course - condition2 = condition_course + condition_batch + condition1 = " " + condition2 = " " + if academic_term: + condition1 += " and pe.academic_term = %(academic_term)s" + if program: + condition1 += " and pe.program = %(program)s" + if batch: + condition1 += " and pe.student_batch_name = %(batch)s" + if course: + condition1 += " and pe.name = pec.parent and pec.course = %(course)s" + condition2 = ", `tabProgram Enrollment Course` pec" return frappe.db.sql(''' select pe.student, pe.student_name from - `tabProgram Enrollment` pe {condition1} + `tabProgram Enrollment` pe {condition2} where - pe.academic_year = %(academic_year)s {condition2} + pe.academic_year = %(academic_year)s {condition1} order by pe.student_name asc '''.format(condition1=condition1, condition2=condition2), - ({"academic_year": academic_year, "program": program, "batch": batch, "course": course}), as_dict=1) + ({"academic_year": academic_year, "academic_term":academic_term, "program": program, "batch": batch, "course": course}), as_dict=1)