Rucha Mahabal | 6f799d17 | 2021-07-21 23:19:47 +0530 | [diff] [blame] | 1 | # Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors |
| 2 | # MIT License. See license.txt |
| 3 | |
| 4 | from __future__ import unicode_literals |
| 5 | import frappe |
| 6 | from frappe import _ |
| 7 | |
| 8 | @frappe.whitelist() |
| 9 | def get_all_nodes(parent, parent_name, method, company): |
| 10 | '''Recursively gets all data from nodes''' |
| 11 | method = frappe.get_attr(method) |
| 12 | |
Rucha Mahabal | 78f50a9 | 2021-07-25 20:28:01 +0530 | [diff] [blame] | 13 | if method not in frappe.whitelisted: |
Rucha Mahabal | 6f799d17 | 2021-07-21 23:19:47 +0530 | [diff] [blame] | 14 | frappe.throw(_('Not Permitted'), frappe.PermissionError) |
| 15 | |
| 16 | data = method(parent, company) |
| 17 | result = [dict(parent=parent, parent_name=parent_name, data=data)] |
| 18 | |
| 19 | nodes_to_expand = [{'id': d.get('id'), 'name': d.get('name')} for d in data if d.get('expandable')] |
| 20 | |
| 21 | while nodes_to_expand: |
| 22 | parent = nodes_to_expand.pop(0) |
| 23 | data = method(parent.get('id'), company) |
| 24 | result.append(dict(parent=parent.get('id'), parent_name=parent.get('name'), data=data)) |
| 25 | for d in data: |
| 26 | if d.get('expandable'): |
| 27 | nodes_to_expand.append({'id': d.get('id'), 'name': d.get('name')}) |
| 28 | |
| 29 | return result |