Exemplo n.º 1
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, 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,
	}
Exemplo n.º 2
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
	}