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 = $('