From 8e937e9640694cc38b2611db407e192569ff31e2 Mon Sep 17 00:00:00 2001 From: Anurag Mishra <32095923+Anurag810@users.noreply.github.com> Date: Fri, 11 Oct 2019 11:50:38 +0530 Subject: [PATCH] fix: packed items child table reset on amending docs (#19157) --- .../stock/doctype/packed_item/packed_item.py | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/erpnext/stock/doctype/packed_item/packed_item.py b/erpnext/stock/doctype/packed_item/packed_item.py index a09a3a8376..831381c86a 100644 --- a/erpnext/stock/doctype/packed_item/packed_item.py +++ b/erpnext/stock/doctype/packed_item/packed_item.py @@ -7,7 +7,6 @@ from __future__ import unicode_literals 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 @@ def get_bin_qty(item, warehouse): 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 @@ def update_packing_list_item(doc, packing_item_code, qty, main_item_row, descrip 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 get_items_from_product_bundle(args): 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