diff --git a/frappe/patches/v16_0/switch_default_sort_order.py b/frappe/patches/v16_0/switch_default_sort_order.py index 46dd39b64e..a374fbcec0 100644 --- a/frappe/patches/v16_0/switch_default_sort_order.py +++ b/frappe/patches/v16_0/switch_default_sort_order.py @@ -1,6 +1,9 @@ +import json + import click import frappe +from frappe.model.utils.user_settings import sync_user_settings from frappe.patches.v14_0.drop_unused_indexes import drop_index_if_exists @@ -26,3 +29,34 @@ def execute(): # TODO: We might have to re-run this in future after all doctypes have migrated if frappe.db.get_value("DocType", doctype, "sort_field") != "modified": drop_index_if_exists(table, "modified") + + update_sort_order_in_user_settings() + + +def update_sort_order_in_user_settings(): + frappe.db.auto_commit_on_many_writes = True + sync_user_settings() + + user_settings = frappe.db.sql("select user, doctype, data from `__UserSettings`", as_dict=1) + + for setting in user_settings: + doctype = setting.get("doctype") + doctype_sort_order = frappe.db.get_value("DocType", doctype, "sort_field") or "creation" + data = setting.data + if not data or not doctype: + continue + + data = json.loads(data) + for view in ["List", "Gantt", "Kanban", "Calendar", "Image", "Inbox", "Report"]: + view_settings = data.get(view) + if ( + view_settings + and (current_sort_by := view_settings.get("sort_by")) + and current_sort_by == "modified" + and doctype_sort_order != "modified" + ): + view_settings["sort_by"] = "creation" + frappe.db.sql( + "update __UserSettings set data=%s where doctype=%s and user=%s", + (json.dumps(data), setting.doctype, setting.user), + )