Merge pull request #20375 from deepeshgarg007/user_defaults

This commit is contained in:
Suraj Shetty 2023-04-10 14:34:29 +05:30 committed by GitHub
commit 822fd4e37e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 89 additions and 4 deletions

View file

@ -25,9 +25,12 @@ def get_user_default(key, user=None):
if d and isinstance(d, (list, tuple)) and len(d) == 1:
# Use User Permission value when only when it has a single value
d = d[0]
else:
d = user_defaults.get(frappe.scrub(key), None)
user_permission_default = get_user_permission_default(key, user_defaults)
if not d:
# If no default value is found, use the User Permission value
d = user_permission_default
value = isinstance(d, (list, tuple)) and d[0] or d
if not_in_user_permission(key, value, user):
@ -36,6 +39,24 @@ def get_user_default(key, user=None):
return value
def get_user_permission_default(key, defaults):
permissions = get_user_permissions()
user_default = ""
if permissions.get(key):
# global default in user permission
for item in permissions.get(key):
doc = item.get("doc")
if defaults.get(key) == doc:
user_default = doc
for item in permissions.get(key):
if item.get("is_default"):
user_default = item.get("doc")
break
return user_default
def get_user_default_as_list(key, user=None):
user_defaults = get_defaults(user or frappe.session.user)
d = user_defaults.get(key, None)

View file

@ -3,10 +3,14 @@
frappe.defaults = {
get_user_default: function (key) {
var defaults = frappe.boot.user.defaults;
var d = defaults[key];
if (!d && frappe.defaults.is_a_user_permission_key(key))
let defaults = frappe.boot.user.defaults;
let d = defaults[key];
if (!d && frappe.defaults.is_a_user_permission_key(key)) {
d = defaults[frappe.model.scrub(key)];
// Check for default user permission values
user_default = this.get_user_permission_default(key, defaults);
if (user_default) d = user_default;
}
if ($.isArray(d)) d = d[0];
if (!frappe.defaults.in_user_permission(key, d)) {
@ -15,6 +19,27 @@ frappe.defaults = {
return d;
},
get_user_permission_default: function (key, defaults) {
let permissions = this.get_user_permissions();
let user_default = null;
if (permissions[key]) {
permissions[key].forEach((item) => {
if (defaults[key] == item.doc) {
user_default = item.doc;
}
});
permissions[key].forEach((item) => {
if (item.is_default) {
user_default = item.doc;
}
});
}
return user_default;
},
get_user_defaults: function (key) {
var defaults = frappe.boot.user.defaults;
var d = defaults[key];

View file

@ -1,7 +1,10 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: MIT. See LICENSE
import frappe
from frappe.core.doctype.user_permission.test_user_permission import create_user
from frappe.defaults import *
from frappe.query_builder.utils import db_type_is
from frappe.tests.test_query_builder import run_only_if
from frappe.tests.utils import FrappeTestCase
@ -71,3 +74,39 @@ class TestDefaults(FrappeTestCase):
frappe.delete_doc("User Permission", perm_doc.name)
frappe.set_user(old_user)
@run_only_if(db_type_is.MARIADB)
def test_user_permission_defaults(self):
# Create user permission
create_user("user_default_test@example.com", "Blogger")
frappe.set_user("user_default_test@example.com")
set_global_default("Country", "")
clear_user_default("Country")
perm_doc = frappe.get_doc(
dict(
doctype="User Permission",
user=frappe.session.user,
allow="Country",
for_value="India",
)
).insert(ignore_permissions=True)
frappe.db.set_value("User Permission", perm_doc.name, "is_default", 1)
set_global_default("Country", "United States")
self.assertEqual(get_user_default("Country"), "India")
frappe.db.set_value("User Permission", perm_doc.name, "is_default", 0)
clear_user_default("Country")
self.assertEqual(get_user_default("Country"), None)
perm_doc = frappe.get_doc(
dict(
doctype="User Permission",
user=frappe.session.user,
allow="Country",
for_value="United States",
)
).insert(ignore_permissions=True)
self.assertEqual(get_user_default("Country"), "United States")