diff --git a/erpnext/docs/assets/img/setup/workflow-6.png b/erpnext/docs/assets/img/setup/workflow-6.png new file mode 100644 index 00000000000..a13d17c75e7 Binary files /dev/null and b/erpnext/docs/assets/img/setup/workflow-6.png differ diff --git a/erpnext/docs/assets/img/setup/workflow-actions-email.png b/erpnext/docs/assets/img/setup/workflow-actions-email.png new file mode 100644 index 00000000000..0fe3bca3a02 Binary files /dev/null and b/erpnext/docs/assets/img/setup/workflow-actions-email.png differ diff --git a/erpnext/docs/assets/img/setup/workflow-actions-list.png b/erpnext/docs/assets/img/setup/workflow-actions-list.png new file mode 100644 index 00000000000..cb8ccc27c7f Binary files /dev/null and b/erpnext/docs/assets/img/setup/workflow-actions-list.png differ diff --git a/erpnext/docs/user/manual/en/education/Attendance/student-attendance-tool.md b/erpnext/docs/user/manual/en/education/Attendance/student-attendance-tool.md index 9d3d82a1fac..04250729480 100644 --- a/erpnext/docs/user/manual/en/education/Attendance/student-attendance-tool.md +++ b/erpnext/docs/user/manual/en/education/Attendance/student-attendance-tool.md @@ -2,13 +2,13 @@ The Student Attendance tool allow you to bulk update the attendance for students based on **Student Group and Course Schedule**. -To mark the **Attedance* based on Student Group select the group based on +To mark the **Attedance* based on Student Group select the group based on **1. Batch 2. Course 3. Activity ** -Student detials will be autofetched and you can mark the attendance of the given date. +Student detials will be autofetched and you can mark the attendance of the given date. Student Attendance diff --git a/erpnext/docs/user/manual/en/education/index.md b/erpnext/docs/user/manual/en/education/index.md index ff505f00d56..4f96b796660 100644 --- a/erpnext/docs/user/manual/en/education/index.md +++ b/erpnext/docs/user/manual/en/education/index.md @@ -1,7 +1,7 @@ # ERPNext for Education -The Education domain in ERPNext is designed to meet requirements of any organization which imparts knowledge and believe in doing it in an organized fashion. It has already been used at the schools, colleges and even at the private firms. +The Education domain in ERPNext is designed to meet requirements of any organization which imparts knowledge and believe in doing it in an organized fashion. It has already been used at the schools, colleges and even at the private firms. It helps you effectively manage administrative side and allows you to focus on what is most important for your institute, **to educate!** @@ -32,7 +32,7 @@ The very first implementation of ERPNext was driven by a school teacher herself. -
+
### User Manual diff --git a/erpnext/docs/user/manual/en/healthcare/index.md b/erpnext/docs/user/manual/en/healthcare/index.md index 62e537d27b7..7755158382e 100755 --- a/erpnext/docs/user/manual/en/healthcare/index.md +++ b/erpnext/docs/user/manual/en/healthcare/index.md @@ -19,7 +19,7 @@ The healthcare domain of ERPNext is a first domain to be competely contributed b -
+
### User Manual diff --git a/erpnext/docs/user/manual/en/non_profit/index.md b/erpnext/docs/user/manual/en/non_profit/index.md index 819cf79c777..db1fbe4f901 100644 --- a/erpnext/docs/user/manual/en/non_profit/index.md +++ b/erpnext/docs/user/manual/en/non_profit/index.md @@ -21,7 +21,7 @@ Check the following video to educate yourself on each feature in the non-profit -
+
### User Manual diff --git a/erpnext/docs/user/manual/en/setting-up/setting-up-taxes.md b/erpnext/docs/user/manual/en/setting-up/setting-up-taxes.md index 2886c0573a8..cf688c7bf52 100644 --- a/erpnext/docs/user/manual/en/setting-up/setting-up-taxes.md +++ b/erpnext/docs/user/manual/en/setting-up/setting-up-taxes.md @@ -102,7 +102,7 @@ add value to the item) or for both.
-
+
{next} diff --git a/erpnext/docs/user/manual/en/setting-up/workflows.md b/erpnext/docs/user/manual/en/setting-up/workflows.md index 5d037d29267..058f537e235 100644 --- a/erpnext/docs/user/manual/en/setting-up/workflows.md +++ b/erpnext/docs/user/manual/en/setting-up/workflows.md @@ -42,6 +42,14 @@ submit button / option if you have not specified it in the workflow. > Note 4: If you wish to give the option to cancel, you will have to write a workflow transition step that says from submitted you can cancel. + +#### Enable/Disable Self approval + +> New in Version 11 + +Workflow + + #### Conditions > New in Version 11 @@ -71,6 +79,22 @@ When the Leave Approver opens the Leave Application page, he can finally "Approv Workflow +#### Workflow Actions + +> New in Version 11 + +Workflow Actions is a single place to manage all the pending actions you can take on Workflows. + +If a User is eligible to take action on some workflows, emails will be sent to the user, with the relevant document as attachment, from where the user can `Approve` or `Reject` the Workflow. +Workflow + +Also the users will see entries in their Workflow Action list. +Workflow + +**Note:** You can set email template for Workflow Actions on each state. +The template might consist message for users to proceed with the next Workflow Actions + + ### Video Tutorial:
@@ -81,3 +105,4 @@ When the Leave Approver opens the Leave Application page, he can finally "Approv
{next} + diff --git a/erpnext/hr/doctype/department/department.py b/erpnext/hr/doctype/department/department.py index 063ed052a3a..09cd6d3964a 100644 --- a/erpnext/hr/doctype/department/department.py +++ b/erpnext/hr/doctype/department/department.py @@ -3,7 +3,6 @@ from __future__ import unicode_literals import frappe -from frappe import _ from frappe.utils.nestedset import NestedSet, get_root_of from erpnext.utilities.transaction_base import delete_events from frappe.model.document import Document @@ -12,7 +11,8 @@ class Department(NestedSet): nsm_parent_field = 'parent_department' def autoname(self): - if self.department_name != get_root_of("Department"): + root = get_root_of("Department") + if root and self.department_name != root: abbr = frappe.db.get_value('Company', self.company, 'abbr') self.name = '{0} - {1}'.format(self.department_name, abbr) else: diff --git a/erpnext/hr/doctype/payroll_entry/payroll_entry.py b/erpnext/hr/doctype/payroll_entry/payroll_entry.py index aa27e5b48f0..e70a5bdd3f2 100644 --- a/erpnext/hr/doctype/payroll_entry/payroll_entry.py +++ b/erpnext/hr/doctype/payroll_entry/payroll_entry.py @@ -184,7 +184,7 @@ class PayrollEntry(Document): Get loan details from submitted salary slip based on selected criteria """ cond = self.get_filter_condition() - return frappe.db.sql(""" select eld.loan_account, eld.loan + return frappe.db.sql(""" select eld.loan_account, eld.loan, eld.interest_income_account, eld.principal_amount, eld.interest_amount, eld.total_payment from `tabSalary Slip` t1, `tabSalary Slip Loan` eld diff --git a/erpnext/patches/v11_0/rename_supplier_type_to_supplier_group.py b/erpnext/patches/v11_0/rename_supplier_type_to_supplier_group.py index e9c81bf4eee..1735c1224e1 100644 --- a/erpnext/patches/v11_0/rename_supplier_type_to_supplier_group.py +++ b/erpnext/patches/v11_0/rename_supplier_type_to_supplier_group.py @@ -25,13 +25,11 @@ def build_tree(): where is_group = 0""".format(_('All Supplier Groups'))) if not frappe.db.exists("Supplier Group", _('All Supplier Groups')): - supplier_group = frappe.get_doc({ + frappe.get_doc({ 'doctype': 'Supplier Group', 'supplier_group_name': _('All Supplier Groups'), 'is_group': 1, 'parent_supplier_group': '' - }) - supplier_group.flags.ignore_validate=True - supplier_group.insert(ignore_permissions=True) + }).insert(ignore_permissions=True) rebuild_tree("Supplier Group", "parent_supplier_group") diff --git a/erpnext/patches/v11_0/update_department_lft_rgt.py b/erpnext/patches/v11_0/update_department_lft_rgt.py index 533055a5d75..0cb9aeca4f0 100644 --- a/erpnext/patches/v11_0/update_department_lft_rgt.py +++ b/erpnext/patches/v11_0/update_department_lft_rgt.py @@ -5,15 +5,12 @@ from frappe.utils.nestedset import rebuild_tree def execute(): """ assign lft and rgt appropriately """ frappe.reload_doc("hr", "doctype", "department") - if not frappe.db.exists("Department", _('All Departments')): - dept = frappe.get_doc({ + frappe.get_doc({ 'doctype': 'Department', 'department_name': _('All Departments'), 'is_group': 1 - }) - dept.flags.ignore_validate=True - dept.insert(ignore_permissions=True) + }).insert(ignore_permissions=True) frappe.db.sql("""update `tabDepartment` set parent_department = '{0}' where is_group = 0""".format(_('All Departments')))