Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

37 linhas
1015 B

  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