From d83ee38d2ca29467e5304107aaf6005e427feb5b Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Tue, 1 Dec 2020 14:00:04 +0530 Subject: [PATCH] feat: add patch to rebuild links --- frappe/patches.txt | 1 + frappe/patches/v13_0/cleanup_desk_cards.py | 51 ++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 frappe/patches/v13_0/cleanup_desk_cards.py diff --git a/frappe/patches.txt b/frappe/patches.txt index 49d330343e..be3eb7bfff 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -317,3 +317,4 @@ 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 +frappe.patches.v13_0.cleanup_desk_cards #sd \ No newline at end of file diff --git a/frappe/patches/v13_0/cleanup_desk_cards.py b/frappe/patches/v13_0/cleanup_desk_cards.py new file mode 100644 index 0000000000..3a52f22890 --- /dev/null +++ b/frappe/patches/v13_0/cleanup_desk_cards.py @@ -0,0 +1,51 @@ +import frappe +from six import string_types +from json import loads +from frappe.desk.doctype.desk_page.desk_page import get_link_type, get_report_type + +def execute(): + if not frappe.db.exists("Doctype", "Desk Card"): + return + + frappe.reload_doc('desk', 'doctype', 'desk_page') + + pages = frappe.get_all("Desk Page", filters={"is_standard": 0}, pluck="name") + + for page in pages: + rebuild_links(page) + + frappe.delete_doc("DocType", "Desk Card") + +def rebuild_links(page): + # Empty links table + + doc = frappe.get_doc("Desk Page", page) + doc.links = [] + for card in get_all_cards(page): + if isinstance(card.links, string_types): + links = loads(card.links) + else: + links = card.links + + doc.append('links', { + "label": card.label, + "type": "Card Break", + "icon": card.icon, + "hidden": card.hidden or False + }) + + for link in links: + doc.append('links', { + "label": link.get('label') or link.get('name'), + "type": "Link", + "link_type": get_link_type(link.get('type')), + "link_to": link.get('name'), + "onboard": link.get('onboard'), + "dependencies": ', '.join(link.get('dependencies', [])), + "is_query_report": get_report_type(link.get('name')) if link.get('type').lower() == "report" else 0 + }) + + doc.save(ignore_permissions=True) + +def get_all_cards(page): + return frappe.db.get_all("Desk Card", filters={"parent": page}, fields=['*'], order_by="idx") \ No newline at end of file