From 9a46b3374fb42980eb34474e6e018bd6e36d6fcc Mon Sep 17 00:00:00 2001 From: Loic Oberle Date: Sat, 23 May 2026 08:03:23 +0200 Subject: [PATCH] refactor(sales_order):Replace SQL with query builder in get_events (#55208) --- .../doctype/sales_order/sales_order.py | 53 +++++++++++-------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index ae9f57bee2d..b0cb1e5b8ac 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -1655,32 +1655,39 @@ def get_events(start: str, end: str, filters: str | dict | None = None): :param end: End date-time. :param filters: Filters (JSON). """ - from frappe.desk.calendar import get_event_conditions - conditions = get_event_conditions("Sales Order", filters) + SalesOrder = frappe.qb.DocType("Sales Order") + SalesOrderItem = frappe.qb.DocType("Sales Order Item") - data = frappe.db.sql( - f""" - select - distinct `tabSales Order`.name, `tabSales Order`.customer_name, `tabSales Order`.status, - `tabSales Order`.delivery_status, `tabSales Order`.billing_status, - `tabSales Order Item`.delivery_date - from - `tabSales Order`, `tabSales Order Item` - where `tabSales Order`.name = `tabSales Order Item`.parent - and `tabSales Order`.skip_delivery_note = 0 - and (ifnull(`tabSales Order Item`.delivery_date, '0000-00-00')!= '0000-00-00') \ - and (`tabSales Order Item`.delivery_date between %(start)s and %(end)s) - and `tabSales Order`.docstatus < 2 - {conditions} - """, - {"start": start, "end": end}, - as_dict=True, - update={ - "allDay": 0, - "convertToUserTz": 0, - }, + query = ( + frappe.get_query("Sales Order", filters=filters, ignore_permissions=False) + .join(SalesOrderItem) + .on(SalesOrder.name == SalesOrderItem.parent) + .select( + SalesOrder.name, + SalesOrder.customer_name, + SalesOrder.status, + SalesOrder.delivery_status, + SalesOrder.billing_status, + SalesOrderItem.delivery_date, + ) + .distinct() + .where(SalesOrder.skip_delivery_note == 0) + .where(SalesOrder.docstatus < 2) + .where(SalesOrderItem.delivery_date.between(start, end)) + .where(SalesOrderItem.delivery_date.isnotnull()) ) + + data = query.run(as_dict=True) + + for row in data: + row.update( + { + "allDay": 0, + "convertToUserTz": 0, + } + ) + return data