brotherton-erpnext/erpnext/hr/page/organizational_chart/organizational_chart.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

49 lines
1.3 KiB
Python
Raw Normal View History

2021-06-20 07:12:06 +00:00
import frappe
2021-06-20 07:12:06 +00:00
@frappe.whitelist()
def get_children(parent=None, company=None, exclude_node=None):
2021-06-20 07:12:06 +00:00
filters = [['status', '!=', 'Left']]
if company and company != 'All Companies':
filters.append(['company', '=', company])
if parent and company and parent != company:
2021-06-20 07:12:06 +00:00
filters.append(['reports_to', '=', parent])
else:
filters.append(['reports_to', '=', ''])
if exclude_node:
filters.append(['name', '!=', exclude_node])
employees = frappe.get_list('Employee',
fields=['employee_name as name', 'name as id', 'reports_to', 'image', 'designation as title'],
filters=filters,
order_by='name'
)
2021-06-20 07:12:06 +00:00
for employee in employees:
is_expandable = frappe.db.count('Employee', filters={'reports_to': employee.get('id')})
employee.connections = get_connections(employee.id)
2021-06-20 07:12:06 +00:00
employee.expandable = 1 if is_expandable else 0
return employees
def get_connections(employee):
num_connections = 0
nodes_to_expand = frappe.get_list('Employee', filters=[
2021-06-20 07:12:06 +00:00
['reports_to', '=', employee]
])
num_connections += len(nodes_to_expand)
while nodes_to_expand:
parent = nodes_to_expand.pop(0)
descendants = frappe.get_list('Employee', filters=[
['reports_to', '=', parent.name]
])
num_connections += len(descendants)
nodes_to_expand.extend(descendants)
2021-06-20 07:12:06 +00:00
return num_connections