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