diff --git a/erpnext/stock/doctype/material_request/mapper.py b/erpnext/stock/doctype/material_request/mapper.py index 850b2ab9552..26db6143f69 100644 --- a/erpnext/stock/doctype/material_request/mapper.py +++ b/erpnext/stock/doctype/material_request/mapper.py @@ -207,6 +207,9 @@ def get_item_default_suppliers(source_name: str, filtered_children: str | list | def make_purchase_orders_by_supplier(source_name: str, item_suppliers: str | list) -> list[str]: """Create one draft Purchase Order per supplier for the given Material Request items.""" item_suppliers = frappe.parse_json(item_suppliers) + if not item_suppliers: + frappe.throw(_("Select at least one Item")) + pending_items = { d["material_request_item"]: frappe._dict(d) for d in get_item_default_suppliers(source_name) } diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js index 345d5cfb846..e40636b4afe 100644 --- a/erpnext/stock/doctype/material_request/material_request.js +++ b/erpnext/stock/doctype/material_request/material_request.js @@ -445,7 +445,7 @@ frappe.ui.form.on("Material Request", { }, select_suppliers_for_items: function (frm, items) { - const rows = items.map((item) => Object.assign({}, item, { qty: item.pending_qty })); + const rows = items.map((item) => Object.assign({}, item, { qty: item.pending_qty, __checked: 1 })); const dialog = new frappe.ui.Dialog({ title: __("Select Supplier for Items"), @@ -519,7 +519,10 @@ frappe.ui.form.on("Material Request", { ], primary_action_label: __("Create"), primary_action: function (values) { - const item_suppliers = values.items || []; + const item_suppliers = (values.items || []).filter((row) => row.__checked); + if (!item_suppliers.length) { + frappe.throw(__("Select at least one Item")); + } const missing_supplier = item_suppliers.find((row) => !row.supplier); if (missing_supplier) {