Configurable validation setting for the student group
diff --git a/erpnext/schools/doctype/school_settings/school_settings.json b/erpnext/schools/doctype/school_settings/school_settings.json
index 5bdb65e..8607a76 100644
--- a/erpnext/schools/doctype/school_settings/school_settings.json
+++ b/erpnext/schools/doctype/school_settings/school_settings.json
@@ -13,6 +13,7 @@
"engine": "InnoDB",
"fields": [
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -43,6 +44,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -73,6 +75,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -100,6 +103,66 @@
"search_index": 0,
"set_only_once": 0,
"unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "column_break_4",
+ "fieldtype": "Column Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "default": "1",
+ "fieldname": "validation_from_pe",
+ "fieldtype": "Check",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Validate the Student Group from Program Enrollment",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
}
],
"has_web_view": 0,
@@ -112,7 +175,7 @@
"issingle": 1,
"istable": 0,
"max_attachments": 0,
- "modified": "2017-04-05 13:34:57.493516",
+ "modified": "2017-04-27 15:37:00.159072",
"modified_by": "Administrator",
"module": "Schools",
"name": "School Settings",
diff --git a/erpnext/schools/doctype/school_settings/school_settings.py b/erpnext/schools/doctype/school_settings/school_settings.py
index 5a1c6fe..6d8efb4 100644
--- a/erpnext/schools/doctype/school_settings/school_settings.py
+++ b/erpnext/schools/doctype/school_settings/school_settings.py
@@ -11,6 +11,7 @@
# "key in defaults": "key in Global Defaults"
"academic_year": "current_academic_year",
"academic_term": "current_academic_term",
+ "student_validation_setting": "validation_from_pe",
}
class SchoolSettings(Document):
diff --git a/erpnext/schools/doctype/student_group/student_group.js b/erpnext/schools/doctype/student_group/student_group.js
index 2068644..29d8bdb 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) {
@@ -43,6 +43,11 @@
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");
},
@@ -103,6 +108,7 @@
s.group_roll_number = ++max_roll_no;
}
});
+ refresh_field("students");
frm.save();
} else {
frappe.msgprint(__("Student Group is already updated."))
diff --git a/erpnext/schools/doctype/student_group/student_group.json b/erpnext/schools/doctype/student_group/student_group.json
index 59c5eab..2caaa7c 100644
--- a/erpnext/schools/doctype/student_group/student_group.json
+++ b/erpnext/schools/doctype/student_group/student_group.json
@@ -81,6 +81,37 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "depends_on": "eval: doc.batch || doc.course || doc.group_based_on == \"Activity\"",
+ "fieldname": "student_group_name",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Student Group Name",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"description": "Set 0 for no limit",
"fieldname": "max_strength",
"fieldtype": "Int",
@@ -172,7 +203,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "depends_on": "eval:doc.group_based_on == 'Batch'",
+ "depends_on": "eval:doc.group_based_on == 'Batch' || doc.group_based_on == 'Course' ",
"fieldname": "program",
"fieldtype": "Link",
"hidden": 0,
@@ -204,7 +235,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "depends_on": "eval:doc.group_based_on == 'Batch'",
+ "depends_on": "eval:doc.group_based_on == 'Batch' || doc.group_based_on == 'Course' ",
"fieldname": "batch",
"fieldtype": "Link",
"hidden": 0,
@@ -267,37 +298,6 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
- "columns": 0,
- "depends_on": "group_based_on",
- "fieldname": "student_group_name",
- "fieldtype": "Data",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Student Group Name",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_bulk_edit": 0,
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
"collapsible_depends_on": "",
"columns": 0,
"depends_on": "eval:!doc.__islocal",
@@ -459,7 +459,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
- "modified": "2017-04-24 15:53:35.593913",
+ "modified": "2017-04-25 18:26:27.414487",
"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 dba8c92..afcf970 100644
--- a/erpnext/schools/doctype/student_group/student_group.py
+++ b/erpnext/schools/doctype/student_group/student_group.py
@@ -13,7 +13,8 @@
def validate(self):
self.validate_mandatory_fields()
self.validate_strength()
- self.validate_students()
+ if frappe.defaults.get_defaults().student_validation_setting
+ self.validate_students()
validate_duplicate_student(self.students)
def validate_mandatory_fields(self):
@@ -39,6 +40,7 @@
@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
if enrolled_students:
student_list = []
@@ -51,18 +53,30 @@
return student_list
def get_program_enrollment(academic_year, group_based_on, program=None, batch=None, course=None):
- if group_based_on == "Batch":
- 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''',(academic_year, program, batch), as_dict=1)
+
+ 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"
- elif group_based_on == "Course":
- return frappe.db.sql('''
- select
- pe.student, pe.student_name
- from
- `tabProgram Enrollment` pe, `tabProgram Enrollment Course` pec
- where
- pe.name = pec.parent and pec.course = %s
- order by
- pe.student_name asc
- ''', (course), as_dict=1)
\ No newline at end of file
+ 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
+
+ return frappe.db.sql('''
+ select
+ pe.student, pe.student_name
+ from
+ `tabProgram Enrollment` pe {condition1}
+ where
+ pe.academic_year = %(academic_year)s {condition2}
+ order by
+ pe.student_name asc
+ '''.format(condition1=condition1, condition2=condition2),
+ ({"academic_year": academic_year, "program": program, "batch": batch, "course": course}), as_dict=1)
+