refactor: use `get_product_bundle_list()` to get all product bundle at once
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index 2a3f9fc..ce33d26 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -308,11 +308,19 @@
def validate_packed_qty(self):
"""Validate that if packed qty exists, it should be equal to qty"""
- for item in self.items + self.packed_items:
- if item.packed_qty and item.packed_qty != item.qty:
- frappe.throw(
- _("Row {0}: Packed Qty must be equal to {1} Qty.").format(item.idx, frappe.bold(item.doctype))
- )
+ if frappe.db.exists("Packing Slip", {"docstatus": 1, "delivery_note": self.name}):
+ product_bundle_list = self.get_product_bundle_list()
+ for item in self.items + self.packed_items:
+ if (
+ item.item_code not in product_bundle_list
+ and flt(item.packed_qty)
+ and flt(item.packed_qty) != flt(item.qty)
+ ):
+ frappe.throw(
+ _("Row {0}: Packed Qty must be equal to {1} Qty.").format(
+ item.idx, frappe.bold(item.doctype)
+ )
+ )
def update_pick_list_status(self):
from erpnext.stock.doctype.pick_list.pick_list import update_pick_list_status
@@ -391,19 +399,22 @@
)
def has_unpacked_items(self):
- for item in self.items:
- if (
- not frappe.db.exists("Product Bundle", {"new_item_code": item.item_code})
- and item.packed_qty < item.qty
- ):
- return True
+ product_bundle_list = self.get_product_bundle_list()
- for item in self.packed_items:
- if item.packed_qty < item.qty:
+ for item in self.items + self.packed_items:
+ if item.item_code not in product_bundle_list and flt(item.packed_qty) < flt(item.qty):
return True
return False
+ def get_product_bundle_list(self):
+ items_list = [item.item_code for item in self.items]
+ return frappe.db.get_all(
+ "Product Bundle",
+ filters={"new_item_code": ["in", items_list]},
+ pluck="name",
+ )
+
def update_billed_amount_based_on_so(so_detail, update_modified=True):
from frappe.query_builder.functions import Sum
@@ -724,7 +735,7 @@
"postprocess": update_item,
"condition": lambda item: (
not frappe.db.exists("Product Bundle", {"new_item_code": item.item_code})
- and item.packed_qty < item.qty
+ and flt(item.packed_qty) < flt(item.qty)
),
},
"Packed Item": {
@@ -738,7 +749,7 @@
"name": "pi_detail",
},
"postprocess": update_item,
- "condition": lambda item: (item.packed_qty < item.qty),
+ "condition": lambda item: (flt(item.packed_qty) < flt(item.qty)),
},
},
target_doc,