fix(manufacturing): skip warehouse user permission check for work order available qty

This commit is contained in:
Mihir Kandoi
2026-10-22 16:36:22 +00:00
parent d1b20321c1
commit ce6cc5240e
2 changed files with 11 additions and 5 deletions
@@ -36,7 +36,7 @@ from erpnext.stock.doctype.batch.batch import make_batch
from erpnext.stock.doctype.item.item import get_item_defaults, validate_end_of_life
from erpnext.stock.doctype.serial_no.serial_no import get_available_serial_nos, get_serial_nos
from erpnext.stock.stock_balance import get_planned_qty, update_bin_qty
from erpnext.stock.utils import get_bin, get_latest_stock_qty, validate_warehouse_company
from erpnext.stock.utils import _get_latest_stock_qty, get_bin, validate_warehouse_company
from erpnext.utilities.transaction_base import validate_uom_is_integer
@@ -1230,10 +1230,10 @@ class WorkOrder(Document):
def set_available_qty(self):
for d in self.get("required_items"):
if d.source_warehouse:
d.available_qty_at_source_warehouse = get_latest_stock_qty(d.item_code, d.source_warehouse)
d.available_qty_at_source_warehouse = _get_latest_stock_qty(d.item_code, d.source_warehouse)
if self.wip_warehouse:
d.available_qty_at_wip_warehouse = get_latest_stock_qty(d.item_code, self.wip_warehouse)
d.available_qty_at_wip_warehouse = _get_latest_stock_qty(d.item_code, self.wip_warehouse)
def set_required_items(self, reset_only_qty=False):
"""set required_items for production to keep track of reserved qty"""
+8 -2
View File
@@ -202,11 +202,17 @@ def get_serial_nos_data(serial_nos):
@frappe.whitelist()
def get_latest_stock_qty(item_code, warehouse=None):
if warehouse:
erpnext.require_user_permission("Warehouse", warehouse)
return _get_latest_stock_qty(item_code, warehouse)
def _get_latest_stock_qty(item_code, warehouse=None):
# no warehouse check here: Work Order reads the warehouses already on the document
# same guard as get_stock_balance above, which returns the same Bin quantity. Loser-free for
# the only caller: Work Order write is held by Manufacturing User, who holds Item read.
frappe.has_permission("Item", "read", throw=True)
if warehouse:
erpnext.require_user_permission("Warehouse", warehouse)
values, condition = [item_code], ""
if warehouse: