From 4719ba15c666f8ea75a923b34fff282ba5e96aa9 Mon Sep 17 00:00:00 2001 From: Loic Oberle Date: Sat, 23 May 2026 08:04:54 +0200 Subject: [PATCH] =?UTF-8?q?refactor(sales=5Forder):=20Replace=20SQL=20with?= =?UTF-8?q?=20query=20builder=20in=20make=5Fmainten=E2=80=A6=20(#55207)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../doctype/sales_order/sales_order.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index aa8be395176..57bbd0a7998 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -1618,15 +1618,20 @@ def make_maintenance_schedule(source_name: str, target_doc: str | Document | Non @frappe.whitelist() def make_maintenance_visit(source_name: str, target_doc: str | Document | None = None): - visit = frappe.db.sql( - """select t1.name - from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 - where t2.parent=t1.name and t2.prevdoc_docname=%s - and t1.docstatus=1 and t1.completion_status='Fully Completed'""", - source_name, + MaintenanceVisit = frappe.qb.DocType("Maintenance Visit") + MaintenanceVisitPurpose = frappe.qb.DocType("Maintenance Visit Purpose") + + query = ( + frappe.qb.from_(MaintenanceVisit) + .join(MaintenanceVisitPurpose) + .on(MaintenanceVisitPurpose.parent == MaintenanceVisit.name) + .select(MaintenanceVisit.name) + .where(MaintenanceVisitPurpose.prevdoc_docname == source_name) + .where(MaintenanceVisit.docstatus == 1) + .where(MaintenanceVisit.completion_status == "Fully Completed") ) - if not visit: + if not query.run(): doclist = get_mapped_doc( "Sales Order", source_name,