Merge the student group and student batch (#8663)
* deleted student batch creation tool
* Patch for deleting the doctype and config
* Changes in the student attendance
* Patch for renaming the student batch as student group
* Changes in the student attendance
* Change in the student attendance reports
- Absent student report
- Student Batch-wise attendance
- Student monthly attendance sheet
* Changes in the patch
* Changes in the course schedule
* Changes in the course scheduling tool
* Change in the assessment plan
* Changes in the assessment result tool
* Cleanup
* Changes in the api.py
* create student group from student batch
* delete student batch
* add patch
* remove student batch from config/schools.py
* Delete the depricated doctype with patch
* Changes in patch
* Changes as per PR
diff --git a/erpnext/config/schools.py b/erpnext/config/schools.py
index c88a8cc..c54f808 100644
--- a/erpnext/config/schools.py
+++ b/erpnext/config/schools.py
@@ -20,10 +20,6 @@
},
{
"type": "doctype",
- "name": "Student Batch"
- },
- {
- "type": "doctype",
"name": "Student Group"
},
{
@@ -58,10 +54,6 @@
{
"type": "doctype",
"name": "Program Enrollment Tool"
- },
- {
- "type": "doctype",
- "name": "Student Batch Creation Tool"
}
]
},
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 853d3bb..c5281bb 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -391,4 +391,5 @@
erpnext.patches.v8_0.update_status_as_paid_for_completed_expense_claim
erpnext.patches.v7_2.stock_uom_in_selling
erpnext.patches.v8_0.revert_manufacturers_table_from_item
-erpnext.patches.v8_0.disable_instructor_role
\ No newline at end of file
+erpnext.patches.v8_0.disable_instructor_role
+erpnext.patches.v8_0.merge_student_batch_and_student_group
diff --git a/erpnext/patches/v8_0/merge_student_batch_and_student_group.py b/erpnext/patches/v8_0/merge_student_batch_and_student_group.py
new file mode 100644
index 0000000..5b45cc7
--- /dev/null
+++ b/erpnext/patches/v8_0/merge_student_batch_and_student_group.py
@@ -0,0 +1,49 @@
+# Copyright (c) 2017, Frappe and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe.model.utils.rename_field import *
+from frappe.model.mapper import get_mapped_doc
+
+
+def execute():
+
+ # for converting student batch into student group
+ frappe.reload_doctype("Student Group")
+ student_batches = frappe.db.sql('''select name as student_group_name, student_batch_name as batch,
+ program, academic_year, academic_term from `tabStudent Batch`''', as_dict=1)
+ for student_batch in student_batches:
+ student_batch.update({"doctype":"Student Group", "group_based_on": "Batch"})
+ doc = frappe.get_doc(student_batch)
+ student_list = frappe.db.sql('''select student, student_name, active from `tabStudent Batch Student`
+ where parent=%s''', (doc.name), as_dict=1)
+ for i, student in enumerate(student_list):
+ student.update({"group_roll_number": i+1})
+
+ if student_list:
+ doc.extend("students", student_list)
+
+ instructor_list = frappe.db.sql('''select instructor, instructor_name from `tabStudent Batch Instructor`
+ where parent=%s''', (doc.name), as_dict=1)
+ if instructor_list:
+ doc.extend("instructors", instructor_list)
+ doc.save()
+
+ # delete the student batch and child-table
+ frappe.delete_doc("DocType", "Student Batch", force=1)
+ frappe.delete_doc("DocType", "Student Batch Student", force=1)
+ frappe.delete_doc("DocType", "Student Batch Instructor", force=1)
+
+ # delete the student batch creation tool
+ frappe.delete_doc("DocType", "Student Batch Creation Tool", force=1)
+
+ # delete the student batch creation tool
+ frappe.delete_doc("DocType", "Attendance Tool Student", force=1)
+
+ # change the student batch to student group in the student attendance
+ frappe.reload_doctype("Student Attendance")
+
+ table_columns = frappe.db.get_table_columns("Student Attendance")
+ if "student_batch" in table_columns:
+ rename_field("Student Attendance", "student_batch", "student_group")
diff --git a/erpnext/public/js/schools/student_button.html b/erpnext/public/js/schools/student_button.html
index 4196808..3cf2592 100644
--- a/erpnext/public/js/schools/student_button.html
+++ b/erpnext/public/js/schools/student_button.html
@@ -3,7 +3,7 @@
<label>
<input
type="checkbox"
- data-idx="{{idx}}"
+ data-group_roll_number="{{group_roll_number}}"
data-student="{{student}}"
data-student-name="{{student_name}}"
class="students-check"
@@ -11,7 +11,7 @@
checked
{% endif %}
>
- {{ idx }} - {{ student_name }}
+ {{ group_roll_number }} - {{ student_name }}
</label>
</div>
</div>
\ No newline at end of file
diff --git a/erpnext/schools/api.py b/erpnext/schools/api.py
index 623b1e0..43d2438 100644
--- a/erpnext/schools/api.py
+++ b/erpnext/schools/api.py
@@ -33,26 +33,26 @@
return program_enrollment
@frappe.whitelist()
-def check_attendance_records_exist(course_schedule=None, student_batch=None, date=None):
- """Check if Attendance Records are made against the specified Course Schedule or Student Batch for given date.
+def check_attendance_records_exist(course_schedule=None, student_group=None, date=None):
+ """Check if Attendance Records are made against the specified Course Schedule or Student Group for given date.
:param course_schedule: Course Schedule.
- :param student_batch: Student Batch.
+ :param student_group: Student Group.
:param date: Date.
"""
if course_schedule:
return frappe.get_list("Student Attendance", filters={"course_schedule": course_schedule})
else:
- return frappe.get_list("Student Attendance", filters={"student_batch": student_batch, "date": date})
+ return frappe.get_list("Student Attendance", filters={"student_group": student_group, "date": date})
@frappe.whitelist()
-def mark_attendance(students_present, students_absent, course_schedule=None, student_batch=None, date=None):
+def mark_attendance(students_present, students_absent, course_schedule=None, student_group=None, date=None):
"""Creates Multiple Attendance Records.
:param students_present: Students Present JSON.
:param students_absent: Students Absent JSON.
:param course_schedule: Course Schedule.
- :param student_batch: Student Batch.
+ :param student_group: Student Group.
:param date: Date.
"""
@@ -60,15 +60,15 @@
absent = json.loads(students_absent)
for d in present:
- make_attendance_records(d["student"], d["student_name"], "Present", course_schedule, student_batch, date)
+ make_attendance_records(d["student"], d["student_name"], "Present", course_schedule, student_group, date)
for d in absent:
- make_attendance_records(d["student"], d["student_name"], "Absent", course_schedule, student_batch, date)
+ make_attendance_records(d["student"], d["student_name"], "Absent", course_schedule, student_group, date)
frappe.db.commit()
frappe.msgprint(_("Attendance has been marked successfully."))
-def make_attendance_records(student, student_name, status, course_schedule=None, student_batch=None, date=None):
+def make_attendance_records(student, student_name, status, course_schedule=None, student_group=None, date=None):
"""Creates/Update Attendance Record.
:param student: Student.
@@ -79,7 +79,7 @@
student_attendance_list = frappe.get_list("Student Attendance", fields = ['name'], filters = {
"student": student,
"course_schedule": course_schedule,
- "student_batch": student_batch,
+ "student_group": student_group,
"date": date
})
@@ -90,7 +90,7 @@
student_attendance.student = student
student_attendance.student_name = student_name
student_attendance.course_schedule = course_schedule
- student_attendance.student_batch = student_batch
+ student_attendance.student_group = student_group
student_attendance.date = date
student_attendance.status = status
student_attendance.save()
@@ -106,23 +106,13 @@
return guardians
@frappe.whitelist()
-def get_student_batch_students(student_batch):
- """Returns List of student, student_name, idx in Student Batch.
-
- :param student_batch: Student Batch.
- """
- students = frappe.get_list("Student Batch Student", fields=["student", "student_name", "idx"] ,
- filters={"parent": student_batch, "active": 1}, order_by= "idx")
- return students
-
-@frappe.whitelist()
def get_student_group_students(student_group):
"""Returns List of student, student_name in Student Group.
:param student_group: Student Group.
"""
students = frappe.get_list("Student Group Student", fields=["student", "student_name"] ,
- filters={"parent": student_group, "active": 1}, order_by= "idx")
+ filters={"parent": student_group, "active": 1}, order_by= "group_roll_number")
return students
@frappe.whitelist()
@@ -199,12 +189,9 @@
fields=["assessment_criteria", "weightage"], filters={"parent": course}, order_by= "idx")
@frappe.whitelist()
-def get_assessment_students(assessment_plan, student_group=None, student_batch=None):
- student_list = []
- if student_group:
- student_list = get_student_group_students(student_group)
- elif student_batch:
- student_list = get_student_batch_students(student_batch)
+def get_assessment_students(assessment_plan, student_group):
+
+ student_list = get_student_group_students(student_group)
for i, student in enumerate(student_list):
result = get_result(student.student, assessment_plan)
if result:
@@ -286,8 +273,6 @@
email_group.save()
email_list = []
students = []
- if doctype == "Student Batch":
- students = get_student_batch_students(name)
if doctype == "Student Group":
students = get_student_group_students(name)
for stud in students:
diff --git a/erpnext/schools/doctype/assessment_code/__init__.py b/erpnext/schools/doctype/assessment_code/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/schools/doctype/assessment_code/__init__.py
+++ /dev/null
diff --git a/erpnext/schools/doctype/assessment_code/assessment_code.js b/erpnext/schools/doctype/assessment_code/assessment_code.js
deleted file mode 100644
index 143791b..0000000
--- a/erpnext/schools/doctype/assessment_code/assessment_code.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Assessment Code', {
- refresh: function(frm) {
-
- }
-});
diff --git a/erpnext/schools/doctype/assessment_code/assessment_code.json b/erpnext/schools/doctype/assessment_code/assessment_code.json
deleted file mode 100644
index d3acf7a..0000000
--- a/erpnext/schools/doctype/assessment_code/assessment_code.json
+++ /dev/null
@@ -1,89 +0,0 @@
-{
- "allow_copy": 0,
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "field:assessment_code",
- "beta": 0,
- "creation": "2017-02-13 19:33:43.843028",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "",
- "editable_grid": 1,
- "engine": "InnoDB",
- "fields": [
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "assessment_code",
- "fieldtype": "Data",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Assessment Code",
- "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": 1,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- }
- ],
- "hide_heading": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "image_view": 0,
- "in_create": 0,
- "in_dialog": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 0,
- "max_attachments": 0,
- "modified": "2017-02-13 19:33:47.037170",
- "modified_by": "Administrator",
- "module": "Schools",
- "name": "Assessment Code",
- "name_case": "",
- "owner": "Administrator",
- "permissions": [
- {
- "amend": 0,
- "apply_user_permissions": 0,
- "cancel": 0,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "if_owner": 0,
- "import": 0,
- "permlevel": 0,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Academics User",
- "set_user_permissions": 0,
- "share": 1,
- "submit": 0,
- "write": 1
- }
- ],
- "quick_entry": 1,
- "read_only": 0,
- "read_only_onload": 0,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 0,
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/schools/doctype/assessment_code/assessment_code.py b/erpnext/schools/doctype/assessment_code/assessment_code.py
deleted file mode 100644
index 175564e..0000000
--- a/erpnext/schools/doctype/assessment_code/assessment_code.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.document import Document
-
-class AssessmentCode(Document):
- pass
diff --git a/erpnext/schools/doctype/assessment_code/test_assessment_code.py b/erpnext/schools/doctype/assessment_code/test_assessment_code.py
deleted file mode 100644
index d6ccb8f..0000000
--- a/erpnext/schools/doctype/assessment_code/test_assessment_code.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-from __future__ import unicode_literals
-
-import frappe
-import unittest
-
-# test_records = frappe.get_test_records('Assessment Code')
-
-class TestAssessmentCode(unittest.TestCase):
- pass
diff --git a/erpnext/schools/doctype/assessment_plan/assessment_plan.js b/erpnext/schools/doctype/assessment_plan/assessment_plan.js
index b1e8768..3c9ab80 100644
--- a/erpnext/schools/doctype/assessment_plan/assessment_plan.js
+++ b/erpnext/schools/doctype/assessment_plan/assessment_plan.js
@@ -2,7 +2,6 @@
// For license information, please see license.txt
cur_frm.add_fetch("student_group", "course", "course");
-cur_frm.add_fetch("student_group", "student_batch", "student_batch");
cur_frm.add_fetch("examiner", "instructor_name", "examiner_name");
cur_frm.add_fetch("supervisor", "instructor_name", "supervisor_name");
@@ -12,7 +11,7 @@
frm.add_custom_button(__("Assessment Result"), function() {
frappe.route_options = {
assessment_plan: frm.doc.name,
- student_batch: frm.doc.student_batch
+ student_group: frm.doc.student_group
}
frappe.set_route("Form", "Assessment Result Tool");
});
diff --git a/erpnext/schools/doctype/assessment_plan/assessment_plan.json b/erpnext/schools/doctype/assessment_plan/assessment_plan.json
index 042bdaf..697a0d4 100644
--- a/erpnext/schools/doctype/assessment_plan/assessment_plan.json
+++ b/erpnext/schools/doctype/assessment_plan/assessment_plan.json
@@ -49,71 +49,9 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "assessment_group",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 1,
- "label": "Assessment Group",
- "length": 0,
- "no_copy": 0,
- "options": "Assessment Group",
- "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,
- "fieldname": "student_batch",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 1,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Student Batch",
- "length": 0,
- "no_copy": 0,
- "options": "Student Batch",
- "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,
"fieldname": "student_group",
"fieldtype": "Link",
- "hidden": 1,
+ "hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
@@ -131,7 +69,38 @@
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
- "reqd": 0,
+ "reqd": 1,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "course",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 1,
+ "in_list_view": 0,
+ "in_standard_filter": 1,
+ "label": "Course",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Course",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
@@ -171,19 +140,19 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "course",
+ "fieldname": "assessment_group",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
- "in_global_search": 1,
+ "in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 1,
- "label": "Course",
+ "label": "Assessment Group",
"length": 0,
"no_copy": 0,
- "options": "Course",
+ "options": "Assessment Group",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -191,7 +160,7 @@
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
- "reqd": 1,
+ "reqd": 0,
"search_index": 0,
"set_only_once": 0,
"unique": 0
@@ -664,7 +633,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
- "modified": "2017-04-25 12:23:32.528982",
+ "modified": "2017-05-02 12:54:11.991616",
"modified_by": "Administrator",
"module": "Schools",
"name": "Assessment Plan",
diff --git a/erpnext/schools/doctype/assessment_plan/assessment_plan.py b/erpnext/schools/doctype/assessment_plan/assessment_plan.py
index 31e96aa..7f83c01 100644
--- a/erpnext/schools/doctype/assessment_plan/assessment_plan.py
+++ b/erpnext/schools/doctype/assessment_plan/assessment_plan.py
@@ -9,21 +9,15 @@
class AssessmentPlan(Document):
def validate(self):
- if not (self.student_batch or self.student_group):
- frappe.throw(_("Please select Student Group or Student Batch"))
- self.validate_student_batch()
self.validate_overlap()
self.validate_max_score()
def validate_overlap(self):
- """Validates overlap for Student Group/Student Batch, Instructor, Room"""
+ """Validates overlap for Student Group, Instructor, Room"""
from erpnext.schools.utils import validate_overlap_for
#Validate overlapping course schedules.
- if self.student_batch:
- validate_overlap_for(self, "Course Schedule", "student_batch")
-
if self.student_group:
validate_overlap_for(self, "Course Schedule", "student_group")
@@ -31,19 +25,12 @@
validate_overlap_for(self, "Course Schedule", "room")
#validate overlapping assessment schedules.
- if self.student_batch:
- validate_overlap_for(self, "Assessment Plan", "student_batch")
-
if self.student_group:
validate_overlap_for(self, "Assessment Plan", "student_group")
validate_overlap_for(self, "Assessment Plan", "room")
validate_overlap_for(self, "Assessment Plan", "supervisor", self.supervisor)
- def validate_student_batch(self):
- if self.student_group:
- self.student_batch = frappe.db.get_value("Student Group", self.student_group, "student_batch")
-
def validate_max_score(self):
max_score = 0
for d in self.assessment_criteria:
diff --git a/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js b/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js
index 213111a..3cadea6 100644
--- a/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js
+++ b/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js
@@ -3,12 +3,11 @@
// For license information, please see license.txt
cur_frm.add_fetch("assessment_plan", "student_group", "student_group");
-cur_frm.add_fetch("assessment_plan", "student_batch", "student_batch");
frappe.ui.form.on('Assessment Result Tool', {
refresh: function(frm) {
if (frappe.route_options) {
- frm.set_value("student_batch", frappe.route_options.student_batch);
+ frm.set_value("student_group", frappe.route_options.student_group);
frm.set_value("assessment_plan", frappe.route_options.assessment_plan);
frappe.route_options = null;
}
@@ -17,12 +16,11 @@
},
assessment_plan: function(frm) {
- if(!(frm.doc.student_batch || frm.doc.student_group)) return;
+ if(!frm.doc.student_group) return;
frappe.call({
method: "erpnext.schools.api.get_assessment_students",
args: {
"assessment_plan": frm.doc.assessment_plan,
- "student_batch": frm.doc.student_batch,
"student_group": frm.doc.student_group
},
callback: function(r) {
diff --git a/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.json b/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.json
index 87dff4d..d82aaf5 100644
--- a/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.json
+++ b/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.json
@@ -1,5 +1,6 @@
{
"allow_copy": 1,
+ "allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
@@ -12,6 +13,7 @@
"engine": "InnoDB",
"fields": [
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -23,6 +25,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
+ "in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Assessment Plan",
@@ -42,6 +45,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -52,6 +56,7 @@
"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,
@@ -69,6 +74,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -79,6 +85,7 @@
"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",
@@ -92,41 +99,13 @@
"read_only": 1,
"remember_last_selected_value": 0,
"report_hide": 0,
- "reqd": 0,
+ "reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "student_batch",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Student Batch",
- "length": 0,
- "no_copy": 0,
- "options": "Student Batch",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "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,
@@ -138,6 +117,7 @@
"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,
@@ -155,6 +135,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -165,6 +146,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
+ "in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Result HTML",
@@ -183,17 +165,17 @@
"unique": 0
}
],
+ "has_web_view": 0,
"hide_heading": 1,
"hide_toolbar": 1,
"idx": 0,
"image_view": 0,
"in_create": 0,
- "in_dialog": 0,
"is_submittable": 0,
"issingle": 1,
"istable": 0,
"max_attachments": 0,
- "modified": "2017-01-05 15:45:59.338722",
+ "modified": "2017-05-02 15:12:30.953036",
"modified_by": "Administrator",
"module": "Schools",
"name": "Assessment Result Tool",
@@ -210,7 +192,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
- "is_custom": 0,
"permlevel": 0,
"print": 1,
"read": 1,
@@ -225,6 +206,7 @@
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
+ "show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 0,
diff --git a/erpnext/schools/doctype/attendance_tool_student/__init__.py b/erpnext/schools/doctype/attendance_tool_student/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/schools/doctype/attendance_tool_student/__init__.py
+++ /dev/null
diff --git a/erpnext/schools/doctype/attendance_tool_student/attendance_tool_student.json b/erpnext/schools/doctype/attendance_tool_student/attendance_tool_student.json
deleted file mode 100644
index 731de83..0000000
--- a/erpnext/schools/doctype/attendance_tool_student/attendance_tool_student.json
+++ /dev/null
@@ -1,114 +0,0 @@
-{
- "allow_copy": 0,
- "allow_import": 0,
- "allow_rename": 0,
- "beta": 0,
- "creation": "2015-11-10 16:28:51.366668",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "",
- "editable_grid": 1,
- "fields": [
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "fieldname": "student",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_list_view": 1,
- "label": "Student",
- "length": 0,
- "no_copy": 0,
- "options": "Student",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "report_hide": 0,
- "reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "fieldname": "student_name",
- "fieldtype": "Data",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_list_view": 1,
- "label": "Student Name",
- "length": 0,
- "no_copy": 0,
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "fieldname": "status",
- "fieldtype": "Select",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_list_view": 0,
- "label": "Status",
- "length": 0,
- "no_copy": 0,
- "options": "Absent\nPresent\n",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- }
- ],
- "hide_heading": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "image_view": 0,
- "in_create": 0,
- "in_dialog": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 1,
- "max_attachments": 0,
- "modified": "2016-07-21 12:30:02.983801",
- "modified_by": "Administrator",
- "module": "Schools",
- "name": "Attendance Tool Student",
- "name_case": "",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 0,
- "read_only": 0,
- "read_only_onload": 0,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/schools/doctype/attendance_tool_student/attendance_tool_student.py b/erpnext/schools/doctype/attendance_tool_student/attendance_tool_student.py
deleted file mode 100644
index 99a89d9..0000000
--- a/erpnext/schools/doctype/attendance_tool_student/attendance_tool_student.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2015, Frappe Technologies and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.document import Document
-
-class AttendanceToolStudent(Document):
- pass
diff --git a/erpnext/schools/doctype/course/.txt b/erpnext/schools/doctype/course/.txt
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/schools/doctype/course/.txt
+++ /dev/null
diff --git a/erpnext/schools/doctype/course_schedule/course_schedule.js b/erpnext/schools/doctype/course_schedule/course_schedule.js
index 12e8522..6521469 100644
--- a/erpnext/schools/doctype/course_schedule/course_schedule.js
+++ b/erpnext/schools/doctype/course_schedule/course_schedule.js
@@ -1,5 +1,6 @@
frappe.provide("schools")
+cur_frm.add_fetch("student_group", "course", "course")
frappe.ui.form.on("Course Schedule", {
refresh: function(frm) {
if (!frm.doc.__islocal) {
diff --git a/erpnext/schools/doctype/course_schedule/course_schedule.json b/erpnext/schools/doctype/course_schedule/course_schedule.json
index d678d28..f70db4e 100644
--- a/erpnext/schools/doctype/course_schedule/course_schedule.json
+++ b/erpnext/schools/doctype/course_schedule/course_schedule.json
@@ -1,5 +1,6 @@
{
"allow_copy": 0,
+ "allow_guest_to_view": 0,
"allow_import": 1,
"allow_rename": 0,
"autoname": "naming_series:",
@@ -13,36 +14,7 @@
"engine": "InnoDB",
"fields": [
{
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "student_batch",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 1,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Student Batch",
- "length": 0,
- "no_copy": 0,
- "options": "Student Batch",
- "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,
@@ -67,12 +39,13 @@
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
- "reqd": 0,
+ "reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -103,6 +76,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -133,6 +107,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -161,6 +136,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -192,6 +168,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -222,6 +199,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -250,6 +228,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -280,6 +259,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -310,6 +290,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -338,6 +319,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -367,6 +349,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -396,6 +379,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -425,18 +409,18 @@
"unique": 0
}
],
+ "has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 0,
"image_view": 0,
"in_create": 0,
- "in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
- "modified": "2017-02-17 17:14:46.074804",
+ "modified": "2017-05-02 12:12:35.785061",
"modified_by": "Administrator",
"module": "Schools",
"name": "Course Schedule",
diff --git a/erpnext/schools/doctype/course_schedule/course_schedule.py b/erpnext/schools/doctype/course_schedule/course_schedule.py
index d12ae9d..845f5f5 100644
--- a/erpnext/schools/doctype/course_schedule/course_schedule.py
+++ b/erpnext/schools/doctype/course_schedule/course_schedule.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+ # -*- coding: utf-8 -*-
# Copyright (c) 2015, Frappe Technologies and contributors
# For license information, please see license.txt
@@ -11,7 +11,6 @@
def validate(self):
self.instructor_name = frappe.db.get_value("Instructor", self.instructor, "instructor_name")
self.set_title()
- self.validate_mandatory()
self.validate_course()
self.validate_date()
self.validate_overlap()
@@ -19,33 +18,23 @@
def set_title(self):
"""Set document Title"""
self.title = self.course + " by " + (self.instructor_name if self.instructor_name else self.instructor)
-
- def validate_mandatory(self):
- if not (self.student_batch or self.student_group):
- frappe.throw(_("""Student Batch or Student Group is mandatory"""))
def validate_course(self):
- if self.student_group:
- self.course= frappe.db.get_value("Student Group", self.student_group, "course")
-
- def set_student_batch(self):
- if self.student_group:
- self.student_batch = frappe.db.get_value("Student Group", self.student_group, "student_batch")
-
+ group_based_on, course = frappe.db.get_value("Student Group", self.student_group, ["group_based_on", "course"])
+ if group_based_on == "Course":
+ self.course = course
+
def validate_date(self):
"""Validates if from_time is greater than to_time"""
if self.from_time > self.to_time:
frappe.throw(_("From Time cannot be greater than To Time."))
def validate_overlap(self):
- """Validates overlap for Student Group/Student Batch, Instructor, Room"""
+ """Validates overlap for Student Group, Instructor, Room"""
from erpnext.schools.utils import validate_overlap_for
#Validate overlapping course schedules.
- if self.student_batch:
- validate_overlap_for(self, "Course Schedule", "student_batch")
-
if self.student_group:
validate_overlap_for(self, "Course Schedule", "student_group")
@@ -53,9 +42,6 @@
validate_overlap_for(self, "Course Schedule", "room")
#validate overlapping assessment schedules.
- if self.student_batch:
- validate_overlap_for(self, "Assessment Plan", "student_batch")
-
if self.student_group:
validate_overlap_for(self, "Assessment Plan", "student_group")
diff --git a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.js b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.js
index ea62b8f..b835ce0 100644
--- a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.js
+++ b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.js
@@ -2,7 +2,6 @@
// For license information, please see license.txt
cur_frm.add_fetch("student_group", "program", "program");
-cur_frm.add_fetch("student_group", "student_batch", "student_batch");
cur_frm.add_fetch("student_group", "course", "course");
cur_frm.add_fetch("student_group", "academic_year", "academic_year");
cur_frm.add_fetch("student_group", "academic_term", "academic_term");
diff --git a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.json b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.json
index a66960e..944b3d5 100644
--- a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.json
+++ b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.json
@@ -1,5 +1,6 @@
{
"allow_copy": 1,
+ "allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
@@ -12,35 +13,7 @@
"engine": "InnoDB",
"fields": [
{
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "student_batch",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Student Batch",
- "length": 0,
- "no_copy": 0,
- "options": "Student Batch",
- "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,
@@ -51,6 +24,7 @@
"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",
@@ -64,12 +38,13 @@
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
- "reqd": 0,
+ "reqd": 1,
"search_index": 0,
"set_only_once": 0,
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -80,6 +55,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
+ "in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Course",
@@ -99,91 +75,7 @@
"unique": 0
},
{
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "column_break_3",
- "fieldtype": "Column Break",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 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_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "academic_year",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Academic Year",
- "length": 0,
- "no_copy": 0,
- "options": "Academic Year",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "academic_term",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Academic Term",
- "length": 0,
- "no_copy": 0,
- "options": "Academic Term",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "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,
@@ -194,6 +86,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
+ "in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Program",
@@ -213,16 +106,18 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "section_break_6",
- "fieldtype": "Section Break",
+ "fieldname": "column_break_3",
+ "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,
@@ -240,6 +135,98 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
+ "fieldname": "academic_year",
+ "fieldtype": "Link",
+ "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": "Academic Year",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Academic Year",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "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,
+ "fieldname": "academic_term",
+ "fieldtype": "Link",
+ "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": "Academic Term",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Academic Term",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "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,
+ "fieldname": "section_break_6",
+ "fieldtype": "Section 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,
@@ -250,6 +237,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
+ "in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Instructor",
@@ -269,6 +257,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -279,6 +268,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
+ "in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Instructor Name",
@@ -298,6 +288,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -308,6 +299,7 @@
"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,
@@ -325,6 +317,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -335,6 +328,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
+ "in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Room",
@@ -354,6 +348,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -364,6 +359,7 @@
"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,
@@ -381,6 +377,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -392,6 +389,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
+ "in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "From Time",
@@ -410,6 +408,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -421,6 +420,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
+ "in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Course Start Date",
@@ -440,6 +440,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -450,6 +451,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
+ "in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Day",
@@ -469,6 +471,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -479,6 +482,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
+ "in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Rechedule",
@@ -497,6 +501,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -507,6 +512,7 @@
"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,
@@ -524,6 +530,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -534,6 +541,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
+ "in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "To TIme",
@@ -552,6 +560,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -563,6 +572,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
+ "in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Course End Date",
@@ -581,18 +591,18 @@
"unique": 0
}
],
+ "has_web_view": 0,
"hide_heading": 1,
"hide_toolbar": 1,
"idx": 0,
"image_view": 0,
"in_create": 0,
- "in_dialog": 0,
"is_submittable": 0,
"issingle": 1,
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
- "modified": "2016-11-21 16:58:29.295922",
+ "modified": "2017-05-02 12:25:35.428490",
"modified_by": "Administrator",
"module": "Schools",
"name": "Course Scheduling Tool",
@@ -609,7 +619,6 @@
"export": 0,
"if_owner": 0,
"import": 0,
- "is_custom": 0,
"permlevel": 0,
"print": 0,
"read": 1,
@@ -624,7 +633,9 @@
"quick_entry": 0,
"read_only": 0,
"read_only_onload": 0,
+ "show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
+ "track_changes": 1,
"track_seen": 0
}
\ No newline at end of file
diff --git a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.py b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.py
index 86fefe2..4e07922 100644
--- a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.py
+++ b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.py
@@ -22,10 +22,11 @@
self.validate_mandatory()
self.validate_date()
self.instructor_name= frappe.db.get_value("Instructor", self.instructor, "instructor_name")
-
- if self.student_group:
- self.course= frappe.db.get_value("Student Group", self.student_group, "course")
-
+
+ group_based_on, course = frappe.db.get_value("Student Group", self.student_group, ["group_based_on", "course"])
+ if group_based_on == "Course":
+ self.course = course
+
if self.rechedule:
rescheduled, reschedule_errors = self.delete_course_schedule(rescheduled, reschedule_errors)
@@ -57,9 +58,6 @@
def validate_mandatory(self):
"""Validates all mandatory fields"""
- if not (self.student_batch or self.student_group):
- frappe.throw(_("""Student Batch or Student Group is mandatory"""))
-
fields = ['course', 'room', 'instructor', 'from_time', 'to_time', 'course_start_date', 'course_end_date', 'day']
for d in fields:
if not self.get(d):
@@ -74,7 +72,6 @@
"""Delete all course schedule within the Date range and specified filters"""
schedules = frappe.get_list("Course Schedule", fields=["name", "schedule_date"], filters =
[["student_group", "=", self.student_group],
- ["student_batch", "=", self.student_batch],
["course", "=", self.course],
["schedule_date", ">=", self.course_start_date],
["schedule_date", "<=", self.course_end_date]])
@@ -93,7 +90,6 @@
course_schedule = frappe.new_doc("Course Schedule")
course_schedule.student_group = self.student_group
- course_schedule.student_batch = self.student_batch
course_schedule.course = self.course
course_schedule.instructor = self.instructor
course_schedule.instructor_name = self.instructor_name
@@ -102,4 +98,4 @@
course_schedule.from_time= self.from_time
course_schedule.to_time= self.to_time
return course_schedule
-
+
\ No newline at end of file
diff --git a/erpnext/schools/doctype/grading_scale/grading_scale.py b/erpnext/schools/doctype/grading_scale/grading_scale.py
index 4abff96..e981f9f 100644
--- a/erpnext/schools/doctype/grading_scale/grading_scale.py
+++ b/erpnext/schools/doctype/grading_scale/grading_scale.py
@@ -17,4 +17,4 @@
else:
thresholds.append(cint(d.threshold))
if 0 not in thresholds:
- frappe.throw(_("Please define grade for treshold 0%"))
\ No newline at end of file
+ frappe.throw(_("Please define grade for Threshold 0%"))
\ No newline at end of file
diff --git a/erpnext/schools/doctype/student/student_dashboard.py b/erpnext/schools/doctype/student/student_dashboard.py
index ca2a660..cd2314e 100644
--- a/erpnext/schools/doctype/student/student_dashboard.py
+++ b/erpnext/schools/doctype/student/student_dashboard.py
@@ -7,7 +7,7 @@
'fieldname': 'student',
'transactions': [
{
- 'items': ['Student Log', 'Student Batch', 'Student Group', 'Program Enrollment']
+ 'items': ['Student Log', 'Student Group', 'Program Enrollment']
},
{
'items': ['Fees', 'Assessment Result', 'Student Attendance', 'Student Leave Application']
diff --git a/erpnext/schools/doctype/student_attendance/student_attendance.js b/erpnext/schools/doctype/student_attendance/student_attendance.js
index ec2a0cb..f025a1a 100644
--- a/erpnext/schools/doctype/student_attendance/student_attendance.js
+++ b/erpnext/schools/doctype/student_attendance/student_attendance.js
@@ -2,4 +2,4 @@
// For license information, please see license.txt
cur_frm.add_fetch("course_schedule", "schedule_date", "date");
-cur_frm.add_fetch("course_schedule", "student_batch", "student_batch")
\ No newline at end of file
+cur_frm.add_fetch("course_schedule", "student_group", "student_group")
\ No newline at end of file
diff --git a/erpnext/schools/doctype/student_attendance/student_attendance.json b/erpnext/schools/doctype/student_attendance/student_attendance.json
index e5a4075..83a07d5 100644
--- a/erpnext/schools/doctype/student_attendance/student_attendance.json
+++ b/erpnext/schools/doctype/student_attendance/student_attendance.json
@@ -1,5 +1,6 @@
{
"allow_copy": 0,
+ "allow_guest_to_view": 0,
"allow_import": 1,
"allow_rename": 0,
"autoname": "SA.######",
@@ -13,6 +14,7 @@
"engine": "InnoDB",
"fields": [
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -43,6 +45,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -73,6 +76,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -102,6 +106,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -130,6 +135,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -160,23 +166,24 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
- "fieldname": "student_batch",
+ "fieldname": "student_group",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
- "in_global_search": 1,
+ "in_global_search": 1,
"in_list_view": 0,
"in_standard_filter": 1,
- "label": "Student Batch",
+ "label": "Student Group",
"length": 0,
"no_copy": 0,
- "options": "Student Batch",
+ "options": "Student Group",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -190,6 +197,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -219,48 +227,19 @@
"search_index": 0,
"set_only_once": 0,
"unique": 0
- },
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "amended_from",
- "fieldtype": "Link",
- "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": "Amended From",
- "length": 0,
- "no_copy": 1,
- "options": "Student Attendance",
- "permlevel": 0,
- "print_hide": 1,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
}
],
+ "has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 0,
"image_view": 0,
"in_create": 0,
- "in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"max_attachments": 0,
- "modified": "2017-02-21 01:15:20.989687",
+ "modified": "2017-05-01 12:02:01.116733",
"modified_by": "Administrator",
"module": "Schools",
"name": "Student Attendance",
diff --git a/erpnext/schools/doctype/student_attendance/student_attendance.py b/erpnext/schools/doctype/student_attendance/student_attendance.py
index 8a72e70..2688123 100644
--- a/erpnext/schools/doctype/student_attendance/student_attendance.py
+++ b/erpnext/schools/doctype/student_attendance/student_attendance.py
@@ -7,7 +7,7 @@
from frappe.model.document import Document
from frappe import _
from frappe.utils import cstr
-from erpnext.schools.api import get_student_batch_students, get_student_group_students
+from erpnext.schools.api import get_student_group_students
class StudentAttendance(Document):
@@ -23,27 +23,23 @@
self.date = frappe.db.get_value("Course Schedule", self.course_schedule, "schedule_date")
def validate_mandatory(self):
- if not (self.student_batch or self.course_schedule):
- frappe.throw(_("""Student Batch or Course Schedule is mandatory"""))
+ if not (self.student_group or self.course_schedule):
+ frappe.throw(_("""Student Group or Course Schedule is mandatory"""))
def validate_course_schedule(self):
if self.course_schedule:
- self.student_batch = frappe.db.get_value("Course Schedule", self.course_schedule, "student_batch")
+ self.student_group = frappe.db.get_value("Course Schedule", self.course_schedule, "student_group")
def validate_student(self):
if self.course_schedule:
student_group = frappe.db.get_value("Course Schedule", self.course_schedule, "student_group")
- student_group_students = []
- for d in get_student_group_students(student_group):
- student_group_students.append(d.student)
- if student_group and self.student not in student_group_students:
- frappe.throw(_("""Student {0}: {1} does not belong to Student Group {2}""".format(self.student, self.student_name, student_group)))
else:
- student_batch_students = []
- for d in get_student_batch_students(self.student_batch):
- student_batch_students.append(d.student)
- if self.student not in student_batch_students:
- frappe.throw(_("""Student {0}: {1} does not belong to Student Batch {2}""".format(self.student, self.student_name, self.student_batch)))
+ student_group = self.student_group
+ student_group_students = []
+ for d in get_student_group_students(student_group):
+ student_group_students.append(d.student)
+ if student_group and self.student not in student_group_students:
+ frappe.throw(_('''Student {0}: {1} does not belong to Student Group {2}'''.format(self.student, self.student_name, student_group)))
def validate_duplication(self):
"""Check if the Attendance Record is Unique"""
@@ -54,9 +50,9 @@
(self.student, cstr(self.course_schedule), self.name))
else:
attendance_records= frappe.db.sql("""select name from `tabStudent Attendance` where \
- student= %s and student_batch= %s and date= %s and name != %s and \
+ student= %s and student_group= %s and date= %s and name != %s and \
(course_schedule is Null or course_schedule='')""",
- (self.student, self.student_batch, self.date, self.name))
+ (self.student, self.student_group, self.date, self.name))
if attendance_records:
frappe.throw(_("Attendance Record {0} exists against Student {1}")
diff --git a/erpnext/schools/doctype/student_attendance/untitled.txt b/erpnext/schools/doctype/student_attendance/untitled.txt
deleted file mode 100644
index b2f4c36..0000000
--- a/erpnext/schools/doctype/student_attendance/untitled.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2015, Frappe Technologies and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.document import Document
-from frappe import _
-
-class Studentattendance(Document):
- def validate(self):
- self.validate_duplication()
-
- def validate_duplication(self):
- attendance_records= frappe.db.sql("""select name from `tabStudent attendance` where \
- student= %s and course_schedule= %s and name != %s""",
- (self.student, self.course_schedule, self.name))
- if attendance_records:
- frappe.throw(_("attendance Record {0} exists against Student {1} for Course Schedule {2}")
- .format(attendance_records[0][0], self.student, self.course_schedule))
diff --git a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js
index 3b0022f..b092a3f 100644
--- a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js
+++ b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js
@@ -8,22 +8,22 @@
},
based_on: function(frm) {
- if (frm.doc.based_on == "Student Batch") {
+ if (frm.doc.based_on == "Student Group") {
frm.set_value("course_schedule", "");
} else {
- frm.set_value("student_batch", "");
+ frm.set_value("student_group", "");
}
},
- student_batch: function(frm) {
- if ((frm.doc.student_batch && frm.doc.date) || frm.doc.course_schedule) {
+ student_group: function(frm) {
+ if ((frm.doc.student_group && frm.doc.date) || frm.doc.course_schedule) {
var method = "erpnext.schools.doctype.student_attendance_tool.student_attendance_tool.get_student_attendance_records";
frappe.call({
method: method,
args: {
based_on: frm.doc.based_on,
- student_batch: frm.doc.student_batch,
+ student_group: frm.doc.student_group,
date: frm.doc.date,
course_schedule: frm.doc.course_schedule
},
@@ -35,11 +35,11 @@
},
date: function(frm) {
- frm.trigger("student_batch");
+ frm.trigger("student_group");
},
course_schedule: function(frm) {
- frm.trigger("student_batch");
+ frm.trigger("student_group");
},
get_students: function(frm, students) {
@@ -47,6 +47,7 @@
frm.students_area = $('<div>')
.appendTo(frm.fields_dict.students_html.wrapper);
}
+ console.log(students);
frm.students_editor = new schools.StudentsEditor(frm, frm.students_area, students)
}
});
@@ -89,12 +90,12 @@
var get_present_student = function(student) {
return students.filter(function(s) {
- return s.idx === idx;
+ return s.group_roll_number === group_roll_number;
})
}
- var get_absent_student = function(idx) {
+ var get_absent_student = function(group_roll_number) {
return students.filter(function(s) {
- return s.idx === idx;
+ return s.group_roll_number === group_roll_number;
})
}
@@ -108,7 +109,7 @@
studs.push({
student: $check.data().student,
student_name: $check.data().studentName,
- idx: $check.data().idx,
+ group_roll_number: $check.data().group_roll_number,
disabled: $check.prop("disabled"),
checked: $check.is(":checked")
});
@@ -132,13 +133,13 @@
args: {
"students_present": students_present,
"students_absent": students_absent,
- "student_batch": frm.doc.student_batch,
+ "student_group": frm.doc.student_group,
"course_schedule": frm.doc.course_schedule,
"date": frm.doc.date
},
callback: function(r) {
$(me.wrapper.find(".btn-mark-att")).attr("disabled", false);
- frm.trigger("student_batch");
+ frm.trigger("student_group");
}
});
},
@@ -152,7 +153,7 @@
return frappe.render_template("student_button", {
student: student.student,
student_name: student.student_name,
- idx: student.idx,
+ group_roll_number: student.group_roll_number,
status: student.status
})
});
diff --git a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.json b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.json
index 51b015c..291e027 100644
--- a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.json
+++ b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.json
@@ -1,5 +1,6 @@
{
"allow_copy": 1,
+ "allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
@@ -12,6 +13,7 @@
"engine": "InnoDB",
"fields": [
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -29,7 +31,7 @@
"label": "Based On",
"length": 0,
"no_copy": 0,
- "options": "Student Batch\nCourse Schedule",
+ "options": "Student Group\nCourse Schedule",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -43,6 +45,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -71,12 +74,13 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
- "depends_on": "eval:doc.based_on ==\"Student Batch\"",
- "fieldname": "student_batch",
+ "depends_on": "eval:doc.based_on ==\"Student Group\"",
+ "fieldname": "student_group",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
@@ -85,10 +89,10 @@
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
- "label": "Student Batch",
+ "label": "Student Group",
"length": 0,
"no_copy": 0,
- "options": "Student Batch",
+ "options": "Student Group",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -102,6 +106,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -133,11 +138,12 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
- "depends_on": "eval:doc.based_on ==\"Student Batch\"",
+ "depends_on": "eval:doc.based_on ==\"Student Group\"",
"fieldname": "date",
"fieldtype": "Date",
"hidden": 0,
@@ -163,11 +169,12 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
- "depends_on": "eval: (doc.course_schedule \n|| (doc.student_batch && doc.date))",
+ "depends_on": "eval: (doc.course_schedule \n|| (doc.student_group && doc.date))",
"fieldname": "attendance",
"fieldtype": "Section Break",
"hidden": 0,
@@ -193,6 +200,7 @@
"unique": 0
},
{
+ "allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
@@ -222,17 +230,17 @@
"unique": 0
}
],
+ "has_web_view": 0,
"hide_heading": 1,
"hide_toolbar": 1,
"idx": 0,
"image_view": 0,
"in_create": 0,
- "in_dialog": 0,
"is_submittable": 0,
"issingle": 1,
"istable": 0,
"max_attachments": 0,
- "modified": "2017-02-21 01:15:11.435110",
+ "modified": "2017-05-01 15:09:55.740005",
"modified_by": "Administrator",
"module": "Schools",
"name": "Student Attendance Tool",
diff --git a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.py b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.py
index 0734747..be26440 100644
--- a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.py
+++ b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.py
@@ -10,29 +10,28 @@
pass
@frappe.whitelist()
-def get_student_attendance_records(based_on, date=None, student_batch=None, course_schedule=None):
+def get_student_attendance_records(based_on, date=None, student_group=None, course_schedule=None):
student_list = []
student_attendance_list = []
if based_on=="Course Schedule":
student_group = frappe.db.get_value("Course Schedule", course_schedule, "student_group")
if student_group:
- student_list = frappe.get_list("Student Group Student", fields=["student", "student_name", "idx"] , \
- filters={"parent": student_group, "active": 1}, order_by= "idx")
- else:
- student_batch = frappe.db.get_value("Course Schedule", course_schedule, "student_batch")
+ student_list = frappe.get_list("Student Group Student", fields=["student", "student_name", "group_roll_number"] , \
+ filters={"parent": student_group, "active": 1}, order_by= "group_roll_number")
+
if not student_list:
- student_list = frappe.get_list("Student Batch Student", fields=["student", "student_name", "idx"] ,
- filters={"parent": student_batch, "active": 1}, order_by= "idx")
+ student_list = frappe.get_list("Student Group Student", fields=["student", "student_name", "group_roll_number"] ,
+ filters={"parent": student_group, "active": 1}, order_by= "group_roll_number")
if course_schedule:
- student_attendance_list= frappe.db.sql("""select student, status from `tabStudent Attendance` where \
- course_schedule= %s""", (course_schedule), as_dict=1)
+ student_attendance_list= frappe.db.sql('''select student, status from `tabStudent Attendance` where \
+ course_schedule= %s''', (course_schedule), as_dict=1)
else:
- student_attendance_list= frappe.db.sql("""select student, status from `tabStudent Attendance` where \
- student_batch= %s and date= %s and \
- (course_schedule is Null or course_schedule='')""",
- (student_batch, date), as_dict=1)
+ student_attendance_list= frappe.db.sql('''select student, status from `tabStudent Attendance` where \
+ student_group= %s and date= %s and \
+ (course_schedule is Null or course_schedule='')''',
+ (student_group, date), as_dict=1)
for attendance in student_attendance_list:
for student in student_list:
diff --git a/erpnext/schools/doctype/student_batch/__init__.py b/erpnext/schools/doctype/student_batch/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/schools/doctype/student_batch/__init__.py
+++ /dev/null
diff --git a/erpnext/schools/doctype/student_batch/student_batch.js b/erpnext/schools/doctype/student_batch/student_batch.js
deleted file mode 100644
index 00b261e..0000000
--- a/erpnext/schools/doctype/student_batch/student_batch.js
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Student Batch', {
- refresh: function(frm) {
- if (!frm.doc.__islocal) {
- frm.add_custom_button(__("Update Email Group"), function() {
- frappe.call({
- method: "erpnext.schools.api.update_email_group",
- args: {
- "doctype": "Student Batch",
- "name": frm.doc.name
- }
- });
- });
- frm.add_custom_button(__("Newsletter"), function() {
- frappe.set_route("List", "Newsletter");
- });
- }
- },
-
- onload: function(frm){
- cur_frm.set_query("academic_term",function(){
- return{
- "filters":{
- "academic_year": (frm.doc.academic_year)
- }
- };
- });
- }
-
-});
-
-cur_frm.add_fetch("student", "title", "student_name");
diff --git a/erpnext/schools/doctype/student_batch/student_batch.json b/erpnext/schools/doctype/student_batch/student_batch.json
deleted file mode 100644
index 1b7239b..0000000
--- a/erpnext/schools/doctype/student_batch/student_batch.json
+++ /dev/null
@@ -1,379 +0,0 @@
-{
- "allow_copy": 0,
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "",
- "beta": 0,
- "creation": "2016-07-21 15:49:53.776461",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "",
- "editable_grid": 1,
- "engine": "InnoDB",
- "fields": [
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "student_batch_name",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 1,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Student Batch Name",
- "length": 0,
- "no_copy": 0,
- "options": "Student Batch Name",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "academic_year",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 1,
- "label": "Academic Year",
- "length": 0,
- "no_copy": 0,
- "options": "Academic Year",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "default": "1",
- "fieldname": "enabled",
- "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": "Active",
- "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_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "column_break_2",
- "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_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "program",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 1,
- "in_list_view": 0,
- "in_standard_filter": 1,
- "label": "Program",
- "length": 0,
- "no_copy": 0,
- "options": "Program",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "academic_term",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_global_search": 0,
- "in_list_view": 0,
- "in_standard_filter": 1,
- "label": "Academic Term",
- "length": 0,
- "no_copy": 0,
- "options": "Academic Term",
- "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_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "section_break_6",
- "fieldtype": "Section 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,
- "label": "Students",
- "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_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "students",
- "fieldtype": "Table",
- "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": "Students",
- "length": 0,
- "no_copy": 0,
- "options": "Student Batch Student",
- "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_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "section_break_8",
- "fieldtype": "Section 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,
- "label": "Instructors",
- "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_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "instructors",
- "fieldtype": "Table",
- "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": "Instructors",
- "length": 0,
- "no_copy": 0,
- "options": "Student Batch Instructor",
- "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
- }
- ],
- "hide_heading": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "image_view": 0,
- "in_create": 0,
- "in_dialog": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 0,
- "max_attachments": 0,
- "modified": "2017-02-17 17:17:00.460594",
- "modified_by": "Administrator",
- "module": "Schools",
- "name": "Student Batch",
- "name_case": "",
- "owner": "Administrator",
- "permissions": [
- {
- "amend": 0,
- "apply_user_permissions": 0,
- "cancel": 0,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "if_owner": 0,
- "import": 1,
- "permlevel": 0,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Academics User",
- "set_user_permissions": 0,
- "share": 1,
- "submit": 0,
- "write": 1
- },
- {
- "amend": 0,
- "apply_user_permissions": 0,
- "cancel": 0,
- "create": 0,
- "delete": 0,
- "email": 0,
- "export": 0,
- "if_owner": 0,
- "import": 0,
- "permlevel": 0,
- "print": 0,
- "read": 1,
- "report": 0,
- "role": "Instructor",
- "set_user_permissions": 0,
- "share": 0,
- "submit": 0,
- "write": 0
- }
- ],
- "quick_entry": 1,
- "read_only": 0,
- "read_only_onload": 0,
- "show_name_in_global_search": 0,
- "sort_field": "modified",
- "sort_order": "DESC",
- "title_field": "",
- "track_changes": 0,
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/schools/doctype/student_batch/student_batch.py b/erpnext/schools/doctype/student_batch/student_batch.py
deleted file mode 100644
index 9c0f3d7..0000000
--- a/erpnext/schools/doctype/student_batch/student_batch.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-from frappe.model.document import Document
-from erpnext.schools.utils import validate_duplicate_student
-import frappe
-from frappe import _
-
-class StudentBatch(Document):
- def autoname(self):
- prog_abb = frappe.db.get_value("Program", self.program, "program_abbreviation")
- if not prog_abb:
- prog_abb = self.program
- self.name = prog_abb + "-"+ self.student_batch_name + "-" + self.academic_year
-
- def validate(self):
- validate_duplicate_student(self.students)
- self.validate_name()
-
- def validate_name(self):
- if frappe.db.exists("Student Group", self.name):
- frappe.throw(_("""Student Group exists with same name"""))
diff --git a/erpnext/schools/doctype/student_batch/test_student_batch.py b/erpnext/schools/doctype/student_batch/test_student_batch.py
deleted file mode 100644
index 55796ee..0000000
--- a/erpnext/schools/doctype/student_batch/test_student_batch.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-from __future__ import unicode_literals
-
-import frappe
-import unittest
-
-# test_records = frappe.get_test_records('Student Batch')
-
-class TestStudentBatch(unittest.TestCase):
- pass
diff --git a/erpnext/schools/doctype/student_batch_creation_tool/__init__.py b/erpnext/schools/doctype/student_batch_creation_tool/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/schools/doctype/student_batch_creation_tool/__init__.py
+++ /dev/null
diff --git a/erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.js b/erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.js
deleted file mode 100644
index 3167174..0000000
--- a/erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Student Batch Creation Tool', {
- refresh: function(frm) {
- frm.disable_save();
- }
-});
diff --git a/erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.json b/erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.json
deleted file mode 100644
index d94c480..0000000
--- a/erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.json
+++ /dev/null
@@ -1,176 +0,0 @@
-{
- "allow_copy": 1,
- "allow_import": 0,
- "allow_rename": 0,
- "beta": 0,
- "creation": "2016-11-14 18:20:12.160405",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "",
- "editable_grid": 1,
- "engine": "InnoDB",
- "fields": [
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "academic_year",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Academic Year",
- "length": 0,
- "no_copy": 0,
- "options": "Academic Year",
- "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_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "program",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Program",
- "length": 0,
- "no_copy": 0,
- "options": "Program",
- "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_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "student_batch_name",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Student Batch Name",
- "length": 0,
- "no_copy": 0,
- "options": "Student Batch Name",
- "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_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "make_student_batch",
- "fieldtype": "Button",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_list_view": 0,
- "in_standard_filter": 0,
- "label": "Make Student Batch",
- "length": 0,
- "no_copy": 0,
- "options": "make_batch",
- "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
- }
- ],
- "hide_heading": 1,
- "hide_toolbar": 1,
- "idx": 0,
- "image_view": 0,
- "in_create": 0,
- "in_dialog": 0,
- "is_submittable": 0,
- "issingle": 1,
- "istable": 0,
- "max_attachments": 0,
- "modified": "2016-11-21 16:47:56.823988",
- "modified_by": "Administrator",
- "module": "Schools",
- "name": "Student Batch Creation Tool",
- "name_case": "",
- "owner": "Administrator",
- "permissions": [
- {
- "amend": 0,
- "apply_user_permissions": 0,
- "cancel": 0,
- "create": 0,
- "delete": 0,
- "email": 1,
- "export": 0,
- "if_owner": 0,
- "import": 0,
- "is_custom": 0,
- "permlevel": 0,
- "print": 1,
- "read": 1,
- "report": 0,
- "role": "Academics User",
- "set_user_permissions": 0,
- "share": 1,
- "submit": 0,
- "write": 1
- }
- ],
- "quick_entry": 0,
- "read_only": 0,
- "read_only_onload": 0,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.py b/erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.py
deleted file mode 100644
index deda137..0000000
--- a/erpnext/schools/doctype/student_batch_creation_tool/student_batch_creation_tool.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.document import Document
-
-class StudentBatchCreationTool(Document):
- def make_batch(self):
- if self.academic_year and self.program and self.student_batch_name:
- students = frappe.get_list("Program Enrollment", fields=["student", "student_name"],
- filters={"academic_year":self.academic_year, "program": self.program, "student_batch_name": self.student_batch_name},
- order_by= "student_name")
- if students:
- student_batch = frappe.new_doc("Student Batch")
- student_batch.update({
- "academic_year": self.academic_year,
- "program": self.program,
- "student_batch_name": self.student_batch_name,
- "students": students
- })
- student_batch.save()
- frappe.msgprint("Student Batch created.")
- else:
- frappe.msgprint("No students found.")
-
diff --git a/erpnext/schools/doctype/student_batch_instructor/__init__.py b/erpnext/schools/doctype/student_batch_instructor/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/schools/doctype/student_batch_instructor/__init__.py
+++ /dev/null
diff --git a/erpnext/schools/doctype/student_batch_instructor/student_batch_instructor.json b/erpnext/schools/doctype/student_batch_instructor/student_batch_instructor.json
deleted file mode 100644
index 29680fb..0000000
--- a/erpnext/schools/doctype/student_batch_instructor/student_batch_instructor.json
+++ /dev/null
@@ -1,123 +0,0 @@
-{
- "allow_copy": 0,
- "allow_import": 0,
- "allow_rename": 0,
- "beta": 0,
- "creation": "2016-11-21 19:04:48.211565",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "",
- "editable_grid": 1,
- "engine": "InnoDB",
- "fields": [
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "instructor",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Instructor",
- "length": 0,
- "no_copy": 0,
- "options": "Instructor",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "column_break_2",
- "fieldtype": "Column Break",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 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_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "instructor_name",
- "fieldtype": "Read Only",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_filter": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Instructor Name",
- "length": 0,
- "no_copy": 0,
- "options": "instructor.instructor_name",
- "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
- }
- ],
- "hide_heading": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "image_view": 0,
- "in_create": 0,
- "in_dialog": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 1,
- "max_attachments": 0,
- "modified": "2016-11-21 19:08:07.680320",
- "modified_by": "Administrator",
- "module": "Schools",
- "name": "Student Batch Instructor",
- "name_case": "",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "read_only": 0,
- "read_only_onload": 0,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/schools/doctype/student_batch_instructor/student_batch_instructor.py b/erpnext/schools/doctype/student_batch_instructor/student_batch_instructor.py
deleted file mode 100644
index 19a759d..0000000
--- a/erpnext/schools/doctype/student_batch_instructor/student_batch_instructor.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.document import Document
-
-class StudentBatchInstructor(Document):
- pass
diff --git a/erpnext/schools/doctype/student_batch_student/__init__.py b/erpnext/schools/doctype/student_batch_student/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/schools/doctype/student_batch_student/__init__.py
+++ /dev/null
diff --git a/erpnext/schools/doctype/student_batch_student/student_batch_student.json b/erpnext/schools/doctype/student_batch_student/student_batch_student.json
deleted file mode 100644
index 3558cc8..0000000
--- a/erpnext/schools/doctype/student_batch_student/student_batch_student.json
+++ /dev/null
@@ -1,148 +0,0 @@
-{
- "allow_copy": 0,
- "allow_import": 0,
- "allow_rename": 0,
- "beta": 0,
- "creation": "2016-07-22 03:27:20.120023",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "",
- "editable_grid": 1,
- "fields": [
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "student",
- "fieldtype": "Link",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Student",
- "length": 0,
- "no_copy": 0,
- "options": "Student",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 0,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 1,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "column_break_2",
- "fieldtype": "Column Break",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 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_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "fieldname": "student_name",
- "fieldtype": "Data",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Student Name",
- "length": 0,
- "no_copy": 0,
- "options": "student.title",
- "permlevel": 0,
- "precision": "",
- "print_hide": 0,
- "print_hide_if_no_value": 0,
- "read_only": 1,
- "remember_last_selected_value": 0,
- "report_hide": 0,
- "reqd": 0,
- "search_index": 0,
- "set_only_once": 0,
- "unique": 0
- },
- {
- "allow_on_submit": 0,
- "bold": 0,
- "collapsible": 0,
- "columns": 0,
- "default": "1",
- "fieldname": "active",
- "fieldtype": "Check",
- "hidden": 0,
- "ignore_user_permissions": 0,
- "ignore_xss_filter": 0,
- "in_list_view": 1,
- "in_standard_filter": 0,
- "label": "Active",
- "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
- }
- ],
- "hide_heading": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "image_view": 0,
- "in_create": 0,
- "in_dialog": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 1,
- "max_attachments": 0,
- "modified": "2017-02-03 05:26:35.518004",
- "modified_by": "Administrator",
- "module": "Schools",
- "name": "Student Batch Student",
- "name_case": "",
- "owner": "Administrator",
- "permissions": [],
- "quick_entry": 1,
- "read_only": 0,
- "read_only_onload": 0,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 0,
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/schools/doctype/student_batch_student/student_batch_student.py b/erpnext/schools/doctype/student_batch_student/student_batch_student.py
deleted file mode 100644
index 542f3c4..0000000
--- a/erpnext/schools/doctype/student_batch_student/student_batch_student.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.document import Document
-
-class StudentBatchStudent(Document):
- pass
diff --git a/erpnext/schools/doctype/student_group/student_group.py b/erpnext/schools/doctype/student_group/student_group.py
index 5520ec7..81e0ed9 100644
--- a/erpnext/schools/doctype/student_group/student_group.py
+++ b/erpnext/schools/doctype/student_group/student_group.py
@@ -7,7 +7,6 @@
from frappe.model.document import Document
from frappe import _
from erpnext.schools.utils import validate_duplicate_student
-from erpnext.schools.api import get_student_batch_students
class StudentGroup(Document):
def validate(self):
@@ -15,6 +14,7 @@
self.validate_strength()
if frappe.defaults.get_defaults().student_validation_setting:
self.validate_students()
+ self.validate_roll_no()
validate_duplicate_student(self.students)
def validate_mandatory_fields(self):
@@ -38,6 +38,14 @@
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):
+ roll_no_list = []
+ for d in self.students:
+ if d.group_roll_number in roll_no_list:
+ frappe.throw(_("Duplicate roll number for student {0}".format(d.student_name)))
+ else:
+ roll_no_list.append(d.group_roll_number)
+
@frappe.whitelist()
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)
diff --git a/erpnext/schools/report/absent_student_report/absent_student_report.py b/erpnext/schools/report/absent_student_report/absent_student_report.py
index ba2b7ad..0949831 100644
--- a/erpnext/schools/report/absent_student_report/absent_student_report.py
+++ b/erpnext/schools/report/absent_student_report/absent_student_report.py
@@ -20,7 +20,7 @@
data = []
for student in absent_students:
if not student.student in leave_applicants:
- row = [student.student, student.student_name, student.student_batch]
+ row = [student.student, student.student_name, student.student_group]
stud_details = frappe.db.get_value("Student", student.student, ['student_email_id', 'student_mobile_number'], as_dict=True)
if stud_details.student_email_id:
@@ -41,15 +41,15 @@
columns = [
_("Student") + ":Link/Student:90",
_("Student Name") + "::150",
- _("Student Batch") + "::180",
+ _("Student Group") + "::180",
_("Student Email Address") + "::180",
_("Student Mobile No.") + "::150",
]
return columns
def get_absent_students(date):
- absent_students = frappe.db.sql("""select student, student_name, student_batch from `tabStudent Attendance`
- where status="Absent" and date = %s order by student_batch, student_name""", date, as_dict=1)
+ absent_students = frappe.db.sql("""select student, student_name, student_group from `tabStudent Attendance`
+ where status="Absent" and date = %s order by student_group, student_name""", date, as_dict=1)
return absent_students
def get_leave_applications(date):
diff --git a/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.py b/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.py
index d8df3a0..ddb4889 100644
--- a/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.py
+++ b/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.py
@@ -14,15 +14,15 @@
columns = get_columns(filters)
- active_student_batch = get_active_student_batch()
+ active_student_group = get_active_student_group()
data = []
- for student_batch in active_student_batch:
- row = [student_batch.name]
+ for student_group in active_student_group:
+ row = [student_group.name]
present_students = 0
absent_students = 0
- student_batch_strength = get_student_batch_strength(student_batch.name)
- student_attendance = get_student_attendance(student_batch.name, filters.get("date"))
+ student_group_strength = get_student_group_strength(student_group.name)
+ student_attendance = get_student_attendance(student_group.name, filters.get("date"))
if student_attendance:
for attendance in student_attendance:
if attendance.status== "Present":
@@ -30,35 +30,35 @@
elif attendance.status== "Absent":
absent_students = attendance.count
- unmarked_students = student_batch_strength - (present_students + absent_students)
- row+= [student_batch_strength, present_students, absent_students, unmarked_students]
+ unmarked_students = student_group_strength - (present_students + absent_students)
+ row+= [student_group_strength, present_students, absent_students, unmarked_students]
data.append(row)
return columns, data
def get_columns(filters):
columns = [
- _("Student batch") + ":Link/Student Batch:250",
- _("Student batch Strength") + "::170",
+ _("Student Group") + ":Link/Student Batch:250",
+ _("Student Group Strength") + "::170",
_("Present") + "::90",
_("Absent") + "::90",
_("Not Marked") + "::90"
]
return columns
-def get_active_student_batch():
- active_student_batch = frappe.db.sql("""select name from `tabStudent Batch`
- where enabled = 1 order by name""", as_dict=1)
- return active_student_batch
+def get_active_student_group():
+ active_student_groups = frappe.db.sql("""select name from `tabStudent Group` where group_based_on = "Batch"
+ and academic_year=%s order by name""", (frappe.defaults.get_defaults().academic_year), as_dict=1)
+ return active_student_groups
-def get_student_batch_strength(student_batch):
- student_batch_strength = frappe.db.sql("""select count(*) from `tabStudent Batch Student`
- where parent = %s and active=1""", student_batch)[0][0]
- return student_batch_strength
+def get_student_group_strength(student_group):
+ student_group_strength = frappe.db.sql("""select count(*) from `tabStudent Group Student`
+ where parent = %s and active=1""", student_group)[0][0]
+ return student_group_strength
-def get_student_attendance(student_batch, date):
+def get_student_attendance(student_group, date):
student_attendance = frappe.db.sql("""select count(*) as count, status from `tabStudent Attendance` where \
- student_batch= %s and date= %s and\
+ student_group= %s and date= %s and\
(course_schedule is Null or course_schedule='') group by status""",
- (student_batch, date), as_dict=1)
+ (student_group, date), as_dict=1)
return student_attendance
\ No newline at end of file
diff --git a/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.js b/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.js
index 8d914cb..57927fa 100644
--- a/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.js
+++ b/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.js
@@ -19,10 +19,10 @@
"reqd": 1
},
{
- "fieldname": "student_batch",
- "label": __("Student Batch"),
+ "fieldname": "student_group",
+ "label": __("Student Group"),
"fieldtype": "Link",
- "options": "Student Batch",
+ "options": "Student Group",
"reqd": 1
}
],
diff --git a/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.py b/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.py
index f906034..91f6c36 100644
--- a/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.py
+++ b/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.py
@@ -6,7 +6,7 @@
from frappe.utils import cstr, cint, getdate, get_first_day, get_last_day, date_diff, add_days
from frappe import msgprint, _
from calendar import monthrange
-from erpnext.schools.api import get_student_batch_students
+from erpnext.schools.api import get_student_group_students
def execute(filters=None):
if not filters: filters = {}
@@ -15,9 +15,9 @@
to_date = get_last_day(filters["month"] + '-' + filters["year"])
total_days_in_month = date_diff(to_date, from_date) +1
columns = get_columns(total_days_in_month)
- students = get_student_batch_students(filters.get("student_batch"))
+ students = get_student_group_students(filters.get("student_group"))
students_list = get_students_list(students)
- att_map = get_attendance_list(from_date, to_date, filters.get("student_batch"), students_list)
+ att_map = get_attendance_list(from_date, to_date, filters.get("student_group"), students_list)
data = []
for stud in students:
row = [stud.student, stud.student_name]
@@ -51,12 +51,12 @@
student_list.append(stud.student)
return student_list
-def get_attendance_list(from_date, to_date, student_batch, students_list):
- attendance_list = frappe.db.sql("""select student, date, status
- from `tabStudent Attendance` where student_batch = %s
+def get_attendance_list(from_date, to_date, student_group, students_list):
+ attendance_list = frappe.db.sql('''select student, date, status
+ from `tabStudent Attendance` where student_group = %s
and date between %s and %s
- order by student, date""",
- (student_batch, from_date, to_date), as_dict=1)
+ order by student, date''',
+ (student_group, from_date, to_date), as_dict=1)
att_map = {}
students_with_leave_application = get_students_with_leave_application(from_date, to_date, students_list)
for d in attendance_list:
@@ -97,7 +97,7 @@
@frappe.whitelist()
def get_attendance_years():
- year_list = frappe.db.sql_list("""select distinct YEAR(date) from `tabStudent Attendance` ORDER BY YEAR(date) DESC""")
+ year_list = frappe.db.sql_list('''select distinct YEAR(date) from `tabStudent Attendance` ORDER BY YEAR(date) DESC''')
if not year_list:
year_list = [getdate().year]
return "\n".join(str(year) for year in year_list)