Merge pull request #35510 from s-aga-r/FIX-ISS-23-24-01141
fix: ignore `Non-Stock Item` while calculating `% Picked` in Sales Order
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index 353fa9b..d3c2347 100755
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -415,10 +415,17 @@
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 b993f43..4970bf7 100644
--- a/erpnext/stock/doctype/pick_list/pick_list.py
+++ b/erpnext/stock/doctype/pick_list/pick_list.py
@@ -288,6 +288,10 @@
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)