Merge remote-tracking branch 'frappe/develop' into dev_hra
This commit is contained in:
commit
806cd93791
BIN
erpnext/docs/assets/img/setup/workflow-6.png
Normal file
BIN
erpnext/docs/assets/img/setup/workflow-6.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 174 KiB |
BIN
erpnext/docs/assets/img/setup/workflow-actions-email.png
Normal file
BIN
erpnext/docs/assets/img/setup/workflow-actions-email.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 132 KiB |
BIN
erpnext/docs/assets/img/setup/workflow-actions-list.png
Normal file
BIN
erpnext/docs/assets/img/setup/workflow-actions-list.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 124 KiB |
@ -32,7 +32,7 @@ The very first implementation of ERPNext was driven by a school teacher herself.
|
|||||||
<iframe src='https://www.youtube.com/embed/t8ZDDq4qtIk?end=52' frameborder='0' allowfullscreen>
|
<iframe src='https://www.youtube.com/embed/t8ZDDq4qtIk?end=52' frameborder='0' allowfullscreen>
|
||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
</div>
|
||||||
|
|
||||||
### User Manual
|
### User Manual
|
||||||
|
|
||||||
|
|||||||
@ -19,7 +19,7 @@ The healthcare domain of ERPNext is a first domain to be competely contributed b
|
|||||||
<iframe src='https://www.youtube.com/embed/1n4_YqX8ArA' frameborder='0' allowfullscreen>
|
<iframe src='https://www.youtube.com/embed/1n4_YqX8ArA' frameborder='0' allowfullscreen>
|
||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
</div>
|
||||||
|
|
||||||
### User Manual
|
### User Manual
|
||||||
|
|
||||||
|
|||||||
@ -21,7 +21,7 @@ Check the following video to educate yourself on each feature in the non-profit
|
|||||||
<iframe src='https://www.youtube.com/embed/p3l0Kq-TU5Y' frameborder='0' allowfullscreen>
|
<iframe src='https://www.youtube.com/embed/p3l0Kq-TU5Y' frameborder='0' allowfullscreen>
|
||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
</div>
|
||||||
|
|
||||||
### User Manual
|
### User Manual
|
||||||
|
|
||||||
|
|||||||
@ -102,7 +102,7 @@ add value to the item) or for both.
|
|||||||
<div class="embed-container">
|
<div class="embed-container">
|
||||||
<iframe src="https://www.youtube.com/embed/a8Eh4zLIrkU?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen>
|
<iframe src="https://www.youtube.com/embed/a8Eh4zLIrkU?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen>
|
||||||
</iframe>
|
</iframe>
|
||||||
<div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{next}
|
{next}
|
||||||
|
|||||||
@ -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
|
> 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.
|
workflow transition step that says from submitted you can cancel.
|
||||||
|
|
||||||
|
|
||||||
|
#### Enable/Disable Self approval
|
||||||
|
|
||||||
|
> New in Version 11
|
||||||
|
|
||||||
|
<img class="screenshot" alt="Workflow" src="{{docs_base_url}}/assets/img/setup/workflow-6.png">
|
||||||
|
|
||||||
|
|
||||||
#### Conditions
|
#### Conditions
|
||||||
|
|
||||||
> New in Version 11
|
> New in Version 11
|
||||||
@ -71,6 +79,22 @@ When the Leave Approver opens the Leave Application page, he can finally "Approv
|
|||||||
|
|
||||||
<img class="screenshot" alt="Workflow" src="{{docs_base_url}}/assets/img/setup/workflow-5.png">
|
<img class="screenshot" alt="Workflow" src="{{docs_base_url}}/assets/img/setup/workflow-5.png">
|
||||||
|
|
||||||
|
#### 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.
|
||||||
|
<img class="screenshot" alt="Workflow" src="{{docs_base_url}}/assets/img/setup/workflow-actions-email.png">
|
||||||
|
|
||||||
|
Also the users will see entries in their Workflow Action list.
|
||||||
|
<img class="screenshot" alt="Workflow" src="{{docs_base_url}}/assets/img/setup/workflow-actions-list.png">
|
||||||
|
|
||||||
|
**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:
|
### Video Tutorial:
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
@ -81,3 +105,4 @@ When the Leave Approver opens the Leave Application page, he can finally "Approv
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{next}
|
{next}
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import frappe
|
import frappe
|
||||||
from frappe import _
|
|
||||||
from frappe.utils.nestedset import NestedSet, get_root_of
|
from frappe.utils.nestedset import NestedSet, get_root_of
|
||||||
from erpnext.utilities.transaction_base import delete_events
|
from erpnext.utilities.transaction_base import delete_events
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
@ -12,7 +11,8 @@ class Department(NestedSet):
|
|||||||
nsm_parent_field = 'parent_department'
|
nsm_parent_field = 'parent_department'
|
||||||
|
|
||||||
def autoname(self):
|
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')
|
abbr = frappe.db.get_value('Company', self.company, 'abbr')
|
||||||
self.name = '{0} - {1}'.format(self.department_name, abbr)
|
self.name = '{0} - {1}'.format(self.department_name, abbr)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@ -184,7 +184,7 @@ class PayrollEntry(Document):
|
|||||||
Get loan details from submitted salary slip based on selected criteria
|
Get loan details from submitted salary slip based on selected criteria
|
||||||
"""
|
"""
|
||||||
cond = self.get_filter_condition()
|
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
|
eld.interest_income_account, eld.principal_amount, eld.interest_amount, eld.total_payment
|
||||||
from
|
from
|
||||||
`tabSalary Slip` t1, `tabSalary Slip Loan` eld
|
`tabSalary Slip` t1, `tabSalary Slip Loan` eld
|
||||||
|
|||||||
@ -25,13 +25,11 @@ def build_tree():
|
|||||||
where is_group = 0""".format(_('All Supplier Groups')))
|
where is_group = 0""".format(_('All Supplier Groups')))
|
||||||
|
|
||||||
if not frappe.db.exists("Supplier Group", _('All Supplier Groups')):
|
if not frappe.db.exists("Supplier Group", _('All Supplier Groups')):
|
||||||
supplier_group = frappe.get_doc({
|
frappe.get_doc({
|
||||||
'doctype': 'Supplier Group',
|
'doctype': 'Supplier Group',
|
||||||
'supplier_group_name': _('All Supplier Groups'),
|
'supplier_group_name': _('All Supplier Groups'),
|
||||||
'is_group': 1,
|
'is_group': 1,
|
||||||
'parent_supplier_group': ''
|
'parent_supplier_group': ''
|
||||||
})
|
}).insert(ignore_permissions=True)
|
||||||
supplier_group.flags.ignore_validate=True
|
|
||||||
supplier_group.insert(ignore_permissions=True)
|
|
||||||
|
|
||||||
rebuild_tree("Supplier Group", "parent_supplier_group")
|
rebuild_tree("Supplier Group", "parent_supplier_group")
|
||||||
|
|||||||
@ -5,15 +5,12 @@ from frappe.utils.nestedset import rebuild_tree
|
|||||||
def execute():
|
def execute():
|
||||||
""" assign lft and rgt appropriately """
|
""" assign lft and rgt appropriately """
|
||||||
frappe.reload_doc("hr", "doctype", "department")
|
frappe.reload_doc("hr", "doctype", "department")
|
||||||
|
|
||||||
if not frappe.db.exists("Department", _('All Departments')):
|
if not frappe.db.exists("Department", _('All Departments')):
|
||||||
dept = frappe.get_doc({
|
frappe.get_doc({
|
||||||
'doctype': 'Department',
|
'doctype': 'Department',
|
||||||
'department_name': _('All Departments'),
|
'department_name': _('All Departments'),
|
||||||
'is_group': 1
|
'is_group': 1
|
||||||
})
|
}).insert(ignore_permissions=True)
|
||||||
dept.flags.ignore_validate=True
|
|
||||||
dept.insert(ignore_permissions=True)
|
|
||||||
|
|
||||||
frappe.db.sql("""update `tabDepartment` set parent_department = '{0}'
|
frappe.db.sql("""update `tabDepartment` set parent_department = '{0}'
|
||||||
where is_group = 0""".format(_('All Departments')))
|
where is_group = 0""".format(_('All Departments')))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user