You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

hierarchy_chart.py 1015 B

2 years ago
123456789101112131415161718192021222324252627282930313233343536
  1. # Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
  2. # MIT License. See license.txt
  3. import frappe
  4. from frappe import _
  5. @frappe.whitelist()
  6. def get_all_nodes(method, company):
  7. """Recursively gets all data from nodes"""
  8. method = frappe.get_attr(method)
  9. if method not in frappe.whitelisted:
  10. frappe.throw(_("Not Permitted"), frappe.PermissionError)
  11. root_nodes = method(company=company)
  12. result = []
  13. nodes_to_expand = []
  14. for root in root_nodes:
  15. data = method(root.id, company)
  16. result.append(dict(parent=root.id, parent_name=root.name, data=data))
  17. nodes_to_expand.extend(
  18. [{"id": d.get("id"), "name": d.get("name")} for d in data if d.get("expandable")]
  19. )
  20. while nodes_to_expand:
  21. parent = nodes_to_expand.pop(0)
  22. data = method(parent.get("id"), company)
  23. result.append(dict(parent=parent.get("id"), parent_name=parent.get("name"), data=data))
  24. for d in data:
  25. if d.get("expandable"):
  26. nodes_to_expand.append({"id": d.get("id"), "name": d.get("name")})
  27. return result