diff --git a/frappe/desk/reportview.py b/frappe/desk/reportview.py index 893c2a6606..d6dce68399 100644 --- a/frappe/desk/reportview.py +++ b/frappe/desk/reportview.py @@ -156,6 +156,8 @@ def setup_group_by(data): **data ) ) + if data.aggregate_on_field: + data.fields.append(f"`tab{data.aggregate_on_doctype}`.`{data.aggregate_on_field}`") else: raise_invalid_field(data.aggregate_on_field) @@ -433,20 +435,11 @@ def append_totals_row(data): def get_labels(fields, doctype): """get column labels based on column names""" labels = [] - doctype = doctype.lower() for key in fields: - aggregate_function = "" - - key = key.casefold().split(" as ", maxsplit=1)[0] + key = key.split(" as ")[0] if key.startswith(("count(", "sum(", "avg(")): - # Get aggregate function and _aggregate_column - # key = 'sum(`tabDocType`.`fieldname`)' - if not key.rstrip().endswith(")"): - continue - _agg_fn, _key = key.split("(", maxsplit=1) - aggregate_function = _agg_fn.lower() # aggregate_function = 'sum' - key = _key[:-1] # key = `tabDocType`.`fieldname` + continue if "." in key: parenttype, fieldname = key.split(".")[0][4:-1], key.split(".")[1].strip("`") @@ -462,10 +455,7 @@ def get_labels(fields, doctype): if parenttype != doctype: # If the column is from a child table, append the child doctype. # For example, "Item Code (Sales Invoice Item)". - label += f" ({ _(parenttype.title()) })" - - if aggregate_function: - label = _("{0} of {1}").format(aggregate_function.capitalize(), label) + label += f" ({ _(parenttype) })" labels.append(label) @@ -474,7 +464,7 @@ def get_labels(fields, doctype): def handle_duration_fieldtype_values(doctype, data, fields): for field in fields: - key = field.casefold().split(" as ", maxsplit=1)[0] + key = field.split(" as ")[0] if key.startswith(("count(", "sum(", "avg(")): continue diff --git a/frappe/model/db_query.py b/frappe/model/db_query.py index 0b8f790246..7fb38848e2 100644 --- a/frappe/model/db_query.py +++ b/frappe/model/db_query.py @@ -417,8 +417,6 @@ class DatabaseQuery(object): "extract(", "locate(", "strpos(", - ] - aggregate_functions = [ "count(", "sum(", "avg(", @@ -429,9 +427,6 @@ class DatabaseQuery(object): if not ("tab" in field and "." in field) or any(x for x in sql_functions if x in field): continue - if any(x for x in aggregate_functions if x in field): - field = field.split("(", 1)[1][:-1] - table_name = field.split(".")[0] if table_name.lower().startswith("group_concat("): diff --git a/frappe/tests/test_db_query.py b/frappe/tests/test_db_query.py index 2dd1743767..c1b2e05266 100644 --- a/frappe/tests/test_db_query.py +++ b/frappe/tests/test_db_query.py @@ -643,7 +643,9 @@ class TestReportview(unittest.TestCase): ) response = execute_cmd("frappe.desk.reportview.get") - self.assertListEqual(response["keys"], ["field_label", "field_name", "_aggregate_column"]) + self.assertListEqual( + response["keys"], ["field_label", "field_name", "_aggregate_column", "columns"] + ) def test_cast_name(self): from frappe.core.doctype.doctype.test_doctype import new_doctype