Skip to content

Commit

Permalink
perf: memory consumption for the stock balance report (#39626)
Browse files Browse the repository at this point in the history
(cherry picked from commit b70f3de)
  • Loading branch information
rohitwaghchaure authored and mergify[bot] committed Feb 5, 2024
1 parent 3eac436 commit 5e29aab
Showing 1 changed file with 20 additions and 12 deletions.
32 changes: 20 additions & 12 deletions erpnext/stock/report/stock_balance/stock_balance.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,16 +90,16 @@ def prepare_opening_data_from_closing_balance(self) -> None:
self.opening_data.setdefault(group_by_key, entry)

def prepare_new_data(self):
if not self.sle_entries:
return
self.item_warehouse_map = self.get_item_warehouse_map()

if self.filters.get("show_stock_ageing_data"):
self.filters["show_warehouse_wise_stock"] = True
item_wise_fifo_queue = FIFOSlots(self.filters, self.sle_entries).generate()

_func = itemgetter(1)

self.item_warehouse_map = self.get_item_warehouse_map()
del self.sle_entries

sre_details = self.get_sre_reserved_qty_details()

variant_values = {}
Expand Down Expand Up @@ -143,15 +143,22 @@ def get_item_warehouse_map(self):
item_warehouse_map = {}
self.opening_vouchers = self.get_opening_vouchers()

for entry in self.sle_entries:
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)
if self.filters.get("show_stock_ageing_data"):
self.sle_entries = self.sle_query.run(as_dict=True)

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)

for entry in self.sle_entries:
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)
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]
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():
if group_by_key not in item_warehouse_map:
Expand Down Expand Up @@ -252,7 +259,8 @@ def get_closing_balance(self) -> List[Dict[str, Any]]:
.where(
(table.docstatus == 1)
& (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)
.limit(1)
Expand Down Expand Up @@ -305,7 +313,7 @@ def prepare_stock_ledger_entries(self):
if 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:
inventory_dimension_fields = self.get_inventory_dimension_fields()
Expand Down

0 comments on commit 5e29aab

Please sign in to comment.