Não pode escolher mais do que 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.
 
 
 
 
 
 

97 linhas
2.7 KiB

  1. # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
  2. # MIT License. See license.txt
  3. from __future__ import unicode_literals
  4. import frappe, json
  5. import frappe.desk.form.meta
  6. import frappe.desk.form.load
  7. from frappe import _
  8. from six import string_types
  9. @frappe.whitelist()
  10. def remove_attach():
  11. """remove attachment"""
  12. import frappe.utils.file_manager
  13. fid = frappe.form_dict.get('fid')
  14. return frappe.utils.file_manager.remove_file(fid)
  15. @frappe.whitelist()
  16. def validate_link():
  17. """validate link when updated by user"""
  18. import frappe
  19. import frappe.utils
  20. value, options, fetch = frappe.form_dict.get('value'), frappe.form_dict.get('options'), frappe.form_dict.get('fetch')
  21. # no options, don't validate
  22. if not options or options=='null' or options=='undefined':
  23. frappe.response['message'] = 'Ok'
  24. return
  25. valid_value = frappe.db.sql("select name from `tab%s` where name=%s" % (frappe.db.escape(options),
  26. '%s'), (value,))
  27. if valid_value:
  28. valid_value = valid_value[0][0]
  29. # get fetch values
  30. if fetch:
  31. # escape with "`"
  32. fetch = ", ".join(("`{0}`".format(frappe.db.escape(f.strip())) for f in fetch.split(",")))
  33. frappe.response['fetch_values'] = [frappe.utils.parse_val(c) \
  34. for c in frappe.db.sql("select %s from `tab%s` where name=%s" \
  35. % (fetch, frappe.db.escape(options), '%s'), (value,))[0]]
  36. frappe.response['valid_value'] = valid_value
  37. frappe.response['message'] = 'Ok'
  38. @frappe.whitelist()
  39. def add_comment(doc):
  40. """allow any logged user to post a comment"""
  41. doc = frappe.get_doc(json.loads(doc))
  42. if not (doc.doctype=="Communication" and doc.communication_type=='Comment'):
  43. frappe.throw(_("This method can only be used to create a Comment"), frappe.PermissionError)
  44. doc.insert(ignore_permissions=True)
  45. return doc.as_dict()
  46. @frappe.whitelist()
  47. def get_next(doctype, value, prev, filters=None, order_by="modified desc"):
  48. prev = not int(prev)
  49. sort_field, sort_order = order_by.split(" ")
  50. if not filters: filters = []
  51. if isinstance(filters, string_types):
  52. filters = json.loads(filters)
  53. # condition based on sort order
  54. condition = ">" if sort_order.lower()=="desc" else "<"
  55. # switch the condition
  56. if prev:
  57. condition = "<" if condition==">" else "<"
  58. else:
  59. sort_order = "asc" if sort_order.lower()=="desc" else "desc"
  60. # add condition for next or prev item
  61. if not order_by[0] in [f[1] for f in filters]:
  62. filters.append([doctype, sort_field, condition, value])
  63. res = frappe.get_list(doctype,
  64. fields = ["name"],
  65. filters = filters,
  66. order_by = sort_field + " " + sort_order,
  67. limit_start=0, limit_page_length=1, as_list=True)
  68. if not res:
  69. frappe.msgprint(_("No further records"))
  70. return None
  71. else:
  72. return res[0][0]