diff --git a/.travis.yml b/.travis.yml index 1535666..5bb2c6b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,20 +6,23 @@ python: services: - mysql +before_install: + - "export DISPLAY=:99.0" + - "sh -e /etc/init.d/xvfb start" + install: - sudo apt-get purge -y mysql-common - wget https://raw.githubusercontent.com/frappe/bench/master/install_scripts/setup_frappe.sh - - sudo bash setup_frappe.sh --skip-setup-bench --mysql-root-password travis + - sudo bash setup_frappe.sh --skip-setup-bench --mysql-root-password travis --bench-branch master - sudo pip install --upgrade pip - rm $TRAVIS_BUILD_DIR/.git/shallow - - sudo service redis-server start - - cd ~/ && bench init frappe-bench --frappe-path https://github.com/frappe/frappe.git --frappe-branch develop + - cd ~/ && bench init frappe-bench --frappe-path https://github.com/frappe/frappe.git --frappe-branch master - cp -r $TRAVIS_BUILD_DIR/test_sites/test_site ~/frappe-bench/sites/ script: - cd ~/frappe-bench - - bench get-app erpnext https://github.com/frappe/erpnext.git + - bench get-app erpnext https://github.com/frappe/erpnext.git --branch master - bench get-app schools $TRAVIS_BUILD_DIR - bench use test_site - bench reinstall diff --git a/schools/__version__.py b/schools/__version__.py index edeb193..3e28815 100644 --- a/schools/__version__.py +++ b/schools/__version__.py @@ -1,2 +1,2 @@ from __future__ import unicode_literals -__version__ = '0.1.0' +__version__ = '0.2.0' diff --git a/schools/academics/doctype/student_applicant/student_applicant.js b/schools/academics/doctype/student_applicant/student_applicant.js index b44fb31..eb740ab 100644 --- a/schools/academics/doctype/student_applicant/student_applicant.js +++ b/schools/academics/doctype/student_applicant/student_applicant.js @@ -1,5 +1,18 @@ frappe.ui.form.on("Student Applicant", { refresh: function(frm) { + if(frm.doc.application_status== "Applied" && frm.doc.docstatus== 1 ) { + frm.add_custom_button(__("Approve"), function() { + frm.set_value("application_status", "Approved"); + frm.save_or_update(); + + }).addClass("btn-primary"); + + frm.add_custom_button(__("Reject"), function() { + frm.set_value("application_status", "Rejected"); + frm.save_or_update(); + }).addClass("btn-danger"); + } + if(frm.doc.application_status== "Approved" && frm.doc.docstatus== 1 ) { frm.add_custom_button(__("Enroll"), function() { frm.events.enroll(frm) diff --git a/schools/academics/doctype/student_applicant/student_applicant.json b/schools/academics/doctype/student_applicant/student_applicant.json index fb842a2..6d9f98f 100644 --- a/schools/academics/doctype/student_applicant/student_applicant.json +++ b/schools/academics/doctype/student_applicant/student_applicant.json @@ -18,6 +18,7 @@ "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Application Details", @@ -35,20 +36,21 @@ "unique": 0 }, { - "allow_on_submit": 1, + "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "depends_on": "eval:doc.docstatus != 0", - "fieldname": "application_status", - "fieldtype": "Select", + "default": "Today", + "fieldname": "application_date", + "fieldtype": "Date", "hidden": 0, "ignore_user_permissions": 0, - "in_filter": 1, + "ignore_xss_filter": 0, + "in_filter": 0, "in_list_view": 0, - "label": "Application Status", + "label": "Application Date", "length": 0, - "no_copy": 1, - "options": "Applied\nApproved\nRejected\nAdmitted", + "no_copy": 0, + "options": "", "permlevel": 0, "precision": "", "print_hide": 0, @@ -68,6 +70,7 @@ "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -84,20 +87,21 @@ "unique": 0 }, { - "allow_on_submit": 0, + "allow_on_submit": 1, "bold": 0, "collapsible": 0, - "default": "Today", - "fieldname": "application_date", - "fieldtype": "Date", + "depends_on": "eval:doc.docstatus != 0", + "fieldname": "application_status", + "fieldtype": "Select", "hidden": 0, "ignore_user_permissions": 0, - "in_filter": 0, + "ignore_xss_filter": 0, + "in_filter": 1, "in_list_view": 0, - "label": "Application Date", + "label": "Application Status", "length": 0, - "no_copy": 0, - "options": "", + "no_copy": 1, + "options": "Applied\nApproved\nRejected\nAdmitted", "permlevel": 0, "precision": "", "print_hide": 0, @@ -117,6 +121,7 @@ "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -140,6 +145,7 @@ "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "First Name", @@ -164,6 +170,7 @@ "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Middle Name", @@ -188,6 +195,7 @@ "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Last Name", @@ -212,6 +220,7 @@ "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 1, "in_list_view": 1, "label": "Program", @@ -237,6 +246,7 @@ "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -260,6 +270,7 @@ "fieldtype": "Attach Image", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Image", @@ -285,6 +296,7 @@ "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Personal Details", @@ -309,6 +321,7 @@ "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Mother's Name", @@ -333,6 +346,7 @@ "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Father's Name", @@ -357,6 +371,7 @@ "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Contact", @@ -382,6 +397,7 @@ "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -405,6 +421,7 @@ "fieldtype": "Date", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Date of Birth", @@ -429,6 +446,7 @@ "fieldtype": "Select", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Gender", @@ -454,6 +472,7 @@ "fieldtype": "Select", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Blood Group", @@ -479,6 +498,7 @@ "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Nationality", @@ -503,6 +523,7 @@ "fieldtype": "Data", "hidden": 1, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Title", @@ -527,6 +548,7 @@ "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Amended From", @@ -554,7 +576,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-02-01 12:33:59.754667", + "modified": "2016-04-18 16:27:57.056896", "modified_by": "Administrator", "module": "Academics", "name": "Student Applicant", @@ -602,10 +624,11 @@ "write": 1 } ], + "quick_entry": 1, "read_only": 0, "read_only_onload": 0, "sort_field": "modified", "sort_order": "DESC", "title_field": "title", - "version": 0 + "track_seen": 0 } \ No newline at end of file diff --git a/schools/academics/doctype/student_group_creation_tool/student_group_creation_tool.json b/schools/academics/doctype/student_group_creation_tool/student_group_creation_tool.json index a9a0442..e9925c0 100644 --- a/schools/academics/doctype/student_group_creation_tool/student_group_creation_tool.json +++ b/schools/academics/doctype/student_group_creation_tool/student_group_creation_tool.json @@ -16,6 +16,7 @@ "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Academic Year", @@ -41,6 +42,7 @@ "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Academic Term", @@ -66,6 +68,7 @@ "fieldtype": "Button", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Get Courses", @@ -90,6 +93,7 @@ "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -114,6 +118,7 @@ "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Program", @@ -139,6 +144,7 @@ "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "length": 0, @@ -162,6 +168,7 @@ "fieldtype": "Table", "hidden": 0, "ignore_user_permissions": 0, + "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Courses", @@ -174,7 +181,7 @@ "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, - "reqd": 0, + "reqd": 1, "search_index": 0, "set_only_once": 0, "unique": 0 @@ -189,8 +196,8 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2016-01-04 16:59:45.423419", - "modified_by": "Administrator", + "modified": "2016-04-08 06:42:09.898260", + "modified_by": "demo@erpnext.com", "module": "Academics", "name": "Student Group Creation Tool", "name_case": "", @@ -240,5 +247,6 @@ "read_only": 0, "read_only_onload": 0, "sort_field": "modified", - "sort_order": "DESC" + "sort_order": "DESC", + "track_seen": 0 } \ No newline at end of file diff --git a/schools/academics/doctype/student_group_creation_tool/student_group_creation_tool.py b/schools/academics/doctype/student_group_creation_tool/student_group_creation_tool.py index a3e4a71..d1e2fab 100644 --- a/schools/academics/doctype/student_group_creation_tool/student_group_creation_tool.py +++ b/schools/academics/doctype/student_group_creation_tool/student_group_creation_tool.py @@ -27,10 +27,16 @@ def get_courses(self): return courses def create_student_groups(self): + if not self.courses: + frappe.throw(_("""No Student Groups created.""")) + for d in self.courses: - if not d.student_group_name: - frappe.throw(_("""Student Group Name is mandatory""")) + if not d.course: + frappe.throw(_("""Course is mandatory in row {0}""".format(d.idx))) + if not d.student_group_name: + frappe.throw(_("""Student Group Name is mandatory in row {0}""".format(d.idx))) + student_group = frappe.new_doc("Student Group") student_group.group_name = d.student_group_name student_group.course = d.course diff --git a/schools/hooks.py b/schools/hooks.py index ee2c6dd..4916fc2 100644 --- a/schools/hooks.py +++ b/schools/hooks.py @@ -8,7 +8,7 @@ app_icon = "octicon octicon-mortar-board" app_color = "blue" app_email = "hello@frappe.io" -app_version = "0.1.0" +app_version = "0.2.0" app_license = "GNU General Public License v3" # setup wizard diff --git a/schools/setup_wizard.py b/schools/setup_wizard.py index caeb752..aa15a15 100644 --- a/schools/setup_wizard.py +++ b/schools/setup_wizard.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import frappe -from frappe.desk.doctype.desktop_icon.desktop_icon import set_hidden_list +from frappe.desk.doctype.desktop_icon.desktop_icon import set_hidden def setup_complete(args=None): create_academic_term() @@ -12,7 +12,9 @@ def setup_complete(args=None): create_course(args) create_instructor(args) create_room(args) - block_modules() + if not frappe.flags.in_test: + block_modules() + disable_roles() def create_academic_term(): at = ["Semester 1", "Semester 2", "Semester 3"] @@ -56,11 +58,20 @@ def create_room(args): room.room_name = args.get("room_" + str(i)) room.seating_capacity = args.get("room_capacity_" + str(i)) room.save() - + def block_modules(): - modules= [ - "Accounts","Buying","CRM","Core", - "Desk","File Manager","HR","Learn","Manufacturing","POS","Projects", - "Selling","Stock","Support","Website" - ] - set_hidden_list(modules) + enabled_modules= ["Stock", "Website", "HR", "Learn"] + all_erpnext_modules = frappe.get_list("Desktop Icon", fields=["module_name"], filters={'app': 'erpnext'}) + for module in all_erpnext_modules: + if module.module_name not in enabled_modules: + set_hidden(module.module_name) + +def disable_roles(): + enabled_roles_list = [ + "Guest", "Administrator", "System Manager", "All", "Academics User", + "HR User", "HR Manager"] + for role in frappe.get_list("Role"): + if not role.name in enabled_roles_list: + role_doc = frappe.get_doc("Role", role) + role_doc.disabled = 1 + role_doc.save() diff --git a/setup.py b/setup.py index ce58b52..d271bf4 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages from pip.req import parse_requirements -version = '0.1.0' +version = '0.2.0' requirements = parse_requirements("requirements.txt", session="") setup(