refactor: sum up SLE value in query
diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py
index d928dca..9c2e2c8 100644
--- a/erpnext/stock/utils.py
+++ b/erpnext/stock/utils.py
@@ -7,7 +7,7 @@
import frappe
from frappe import _
-from frappe.query_builder.functions import CombineDatetime
+from frappe.query_builder.functions import CombineDatetime, IfNull, Sum
from frappe.utils import cstr, flt, get_link_to_form, nowdate, nowtime
from pypika.terms import ExistsCriterion
@@ -61,12 +61,7 @@
sle = frappe.qb.DocType("Stock Ledger Entry")
query = (
frappe.qb.from_(sle)
- .select(
- sle.item_code,
- sle.stock_value,
- sle.name,
- sle.warehouse,
- )
+ .select(IfNull(Sum(sle.stock_value_difference), 0))
.where((sle.posting_date <= posting_date) & (sle.is_cancelled == 0))
.orderby(CombineDatetime(sle.posting_date, sle.posting_time), order=frappe.qb.desc)
.orderby(sle.creation, order=frappe.qb.desc)
@@ -90,14 +85,7 @@
if item_code:
query = query.where(sle.item_code == item_code)
- stock_ledger_entries = query.run(as_dict=True)
-
- sle_map = {}
- for sle in stock_ledger_entries:
- if not (sle.item_code, sle.warehouse) in sle_map:
- sle_map[(sle.item_code, sle.warehouse)] = flt(sle.stock_value)
-
- return sum(sle_map.values())
+ return query.run(as_list=True)[0][0]
@frappe.whitelist()