From d38d9ac98e80ec37855fc9d7f83b47872db931c8 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 11 Nov 2020 17:44:14 +0530 Subject: [PATCH] fix(patch): patch existing roles with desk_settings --- frappe/boot.py | 3 +-- .../v13_set_default_desk_properties.py | 9 +++++++ frappe/core/doctype/role/role.json | 18 ++++++------- frappe/core/doctype/role/role.py | 27 +++++++++++++++---- frappe/patches.txt | 1 + 5 files changed, 42 insertions(+), 16 deletions(-) create mode 100644 frappe/core/doctype/role/patches/v13_set_default_desk_properties.py diff --git a/frappe/boot.py b/frappe/boot.py index bb1cff40f9..ea3f52282d 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -315,8 +315,7 @@ def get_desk_settings(): )) desk_settings = {} - desk_properties = ("search_bar", "notification", "chat", "list_sidebar", - "bulk_actions", "view_switcher", "form_sidebar", "timeline", "dashboard") + from frappe.core.doctype.role.role import desk_properties for role in role_list: for key in desk_properties: diff --git a/frappe/core/doctype/role/patches/v13_set_default_desk_properties.py b/frappe/core/doctype/role/patches/v13_set_default_desk_properties.py new file mode 100644 index 0000000000..a09d679bcc --- /dev/null +++ b/frappe/core/doctype/role/patches/v13_set_default_desk_properties.py @@ -0,0 +1,9 @@ +import frappe +from ..role import desk_properties + +def execute(): + for role in frappe.get_all('Role', ['name', 'desk_access']): + role_doc = frappe.get_doc('Role', role.name) + for key in desk_properties: + role_doc.set(key, role_doc.desk_access) + role_doc.save() \ No newline at end of file diff --git a/frappe/core/doctype/role/role.json b/frappe/core/doctype/role/role.json index 92f8edd12c..1e2366c041 100644 --- a/frappe/core/doctype/role/role.json +++ b/frappe/core/doctype/role/role.json @@ -79,13 +79,13 @@ "label": "Navigation Settings" }, { - "default": "0", + "default": "1", "fieldname": "search_bar", "fieldtype": "Check", "label": "Search Bar" }, { - "default": "0", + "default": "1", "fieldname": "notification", "fieldtype": "Check", "label": "Notification" @@ -102,13 +102,13 @@ "label": "List Settings" }, { - "default": "0", + "default": "1", "fieldname": "list_sidebar", "fieldtype": "Check", "label": "Sidebar" }, { - "default": "0", + "default": "1", "fieldname": "bulk_actions", "fieldtype": "Check", "label": "Bulk Actions" @@ -119,25 +119,25 @@ "label": "Form Settings" }, { - "default": "0", + "default": "1", "fieldname": "form_sidebar", "fieldtype": "Check", "label": "Sidebar" }, { - "default": "0", + "default": "1", "fieldname": "timeline", "fieldtype": "Check", "label": "Timeline" }, { - "default": "0", + "default": "1", "fieldname": "dashboard", "fieldtype": "Check", "label": "Dashboard" }, { - "default": "0", + "default": "1", "fieldname": "view_switcher", "fieldtype": "Check", "label": "View Switcher" @@ -147,7 +147,7 @@ "idx": 1, "index_web_pages_for_search": 1, "links": [], - "modified": "2020-11-05 01:25:10.536546", + "modified": "2020-11-11 17:29:13.149522", "modified_by": "Administrator", "module": "Core", "name": "Role", diff --git a/frappe/core/doctype/role/role.py b/frappe/core/doctype/role/role.py index e458b401e4..fb3683380a 100644 --- a/frappe/core/doctype/role/role.py +++ b/frappe/core/doctype/role/role.py @@ -6,6 +6,9 @@ import frappe from frappe.model.document import Document +desk_properties = ("search_bar", "notification", "chat", "list_sidebar", + "bulk_actions", "view_switcher", "form_sidebar", "timeline", "dashboard") + class Role(Document): def before_rename(self, old, new, merge=False): if old in ("Guest", "Administrator", "System Manager", "All"): @@ -16,11 +19,25 @@ class Role(Document): def validate(self): if self.disabled: - if self.name in ("Guest", "Administrator", "System Manager", "All"): - frappe.throw(frappe._("Standard roles cannot be disabled")) - else: - frappe.db.sql("delete from `tabHas Role` where role = %s", self.name) - frappe.clear_cache() + self.disable_role() + else: + self.set_desk_properties() + + def disable_role(self): + if self.name in ("Guest", "Administrator", "System Manager", "All"): + frappe.throw(frappe._("Standard roles cannot be disabled")) + else: + self.remove_roles() + + def set_desk_properties(self): + # set if desk_access is not allowed, unset all desk properties + if not self.desk_access: + for key in desk_properties: + self.set(key, 0) + + def remove_roles(self): + frappe.db.sql("delete from `tabHas Role` where role = %s", self.name) + frappe.clear_cache() def on_update(self): '''update system user desk access if this has changed in this update''' diff --git a/frappe/patches.txt b/frappe/patches.txt index 7d53f5a89d..6f50fa192f 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -318,3 +318,4 @@ frappe.patches.v13_0.web_template_set_module #2020-10-05 frappe.patches.v13_0.remove_custom_link execute:frappe.delete_doc("DocType", "Footer Item") frappe.patches.v13_0.replace_field_target_with_open_in_new_tab +frappe.core.doctype.role.patches.v13_set_default_desk_properties