diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 353fa9bb29..d3c2347216 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -415,10 +415,17 @@ class SalesOrder(SellingController): def update_picking_status(self): total_picked_qty = 0.0 total_qty = 0.0 + per_picked = 0.0 + for so_item in self.items: - total_picked_qty += flt(so_item.picked_qty) - total_qty += flt(so_item.stock_qty) - per_picked = total_picked_qty / total_qty * 100 + if cint( + frappe.get_cached_value("Item", so_item.item_code, "is_stock_item") + ) or self.has_product_bundle(so_item.item_code): + total_picked_qty += flt(so_item.picked_qty) + total_qty += flt(so_item.stock_qty) + + if total_picked_qty and total_qty: + per_picked = total_picked_qty / total_qty * 100 self.db_set("per_picked", flt(per_picked), update_modified=False) diff --git a/erpnext/stock/doctype/pick_list/pick_list.py b/erpnext/stock/doctype/pick_list/pick_list.py index b993f43035..4970bf7292 100644 --- a/erpnext/stock/doctype/pick_list/pick_list.py +++ b/erpnext/stock/doctype/pick_list/pick_list.py @@ -288,6 +288,10 @@ class PickList(Document): for item in locations: if not item.item_code: frappe.throw("Row #{0}: Item Code is Mandatory".format(item.idx)) + if not cint( + frappe.get_cached_value("Item", item.item_code, "is_stock_item") + ) and not frappe.db.exists("Product Bundle", {"new_item_code": item.item_code}): + continue item_code = item.item_code reference = item.sales_order_item or item.material_request_item key = (item_code, item.uom, item.warehouse, item.batch_no, reference)