From 930cd7d78edfdade784c29bf6090740d780ddc4f Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 23 Dec 2015 16:33:57 +0530 Subject: [PATCH] [fix] Get defaults based on doctype or fieldname --- frappe/database.py | 13 ++++++------- frappe/defaults.py | 12 +++++++++--- frappe/desk/form/load.py | 9 ++++++--- frappe/model/create_new.py | 2 +- frappe/public/js/frappe/defaults.js | 15 ++++++++++++--- frappe/public/js/frappe/model/create_new.js | 6 +++--- 6 files changed, 37 insertions(+), 20 deletions(-) diff --git a/frappe/database.py b/frappe/database.py index 89016c62b6..b4afdf0eea 100644 --- a/frappe/database.py +++ b/frappe/database.py @@ -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) diff --git a/frappe/defaults.py b/frappe/defaults.py index c9ff961a7f..bde41cd92f 100644 --- a/frappe/defaults.py +++ b/frappe/defaults.py @@ -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) diff --git a/frappe/desk/form/load.py b/frappe/desk/form/load.py index 2dd1c2d1a5..12860fa6a4 100644 --- a/frappe/desk/form/load.py +++ b/frappe/desk/form/load.py @@ -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): diff --git a/frappe/model/create_new.py b/frappe/model/create_new.py index bba158f180..f68578aff9 100644 --- a/frappe/model/create_new.py +++ b/frappe/model/create_new.py @@ -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, []))) diff --git a/frappe/public/js/frappe/defaults.js b/frappe/public/js/frappe/defaults.js index 5e65ff058c..01f9f165b9 100644 --- a/frappe/public/js/frappe/defaults.js +++ b/frappe/public/js/frappe/defaults.js @@ -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) diff --git a/frappe/public/js/frappe/model/create_new.js b/frappe/public/js/frappe/model/create_new.js index 277bbdff32..3a2798dadc 100644 --- a/frappe/public/js/frappe/model/create_new.js +++ b/frappe/public/js/frappe/model/create_new.js @@ -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