Merge pull request #55359 from frappe/mergify/bp/version-16-hotfix/pr-55137

fix: use get_query instead of get_all for data fetching (backport #55137)
This commit is contained in:
Khushi Rawat
2026-05-29 15:36:28 +05:30
committed by GitHub

View File

@@ -191,12 +191,30 @@ class Analytics:
self.get_sales_transactions_based_on_project() self.get_sales_transactions_based_on_project()
self.get_rows() self.get_rows()
def _get_permitted_parent_names(self):
return frappe.qb.get_query(
table=self.filters.doc_type,
fields=["name"],
filters={
"docstatus": 1,
"company": ["in", self.filters.company],
self.date_field: ("between", [self.filters.from_date, self.filters.to_date]),
},
ignore_permissions=False,
).run(pluck="name")
def get_sales_transactions_based_on_order_type(self): def get_sales_transactions_based_on_order_type(self):
if self.filters["value_quantity"] == "Value": if self.filters["value_quantity"] == "Value":
value_field = "base_net_total" value_field = "base_net_total"
else: else:
value_field = "total_qty" value_field = "total_qty"
permitted_names = self._get_permitted_parent_names()
if not permitted_names:
self.entries = []
self.get_teams()
return
doctype = DocType(self.filters.doc_type) doctype = DocType(self.filters.doc_type)
self.entries = ( self.entries = (
@@ -206,12 +224,7 @@ class Analytics:
doctype[self.date_field], doctype[self.date_field],
doctype[value_field].as_("value_field"), doctype[value_field].as_("value_field"),
) )
.where( .where((doctype.name.isin(permitted_names)) & (IfNull(doctype.order_type, "") != ""))
(doctype.docstatus == 1)
& (doctype.company.isin(self.filters.company))
& (doctype[self.date_field].between(self.filters.from_date, self.filters.to_date))
& (IfNull(doctype.order_type, "") != "")
)
.orderby(doctype.order_type) .orderby(doctype.order_type)
).run(as_dict=True) ).run(as_dict=True)
@@ -250,9 +263,12 @@ class Analytics:
if self.filters.doc_type in ["Sales Invoice", "Purchase Invoice", "Payment Entry"]: if self.filters.doc_type in ["Sales Invoice", "Purchase Invoice", "Payment Entry"]:
filters.update({"is_opening": "No"}) filters.update({"is_opening": "No"})
self.entries = frappe.get_all( self.entries = frappe.qb.get_query(
self.filters.doc_type, fields=[entity, entity_name, value_field, self.date_field], filters=filters table=self.filters.doc_type,
) fields=[entity, entity_name, value_field, self.date_field],
filters=filters,
ignore_permissions=False,
).run(as_dict=True)
self.entity_names = {} self.entity_names = {}
for d in self.entries: for d in self.entries:
@@ -264,6 +280,12 @@ class Analytics:
else: else:
value_field = "stock_qty" value_field = "stock_qty"
permitted_names = self._get_permitted_parent_names()
if not permitted_names:
self.entries = []
self.entity_names = {}
return
doctype = DocType(self.filters.doc_type) doctype = DocType(self.filters.doc_type)
doctype_item = DocType(f"{self.filters.doc_type} Item") doctype_item = DocType(f"{self.filters.doc_type} Item")
@@ -278,11 +300,7 @@ class Analytics:
doctype_item[value_field].as_("value_field"), doctype_item[value_field].as_("value_field"),
doctype[self.date_field], doctype[self.date_field],
) )
.where( .where((doctype_item.docstatus == 1) & (doctype.name.isin(permitted_names)))
(doctype_item.docstatus == 1)
& (doctype.company.isin(self.filters.company))
& (doctype[self.date_field].between(self.filters.from_date, self.filters.to_date))
)
).run(as_dict=True) ).run(as_dict=True)
self.entity_names = {} self.entity_names = {}
@@ -312,11 +330,12 @@ class Analytics:
if self.filters.doc_type in ["Sales Invoice", "Purchase Invoice", "Payment Entry"]: if self.filters.doc_type in ["Sales Invoice", "Purchase Invoice", "Payment Entry"]:
filters.update({"is_opening": "No"}) filters.update({"is_opening": "No"})
self.entries = frappe.get_all( self.entries = frappe.qb.get_query(
self.filters.doc_type, table=self.filters.doc_type,
fields=[entity_field, value_field, self.date_field], fields=[entity_field, value_field, self.date_field],
filters=filters, filters=filters,
) ignore_permissions=False,
).run(as_dict=True)
self.get_groups() self.get_groups()
def get_sales_transactions_based_on_item_group(self): def get_sales_transactions_based_on_item_group(self):
@@ -325,6 +344,12 @@ class Analytics:
else: else:
value_field = "qty" value_field = "qty"
permitted_names = self._get_permitted_parent_names()
if not permitted_names:
self.entries = []
self.get_groups()
return
doctype = DocType(self.filters.doc_type) doctype = DocType(self.filters.doc_type)
doctype_item = DocType(f"{self.filters.doc_type} Item") doctype_item = DocType(f"{self.filters.doc_type} Item")
@@ -337,11 +362,7 @@ class Analytics:
doctype_item[value_field].as_("value_field"), doctype_item[value_field].as_("value_field"),
doctype[self.date_field], doctype[self.date_field],
) )
.where( .where((doctype_item.docstatus == 1) & (doctype.name.isin(permitted_names)))
(doctype_item.docstatus == 1)
& (doctype.company.isin(self.filters.company))
& (doctype[self.date_field].between(self.filters.from_date, self.filters.to_date))
)
).run(as_dict=True) ).run(as_dict=True)
self.get_groups() self.get_groups()
@@ -367,9 +388,12 @@ class Analytics:
if self.filters.doc_type in ["Sales Invoice", "Purchase Invoice", "Payment Entry"]: if self.filters.doc_type in ["Sales Invoice", "Purchase Invoice", "Payment Entry"]:
filters.update({"is_opening": "No"}) filters.update({"is_opening": "No"})
self.entries = frappe.get_all( self.entries = frappe.qb.get_query(
self.filters.doc_type, fields=[entity, value_field, self.date_field], filters=filters table=self.filters.doc_type,
) fields=[entity, value_field, self.date_field],
filters=filters,
ignore_permissions=False,
).run(as_dict=True)
def get_rows(self): def get_rows(self):
self.data = [] self.data = []