Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 
 
 

82 rindas
2.0 KiB

  1. # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
  2. # License: MIT. See LICENSE
  3. import frappe
  4. from frappe import _
  5. @frappe.whitelist()
  6. def get_all_nodes(doctype, label, parent, tree_method, **filters):
  7. '''Recursively gets all data from tree nodes'''
  8. if 'cmd' in filters:
  9. del filters['cmd']
  10. filters.pop('data', None)
  11. tree_method = frappe.get_attr(tree_method)
  12. if not tree_method in frappe.whitelisted:
  13. frappe.throw(_("Not Permitted"), frappe.PermissionError)
  14. data = tree_method(doctype, parent, **filters)
  15. out = [dict(parent=label, data=data)]
  16. if 'is_root' in filters:
  17. del filters['is_root']
  18. to_check = [d.get('value') for d in data if d.get('expandable')]
  19. while to_check:
  20. parent = to_check.pop()
  21. data = tree_method(doctype, parent, is_root=False, **filters)
  22. out.append(dict(parent=parent, data=data))
  23. for d in data:
  24. if d.get('expandable'):
  25. to_check.append(d.get('value'))
  26. return out
  27. @frappe.whitelist()
  28. def get_children(doctype, parent='', **filters):
  29. return _get_children(doctype, parent)
  30. def _get_children(doctype, parent='', ignore_permissions=False):
  31. parent_field = 'parent_' + doctype.lower().replace(' ', '_')
  32. filters = [["ifnull(`{0}`,'')".format(parent_field), '=', parent],
  33. ['docstatus', '<' ,2]]
  34. meta = frappe.get_meta(doctype)
  35. return frappe.get_list(
  36. doctype,
  37. fields=[
  38. 'name as value',
  39. '{0} as title'.format(meta.get('title_field') or 'name'),
  40. 'is_group as expandable'
  41. ],
  42. filters=filters,
  43. order_by='name',
  44. ignore_permissions=ignore_permissions
  45. )
  46. @frappe.whitelist()
  47. def add_node():
  48. args = make_tree_args(**frappe.form_dict)
  49. doc = frappe.get_doc(args)
  50. doc.save()
  51. def make_tree_args(**kwarg):
  52. kwarg.pop('cmd', None)
  53. doctype = kwarg['doctype']
  54. parent_field = 'parent_' + doctype.lower().replace(' ', '_')
  55. if kwarg['is_root'] == 'false': kwarg['is_root'] = False
  56. if kwarg['is_root'] == 'true': kwarg['is_root'] = True
  57. kwarg.update({
  58. parent_field: kwarg.get("parent") or kwarg.get(parent_field)
  59. })
  60. return frappe._dict(kwarg)