Merge remote-tracking branch 'frappe/develop' into dev_hra

This commit is contained in:
Ranjith
2018-05-30 13:37:47 +05:30
13 changed files with 39 additions and 19 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

View File

@@ -2,13 +2,13 @@
The Student Attendance tool allow you to bulk update the attendance for students based on **Student Group and Course Schedule**. 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 **1. Batch
2. Course 2. Course
3. Activity ** 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.
<img class="screenshot" alt="Student Attendance" src="{{docs_base_url}}/assets/img/education/setup/student-attendance-tool.gif"> <img class="screenshot" alt="Student Attendance" src="{{docs_base_url}}/assets/img/education/setup/student-attendance-tool.gif">

View File

@@ -1,7 +1,7 @@
<!-- add-breadcrumbs --> <!-- add-breadcrumbs -->
# ERPNext for Education # 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!** 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.
<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

View File

@@ -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

View File

@@ -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

View File

@@ -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}

View File

@@ -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}

View File

@@ -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:

View File

@@ -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

View File

@@ -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")

View File

@@ -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')))