fix: Map Packed Items to Items table of PO
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index ff459cb..f190081 100755
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -947,59 +947,48 @@
"pricing_rules"
],
"postprocess": update_item,
- "condition": lambda doc: doc.ordered_qty < doc.stock_qty and doc.item_code in items_to_map
+ "condition": lambda doc: doc.ordered_qty < doc.stock_qty and doc.item_code in items_to_map and not is_product_bundle(doc.item_code)
+ },
+ "Packed Item": {
+ "doctype": "Purchase Order Item",
+ "field_map": [
+ ["parent", "sales_order"],
+ ["uom", "uom"],
+ ["conversion_factor", "conversion_factor"],
+ ["parent_item", "product_bundle"],
+ ["rate", "rate"]
+ ],
+ "field_no_map": [
+ "rate",
+ "price_list_rate",
+ "item_tax_template",
+ "discount_percentage",
+ "discount_amount",
+ "supplier",
+ "pricing_rules"
+ ],
}
}, target_doc, set_missing_values)
- doc.items = replace_product_bundles_with_bundle_items(doc.items, source_name)
-
+ set_delivery_date(doc.items, source_name)
+
return doc
-def replace_product_bundles_with_bundle_items(items, sales_order_name):
- updated_items = []
-
+def set_delivery_date(items, sales_order):
for item in items:
- if is_product_bundle(item.item_code):
- bundle_items = get_bundle_items(item.item_code, sales_order_name)
- insert_bundle_items(updated_items, bundle_items, item, sales_order_name)
- else:
- updated_items.append(item)
-
- items = updated_items
-
- return items
+ if item.product_bundle:
+ item.schedule_date = frappe.get_value(
+ 'Sales Order Item',
+ {
+ 'parent': sales_order,
+ 'item_code': item.product_bundle
+ },
+ 'delivery_date'
+ )
def is_product_bundle(item_code):
return frappe.db.exists('Product Bundle', item_code)
-def get_bundle_items(item_code, so_name):
- return frappe.get_all(
- 'Packed Item',
- filters = {
- 'parent': so_name,
- 'parent_item': item_code
- },
- fields = ['item_code', 'item_name', 'qty', 'rate', 'uom']
- )
-
-def insert_bundle_items(updated_items, bundle_items, item, sales_order):
- for bundle_item in bundle_items:
- new_item = frappe.get_doc({
- 'doctype': 'Purchase Order Item',
- 'item_code': bundle_item.item_code,
- 'item_name': bundle_item.item_name,
- 'product_bundle': item.item_code,
- 'qty': bundle_item.qty,
- 'rate': bundle_item.rate,
- 'uom': bundle_item.uom,
- 'schedule_date': item.schedule_date,
- 'sales_order': sales_order,
- 'expense_account': item.expense_account,
- 'cost_center': item.cost_center
- })
-
- updated_items.append(new_item)
-
@frappe.whitelist()
def make_work_orders(items, sales_order, company, project=None):
'''Make Work Orders against the given Sales Order for the given `items`'''