diff --git a/erpnext/stock/doctype/pick_list/pick_list.py b/erpnext/stock/doctype/pick_list/pick_list.py index 507534a16ac..cb2e05916d5 100644 --- a/erpnext/stock/doctype/pick_list/pick_list.py +++ b/erpnext/stock/doctype/pick_list/pick_list.py @@ -7,7 +7,7 @@ from itertools import groupby import frappe from frappe import _, bold -from frappe.model.mapper import get_mapped_doc, map_child_doc +from frappe.model.mapper import map_child_doc from frappe.query_builder import Case from frappe.query_builder.custom import GROUP_CONCAT from frappe.query_builder.functions import Coalesce, Locate, Replace, Sum @@ -639,8 +639,8 @@ class PickList(TransactionBase): product_bundles = self._get_product_bundles() product_bundle_qty_map = self._get_product_bundle_qty_map(product_bundles.values()) - for so_row, item_code in product_bundles.items(): - picked_qty = self._compute_picked_qty_for_bundle(so_row, product_bundle_qty_map[item_code]) + for so_row, value in product_bundles.items(): + picked_qty = self._compute_picked_qty_for_bundle(so_row, product_bundle_qty_map[value.item_code]) item_table = "Sales Order Item" already_picked = frappe.db.get_value(item_table, so_row, "picked_qty", for_update=True) frappe.db.set_value( @@ -763,19 +763,23 @@ class PickList(TransactionBase): if not item.product_bundle_item: continue - product_bundles[item.sales_order_item] = frappe.db.get_value( - "Sales Order Item", - item.sales_order_item, - "item_code", + product_bundles[item.sales_order_item] = frappe._dict( + { + "item_code": frappe.db.get_value( + "Sales Order Item", + item.sales_order_item, + "item_code", + ), + "pick_list_item": item.name, + } ) return product_bundles - def _get_product_bundle_qty_map(self, bundles: list[str]) -> dict[str, dict[str, float]]: - # bundle_item_code: Dict[component, qty] + def _get_product_bundle_qty_map(self, bundles) -> dict[str, dict[str, float]]: product_bundle_qty_map = {} - for bundle_item_code in bundles: - bundle = frappe.get_last_doc("Product Bundle", {"new_item_code": bundle_item_code, "disabled": 0}) - product_bundle_qty_map[bundle_item_code] = {item.item_code: item.qty for item in bundle.items} + for data in bundles: + bundle = frappe.get_last_doc("Product Bundle", {"new_item_code": data.item_code, "disabled": 0}) + product_bundle_qty_map[data.item_code] = {item.item_code: item.qty for item in bundle.items} return product_bundle_qty_map def _compute_picked_qty_for_bundle(self, bundle_row, bundle_items) -> int: @@ -1380,15 +1384,16 @@ def add_product_bundles_to_delivery_note( product_bundles = pick_list._get_product_bundles() product_bundle_qty_map = pick_list._get_product_bundle_qty_map(product_bundles.values()) - for so_row, item_code in product_bundles.items(): + for so_row, value in product_bundles.items(): sales_order_item = frappe.get_doc("Sales Order Item", so_row) if sales_order and sales_order_item.parent != sales_order: continue dn_bundle_item = map_child_doc(sales_order_item, delivery_note, item_mapper) dn_bundle_item.qty = pick_list._compute_picked_qty_for_bundle( - so_row, product_bundle_qty_map[item_code] + so_row, product_bundle_qty_map[value.item_code] ) + dn_bundle_item.pick_list_item = value.pick_list_item dn_bundle_item.against_pick_list = pick_list.name update_delivery_note_item(sales_order_item, dn_bundle_item, delivery_note)