diff --git a/erpnext/stock/doctype/warehouse/warehouse.py b/erpnext/stock/doctype/warehouse/warehouse.py index f4079cc54cb..a55e8351446 100644 --- a/erpnext/stock/doctype/warehouse/warehouse.py +++ b/erpnext/stock/doctype/warehouse/warehouse.py @@ -14,7 +14,7 @@ from frappe.utils.caching import request_cache from frappe.utils.nestedset import NestedSet from pypika.terms import ExistsCriterion -from erpnext.stock import get_warehouse_account +from erpnext.stock import get_warehouse_account, get_warehouse_account_map class Warehouse(NestedSet): @@ -214,11 +214,19 @@ def get_child_warehouses(warehouse): def get_warehouses_based_on_account(account, company=None): warehouses = [] + warehouse_account_map = None for d in frappe.get_all( "Warehouse", fields=["name", "is_group"], filters={"account": account, "disabled": 0} ): if d.is_group: - warehouses.extend(get_child_warehouses(d.name)) + # Keep only children whose effective account matches; a child can override the group's account + if warehouse_account_map is None: + warehouse_account_map = get_warehouse_account_map(company) + warehouses.extend( + w + for w in get_child_warehouses(d.name) + if (warehouse_account_map.get(w) or {}).get("account") == account + ) else: warehouses.append(d.name)