diff --git a/frappe/desk/doctype/route_history/route_history.py b/frappe/desk/doctype/route_history/route_history.py index f0aa867c8a..bb10fb08f2 100644 --- a/frappe/desk/doctype/route_history/route_history.py +++ b/frappe/desk/doctype/route_history/route_history.py @@ -1,11 +1,11 @@ -# Copyright (c) 2021, Frappe Technologies and contributors +# Copyright (c) 2022, Frappe Technologies and contributors # License: MIT. See LICENSE -import json - import frappe from frappe.deferred_insert import deferred_insert as _deferred_insert from frappe.model.document import Document +from frappe.query_builder.utils import DocType +from frappe.query_builder.functions import Count class RouteHistory(Document): @@ -14,31 +14,31 @@ class RouteHistory(Document): def flush_old_route_records(): """Deletes all route records except last 500 records per user""" - records_to_keep_limit = 500 - users = frappe.db.sql(''' - SELECT `user` - FROM `tabRoute History` - GROUP BY `user` - HAVING count(`name`) > %(limit)s - ''', { - "limit": records_to_keep_limit - }) + RouteHistory = DocType("Route History") + + users = ( + frappe.qb.from_(RouteHistory) + .select(RouteHistory.user) + .groupby(RouteHistory.user) + .having(Count(RouteHistory.name) > records_to_keep_limit) + ).run(pluck=True) for user in users: - user = user[0] - last_record_to_keep = frappe.db.get_all('Route History', - filters={'user': user}, - limit=1, + last_record_to_keep = frappe.get_all( + "Route History", + filters={"user": user}, limit_start=500, - fields=['modified'], - order_by='modified desc' + fields=["modified"], + order_by="modified desc", + limit=1, + ) + + frappe.db.delete( + "Route History", + {"modified": ("<=", last_record_to_keep[0].modified), "user": user}, ) - frappe.db.delete("Route History", { - "modified": ("<=", last_record_to_keep[0].modified), - "user": user - }) @frappe.whitelist() def deferred_insert(routes): @@ -51,10 +51,16 @@ def deferred_insert(routes): for route in frappe.parse_json(routes) ] - _deferred_insert("Route History", json.dumps(routes)) + _deferred_insert("Route History", routes) + @frappe.whitelist() def frequently_visited_links(): - return frappe.get_all('Route History', fields=['route', 'count(name) as count'], filters={ - 'user': frappe.session.user - }, group_by="route", order_by="count desc", limit=5) + return frappe.get_all( + "Route History", + fields=["route", "count(name) as count"], + filters={"user": frappe.session.user}, + group_by="route", + order_by="count desc", + limit=5, + )