From a074d8175458354afb2f0133eed4a417c64ddfc1 Mon Sep 17 00:00:00 2001 From: krupalvora Date: Sat, 10 Jan 2026 07:00:37 +0000 Subject: [PATCH] refactor: Batch & Bundle get Stock ledger for snos v2 --- .../serial_and_batch_bundle.py | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py index 88e03d62080..fa8477e6db4 100644 --- a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py +++ b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py @@ -2987,10 +2987,6 @@ def get_stock_ledgers_for_serial_nos(kwargs): stock_ledger_entry = frappe.qb.DocType("Stock Ledger Entry") serial_batch_entry = frappe.qb.DocType("Serial and Batch Entry") - serial_nos = kwargs.get("serial_nos") or kwargs.get("serial_no") - if serial_nos and not isinstance(serial_nos, list): - serial_nos = [serial_nos] - query = ( frappe.qb.from_(stock_ledger_entry) .select( @@ -2999,15 +2995,19 @@ def get_stock_ledgers_for_serial_nos(kwargs): stock_ledger_entry.serial_and_batch_bundle, ) .where(stock_ledger_entry.is_cancelled == 0) + .orderby(stock_ledger_entry.posting_datetime) + .orderby(stock_ledger_entry.creation) ) - if kwargs.get("posting_date"): - if kwargs.get("posting_time") is None: - kwargs.posting_time = nowtime() + if kwargs.get("posting_datetime"): + timestamp_condition = stock_ledger_entry.posting_datetime <= kwargs.posting_datetime - timestamp_condition = CombineDatetime( - stock_ledger_entry.posting_date, stock_ledger_entry.posting_time - ) <= CombineDatetime(kwargs.posting_date, kwargs.posting_time) + if kwargs.get("creation"): + timestamp_condition = stock_ledger_entry.posting_datetime < kwargs.posting_datetime + + timestamp_condition |= (stock_ledger_entry.posting_datetime == kwargs.posting_datetime) & ( + stock_ledger_entry.creation < kwargs.creation + ) query = query.where(timestamp_condition) @@ -3020,6 +3020,10 @@ def get_stock_ledgers_for_serial_nos(kwargs): else: query = query.where(stock_ledger_entry[field] == kwargs.get(field)) + serial_nos = kwargs.get("serial_nos") or kwargs.get("serial_no") + if serial_nos and not isinstance(serial_nos, list): + serial_nos = [serial_nos] + if serial_nos: query = ( query.left_join(serial_batch_entry) @@ -3037,7 +3041,10 @@ def get_stock_ledgers_for_serial_nos(kwargs): query = query.where(bundle_match | direct_match) - if kwargs.voucher_no: + if kwargs.ignore_voucher_detail_no: + query = query.where(stock_ledger_entry.voucher_detail_no != kwargs.ignore_voucher_detail_no) + + elif kwargs.voucher_no: query = query.where(stock_ledger_entry.voucher_no != kwargs.voucher_no) return query.run(as_dict=True)