From f29c7de0ef898fcc00eeaa5750c3ba5a1e2743be Mon Sep 17 00:00:00 2001 From: Shllokkk Date: Fri, 31 Jul 2026 20:10:05 +0530 Subject: [PATCH 1/2] fix: accept dict doc when reserving stock for work order --- .../manufacturing/doctype/work_order/services/reservation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/manufacturing/doctype/work_order/services/reservation.py b/erpnext/manufacturing/doctype/work_order/services/reservation.py index f22470cf2d4..59419bbd579 100644 --- a/erpnext/manufacturing/doctype/work_order/services/reservation.py +++ b/erpnext/manufacturing/doctype/work_order/services/reservation.py @@ -546,10 +546,10 @@ class WorkOrderStockReservation: @frappe.whitelist() def make_stock_reservation_entries( - doc: str | Document, items: str | list | None = None, is_transfer: bool = True, notify: bool = False + doc: str | dict, items: str | list | None = None, is_transfer: bool = True, notify: bool = False ): """Whitelisted entry point: verify Work Order write access, then reserve stock.""" - if isinstance(doc, str): + if isinstance(doc, str | dict): doc = parse_json(doc) doc = frappe.get_doc("Work Order", doc.get("name")) From 517053bc25baa476b4a6b876271ae460d9b85560 Mon Sep 17 00:00:00 2001 From: Shllokkk Date: Fri, 31 Jul 2026 20:10:08 +0530 Subject: [PATCH 2/2] fix: drop row prefix in reserve stock message when row is unknown --- .../stock_reservation_entry.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py index 3c9d56e8216..7d6ba65f805 100644 --- a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py +++ b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py @@ -1199,7 +1199,7 @@ class StockReservation: self.available_qty_to_reserve = self.get_available_qty_to_reserve(item_code, warehouse) if not self.available_qty_to_reserve: - self.throw_stock_not_exists_error(item.idx, item_code, warehouse) + self.throw_stock_not_exists_error(item.get("idx"), item_code, warehouse) self.qty_to_be_reserved = ( qty if self.available_qty_to_reserve >= qty else self.available_qty_to_reserve @@ -1259,13 +1259,16 @@ class StockReservation: ) def throw_stock_not_exists_error(self, idx, item_code, warehouse): - frappe.msgprint( - _("Row #{0}: Stock not available to reserve for the Item {1} in Warehouse {2}.").format( + if idx: + msg = _("Row #{0}: Stock not available to reserve for the Item {1} in Warehouse {2}.").format( idx, frappe.bold(item_code), frappe.bold(warehouse) - ), - title=_("Stock Reservation"), - indicator="orange", - ) + ) + else: + msg = _("Stock not available to reserve for the Item {0} in Warehouse {1}.").format( + frappe.bold(item_code), frappe.bold(warehouse) + ) + + frappe.msgprint(msg, title=_("Stock Reservation"), indicator="orange") def get_available_qty_to_reserve(self, item_code, warehouse, ignore_sre=None): available_qty = get_stock_balance(item_code, warehouse)