diff --git a/erpnext/config/schools.py b/erpnext/config/schools.py index c88a8ccf4b5..c54f808bbcb 100644 --- a/erpnext/config/schools.py +++ b/erpnext/config/schools.py @@ -18,10 +18,6 @@ def get_data(): "type": "doctype", "name": "Student Log" }, - { - "type": "doctype", - "name": "Student Batch" - }, { "type": "doctype", "name": "Student Group" @@ -58,10 +54,6 @@ def get_data(): { "type": "doctype", "name": "Program Enrollment Tool" - }, - { - "type": "doctype", - "name": "Student Batch Creation Tool" } ] }, diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 853d3bbced8..c5281bbc616 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -391,4 +391,5 @@ erpnext.patches.v8_0.set_project_copied_from 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 00000000000..5b45cc76028 --- /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 4196808355a..3cf259216a7 100644 --- a/erpnext/public/js/schools/student_button.html +++ b/erpnext/public/js/schools/student_button.html @@ -3,7 +3,7 @@ \ No newline at end of file diff --git a/erpnext/schools/api.py b/erpnext/schools/api.py index 623b1e0a0ea..43d24383f90 100644 --- a/erpnext/schools/api.py +++ b/erpnext/schools/api.py @@ -33,26 +33,26 @@ def enroll_student(source_name): 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 @@ def mark_attendance(students_present, students_absent, course_schedule=None, stu 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 @@ def make_attendance_records(student, student_name, status, course_schedule=None, 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 @@ def make_attendance_records(student, student_name, status, course_schedule=None, 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() @@ -105,16 +105,6 @@ def get_student_guardians(student): filters={"parent": student}) 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. @@ -122,7 +112,7 @@ def get_student_group_students(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 @@ def get_assessment_criteria(course): 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 @@ def update_email_group(doctype, name): 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 e69de29bb2d..00000000000 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 143791b8a8c..00000000000 --- 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 d3acf7a9104..00000000000 --- 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 175564e04e3..00000000000 --- 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 d6ccb8f57d4..00000000000 --- 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 b1e87687ffe..3c9ab80d2dd 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 @@ frappe.ui.form.on("Assessment Plan", { 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 042bdaf7744..697a0d4edc5 100644 --- a/erpnext/schools/doctype/assessment_plan/assessment_plan.json +++ b/erpnext/schools/doctype/assessment_plan/assessment_plan.json @@ -43,68 +43,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "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, @@ -113,7 +51,7 @@ "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 31e96aac5df..7f83c0176b2 100644 --- a/erpnext/schools/doctype/assessment_plan/assessment_plan.py +++ b/erpnext/schools/doctype/assessment_plan/assessment_plan.py @@ -9,21 +9,15 @@ from frappe import _ 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 @@ class AssessmentPlan(Document): 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 213111ac4d1..3cadea6edc4 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 @@ frappe.ui.form.on('Assessment Result Tool', { }, 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 87dff4d1545..d82aaf5bc84 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, - "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, + "reqd": 1, "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 e69de29bb2d..00000000000 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 731de83cdaf..00000000000 --- 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 99a89d987b0..00000000000 --- 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 e69de29bb2d..00000000000 diff --git a/erpnext/schools/doctype/course_schedule/course_schedule.js b/erpnext/schools/doctype/course_schedule/course_schedule.js index 12e852215af..6521469b24b 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 d678d280a38..f70db4e2aab 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 d12ae9dfbfd..845f5f5f92c 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 @@ class CourseSchedule(Document): 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 @@ class CourseSchedule(Document): 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 @@ class CourseSchedule(Document): 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 ea62b8f544b..b835ce05d4d 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 a66960ef0a8..944b3d5b161 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 86fefe20cc7..4e079221ff4 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 @@ class CourseSchedulingTool(Document): 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 @@ class CourseSchedulingTool(Document): 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 @@ class CourseSchedulingTool(Document): """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 @@ class CourseSchedulingTool(Document): 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 @@ class CourseSchedulingTool(Document): 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 4abff96462c..e981f9f5877 100644 --- a/erpnext/schools/doctype/grading_scale/grading_scale.py +++ b/erpnext/schools/doctype/grading_scale/grading_scale.py @@ -17,4 +17,4 @@ class GradingScale(Document): 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 ca2a660292a..cd2314ef12b 100644 --- a/erpnext/schools/doctype/student/student_dashboard.py +++ b/erpnext/schools/doctype/student/student_dashboard.py @@ -7,7 +7,7 @@ def get_data(): '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 ec2a0cbf8d9..f025a1a5397 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 e5a4075ba02..83a07d500a7 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 8a72e704d6b..2688123f97f 100644 --- a/erpnext/schools/doctype/student_attendance/student_attendance.py +++ b/erpnext/schools/doctype/student_attendance/student_attendance.py @@ -7,7 +7,7 @@ import frappe 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 @@ class StudentAttendance(Document): 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 @@ class StudentAttendance(Document): (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 b2f4c368372..00000000000 --- 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 3b0022fa0d4..b092a3f2eee 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 @@ frappe.ui.form.on('Student Attendance Tool', { }, 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 @@ frappe.ui.form.on('Student Attendance Tool', { }, 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 @@ frappe.ui.form.on('Student Attendance Tool', { frm.students_area = $('
') .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 @@ schools.StudentsEditor = Class.extend({ 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 @@ schools.StudentsEditor = Class.extend({ 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 @@ schools.StudentsEditor = Class.extend({ 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 @@ schools.StudentsEditor = Class.extend({ 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 51b015caa3a..291e027adf1 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 073474769d9..be2644077aa 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 @@ class StudentAttendanceTool(Document): 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 e69de29bb2d..00000000000 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 00b261e3a1a..00000000000 --- 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 1b7239b7653..00000000000 --- 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 9c0f3d7530b..00000000000 --- 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 55796eeb725..00000000000 --- 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 e69de29bb2d..00000000000 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 316717450f5..00000000000 --- 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 d94c4808fb1..00000000000 --- 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 deda1373d9e..00000000000 --- 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 e69de29bb2d..00000000000 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 29680fb6145..00000000000 --- 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 19a759d0f3d..00000000000 --- 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 e69de29bb2d..00000000000 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 3558cc8528b..00000000000 --- 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 542f3c4da92..00000000000 --- 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 5520ec7b5e1..81e0ed946f0 100644 --- a/erpnext/schools/doctype/student_group/student_group.py +++ b/erpnext/schools/doctype/student_group/student_group.py @@ -7,7 +7,6 @@ import frappe 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 @@ class StudentGroup(Document): 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 @@ class StudentGroup(Document): if not frappe.db.get_value("Student", d.student, "enabled") and d.active: frappe.throw(_("{0} - {1} is inactive student".format(d.group_roll_number, d.student_name))) + def validate_roll_no(self): + 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 ba2b7add758..094983108a2 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 @@ def execute(filters=None): 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 @@ def get_columns(filters): 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 d8df3a02ad0..ddb4889cbfb 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 @@ def execute(filters=None): 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 @@ def execute(filters=None): 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 8d914cba2e0..57927fa9d97 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 @@ frappe.query_reports["Student Monthly Attendance Sheet"] = { "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 f906034948c..91f6c364cb1 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 @@ import frappe 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 @@ def execute(filters=None): 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 @@ def get_students_list(students): 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 @@ def daterange(d1, d2): @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)