fix: batches not coming correctly in the batch selector
diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py
index 2650753..8ebdcc5 100644
--- a/erpnext/controllers/queries.py
+++ b/erpnext/controllers/queries.py
@@ -421,23 +421,14 @@
meta = frappe.get_meta(doctype, cached=True)
searchfields = meta.get_search_fields()
- query = get_batches_from_stock_ledger_entries(searchfields, txt, filters)
- bundle_query = get_batches_from_serial_and_batch_bundle(searchfields, txt, filters)
-
- data = (
- frappe.qb.from_((query) + (bundle_query))
- .select("batch_no", "qty", "manufacturing_date", "expiry_date")
- .offset(start)
- .limit(page_len)
+ batches = get_batches_from_stock_ledger_entries(searchfields, txt, filters, start, page_len)
+ batches.extend(
+ get_batches_from_serial_and_batch_bundle(searchfields, txt, filters, start, page_len)
)
- for field in searchfields:
- data = data.select(field)
+ filtered_batches = get_filterd_batches(batches)
- data = data.run()
- data = get_filterd_batches(data)
-
- return data
+ return filtered_batches
def get_filterd_batches(data):
@@ -457,7 +448,7 @@
return filterd_batch
-def get_batches_from_stock_ledger_entries(searchfields, txt, filters):
+def get_batches_from_stock_ledger_entries(searchfields, txt, filters, start=0, page_len=100):
stock_ledger_entry = frappe.qb.DocType("Stock Ledger Entry")
batch_table = frappe.qb.DocType("Batch")
@@ -479,6 +470,8 @@
& (stock_ledger_entry.batch_no.isnotnull())
)
.groupby(stock_ledger_entry.batch_no, stock_ledger_entry.warehouse)
+ .offset(start)
+ .limit(page_len)
)
query = query.select(
@@ -493,16 +486,16 @@
query = query.select(batch_table[field])
if txt:
- txt_condition = batch_table.name.like(txt)
+ txt_condition = batch_table.name.like("%{0}%".format(txt))
for field in searchfields + ["name"]:
- txt_condition |= batch_table[field].like(txt)
+ txt_condition |= batch_table[field].like("%{0}%".format(txt))
query = query.where(txt_condition)
- return query
+ return query.run(as_list=1) or []
-def get_batches_from_serial_and_batch_bundle(searchfields, txt, filters):
+def get_batches_from_serial_and_batch_bundle(searchfields, txt, filters, start=0, page_len=100):
bundle = frappe.qb.DocType("Serial and Batch Entry")
stock_ledger_entry = frappe.qb.DocType("Stock Ledger Entry")
batch_table = frappe.qb.DocType("Batch")
@@ -527,6 +520,8 @@
& (stock_ledger_entry.serial_and_batch_bundle.isnotnull())
)
.groupby(bundle.batch_no, bundle.warehouse)
+ .offset(start)
+ .limit(page_len)
)
bundle_query = bundle_query.select(
@@ -541,13 +536,13 @@
bundle_query = bundle_query.select(batch_table[field])
if txt:
- txt_condition = batch_table.name.like(txt)
+ txt_condition = batch_table.name.like("%{0}%".format(txt))
for field in searchfields + ["name"]:
- txt_condition |= batch_table[field].like(txt)
+ txt_condition |= batch_table[field].like("%{0}%".format(txt))
bundle_query = bundle_query.where(txt_condition)
- return bundle_query
+ return bundle_query.run(as_list=1)
@frappe.whitelist()