25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

57 lines
1.5 KiB

  1. from __future__ import unicode_literals
  2. """
  3. Create a new document with defaults set
  4. """
  5. import webnotes
  6. from webnotes.utils import nowdate, nowtime, cint, flt
  7. import webnotes.defaults
  8. def get_new_doc(doctype, parent_doc = None, parentfield = None):
  9. doc = webnotes.doc({
  10. "doctype": doctype,
  11. "__islocal": 1
  12. })
  13. meta = webnotes.get_doctype(doctype)
  14. if parent_doc:
  15. doc.parent = parent_doc.name
  16. doc.parenttype = parent_doc.doctype
  17. if parentfield:
  18. doc.parentfield = parentfield
  19. for d in meta.get({"doctype":"DocField", "parent": doctype}):
  20. default = webnotes.defaults.get_user_default(d.fieldname)
  21. if default:
  22. doc.fields[d.fieldname] = default
  23. elif d.fields.get("default"):
  24. if d.default == "__user":
  25. doc.fields[d.fieldname] = webnotes.session.user
  26. elif d.default == "Today":
  27. doc.fields[d.fieldname] = nowdate()
  28. elif d.default.startswith(":"):
  29. ref_fieldname = d.default[1:].lower().replace(" ", "_")
  30. if parent_doc:
  31. ref_docname = parent_doc.fields[ref_fieldname]
  32. else:
  33. ref_docname = webnotes.conn.get_default(ref_fieldname)
  34. doc.fields[d.fieldname] = webnotes.conn.get_value(d.default[1:],
  35. ref_docname, d.fieldname)
  36. else:
  37. doc.fields[d.fieldname] = d.default
  38. # convert type of default
  39. if d.fieldtype in ("Int", "Check"):
  40. doc.fields[d.fieldname] = cint(doc.fields[d.fieldname])
  41. elif d.fieldtype in ("Float", "Currency"):
  42. doc.fields[d.fieldname] = flt(doc.fields[d.fieldname])
  43. elif d.fieldtype == "Time":
  44. doc.fields[d.fieldname] = nowtime()
  45. return doc