perf: memory consumption for the stock balance report (#39626)

This commit is contained in:
rohitwaghchaure 2024-02-05 11:46:39 +05:30 committed by GitHub
parent 955098c4c0
commit b70f3de16b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -90,8 +90,7 @@ class StockBalanceReport(object):
self.opening_data.setdefault(group_by_key, entry) self.opening_data.setdefault(group_by_key, entry)
def prepare_new_data(self): def prepare_new_data(self):
if not self.sle_entries: self.item_warehouse_map = self.get_item_warehouse_map()
return
if self.filters.get("show_stock_ageing_data"): if self.filters.get("show_stock_ageing_data"):
self.filters["show_warehouse_wise_stock"] = True self.filters["show_warehouse_wise_stock"] = True
@ -99,7 +98,8 @@ class StockBalanceReport(object):
_func = itemgetter(1) _func = itemgetter(1)
self.item_warehouse_map = self.get_item_warehouse_map() del self.sle_entries
sre_details = self.get_sre_reserved_qty_details() sre_details = self.get_sre_reserved_qty_details()
variant_values = {} variant_values = {}
@ -143,15 +143,22 @@ class StockBalanceReport(object):
item_warehouse_map = {} item_warehouse_map = {}
self.opening_vouchers = self.get_opening_vouchers() self.opening_vouchers = self.get_opening_vouchers()
for entry in self.sle_entries: if self.filters.get("show_stock_ageing_data"):
group_by_key = self.get_group_by_key(entry) self.sle_entries = self.sle_query.run(as_dict=True)
if group_by_key not in item_warehouse_map:
self.initialize_data(item_warehouse_map, group_by_key, entry)
self.prepare_item_warehouse_map(item_warehouse_map, entry, group_by_key) with frappe.db.unbuffered_cursor():
if not self.filters.get("show_stock_ageing_data"):
self.sle_entries = self.sle_query.run(as_dict=True, as_iterator=True)
if self.opening_data.get(group_by_key): for entry in self.sle_entries:
del self.opening_data[group_by_key] group_by_key = self.get_group_by_key(entry)
if group_by_key not in item_warehouse_map:
self.initialize_data(item_warehouse_map, group_by_key, entry)
self.prepare_item_warehouse_map(item_warehouse_map, entry, group_by_key)
if self.opening_data.get(group_by_key):
del self.opening_data[group_by_key]
for group_by_key, entry in self.opening_data.items(): for group_by_key, entry in self.opening_data.items():
if group_by_key not in item_warehouse_map: if group_by_key not in item_warehouse_map:
@ -252,7 +259,8 @@ class StockBalanceReport(object):
.where( .where(
(table.docstatus == 1) (table.docstatus == 1)
& (table.company == self.filters.company) & (table.company == self.filters.company)
& ((table.to_date <= self.from_date)) & (table.to_date <= self.from_date)
& (table.status == "Completed")
) )
.orderby(table.to_date, order=Order.desc) .orderby(table.to_date, order=Order.desc)
.limit(1) .limit(1)
@ -305,7 +313,7 @@ class StockBalanceReport(object):
if self.filters.get("company"): if self.filters.get("company"):
query = query.where(sle.company == self.filters.get("company")) query = query.where(sle.company == self.filters.get("company"))
self.sle_entries = query.run(as_dict=True) self.sle_query = query
def apply_inventory_dimensions_filters(self, query, sle) -> str: def apply_inventory_dimensions_filters(self, query, sle) -> str:
inventory_dimension_fields = self.get_inventory_dimension_fields() inventory_dimension_fields = self.get_inventory_dimension_fields()