From d9d231feb8f455b4f59280dd40da50d0eb2b3353 Mon Sep 17 00:00:00 2001 From: sokumon Date: Mon, 8 Dec 2025 12:27:59 +0530 Subject: [PATCH] refactor: move logic to a seperate patch --- frappe/boot.py | 25 ++++---- .../workspace_sidebar/workspace_sidebar.py | 60 ------------------ frappe/patches.txt | 1 + .../auto_generate_sidebar_from_modules.py | 61 +++++++++++++++++++ 4 files changed, 73 insertions(+), 74 deletions(-) create mode 100644 frappe/patches/v16_0/auto_generate_sidebar_from_modules.py diff --git a/frappe/boot.py b/frappe/boot.py index 9bb2bb9a8e..2af5107988 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -527,20 +527,7 @@ def get_sentry_dsn(): return os.getenv("FRAPPE_SENTRY_DSN") -def add_user_specific_sidebar(sidebars): - try: - my_workspace_for_user = frappe.get_doc("Workspace Sidebar", f"My Workspaces-{frappe.session.user}") - sidebars.append( - {"name": my_workspace_for_user.name, "header_icon": my_workspace_for_user.header_icon} - ) - except frappe.DoesNotExistError: - my_workspace = frappe.get_doc("Workspace Sidebar", "My Workspaces") - sidebars.append({"name": my_workspace.name, "header_icon": my_workspace.header_icon}) - - def get_sidebar_items(): - from frappe.desk.doctype.workspace_sidebar.workspace_sidebar import create_sidebars_for_modules - sidebars = frappe.get_all( "Workspace Sidebar", fields=["name", "header_icon"], filters={"name": ["not like", "%My Workspaces%"]} ) @@ -548,7 +535,6 @@ def get_sidebar_items(): sidebar_items = {} for s in sidebars: - print(s) w = frappe.get_doc("Workspace Sidebar", s.get("name")) sidebar_items[s["name"].lower()] = { "label": s.get("name"), @@ -593,3 +579,14 @@ def get_sidebar_items(): if old_name in sidebar_items.keys(): sidebar_items["my workspaces"] = sidebar_items.pop(old_name) return sidebar_items + + +def add_user_specific_sidebar(sidebars): + try: + my_workspace_for_user = frappe.get_doc("Workspace Sidebar", f"My Workspaces-{frappe.session.user}") + sidebars.append( + {"name": my_workspace_for_user.name, "header_icon": my_workspace_for_user.header_icon} + ) + except frappe.DoesNotExistError: + my_workspace = frappe.get_doc("Workspace Sidebar", "My Workspaces") + sidebars.append({"name": my_workspace.name, "header_icon": my_workspace.header_icon}) diff --git a/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py b/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py index 83782de556..444673c7b2 100644 --- a/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py +++ b/frappe/desk/doctype/workspace_sidebar/workspace_sidebar.py @@ -240,63 +240,3 @@ def add_to_my_workspace(workspace): except Exception as e: frappe.log_error(title="Error in Adding Private Workspaces", message=e) - - -def create_sidebars_for_modules(): - sidebars = [] - for module in frappe.get_all("Module Def", pluck="name"): - if not ( - frappe.db.exists("Workspace Sidebar", {"module": module}) - or frappe.db.exists("Workspace Sidebar", {"name": module}) - ): - print("Fetching information for Module", module) - module_info = get_module_info(module) - sidebar_items = create_sidebar_items(module_info) - sidebar = frappe.new_doc("Workspace Sidebar") - sidebar.title = module - sidebar.items = sidebar_items - sidebar.header_icon = "hammer" - sidebars.append(sidebar) - sidebar.save() - return sidebars - - -def get_module_info(module_name): - entities = ["Workspace", "Dashboard", "DocType", "Report", "Page"] - module_info = {} - - for entity in entities: - module_info[entity] = {} - filters = [{"module": module_name}] - if entity.lower() == "doctype": - filters.append({"istable": 0}) - module_info[entity] = frappe.get_all(entity, filters=filters, pluck="name") - - return module_info - - -def create_sidebar_items(module_info): - print(module_info) - sidebar_items = [] - for entity, items in module_info.items(): - if entity.lower() == "report": - section_break = frappe.new_doc("Workspace Sidebar Item") - section_break.update( - { - "type": "Section Break", - } - ) - sidebar_items.append(section_break) - for item in items: - item_info = {"label": item, "type": "Link", "link_type": entity, "link_to": item} - if entity.lower() == "workspace": - item_info["icon"] = "home" - - if entity.lower() == "doctype" and "settings" in item.lower(): - item_info["icon"] = "settings" - - sidebar_item = frappe.new_doc("Workspace Sidebar Item") - sidebar_item.update(item_info) - sidebar_items.append(sidebar_item) - - return sidebar_items diff --git a/frappe/patches.txt b/frappe/patches.txt index 5b076fab59..93ff293ccb 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -252,3 +252,4 @@ frappe.patches.v16_0.auto_generate_desktop_icon_and_sidebar frappe.patches.v16_0.add_private_workspaces_to_sidebar frappe.core.doctype.communication_link.patches.copy_communication_date_to_link frappe.core.doctype.communication.patches.drop_ref_dt_dn_index +frappe.patches.v16_0.auto_generate_sidebar_from_modules diff --git a/frappe/patches/v16_0/auto_generate_sidebar_from_modules.py b/frappe/patches/v16_0/auto_generate_sidebar_from_modules.py new file mode 100644 index 0000000000..008c7a1b6b --- /dev/null +++ b/frappe/patches/v16_0/auto_generate_sidebar_from_modules.py @@ -0,0 +1,61 @@ +import frappe + + +def execute(): + """Auto generate sidebar from module""" + sidebars = [] + for module in frappe.get_all("Module Def", pluck="name"): + if not ( + frappe.db.exists("Workspace Sidebar", {"module": module}) + or frappe.db.exists("Workspace Sidebar", {"name": module}) + ): + print("Fetching information for Module", module) + module_info = get_module_info(module) + sidebar_items = create_sidebar_items(module_info) + sidebar = frappe.new_doc("Workspace Sidebar") + sidebar.title = module + sidebar.items = sidebar_items + sidebar.header_icon = "hammer" + sidebars.append(sidebar) + sidebar.save() + return sidebars + + +def get_module_info(module_name): + entities = ["Workspace", "Dashboard", "DocType", "Report", "Page"] + module_info = {} + + for entity in entities: + module_info[entity] = {} + filters = [{"module": module_name}] + if entity.lower() == "doctype": + filters.append({"istable": 0}) + module_info[entity] = frappe.get_all(entity, filters=filters, pluck="name") + + return module_info + + +def create_sidebar_items(module_info): + sidebar_items = [] + for entity, items in module_info.items(): + if entity.lower() == "report": + section_break = frappe.new_doc("Workspace Sidebar Item") + section_break.update( + { + "type": "Section Break", + } + ) + sidebar_items.append(section_break) + for item in items: + item_info = {"label": item, "type": "Link", "link_type": entity, "link_to": item} + if entity.lower() == "workspace": + item_info["icon"] = "home" + + if entity.lower() == "doctype" and "settings" in item.lower(): + item_info["icon"] = "settings" + + sidebar_item = frappe.new_doc("Workspace Sidebar Item") + sidebar_item.update(item_info) + sidebar_items.append(sidebar_item) + + return sidebar_items