46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
import frappe
|
|
|
|
|
|
@frappe.whitelist()
|
|
def get_children(parent=None, company=None, exclude_node=None):
|
|
filters = [["status", "!=", "Left"]]
|
|
if company and company != "All Companies":
|
|
filters.append(["company", "=", company])
|
|
|
|
if parent and company and parent != company:
|
|
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",
|
|
)
|
|
|
|
for employee in employees:
|
|
is_expandable = frappe.db.count("Employee", filters={"reports_to": employee.get("id")})
|
|
employee.connections = get_connections(employee.id)
|
|
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=[["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)
|
|
|
|
return num_connections
|