From e6e7169f3d6903d3420e656a0fd84456f9f81598 Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Sat, 22 Jun 2024 21:27:00 +0530 Subject: [PATCH] perf: dont run queries unnecessarily, improved filters (#41993) * perf: dont run queries unnecessarily, improved filters * perf: dont run query if `in` filter is empty --- .../controllers/subcontracting_controller.py | 33 ++++++++++++------- .../serial_and_batch_bundle.py | 7 ++-- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/erpnext/controllers/subcontracting_controller.py b/erpnext/controllers/subcontracting_controller.py index 31f3c8442e..101b683d3e 100644 --- a/erpnext/controllers/subcontracting_controller.py +++ b/erpnext/controllers/subcontracting_controller.py @@ -294,16 +294,23 @@ class SubcontractingController(StockController): receipt_items = {item.name: item.get(self.subcontract_data.order_field) for item in receipt_items} consumed_materials = self.__get_consumed_items(doctype, receipt_items.keys()) - voucher_nos = [d.voucher_no for d in consumed_materials if d.voucher_no] - voucher_bundle_data = get_voucher_wise_serial_batch_from_bundle( - voucher_no=voucher_nos, - is_outward=1, - get_subcontracted_item=("Subcontracting Receipt Supplied Item", "main_item_code"), - ) - if return_consumed_items: return (consumed_materials, receipt_items) + if not consumed_materials: + return + + voucher_nos = [d.voucher_no for d in consumed_materials if d.voucher_no] + voucher_bundle_data = ( + get_voucher_wise_serial_batch_from_bundle( + voucher_no=voucher_nos, + is_outward=1, + get_subcontracted_item=("Subcontracting Receipt Supplied Item", "main_item_code"), + ) + if voucher_nos + else {} + ) + for row in consumed_materials: key = (row.rm_item_code, row.main_item_code, receipt_items.get(row.reference_name)) if not self.available_materials.get(key): @@ -350,10 +357,14 @@ class SubcontractingController(StockController): transferred_items = self.__get_transferred_items() voucher_nos = [row.voucher_no for row in transferred_items] - voucher_bundle_data = get_voucher_wise_serial_batch_from_bundle( - voucher_no=voucher_nos, - is_outward=0, - get_subcontracted_item=("Stock Entry Detail", "subcontracted_item"), + voucher_bundle_data = ( + get_voucher_wise_serial_batch_from_bundle( + voucher_no=voucher_nos, + is_outward=0, + get_subcontracted_item=("Stock Entry Detail", "subcontracted_item"), + ) + if voucher_nos + else {} ) for row in transferred_items: diff --git a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py index 2d2bfad1d4..8739f67a90 100644 --- a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py +++ b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py @@ -2118,10 +2118,13 @@ def get_ledgers_from_serial_batch_bundle(**kwargs) -> List[frappe._dict]: ) for key, val in kwargs.items(): - if not val: + if val is None: continue - if key in ["get_subcontracted_item"]: + if not val and isinstance(val, list): + return [] + + if key == "get_subcontracted_item": continue if key in ["name", "item_code", "warehouse", "voucher_no", "company", "voucher_detail_no"]: -- GitLab