mirror of
https://github.com/frappe/erpnext.git
synced 2026-03-07 20:42:50 +00:00
feat: enhance apply_warehouse_filter to support multiple warehouses in filters
(cherry picked from commit 2ff1dcc391)
This commit is contained in:
@@ -242,19 +242,35 @@ def get_warehouses_based_on_account(account, company=None):
|
|||||||
|
|
||||||
# Will be use for frappe.qb
|
# Will be use for frappe.qb
|
||||||
def apply_warehouse_filter(query, sle, filters):
|
def apply_warehouse_filter(query, sle, filters):
|
||||||
if warehouse := filters.get("warehouse"):
|
if not (warehouses := filters.get("warehouse")):
|
||||||
warehouse_table = frappe.qb.DocType("Warehouse")
|
return query
|
||||||
|
|
||||||
lft, rgt = frappe.db.get_value("Warehouse", warehouse, ["lft", "rgt"])
|
warehouse_table = frappe.qb.DocType("Warehouse")
|
||||||
chilren_subquery = (
|
|
||||||
frappe.qb.from_(warehouse_table)
|
if isinstance(warehouses, str):
|
||||||
.select(warehouse_table.name)
|
warehouses = [warehouses]
|
||||||
.where(
|
|
||||||
(warehouse_table.lft >= lft)
|
warehouse_range = frappe.get_all(
|
||||||
& (warehouse_table.rgt <= rgt)
|
"Warehouse",
|
||||||
& (warehouse_table.name == sle.warehouse)
|
filters={
|
||||||
)
|
"name": ("in", warehouses),
|
||||||
)
|
},
|
||||||
query = query.where(ExistsCriterion(chilren_subquery))
|
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
|
return query
|
||||||
|
|||||||
Reference in New Issue
Block a user