mirror of
https://github.com/frappe/erpnext.git
synced 2026-02-16 08:05:00 +00:00
Merge pull request #51247 from frappe/mergify/bp/version-15-hotfix/pr-51244
fix: same serial number was picked in multiple sales invoices (backport #51244)
This commit is contained in:
@@ -2018,13 +2018,47 @@ def get_available_serial_nos(kwargs):
|
||||
|
||||
filters["batch_no"] = ("in", batches)
|
||||
|
||||
return frappe.get_all(
|
||||
"Serial No",
|
||||
fields=fields,
|
||||
filters=filters,
|
||||
limit=cint(kwargs.qty) or 10000000,
|
||||
order_by=order_by,
|
||||
)
|
||||
return get_serial_nos_based_on_filters(filters, fields, order_by, kwargs)
|
||||
|
||||
|
||||
def get_serial_nos_based_on_filters(filters, fields, order_by, kwargs):
|
||||
doctype = frappe.qb.DocType("Serial No")
|
||||
|
||||
order_by_column = getattr(doctype, order_by)
|
||||
query = frappe.qb.from_(doctype).orderby(order_by_column).limit(cint(kwargs.qty) or 10000000).for_update()
|
||||
|
||||
for key, value in filters.items():
|
||||
column = getattr(doctype, key)
|
||||
|
||||
if isinstance(value, tuple):
|
||||
operator = value[0]
|
||||
|
||||
if operator == "between":
|
||||
query = query.where(column.between(value[1], value[2]))
|
||||
|
||||
elif operator == "in":
|
||||
query = query.where(column.isin(value[1]))
|
||||
|
||||
elif operator == "not in":
|
||||
query = query.where(column.notin(value[1]))
|
||||
|
||||
elif operator == "is":
|
||||
if value[1] == "set":
|
||||
query = query.where(column.isnotnull())
|
||||
elif value[1] == "not set":
|
||||
query = query.where(column.isnull())
|
||||
else:
|
||||
query = query.where(column == value)
|
||||
|
||||
for field in fields:
|
||||
if " as " in field.lower():
|
||||
# Split field and alias
|
||||
field_name, alias = field.split(" as ", 1)
|
||||
query = query.select(getattr(doctype, field_name).as_(alias))
|
||||
else:
|
||||
query = query.select(getattr(doctype, field))
|
||||
|
||||
return query.run(as_dict=True)
|
||||
|
||||
|
||||
def get_non_expired_batches(batches):
|
||||
|
||||
@@ -204,6 +204,7 @@ def update_stock(ctx, out, doc=None):
|
||||
"item_code": ctx.item_code,
|
||||
"warehouse": ctx.warehouse,
|
||||
"based_on": frappe.db.get_single_value("Stock Settings", "pick_serial_and_batch_based_on"),
|
||||
"qty": out.stock_qty,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user