From edaff5d6993df85b5e978a9297a6e27b00a44a35 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Wed, 20 Aug 2025 17:20:03 +0530 Subject: [PATCH] fix: child item picker picking all items when creating PI from PR (cherry picked from commit 738c1e0d0a2acc70fc59c8026d4dfabaad96dcf8) --- .../doctype/purchase_order/purchase_order.js | 3 +++ .../supplier_quotation/supplier_quotation.py | 15 ++++++++++++++- .../doctype/purchase_receipt/purchase_receipt.py | 4 ++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js index dca3285f538..d82a5e18c23 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.js +++ b/erpnext/buying/doctype/purchase_order/purchase_order.js @@ -599,6 +599,9 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends ( docstatus: 1, status: ["not in", ["Stopped", "Expired"]], }, + allow_child_item_selection: true, + child_fieldname: "items", + child_columns: ["item_code", "item_name", "qty", "rate", "amount"], }); }, __("Get Items From") diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py index 5557f1a80ae..35cb2eebf8f 100644 --- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py +++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py @@ -2,6 +2,8 @@ # License: GNU General Public License v3. See license.txt +import json + import frappe from frappe import _ from frappe.model.mapper import get_mapped_doc @@ -235,7 +237,12 @@ def get_list_context(context=None): @frappe.whitelist() -def make_purchase_order(source_name, target_doc=None): +def make_purchase_order(source_name, target_doc=None, args=None): + if args is None: + args = {} + if isinstance(args, str): + args = json.loads(args) + def set_missing_values(source, target): target.run_method("set_missing_values") target.run_method("get_schedule_dates") @@ -244,6 +251,11 @@ def make_purchase_order(source_name, target_doc=None): def update_item(obj, target, source_parent): target.stock_qty = flt(obj.qty) * flt(obj.conversion_factor) + def select_item(d): + filtered_items = args.get("filtered_children", []) + child_filter = d.name in filtered_items if filtered_items else True + return child_filter + doclist = get_mapped_doc( "Supplier Quotation", source_name, @@ -265,6 +277,7 @@ def make_purchase_order(source_name, target_doc=None): ["sales_order", "sales_order"], ], "postprocess": update_item, + "condition": select_item, }, "Purchase Taxes and Charges": { "doctype": "Purchase Taxes and Charges", diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index 1c4d28c495e..bc7023fbebb 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -1322,8 +1322,8 @@ def make_purchase_invoice(source_name, target_doc=None, args=None): "postprocess": update_item, "filter": lambda d: ( get_pending_qty(d)[0] <= 0 if not doc.get("is_return") else get_pending_qty(d)[0] > 0 - ) - and select_item(d), + ), + "condition": select_item, }, "Purchase Taxes and Charges": { "doctype": "Purchase Taxes and Charges",