From 1b0799ef671f9bf667ce4e992a1622494f7b4150 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Mon, 1 Jul 2024 14:14:19 +0530 Subject: [PATCH] fix: batch reset while making SABB (#42076) (cherry picked from commit 8f424528ddf4e8ab198a1fa6b909a825c4a233d7) --- .../test_serial_and_batch_bundle.py | 55 +++++++++++++++++++ erpnext/stock/serial_batch_bundle.py | 12 +++- 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/serial_and_batch_bundle/test_serial_and_batch_bundle.py b/erpnext/stock/doctype/serial_and_batch_bundle/test_serial_and_batch_bundle.py index c313917bd4c5..2913af4a724f 100644 --- a/erpnext/stock/doctype/serial_and_batch_bundle/test_serial_and_batch_bundle.py +++ b/erpnext/stock/doctype/serial_and_batch_bundle/test_serial_and_batch_bundle.py @@ -646,6 +646,61 @@ def test_serial_no_valuation_for_legacy_ledgers(self): self.assertEqual(flt(stock_value_difference, 2), 353.0 * -1) + def test_pick_serial_nos_for_batch_item(self): + item_code = make_item( + "Test Pick Serial Nos for Batch Item 1", + properties={ + "is_stock_item": 1, + "has_batch_no": 1, + "create_new_batch": 1, + "batch_no_series": "PSNBI-TSNVL-.#####", + "has_serial_no": 1, + "serial_no_series": "SN-PSNBI-TSNVL-.#####", + }, + ).name + + se = make_stock_entry( + item_code=item_code, + qty=10, + target="_Test Warehouse - _TC", + rate=500, + ) + + batch1 = get_batch_from_bundle(se.items[0].serial_and_batch_bundle) + serial_nos1 = get_serial_nos_from_bundle(se.items[0].serial_and_batch_bundle) + + se = make_stock_entry( + item_code=item_code, + qty=10, + target="_Test Warehouse - _TC", + rate=500, + ) + + batch2 = get_batch_from_bundle(se.items[0].serial_and_batch_bundle) + serial_nos2 = get_serial_nos_from_bundle(se.items[0].serial_and_batch_bundle) + + se = make_stock_entry( + item_code=item_code, + qty=10, + source="_Test Warehouse - _TC", + use_serial_batch_fields=True, + batch_no=batch2, + ) + + serial_nos = get_serial_nos_from_bundle(se.items[0].serial_and_batch_bundle) + self.assertEqual(serial_nos, serial_nos2) + + se = make_stock_entry( + item_code=item_code, + qty=10, + source="_Test Warehouse - _TC", + use_serial_batch_fields=True, + batch_no=batch1, + ) + + serial_nos = get_serial_nos_from_bundle(se.items[0].serial_and_batch_bundle) + self.assertEqual(serial_nos, serial_nos1) + def get_batch_from_bundle(bundle): from erpnext.stock.serial_batch_bundle import get_batch_nos diff --git a/erpnext/stock/serial_batch_bundle.py b/erpnext/stock/serial_batch_bundle.py index 1fa5665c1410..c5346d2b0a3d 100644 --- a/erpnext/stock/serial_batch_bundle.py +++ b/erpnext/stock/serial_batch_bundle.py @@ -950,7 +950,17 @@ def set_auto_serial_batch_entries_for_outward(self): if self.get("ignore_serial_nos"): kwargs["ignore_serial_nos"] = self.ignore_serial_nos - if self.has_serial_no and not self.get("serial_nos"): + if ( + self.has_serial_no + and self.has_batch_no + and not self.get("serial_nos") + and self.get("batches") + and len(self.get("batches")) == 1 + ): + # If only one batch is available and no serial no is available + kwargs["batches"] = next(iter(self.get("batches").keys())) + self.serial_nos = get_serial_nos_for_outward(kwargs) + elif self.has_serial_no and not self.get("serial_nos"): self.serial_nos = get_serial_nos_for_outward(kwargs) elif not self.has_serial_no and self.has_batch_no and not self.get("batches"): self.batches = get_available_batches(kwargs)