set student roll no in backend if not given (#9039)
diff --git a/erpnext/schools/doctype/student_group/student_group.py b/erpnext/schools/doctype/student_group/student_group.py
index e861421..9cdf9c7 100644
--- a/erpnext/schools/doctype/student_group/student_group.py
+++ b/erpnext/schools/doctype/student_group/student_group.py
@@ -14,7 +14,7 @@
self.validate_strength()
if frappe.defaults.get_defaults().student_validation_setting:
self.validate_students()
- self.validate_roll_no()
+ self.validate_and_set_child_table_fields()
validate_duplicate_student(self.students)
def validate_mandatory_fields(self):
@@ -38,9 +38,16 @@
if not frappe.db.get_value("Student", d.student, "enabled") and d.active:
frappe.throw(_("{0} - {1} is inactive student".format(d.group_roll_number, d.student_name)))
- def validate_roll_no(self):
+ def validate_and_set_child_table_fields(self):
+ roll_numbers = [d.group_roll_number for d in self.students if d.group_roll_number]
+ max_roll_no = max(roll_numbers) if roll_numbers else 0
roll_no_list = []
for d in self.students:
+ if not d.student_name:
+ d.student_name = frappe.db.get_value("Student", d.student, "title")
+ if not d.group_roll_number:
+ max_roll_no += 1
+ d.group_roll_number = max_roll_no
if d.group_roll_number in roll_no_list:
frappe.throw(_("Duplicate roll number for student {0}".format(d.student_name)))
else:
diff --git a/erpnext/schools/doctype/student_group/test_student_group.py b/erpnext/schools/doctype/student_group/test_student_group.py
index 6b599aa..18a6b14 100644
--- a/erpnext/schools/doctype/student_group/test_student_group.py
+++ b/erpnext/schools/doctype/student_group/test_student_group.py
@@ -5,8 +5,23 @@
import frappe
import unittest
-
-# test_records = frappe.get_test_records('Student Group')
+from frappe.utils.make_random import get_random
class TestStudentGroup(unittest.TestCase):
- pass
+ def test_student_roll_no(self):
+ doc = frappe.get_doc({
+ "doctype": "Student Group",
+ "student_group_name": "_Test Student Group R",
+ "group_based_on": "Activity"
+ }).insert()
+
+ student_list = []
+ while len(student_list) < 3:
+ s = get_random("Student")
+ if s not in student_list:
+ student_list.append(s)
+
+ doc.extend("students", [{"student":d} for d in student_list])
+ doc.save()
+ self.assertEquals(max([d.group_roll_number for d in doc.students]), 3)
+