seitime-frappe/frappe/model/create_new.py
2014-06-04 17:52:17 +05:30

69 lines
2 KiB
Python

# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# MIT License. See license.txt
from __future__ import unicode_literals
"""
Create a new document with defaults set
"""
import frappe
from frappe.utils import nowdate, nowtime, cint, flt
import frappe.defaults
def get_new_doc(doctype, parent_doc = None, parentfield = None):
doc = frappe.get_doc({
"doctype": doctype,
"__islocal": 1,
"owner": frappe.session.user,
"docstatus": 0
})
user_permissions = frappe.defaults.get_user_permissions()
if parent_doc:
doc.parent = parent_doc.name
doc.parenttype = parent_doc.doctype
if parentfield:
doc.parentfield = parentfield
defaults = frappe.defaults.get_defaults()
for d in doc.meta.get("fields"):
default = defaults.get(d.fieldname)
if (d.fieldtype=="Link") and d.ignore_user_permissions != 1 and (d.options in user_permissions)\
and len(user_permissions[d.options])==1:
doc.set(d.fieldname, user_permissions[d.options][0])
elif default:
doc.set(d.fieldname, default)
elif d.get("default"):
if d.default == "__user":
doc.set(d.fieldname, frappe.session.user)
elif d.default == "Today":
doc.set(d.fieldname, nowdate())
elif d.default.startswith(":"):
ref_doctype = d.default[1:]
ref_fieldname = ref_doctype.lower().replace(" ", "_")
if parent_doc:
ref_docname = parent_doc.get(ref_fieldname)
else:
ref_docname = frappe.db.get_default(ref_fieldname)
doc.set(d.fieldname, frappe.db.get_value(ref_doctype, ref_docname, d.fieldname))
else:
doc.set(d.fieldname, d.default)
# convert type of default
if d.fieldtype in ("Int", "Check"):
doc.set(d.fieldname, cint(doc.get(d.fieldname)))
elif d.fieldtype in ("Float", "Currency"):
doc.set(d.fieldname, flt(doc.get(d.fieldname)))
elif d.fieldtype == "Time":
doc.set(d.fieldname, nowtime())
elif (d.fieldtype == "Select" and d.options and d.options != "[Select]"):
doc.set(d.fieldname, d.options.split("\n")[0])
return doc