def generate_report_result(report, filters=None, user=None, custom_columns=None): user = user or frappe.session.user filters = filters or [] if filters and isinstance(filters, str): filters = json.loads(filters) res = [] if report.report_type == "Query Report": res = report.execute_query_report(filters) elif report.report_type == "Script Report": res = report.execute_script_report(filters) columns, result, message, chart, report_summary, skip_total_row = ljust_list(res, 6) columns = [get_column_as_dict(col) for col in columns] report_column_names = [col["fieldname"] for col in columns] # convert to list of dicts result = normalize_result(result, columns) if report.custom_columns: # saved columns (with custom columns / with different column order) columns = report.custom_columns # unsaved custom_columns if custom_columns: for custom_column in custom_columns: columns.insert(custom_column["insert_after_index"] + 1, custom_column) # all columns which are not in original report report_custom_columns = [column for column in columns if column["fieldname"] not in report_column_names] if report_custom_columns: result = add_custom_column_data(report_custom_columns, result) if result: result = get_filtered_data(report.ref_doctype, columns, result, user) if cint(report.add_total_row) and result and not skip_total_row: result = add_total_row(result, columns) return { "result": result, "columns": columns, "message": message, "chart": chart, "report_summary": report_summary, "skip_total_row": skip_total_row or 0, "status": None, "execution_time": frappe.cache().hget("report_execution_time", report.name) or 0, }
def generate_report_result(report, filters=None, user=None, custom_columns=None): user = user or frappe.session.user filters = filters or [] if filters and isinstance(filters, string_types): filters = json.loads(filters) res = [] if report.report_type == "Query Report": res = report.execute_query_report(filters) elif report.report_type == 'Script Report': res = report.execute_script_report(filters) columns, result, message, chart, report_summary, skip_total_row = \ ljust_list(res, 6) if report.custom_columns: # Original query columns, needed to reorder data as per custom columns query_columns = columns # Reordered columns columns = json.loads(report.custom_columns) if report.report_type == 'Query Report': result = reorder_data_for_custom_columns(columns, query_columns, result) result = add_data_to_custom_columns(columns, result) if custom_columns: result = add_data_to_custom_columns(custom_columns, result) for custom_column in custom_columns: columns.insert(custom_column['insert_after_index'] + 1, custom_column) if result: result = get_filtered_data(report.ref_doctype, columns, result, user) if cint(report.add_total_row) and result and not skip_total_row: result = add_total_row(result, columns) return { "result": result, "columns": columns, "message": message, "chart": chart, "report_summary": report_summary, "skip_total_row": skip_total_row or 0, "status": None, "execution_time": frappe.cache().hget('report_execution_time', report.name) or 0 }