fix(selling): reset stale item details on item change

This commit is contained in:
Mihir Kandoi
2026-08-11 20:41:47 +05:30
parent 7e4e9860ef
commit 009961edc7
2 changed files with 47 additions and 0 deletions

View File

@@ -46,3 +46,39 @@ class TestReactivity(ERPNextTestSuite):
with self.subTest(field=field):
self.assertIsNotNone(itm.get(field[0]))
si.save().submit()
def test_item_change_clears_stale_item_details(self):
from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
from erpnext.stock.doctype.item.test_item import make_item
old_item = make_item(properties={"is_stock_item": 0, "stock_uom": "Nos"})
new_item = make_item(
properties={
"is_stock_item": 0,
"stock_uom": "Kg",
"weight_per_unit": 2,
"weight_uom": "Kg",
}
)
sales_order = make_sales_order(item_code=old_item.name, do_not_submit=True)
item = sales_order.items[0]
self.assertEqual(item.uom, "Nos")
row_state = (item.qty, item.warehouse, item.delivery_date)
sales_order.ignore_pricing_rule = 1
item.weight_per_unit = 10
item.weight_uom = "Nos"
item.barcode = "OLD-BARCODE"
item.pricing_rules = "OLD-PRICING-RULE"
item.item_code = new_item.name
sales_order.process_item_selection(item.idx)
self.assertEqual(item.uom, "Kg")
self.assertEqual(item.stock_uom, "Kg")
self.assertEqual(item.conversion_factor, 1)
self.assertEqual(item.weight_per_unit, 2)
self.assertEqual(item.weight_uom, "Kg")
self.assertIsNone(item.barcode)
self.assertFalse(item.pricing_rules)
self.assertEqual((item.qty, item.warehouse, item.delivery_date), row_state)

View File

@@ -356,6 +356,17 @@ class TransactionBase(StatusUpdater):
if not item_obj.item_code:
return
# Do not carry item-specific values from the previously selected item.
for fieldname in (
"weight_per_unit",
"weight_uom",
"uom",
"conversion_factor",
"barcode",
"pricing_rules",
):
item_obj.set(fieldname, None)
# 'item_details' has latest item related values
item_details = self.fetch_item_details(item_obj)