Merge pull request #40735 from rohitwaghchaure/fixed-stock-balance-report
fix: Show Stock Ageing Data filter not working in stock balance report
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index 070eaf3..08e3940 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -415,7 +415,6 @@
let row = locals[cdt][cdn];
if (row.barcode) {
erpnext.stock.utils.set_item_details_using_barcode(this.frm, row, (r) => {
- debugger
frappe.model.set_value(cdt, cdn, {
"item_code": r.message.item_code,
"qty": 1,
diff --git a/erpnext/stock/report/stock_ageing/stock_ageing.py b/erpnext/stock/report/stock_ageing/stock_ageing.py
index efa736c..c4156e7 100644
--- a/erpnext/stock/report/stock_ageing/stock_ageing.py
+++ b/erpnext/stock/report/stock_ageing/stock_ageing.py
@@ -229,8 +229,16 @@
}
"""
+ from erpnext.stock.doctype.serial_and_batch_bundle.test_serial_and_batch_bundle import (
+ get_serial_nos_from_bundle,
+ )
+
stock_ledger_entries = self.sle
+ bundle_wise_serial_nos = frappe._dict({})
+ if stock_ledger_entries is None:
+ bundle_wise_serial_nos = self.__get_bundle_wise_serial_nos()
+
with frappe.db.unbuffered_cursor():
if stock_ledger_entries is None:
stock_ledger_entries = self.__get_stock_ledger_entries()
@@ -244,6 +252,11 @@
d.actual_qty = flt(d.qty_after_transaction) - flt(prev_balance_qty)
serial_nos = get_serial_nos(d.serial_no) if d.serial_no else []
+ if d.serial_and_batch_bundle and d.has_serial_no:
+ if bundle_wise_serial_nos:
+ serial_nos = bundle_wise_serial_nos.get(d.serial_and_batch_bundle) or []
+ else:
+ serial_nos = get_serial_nos_from_bundle(d.serial_and_batch_bundle) or []
if d.actual_qty > 0:
self.__compute_incoming_stock(d, fifo_queue, transferred_item_key, serial_nos)
@@ -408,6 +421,7 @@
sle.serial_no,
sle.batch_no,
sle.qty_after_transaction,
+ sle.serial_and_batch_bundle,
sle.warehouse,
)
.where(
@@ -425,6 +439,33 @@
return sle_query.run(as_dict=True, as_iterator=True)
+ def __get_bundle_wise_serial_nos(self) -> dict:
+ bundle = frappe.qb.DocType("Serial and Batch Bundle")
+ entry = frappe.qb.DocType("Serial and Batch Entry")
+
+ query = (
+ frappe.qb.from_(bundle)
+ .join(entry)
+ .on(bundle.name == entry.parent)
+ .select(bundle.name, entry.serial_no)
+ .where(
+ (bundle.docstatus == 1)
+ & (entry.serial_no.isnotnull())
+ & (bundle.company == self.filters.get("company"))
+ & (bundle.posting_date <= self.filters.get("to_date"))
+ )
+ )
+
+ for field in ["item_code", "warehouse"]:
+ if self.filters.get(field):
+ query = query.where(bundle[field] == self.filters.get(field))
+
+ bundle_wise_serial_nos = frappe._dict({})
+ for bundle_name, serial_no in query.run():
+ bundle_wise_serial_nos.setdefault(bundle_name, []).append(serial_no)
+
+ return bundle_wise_serial_nos
+
def __get_item_query(self) -> str:
item_table = frappe.qb.DocType("Item")
diff --git a/erpnext/stock/report/stock_balance/stock_balance.py b/erpnext/stock/report/stock_balance/stock_balance.py
index 0d31398..af07dd7 100644
--- a/erpnext/stock/report/stock_balance/stock_balance.py
+++ b/erpnext/stock/report/stock_balance/stock_balance.py
@@ -294,6 +294,8 @@
sle.stock_value,
sle.batch_no,
sle.serial_no,
+ sle.serial_and_batch_bundle,
+ sle.has_serial_no,
item_table.item_group,
item_table.stock_uom,
item_table.item_name,