From 9546374ac30bb7a815ac74dbc905fc6f1ae06214 Mon Sep 17 00:00:00 2001 From: Loic Oberle Date: Sat, 23 May 2026 08:17:00 +0200 Subject: [PATCH] =?UTF-8?q?refactor(sales=5Forder):=20Replace=20SQL=20with?= =?UTF-8?q?=20ORM=20in=20validate=5Fsales=5Fmntc=5Fqu=E2=80=A6=20(#55201)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../doctype/sales_order/sales_order.py | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 2a6e1d7eeb0..b290ef1b563 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -397,16 +397,20 @@ class SalesOrder(SellingController): return frappe.db.exists("Item", {"name": ["in", bundle_items], "is_stock_item": 1}) is not None def validate_sales_mntc_quotation(self): + quotation_names = [d.prevdoc_docname for d in self.get("items") if d.prevdoc_docname] + + if not quotation_names: + return + + valid_quotations = frappe.get_all( + "Quotation", + filters={"name": ["in", quotation_names], "order_type": self.order_type}, + pluck="name", + ) + for d in self.get("items"): - if d.prevdoc_docname: - res = frappe.db.sql( - "select name from `tabQuotation` where name=%s and order_type = %s", - (d.prevdoc_docname, self.order_type), - ) - if not res: - frappe.msgprint( - _("Quotation {0} not of type {1}").format(d.prevdoc_docname, self.order_type) - ) + if d.prevdoc_docname and d.prevdoc_docname not in valid_quotations: + frappe.msgprint(_("Quotation {0} not of type {1}").format(d.prevdoc_docname, self.order_type)) def validate_delivery_date(self): if self.order_type == "Sales" and not self.skip_delivery_note: