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 42d672df36b..391fee9dbf2 100644 --- a/erpnext/stock/doctype/material_request/material_request.js +++ b/erpnext/stock/doctype/material_request/material_request.js @@ -439,7 +439,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"), @@ -513,7 +513,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) {