diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js index 0150477dab735f95e51e4935686c32ba9c23cdab..4d849cbec332d1ac35195bfd17968a0f2cc6efbc 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.js +++ b/erpnext/selling/doctype/sales_order/sales_order.js @@ -1605,7 +1605,7 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex make_purchase_order() { let pending_items = this.frm.doc.items.some((item) => { - let pending_qty = flt(item.stock_qty) - flt(item.ordered_qty); + const pending_qty = flt(item.stock_qty) - this.get_ordered_qty(item, this.frm.doc); return item.item_code && pending_qty > 0; // @dokos }); if (!pending_items) { @@ -1763,9 +1763,10 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex // calculate ordered qty based on packed items in case of product bundle let packed_items = so.packed_items.filter((pi) => pi.parent_detail_docname == item.name); if (packed_items && packed_items.length) { - const pi_qty = packed_items.reduce((sum, pi) => sum + flt(pi.qty), 0); - const pi_ordered_qty = packed_items.reduce((sum, pi) => sum + flt(pi.ordered_qty), 0); - ordered_qty = item.stock_qty * (pi_ordered_qty / pi_qty); + const all_packed_items_ordered = packed_items.every( + (pi) => flt(pi.ordered_qty) >= flt(pi.qty) + ); + ordered_qty = all_packed_items_ordered ? item.stock_qty : 0; } } return ordered_qty; diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 47eecf858fbc830853c55ab4fb35438c22952f4e..541321b976b38c2942c4054c05bf6830babe4430 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -1830,7 +1830,8 @@ def make_purchase_order_for_default_supplier(source_name, selected_items=None, t "pricing_rules", ], "postprocess": update_item_for_packed_item, - "condition": lambda doc: doc.parent_item in items_to_map, + "condition": lambda doc: doc.parent_item in items_to_map + and flt(doc.ordered_qty) < flt(doc.qty), }, }, target_doc, @@ -1974,7 +1975,8 @@ def make_purchase_order(source_name, selected_items=None, target_doc=None): "pricing_rules", ], "postprocess": update_item_for_packed_item, - "condition": lambda doc: doc.parent_item in items_to_map, + "condition": lambda doc: doc.parent_item in items_to_map + and flt(doc.ordered_qty) < flt(doc.qty), }, }, target_doc,