fix: link the item and spell out the unit in the supplier dialog errors

A bare item code left the buyer to find the item themselves, and a bare number
gave no clue what the limit was counted in. Both messages now link the item and
state the pending quantity in bold with its UOM.
This commit is contained in:
Mihir Kandoi
2026-08-01 08:57:04 +05:30
parent 671c289303
commit 5a78e2290a
2 changed files with 17 additions and 9 deletions

View File

@@ -207,20 +207,24 @@ 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)
pending_qty = {
d["material_request_item"]: d["pending_qty"] for d in get_item_default_suppliers(source_name)
pending_items = {
d["material_request_item"]: frappe._dict(d) for d in get_item_default_suppliers(source_name)
}
items_by_supplier = {}
for row in item_suppliers:
row = frappe._dict(row)
if not row.supplier:
frappe.throw(_("Select a Supplier for Item {0}").format(frappe.bold(row.item_code)))
pending = pending_items.get(row.material_request_item) or frappe._dict()
item_link = get_link_to_form("Item", row.item_code)
if flt(row.qty) <= 0 or flt(row.qty) > flt(pending_qty.get(row.material_request_item)):
if not row.supplier:
frappe.throw(_("Select a Supplier for Item {0}").format(item_link))
if flt(row.qty) <= 0 or flt(row.qty) > flt(pending.pending_qty):
pending_qty = frappe.format_value(flt(pending.pending_qty), "Float")
frappe.throw(
_("Quantity for Item {0} must be greater than zero and cannot exceed {1}").format(
frappe.bold(row.item_code), flt(pending_qty.get(row.material_request_item))
item_link, frappe.bold(f"{pending_qty} {pending.uom or ''}".strip())
)
)

View File

@@ -517,7 +517,11 @@ frappe.ui.form.on("Material Request", {
const missing_supplier = item_suppliers.find((row) => !row.supplier);
if (missing_supplier) {
frappe.throw(__("Select a Supplier for Item {0}", [missing_supplier.item_code]));
frappe.throw(
__("Select a Supplier for Item {0}", [
frappe.utils.get_form_link("Item", missing_supplier.item_code, true),
])
);
}
const invalid_qty = item_suppliers.find(
@@ -526,8 +530,8 @@ frappe.ui.form.on("Material Request", {
if (invalid_qty) {
frappe.throw(
__("Quantity for Item {0} must be greater than zero and cannot exceed {1}", [
invalid_qty.item_code,
format_number(invalid_qty.pending_qty),
frappe.utils.get_form_link("Item", invalid_qty.item_code, true),
`<b>${format_number(invalid_qty.pending_qty)} ${invalid_qty.uom}</b>`,
])
);
}