diff --git a/frappe/desk/query_report.py b/frappe/desk/query_report.py index 2013774cb6..9ce15ef361 100644 --- a/frappe/desk/query_report.py +++ b/frappe/desk/query_report.py @@ -66,7 +66,7 @@ def generate_report_result(report, filters=None, user=None, custom_columns=None) # Reordered columns columns = json.loads(report.custom_columns) - result = reorder_data_for_custom_columns(columns, query_columns, result, report.report_type) + result = reorder_data_for_custom_columns(columns, query_columns, result) result = add_data_to_custom_columns(columns, result) @@ -214,25 +214,19 @@ def add_data_to_custom_columns(columns, result): return data -def reorder_data_for_custom_columns(custom_columns, columns, result, report_type): +def reorder_data_for_custom_columns(custom_columns, columns, result): if not result: return [] - if report_type == 'Query Report': - # Assume list result for query reports - # Query report columns exclusively use Label - custom_column_labels = [col["label"] for col in custom_columns] - original_column_labels = [col.split(":")[0] for col in columns] - return get_columns_from_list(custom_column_labels, original_column_labels, result) - - custom_column_names = [col["fieldname"] for col in custom_columns] + columns = [get_column_as_dict(col) for col in columns] if isinstance(result[0], list) or isinstance(result[0], tuple): # If the result is a list of lists - original_column_names = [col["fieldname"] for col in columns] + custom_column_names = [col["label"] for col in custom_columns] + original_column_names = [col["label"] for col in columns] return get_columns_from_list(custom_column_names, original_column_names, result) else: - # If the result is a list of dicts - return get_columns_from_dict(custom_column_names, result) + # columns do not need to be reordered if result is a list of dicts + return result def get_columns_from_list(columns, target_columns, result): reordered_result = [] @@ -250,21 +244,6 @@ def get_columns_from_list(columns, target_columns, result): return reordered_result -def get_columns_from_dict(columns, result): - reordered_result = [] - - for res in result: - r = {} - for col_name in columns: - try: - r[col_name] = res[col_name] - except KeyError: - pass - - reordered_result.append(r) - - return reordered_result - def get_prepared_report_result(report, filters, dn="", user=None): latest_report_data = {} doc = None @@ -663,31 +642,35 @@ def get_columns_dict(columns): """ columns_dict = frappe._dict() for idx, col in enumerate(columns): - col_dict = frappe._dict() - - # string - if isinstance(col, string_types): - col = col.split(":") - if len(col) > 1: - if "/" in col[1]: - col_dict["fieldtype"], col_dict["options"] = col[1].split("/") - else: - col_dict["fieldtype"] = col[1] - - col_dict["label"] = col[0] - col_dict["fieldname"] = frappe.scrub(col[0]) - - # dict - else: - col_dict.update(col) - if "fieldname" not in col_dict: - col_dict["fieldname"] = frappe.scrub(col_dict["label"]) - + col_dict = get_column_as_dict(col) columns_dict[idx] = col_dict columns_dict[col_dict["fieldname"]] = col_dict return columns_dict +def get_column_as_dict(col): + col_dict = frappe._dict() + + # string + if isinstance(col, string_types): + col = col.split(":") + if len(col) > 1: + if "/" in col[1]: + col_dict["fieldtype"], col_dict["options"] = col[1].split("/") + else: + col_dict["fieldtype"] = col[1] + + col_dict["label"] = col[0] + col_dict["fieldname"] = frappe.scrub(col[0]) + + # dict + else: + col_dict.update(col) + if "fieldname" not in col_dict: + col_dict["fieldname"] = frappe.scrub(col_dict["label"]) + + return col_dict + def get_user_match_filters(doctypes, user): match_filters = {}