37 lines
		
	
	
		
			1015 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1015 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
 | |
| # MIT License. See license.txt
 | |
| 
 | |
| 
 | |
| import frappe
 | |
| from frappe import _
 | |
| 
 | |
| 
 | |
| @frappe.whitelist()
 | |
| def get_all_nodes(method, company):
 | |
| 	"""Recursively gets all data from nodes"""
 | |
| 	method = frappe.get_attr(method)
 | |
| 
 | |
| 	if method not in frappe.whitelisted:
 | |
| 		frappe.throw(_("Not Permitted"), frappe.PermissionError)
 | |
| 
 | |
| 	root_nodes = method(company=company)
 | |
| 	result = []
 | |
| 	nodes_to_expand = []
 | |
| 
 | |
| 	for root in root_nodes:
 | |
| 		data = method(root.id, company)
 | |
| 		result.append(dict(parent=root.id, parent_name=root.name, data=data))
 | |
| 		nodes_to_expand.extend(
 | |
| 			[{"id": d.get("id"), "name": d.get("name")} for d in data if d.get("expandable")]
 | |
| 		)
 | |
| 
 | |
| 	while nodes_to_expand:
 | |
| 		parent = nodes_to_expand.pop(0)
 | |
| 		data = method(parent.get("id"), company)
 | |
| 		result.append(dict(parent=parent.get("id"), parent_name=parent.get("name"), data=data))
 | |
| 		for d in data:
 | |
| 			if d.get("expandable"):
 | |
| 				nodes_to_expand.append({"id": d.get("id"), "name": d.get("name")})
 | |
| 
 | |
| 	return result
 |