From 5f7b88d9c39b92182b315a18ddf7cd5f54ae3586 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Tue, 30 May 2017 15:33:50 +0530 Subject: [PATCH] set student roll no in backend if not given (#9039) --- .../doctype/student_group/student_group.py | 11 ++++++++-- .../student_group/test_student_group.py | 21 ++++++++++++++++--- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/erpnext/schools/doctype/student_group/student_group.py b/erpnext/schools/doctype/student_group/student_group.py index e86142106e..9cdf9c7f01 100644 --- a/erpnext/schools/doctype/student_group/student_group.py +++ b/erpnext/schools/doctype/student_group/student_group.py @@ -14,7 +14,7 @@ class StudentGroup(Document): 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 @@ class StudentGroup(Document): 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 6b599aa265..18a6b14f50 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 @@ from __future__ import unicode_literals 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) +