From b82aea4a87852a683e231c39709eb036857efb66 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 29 Jul 2025 17:49:46 +0530 Subject: [PATCH] fix: serial no warehouse for backdated stock reco (cherry picked from commit 1deedc766c78b7ef2179d831df7d667860e9b4fa) --- .../test_stock_reconciliation.py | 76 +++++++++++++++++++ erpnext/stock/serial_batch_bundle.py | 2 +- 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py index 1fcbd73b49a..51cf4a34943 100644 --- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py @@ -1514,6 +1514,82 @@ class TestStockReconciliation(FrappeTestCase, StockTestMixin): self.assertTrue(len(stock_ledgers) == 2) + def test_serial_no_backdated_stock_reco(self): + from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry + + serial_item = self.make_item( + "Test Serial Item Stock Reco Backdated", + { + "is_stock_item": 1, + "has_serial_no": 1, + "serial_no_series": "TSISRB.####", + }, + ).name + + warehouse = "_Test Warehouse - _TC" + + se = make_stock_entry( + item_code=serial_item, + target=warehouse, + qty=1, + basic_rate=100, + use_serial_batch_fields=1, + ) + + serial_no = get_serial_nos_from_bundle(se.items[0].serial_and_batch_bundle)[0] + status = frappe.get_value( + "Serial No", + serial_no, + "status", + ) + + self.assertTrue(status == "Active") + + sr = create_stock_reconciliation( + item_code=serial_item, + warehouse=warehouse, + qty=1, + rate=200, + use_serial_batch_fields=1, + serial_no=serial_no, + ) + + sr.reload() + + status = frappe.get_value( + "Serial No", + serial_no, + "status", + ) + + self.assertTrue(status == "Active") + + make_stock_entry( + item_code=serial_item, + source=warehouse, + qty=1, + basic_rate=100, + use_serial_batch_fields=1, + ) + + status = frappe.get_value( + "Serial No", + serial_no, + "status", + ) + + self.assertFalse(status == "Active") + + sr.cancel() + + status = frappe.get_value( + "Serial No", + serial_no, + "status", + ) + + self.assertFalse(status == "Active") + def create_batch_item_with_batch(item_name, batch_id): batch_item_doc = create_item(item_name, is_stock_item=1) diff --git a/erpnext/stock/serial_batch_bundle.py b/erpnext/stock/serial_batch_bundle.py index 21a45f352cd..3e3f2bcdf69 100644 --- a/erpnext/stock/serial_batch_bundle.py +++ b/erpnext/stock/serial_batch_bundle.py @@ -359,7 +359,7 @@ class SerialBatchBundle: self.update_serial_no_status_warehouse(self.sle, serial_nos) def update_serial_no_status_warehouse(self, sle, serial_nos): - warehouse = self.warehouse if sle.actual_qty > 0 else None + warehouse = sle.warehouse if sle.actual_qty > 0 else None if isinstance(serial_nos, str): serial_nos = [serial_nos]