feat: enhance apply_warehouse_filter to support multiple warehouses in filters

(cherry picked from commit 2ff1dcc391)
This commit is contained in:
Karm Soni
2025-07-03 16:24:27 +05:30
committed by Mergify
parent 2b08c5b769
commit 801cda3813

View File

@@ -242,19 +242,35 @@ def get_warehouses_based_on_account(account, company=None):
# Will be use for frappe.qb
def apply_warehouse_filter(query, sle, filters):
if warehouse := filters.get("warehouse"):
warehouse_table = frappe.qb.DocType("Warehouse")
if not (warehouses := filters.get("warehouse")):
return query
lft, rgt = frappe.db.get_value("Warehouse", warehouse, ["lft", "rgt"])
chilren_subquery = (
frappe.qb.from_(warehouse_table)
.select(warehouse_table.name)
.where(
(warehouse_table.lft >= lft)
& (warehouse_table.rgt <= rgt)
& (warehouse_table.name == sle.warehouse)
)
)
query = query.where(ExistsCriterion(chilren_subquery))
warehouse_table = frappe.qb.DocType("Warehouse")
if isinstance(warehouses, str):
warehouses = [warehouses]
warehouse_range = frappe.get_all(
"Warehouse",
filters={
"name": ("in", warehouses),
},
fields=["lft", "rgt"],
as_list=True,
)
child_query = frappe.qb.from_(warehouse_table).select(warehouse_table.name)
range_conditions = [
(warehouse_table.lft >= lft) & (warehouse_table.rgt <= rgt) for lft, rgt in warehouse_range
]
combined_condition = range_conditions[0]
for condition in range_conditions[1:]:
combined_condition = combined_condition | condition
child_query = child_query.where(combined_condition & (warehouse_table.name == sle.warehouse))
query = query.where(ExistsCriterion(child_query))
return query