From a9bbdc01826f9f4a17c240a807e7735ec593efdf Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Tue, 18 Aug 2020 13:42:18 +0530 Subject: [PATCH 1/5] fix: handle both list and dict results --- frappe/desk/query_report.py | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/frappe/desk/query_report.py b/frappe/desk/query_report.py index d0a32ef076..656b49046a 100644 --- a/frappe/desk/query_report.py +++ b/frappe/desk/query_report.py @@ -216,20 +216,32 @@ def add_data_to_custom_columns(columns, result): return data def reorder_data_for_custom_columns(custom_columns, columns, result, report_type): - custom_column_labels = [col["label"] for col in custom_columns] + if not result: + return [] if report_type == 'Query Report': + # Assume list result for query reports + # Query report columns exclisvuely use Label + custom_column_labels = [col["label"] for col in custom_columns] original_column_labels = [col.split(":")[0] for col in columns] - else: - original_column_labels = [col["label"] for col in columns] + return get_columns_from_list(custom_column_labels, original_column_labels, result) + if type(result[0]) == "list": + # If the result is a list of lists + original_column_names = [col["fieldname"] 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) + +def get_columns_from_list(columns, target_columns, result): reordered_result = [] for res in result: r = [] - for col_name in custom_column_labels: + for col_name in columns: try: - idx = original_column_labels.index(col_name) + idx = target_columns.index(col_name) r.append(res[idx]) except ValueError: pass @@ -238,6 +250,21 @@ def reorder_data_for_custom_columns(custom_columns, columns, result, report_type 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 From 246938f779b7fd255e782906ef04023a92e51d38 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Mon, 24 Aug 2020 07:47:32 +0000 Subject: [PATCH 2/5] fix: use list Co-authored-by: Rohan --- frappe/desk/query_report.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/desk/query_report.py b/frappe/desk/query_report.py index 656b49046a..db945915e9 100644 --- a/frappe/desk/query_report.py +++ b/frappe/desk/query_report.py @@ -226,7 +226,7 @@ def reorder_data_for_custom_columns(custom_columns, columns, result, report_type original_column_labels = [col.split(":")[0] for col in columns] return get_columns_from_list(custom_column_labels, original_column_labels, result) - if type(result[0]) == "list": + if isinstance(result[0], list): # If the result is a list of lists original_column_names = [col["fieldname"] for col in columns] return get_columns_from_list(custom_column_names, original_column_names, result) From 96a3d35d6c1bdf20e3a274b54ac3e2acef5e7617 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Mon, 24 Aug 2020 13:22:11 +0530 Subject: [PATCH 3/5] fix: add custom_column_names --- frappe/desk/query_report.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frappe/desk/query_report.py b/frappe/desk/query_report.py index db945915e9..7a06859d20 100644 --- a/frappe/desk/query_report.py +++ b/frappe/desk/query_report.py @@ -221,11 +221,12 @@ def reorder_data_for_custom_columns(custom_columns, columns, result, report_type if report_type == 'Query Report': # Assume list result for query reports - # Query report columns exclisvuely use Label + # 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] if isinstance(result[0], list): # If the result is a list of lists original_column_names = [col["fieldname"] for col in columns] From 9ba45f03607a4480fd06327c049a7195eca85061 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Mon, 24 Aug 2020 13:59:28 +0530 Subject: [PATCH 4/5] fix: handle tuple and list --- frappe/desk/query_report.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frappe/desk/query_report.py b/frappe/desk/query_report.py index 7a06859d20..8952d6290a 100644 --- a/frappe/desk/query_report.py +++ b/frappe/desk/query_report.py @@ -227,11 +227,12 @@ def reorder_data_for_custom_columns(custom_columns, columns, result, report_type return get_columns_from_list(custom_column_labels, original_column_labels, result) custom_column_names = [col["fieldname"] for col in custom_columns] - if isinstance(result[0], list): + 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] return get_columns_from_list(custom_column_names, original_column_names, result) else: + print(result[0]) # If the result is a list of dicts return get_columns_from_dict(custom_column_names, result) From d4ae8830076c79d4db849da331854127afbf2fe8 Mon Sep 17 00:00:00 2001 From: Prssanna Desai Date: Mon, 24 Aug 2020 19:40:57 +0530 Subject: [PATCH 5/5] fix: remove print statement --- frappe/desk/query_report.py | 1 - 1 file changed, 1 deletion(-) diff --git a/frappe/desk/query_report.py b/frappe/desk/query_report.py index 8952d6290a..a1cfd02132 100644 --- a/frappe/desk/query_report.py +++ b/frappe/desk/query_report.py @@ -232,7 +232,6 @@ def reorder_data_for_custom_columns(custom_columns, columns, result, report_type original_column_names = [col["fieldname"] for col in columns] return get_columns_from_list(custom_column_names, original_column_names, result) else: - print(result[0]) # If the result is a list of dicts return get_columns_from_dict(custom_column_names, result)