|
@@ -18,17 +18,17 @@ def get_users_and_links(): |
|
|
def get_properties(parent=None, defkey=None, defvalue=None): |
|
|
def get_properties(parent=None, defkey=None, defvalue=None): |
|
|
if defkey and not frappe.permissions.can_restrict(defkey, defvalue): |
|
|
if defkey and not frappe.permissions.can_restrict(defkey, defvalue): |
|
|
raise frappe.PermissionError |
|
|
raise frappe.PermissionError |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
conditions, values = _build_conditions(locals()) |
|
|
conditions, values = _build_conditions(locals()) |
|
|
|
|
|
|
|
|
properties = frappe.db.sql("""select name, parent, defkey, defvalue |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
properties = frappe.db.sql("""select name, parent, defkey, defvalue |
|
|
from tabDefaultValue |
|
|
from tabDefaultValue |
|
|
where parent not in ('__default', '__global') |
|
|
where parent not in ('__default', '__global') |
|
|
and substr(defkey,1,1)!='_' |
|
|
and substr(defkey,1,1)!='_' |
|
|
and parenttype='Restriction' |
|
|
and parenttype='Restriction' |
|
|
{conditions} |
|
|
{conditions} |
|
|
order by parent, defkey""".format(conditions=conditions), values, as_dict=True) |
|
|
order by parent, defkey""".format(conditions=conditions), values, as_dict=True) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not defkey: |
|
|
if not defkey: |
|
|
out = [] |
|
|
out = [] |
|
|
doctypes = get_restrictable_doctypes() |
|
|
doctypes = get_restrictable_doctypes() |
|
@@ -36,9 +36,9 @@ def get_properties(parent=None, defkey=None, defvalue=None): |
|
|
if p.defkey in doctypes: |
|
|
if p.defkey in doctypes: |
|
|
out.append(p) |
|
|
out.append(p) |
|
|
properties = out |
|
|
properties = out |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return properties |
|
|
return properties |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _build_conditions(filters): |
|
|
def _build_conditions(filters): |
|
|
conditions = [] |
|
|
conditions = [] |
|
|
values = {} |
|
|
values = {} |
|
@@ -46,7 +46,7 @@ def _build_conditions(filters): |
|
|
if filters.get(key): |
|
|
if filters.get(key): |
|
|
conditions.append("and `{key}`=%({key})s".format(key=key)) |
|
|
conditions.append("and `{key}`=%({key})s".format(key=key)) |
|
|
values[key] = value |
|
|
values[key] = value |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return "\n".join(conditions), values |
|
|
return "\n".join(conditions), values |
|
|
|
|
|
|
|
|
@frappe.whitelist() |
|
|
@frappe.whitelist() |
|
@@ -54,35 +54,35 @@ def remove(user, name, defkey, defvalue): |
|
|
if not frappe.permissions.can_restrict_user(user, defkey, defvalue): |
|
|
if not frappe.permissions.can_restrict_user(user, defkey, defvalue): |
|
|
raise frappe.PermissionError("Cannot Remove Restriction for User: {user} on DocType: {doctype} and Name: {name}".format( |
|
|
raise frappe.PermissionError("Cannot Remove Restriction for User: {user} on DocType: {doctype} and Name: {name}".format( |
|
|
user=user, doctype=defkey, name=defvalue)) |
|
|
user=user, doctype=defkey, name=defvalue)) |
|
|
|
|
|
|
|
|
frappe.defaults.clear_default(name=name) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frappe.defaults.clear_default(key=defkey, value=defvalue, parent=user, name=name) |
|
|
|
|
|
|
|
|
def clear_restrictions(doctype): |
|
|
def clear_restrictions(doctype): |
|
|
frappe.defaults.clear_default(parenttype="Restriction", key=doctype) |
|
|
frappe.defaults.clear_default(parenttype="Restriction", key=doctype) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@frappe.whitelist() |
|
|
@frappe.whitelist() |
|
|
def add(user, defkey, defvalue): |
|
|
def add(user, defkey, defvalue): |
|
|
if not frappe.permissions.can_restrict_user(user, defkey, defvalue): |
|
|
if not frappe.permissions.can_restrict_user(user, defkey, defvalue): |
|
|
raise frappe.PermissionError("Cannot Restrict User: {user} for DocType: {doctype} and Name: {name}".format( |
|
|
raise frappe.PermissionError("Cannot Restrict User: {user} for DocType: {doctype} and Name: {name}".format( |
|
|
user=user, doctype=defkey, name=defvalue)) |
|
|
user=user, doctype=defkey, name=defvalue)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# check if already exists |
|
|
# check if already exists |
|
|
d = frappe.db.sql("""select name from tabDefaultValue |
|
|
|
|
|
|
|
|
d = frappe.db.sql("""select name from tabDefaultValue |
|
|
where parent=%s and parenttype='Restriction' and defkey=%s and defvalue=%s""", (user, defkey, defvalue)) |
|
|
where parent=%s and parenttype='Restriction' and defkey=%s and defvalue=%s""", (user, defkey, defvalue)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not d: |
|
|
if not d: |
|
|
frappe.defaults.add_default(defkey, defvalue, user, "Restriction") |
|
|
frappe.defaults.add_default(defkey, defvalue, user, "Restriction") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_restrictable_doctypes(): |
|
|
def get_restrictable_doctypes(): |
|
|
user_roles = frappe.get_roles() |
|
|
user_roles = frappe.get_roles() |
|
|
condition = "" |
|
|
condition = "" |
|
|
values = [] |
|
|
values = [] |
|
|
if "System Manager" not in user_roles: |
|
|
if "System Manager" not in user_roles: |
|
|
condition = """and exists(select `tabDocPerm`.name from `tabDocPerm` |
|
|
|
|
|
|
|
|
condition = """and exists(select `tabDocPerm`.name from `tabDocPerm` |
|
|
where `tabDocPerm`.parent=`tabDocType`.name and `tabDocPerm`.`restrict`=1 |
|
|
where `tabDocPerm`.parent=`tabDocType`.name and `tabDocPerm`.`restrict`=1 |
|
|
and `tabDocPerm`.role in ({roles}))""".format(roles=", ".join(["%s"]*len(user_roles))) |
|
|
and `tabDocPerm`.role in ({roles}))""".format(roles=", ".join(["%s"]*len(user_roles))) |
|
|
values = user_roles |
|
|
values = user_roles |
|
|
|
|
|
|
|
|
return frappe.db.sql_list("""select name from tabDocType |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return frappe.db.sql_list("""select name from tabDocType |
|
|
where ifnull(issingle,0)=0 and ifnull(istable,0)=0 {condition}""".format(condition=condition), |
|
|
where ifnull(issingle,0)=0 and ifnull(istable,0)=0 {condition}""".format(condition=condition), |
|
|
tuple(values)) |
|
|
tuple(values)) |