fix: packed items child table reset on amending docs (#19157)

diff --git a/erpnext/stock/doctype/packed_item/packed_item.py b/erpnext/stock/doctype/packed_item/packed_item.py
index a09a3a8..831381c 100644
--- a/erpnext/stock/doctype/packed_item/packed_item.py
+++ b/erpnext/stock/doctype/packed_item/packed_item.py
@@ -7,7 +7,6 @@
 import frappe, json
 from frappe.utils import cstr, flt
 from erpnext.stock.get_item_details import get_item_details
-
 from frappe.model.document import Document
 
 class PackedItem(Document):
@@ -31,6 +30,10 @@
 	return det and det[0] or frappe._dict()
 
 def update_packing_list_item(doc, packing_item_code, qty, main_item_row, description):
+	if doc.amended_from:
+		old_packed_items_map = get_old_packed_item_details(doc.packed_items)
+	else:
+		old_packed_items_map = False
 	item = get_packing_item_details(packing_item_code, doc.company)
 
 	# check if exists
@@ -52,21 +55,23 @@
 	pi.qty = flt(qty)
 	if description and not pi.description:
 		pi.description = description
-	if not pi.warehouse:
+	if not pi.warehouse and not doc.amended_from:
 		pi.warehouse = (main_item_row.warehouse if ((doc.get('is_pos') or item.is_stock_item \
 			or not item.default_warehouse) and main_item_row.warehouse) else item.default_warehouse)
-
-	if not pi.batch_no:
+	if not pi.batch_no and not doc.amended_from:
 		pi.batch_no = cstr(main_item_row.get("batch_no"))
 	if not pi.target_warehouse:
 		pi.target_warehouse = main_item_row.get("target_warehouse")
 	bin = get_bin_qty(packing_item_code, pi.warehouse)
 	pi.actual_qty = flt(bin.get("actual_qty"))
 	pi.projected_qty = flt(bin.get("projected_qty"))
+	if old_packed_items_map:
+		pi.batch_no = old_packed_items_map.get((packing_item_code, main_item_row.item_code))[0].batch_no
+		pi.serial_no = old_packed_items_map.get((packing_item_code, main_item_row.item_code))[0].serial_no
+		pi.warehouse = old_packed_items_map.get((packing_item_code, main_item_row.item_code))[0].warehouse
 
 def make_packing_list(doc):
 	"""make packing list for Product Bundle item"""
-
 	if doc.get("_action") and doc._action == "update_after_submit": return
 
 	parent_items = []
@@ -113,3 +118,9 @@
 
 def on_doctype_update():
 	frappe.db.add_index("Packed Item", ["item_code", "warehouse"])
+
+def get_old_packed_item_details(old_packed_items):
+	old_packed_items_map = {}
+	for items in old_packed_items:
+		old_packed_items_map.setdefault((items.item_code ,items.parent_item), []).append(items.as_dict())
+	return old_packed_items_map