fix(stock): do not default to a warehouse the user cannot access

(cherry picked from commit 4a0e95245d)

# Conflicts:
#	erpnext/stock/get_item_details.py
This commit is contained in:
Mihir Kandoi
2026-10-22 15:54:28 +00:00
committed by Mergify
parent 3ff83243a7
commit fc7a2fe72a
+32
View File
@@ -6,6 +6,7 @@ import json
import frappe
from frappe import _, throw
from frappe.core.doctype.user_permission.user_permission import get_user_permissions
from frappe.model import child_table_fields, default_fields
from frappe.model.document import Document
from frappe.model.meta import get_field_precision
@@ -705,16 +706,27 @@ def get_item_warehouse(item, args, overwrite_warehouse, defaults=None):
if overwrite_warehouse or not args.warehouse:
warehouse = (
<<<<<<< HEAD
args.get("set_warehouse")
or defaults.item_defaults.get("default_warehouse")
or defaults.item_group_defaults.get("default_warehouse")
or defaults.brand_defaults.get("default_warehouse")
or args.get("warehouse")
=======
ctx.set_warehouse
or get_accessible_warehouse(
defaults.item_defaults.get("default_warehouse"),
defaults.item_group_defaults.get("default_warehouse"),
defaults.brand_defaults.get("default_warehouse"),
)
or ctx.warehouse
>>>>>>> 4a0e952 (fix(stock): do not default to a warehouse the user cannot access)
)
else:
warehouse = args.get("warehouse")
<<<<<<< HEAD
if not warehouse:
default_warehouse = frappe.get_single_value("Stock Settings", "default_warehouse")
if (
@@ -722,10 +734,30 @@ def get_item_warehouse(item, args, overwrite_warehouse, defaults=None):
and frappe.get_cached_value("Warehouse", default_warehouse, "company") == args.company
):
return default_warehouse
=======
if not warehouse and ctx.company:
return get_accessible_warehouse(frappe.get_cached_value("Company", ctx.company, "default_warehouse"))
>>>>>>> 4a0e952 (fix(stock): do not default to a warehouse the user cannot access)
return warehouse
def get_accessible_warehouse(*warehouses: str | None) -> str | None:
"""First of `warehouses` the user's Warehouse User Permissions allow."""
warehouses = [warehouse for warehouse in warehouses if warehouse]
if not get_user_permissions().get("Warehouse"):
return next(iter(warehouses), None)
return next(
(
warehouse
for warehouse in warehouses
if erpnext._is_within_user_permissions("Warehouse", warehouse)
),
None,
)
def update_barcode_value(out):
barcode_data = get_barcode_data([out])