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)
+