Merge pull request #1472 from nabinhait/defaults

[fix] Get defaults based on doctype or fieldname
This commit is contained in:
Rushabh Mehta 2015-12-24 10:45:23 +05:30
commit b47d49311a
6 changed files with 37 additions and 20 deletions

View file

@ -650,18 +650,17 @@ class Database:
def get_default(self, key, parent="__default"):
"""Returns default value as a list if multiple or single"""
d = frappe.defaults.get_defaults(parent).get(key)
d = self.get_defaults(key, parent)
return isinstance(d, list) and d[0] or d
def get_defaults_as_list(self, key, parent="__default"):
"""Returns default values as a list."""
d = frappe.defaults.get_default(key, parent)
return isinstance(d, basestring) and [d] or d
def get_defaults(self, key=None, parent="__default"):
"""Get all defaults"""
if key:
return frappe.defaults.get_defaults(parent).get(key)
defaults = frappe.defaults.get_defaults(parent)
d = defaults.get(key, None)
if(not d and key != frappe.scrub(key)):
d = defaults.get(frappe.scrub(key), None)
return d
else:
return frappe.defaults.get_defaults(parent)

View file

@ -17,11 +17,17 @@ def add_user_default(key, value, user=None, parenttype=None):
add_default(key, value, user or frappe.session.user, parenttype)
def get_user_default(key, user=None):
d = get_defaults(user or frappe.session.user).get(key, None)
user_defaults = get_defaults(user or frappe.session.user)
d = user_defaults.get(key, None)
if(not d and key != frappe.scrub(key)):
d = user_defaults.get(frappe.scrub(key), None)
return isinstance(d, list) and d[0] or d
def get_user_default_as_list(key, user=None):
d = get_defaults(user or frappe.session.user).get(key, None)
user_defaults = get_defaults(user or frappe.session.user)
d = user_defaults.get(key, None)
if(not d and key != frappe.scrub(key)):
d = user_defaults.get(frappe.scrub(key), None)
return (not isinstance(d, list)) and [d] or d
def get_user_permissions(user=None):
@ -149,7 +155,7 @@ def get_defaults_for(parent="__default"):
"""get all defaults"""
defaults = frappe.cache().hget("defaults", parent)
if defaults==None:
# sort descending because first default must get preceedence
# sort descending because first default must get precedence
res = frappe.db.sql("""select defkey, defvalue from `tabDefaultValue`
where parent = %s order by creation""", (parent,), as_dict=1)

View file

@ -62,7 +62,7 @@ def getdoctype(doctype, with_parent=False, cached_timestamp=None):
if not docs:
docs = get_meta_bundle(doctype)
frappe.response['user_permissions'] = get_user_permissions(docs[0])
frappe.response['user_permissions'] = get_user_permissions(docs)
if cached_timestamp and docs[0].modified==cached_timestamp:
return "use_cache"
@ -95,8 +95,11 @@ def get_docinfo(doc=None, doctype=None, name=None):
def get_user_permissions(meta):
out = {}
all_user_permissions = frappe.defaults.get_user_permissions()
for df in meta.get_fields_to_check_permissions(all_user_permissions):
out[df.options] = list(set(all_user_permissions[df.options]))
for m in meta:
for df in m.get_fields_to_check_permissions(all_user_permissions):
out[df.options] = list(set(all_user_permissions[df.options]))
return out
def get_attachments(dt, dn):

View file

@ -73,7 +73,7 @@ def get_user_default_value(df, defaults, user_permissions):
return user_permissions[df.options][0]
# 2 - Look in user defaults
user_default = defaults.get(df.fieldname)
user_default = defaults.get(df.options)
is_allowed_user_default = user_default and (not user_permissions_exist(df, user_permissions)
or (user_default in user_permissions.get(df.options, [])))

View file

@ -3,12 +3,18 @@
frappe.defaults = {
get_user_default: function(key) {
var d = frappe.boot.user.defaults[key];
var defaults = frappe.boot.user.defaults;
var d = defaults[key];
if(!d && (key !== frappe.model.scrub(key)))
d = defaults[frappe.model.scrub(key)];
if($.isArray(d)) d = d[0];
return d;
},
get_user_defaults: function(key) {
var d = frappe.boot.user.defaults[key];
var defaults = frappe.boot.user.defaults;
var d = defaults[key];
if(!d && (key !== frappe.model.scrub(key)))
d = defaults[frappe.model.scrub(key)];
if(!$.isArray(d)) d = [d];
return d;
},
@ -37,7 +43,10 @@ frappe.defaults = {
});
},
get_default: function(key) {
var value = frappe.boot.user.defaults[key];
var defaults = frappe.boot.user.defaults;
var value = defaults[key];
if(!value && (key !== frappe.model.scrub(key)))
value = defaults[frappe.model.scrub(key)];
if(value) {
try {
return JSON.parse(value)

View file

@ -95,13 +95,13 @@ $.extend(frappe.model, {
}
// 2 - look in user defaults
var user_default = frappe.defaults.get_user_default(df.fieldname);
var user_default = frappe.defaults.get_user_default(df.options);
var is_allowed_user_default = user_default &&
(!has_user_permissions || user_permissions[df.options].indexOf(user_default)!==-1);
// is this user default also allowed as per user permissions?
if (is_allowed_user_default) {
return frappe.defaults.get_user_default(df.fieldname);
return user_default;
}
}
@ -125,7 +125,7 @@ $.extend(frappe.model, {
var is_allowed_boot_doc = !has_user_permissions || user_permissions[df.options].indexOf(boot_doc)!==-1;
if (is_allowed_boot_doc) {
return frappe.model.get_default_from_boot_docs(df, doc, parent_doc);
return boot_doc;
}
} else if (df.fieldname===meta.title_field) {
// ignore defaults for title field