diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 2f2f745bedb..cb4378e2af9 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -1352,10 +1352,17 @@ def make_purchase_order_for_default_supplier(source_name, selected_items=None, t target.stock_qty = flt(source.stock_qty) - flt(source.ordered_qty) target.project = source_parent.project + def update_item_for_packed_item(source, target, source_parent): + target.qty = flt(source.qty) - flt(source.ordered_qty) + suppliers = [item.get("supplier") for item in selected_items if item.get("supplier")] suppliers = list(dict.fromkeys(suppliers)) # remove duplicates while preserving order - items_to_map = [item.get("item_code") for item in selected_items if item.get("item_code")] + items_to_map = [ + item.get("item_code") + for item in selected_items + if item.get("item_code") and item.get("delivered_by_supplier") + ] items_to_map = list(set(items_to_map)) if not suppliers: @@ -1405,13 +1412,35 @@ def make_purchase_order_for_default_supplier(source_name, selected_items=None, t "condition": lambda doc: doc.ordered_qty < doc.stock_qty and doc.supplier == supplier and doc.item_code in items_to_map - and doc.delivered_by_supplier == 1, + and not is_product_bundle(doc.item_code), + }, + "Packed Item": { + "doctype": "Purchase Order Item", + "field_map": [ + ["name", "sales_order_packed_item"], + ["parent", "sales_order"], + ["uom", "uom"], + ["conversion_factor", "conversion_factor"], + ["parent_item", "product_bundle"], + ["rate", "rate"], + ], + "field_no_map": [ + "price_list_rate", + "item_tax_template", + "discount_percentage", + "discount_amount", + "supplier", + "pricing_rules", + ], + "postprocess": update_item_for_packed_item, + "condition": lambda doc: doc.parent_item in items_to_map, }, }, target_doc, set_missing_values, ) + set_delivery_date(doc.items, source_name) doc.insert() frappe.db.commit() purchase_orders.append(doc) @@ -1427,9 +1456,7 @@ def make_purchase_order(source_name, selected_items=None, target_doc=None): if isinstance(selected_items, str): selected_items = json.loads(selected_items) - items_to_map = [ - item.get("item_code") for item in selected_items if item.get("item_code") and item.get("item_code") - ] + items_to_map = [item.get("item_code") for item in selected_items if item.get("item_code")] items_to_map = list(set(items_to_map)) def is_drop_ship_order(target):