From 6def182e1a813dda519e7a432c1ac67af08a04c9 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Mon, 16 Jun 2025 17:03:17 +0530 Subject: [PATCH] fix: use set_query on sales_order link field in work order --- .../doctype/work_order/work_order.js | 29 +++++++------------ .../doctype/work_order/work_order.py | 10 ++++--- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/erpnext/manufacturing/doctype/work_order/work_order.js b/erpnext/manufacturing/doctype/work_order/work_order.js index 609670bd3f1..67dd1ca640d 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.js +++ b/erpnext/manufacturing/doctype/work_order/work_order.js @@ -101,6 +101,17 @@ frappe.ui.form.on("Work Order", { }; }); + frm.set_query("sales_order", function () { + if (frm.doc.production_item) { + return { + query: "erpnext.manufacturing.doctype.work_order.work_order.query_sales_order", + filters: { + production_item: frm.doc.production_item, + }, + }; + } + }); + // formatter for work order operation frm.set_indicator_formatter("operation", function (doc) { return frm.doc.qty == doc.completed_qty ? "green" : "orange"; @@ -506,7 +517,6 @@ frappe.ui.form.on("Work Order", { callback: function (r) { if (r.message) { frm.set_value("sales_order", ""); - frm.trigger("set_sales_order"); erpnext.in_production_item_onchange = true; $.each( @@ -568,23 +578,6 @@ frappe.ui.form.on("Work Order", { frm.toggle_reqd("transfer_material_against", frm.doc.operations && frm.doc.operations.length > 0); }, - set_sales_order: function (frm) { - if (frm.doc.production_item) { - frappe.call({ - method: "erpnext.manufacturing.doctype.work_order.work_order.query_sales_order", - args: { production_item: frm.doc.production_item }, - callback: function (r) { - frm.set_query("sales_order", function () { - erpnext.in_production_item_onchange = true; - return { - filters: [["Sales Order", "name", "in", r.message]], - }; - }); - }, - }); - } - }, - additional_operating_cost: function (frm) { erpnext.work_order.calculate_cost(frm.doc); erpnext.work_order.calculate_total_cost(frm); diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py index b40dc3792c0..3dd1d695ab0 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.py +++ b/erpnext/manufacturing/doctype/work_order/work_order.py @@ -2004,17 +2004,19 @@ def stop_unstop(work_order, status): @frappe.whitelist() -def query_sales_order(production_item: str) -> list[str]: +@frappe.validate_and_sanitize_search_inputs +def query_sales_order(doctype, txt, searchfield, start, page_len, filters) -> list[str]: return frappe.get_list( "Sales Order", + fields=["name"], filters=[ ["Sales Order", "docstatus", "=", 1], ], or_filters=[ - ["Sales Order Item", "item_code", "=", production_item], - ["Packed Item", "item_code", "=", production_item], + ["Sales Order Item", "item_code", "=", filters.get("production_item")], + ["Packed Item", "item_code", "=", filters.get("production_item")], ], - pluck="name", + as_list=True, distinct=True, )