Skip to content

Commit

Permalink
Merge pull request #39372 from rohitwaghchaure/fixed-get-query-for-ba…
Browse files Browse the repository at this point in the history
…tch-no-field

fix: batches not coming correctly in the batch selector
  • Loading branch information
rohitwaghchaure authored Jan 14, 2024
2 parents cf6b52e + 114f2b4 commit ad59069
Showing 1 changed file with 17 additions and 22 deletions.
39 changes: 17 additions & 22 deletions erpnext/controllers/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -421,23 +421,14 @@ def get_batch_no(doctype, txt, searchfield, start, page_len, filters):
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)

data = data.run()
data = get_filterd_batches(data)
filtered_batches = get_filterd_batches(batches)

return data
return filtered_batches


def get_filterd_batches(data):
Expand All @@ -457,7 +448,7 @@ def get_filterd_batches(data):
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")

Expand All @@ -479,6 +470,8 @@ def get_batches_from_stock_ledger_entries(searchfields, txt, filters):
& (stock_ledger_entry.batch_no.isnotnull())
)
.groupby(stock_ledger_entry.batch_no, stock_ledger_entry.warehouse)
.offset(start)
.limit(page_len)
)

query = query.select(
Expand All @@ -493,16 +486,16 @@ def get_batches_from_stock_ledger_entries(searchfields, txt, filters):
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")
Expand All @@ -527,6 +520,8 @@ def get_batches_from_serial_and_batch_bundle(searchfields, txt, filters):
& (stock_ledger_entry.serial_and_batch_bundle.isnotnull())
)
.groupby(bundle.batch_no, bundle.warehouse)
.offset(start)
.limit(page_len)
)

bundle_query = bundle_query.select(
Expand All @@ -541,13 +536,13 @@ def get_batches_from_serial_and_batch_bundle(searchfields, txt, filters):
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()
Expand Down

0 comments on commit ad59069

Please sign in to comment.