def _get_summary_details(config, domain, module, new_mobile_ucr_restore=False): def _get_graph_fields(): from corehq.apps.userreports.reports.specs import MultibarChartSpec from corehq.apps.app_manager.models import GraphConfiguration, GraphSeries def _locale_config(key): return id_strings.mobile_ucr_configuration( module, config.uuid, key ) def _locale_series_config(index, key): return id_strings.mobile_ucr_series_configuration( module, config.uuid, index, key ) def _locale_annotation(index): return id_strings.mobile_ucr_annotation( module, config.uuid, index ) for chart_config in config.report(domain).charts: if isinstance(chart_config, MultibarChartSpec): graph_config = config.complete_graph_configs.get(chart_config.chart_id, GraphConfiguration( series=[GraphSeries() for c in chart_config.y_axis_columns], )) # Reconcile graph_config.series with any additions/deletions in chart_config.y_axis_columns while len(chart_config.y_axis_columns) > len(graph_config.series): graph_config.series.append(GraphSeries()) if len(chart_config.y_axis_columns) < len(graph_config.series): graph_config.series = graph_config.series[:len(chart_config.y_axis_columns)] for index, column in enumerate(chart_config.y_axis_columns): graph_config.series[index].data_path = ( graph_config.series[index].data_path or get_data_path(config, domain, new_mobile_ucr_restore) ) graph_config.series[index].x_function = ( graph_config.series[index].x_function or _get_column_xpath_template(new_mobile_ucr_restore).format(chart_config.x_axis_column) ) graph_config.series[index].y_function = ( graph_config.series[index].y_function or _get_column_xpath_template(new_mobile_ucr_restore).format(column.column_id) ) yield Field( header=Header(text=Text()), template=GraphTemplate.build('graph', graph_config, locale_config=_locale_config, locale_series_config=_locale_series_config, locale_annotation=_locale_annotation) ) def _get_last_sync(report_config): if new_mobile_ucr_restore: last_sync_string = "format-date(date(instance('commcare-reports:{}')/@last_sync), '%Y-%m-%d %H:%M')" last_sync_string = last_sync_string.format(report_config.instance_id) else: last_sync_string = "format-date(date(instance('reports')/reports/@last_sync), '%Y-%m-%d %H:%M')" return Text( xpath=Xpath( function=last_sync_string ) ) def _get_description_text(report_config): if report_config.use_xpath_description: return Text( xpath=Xpath(function=config.xpath_description) ) else: return Text( locale=Locale(id=id_strings.report_description(report_config.uuid)) ) detail_id = 'reports.{}.summary'.format(config.uuid) detail = Detail( title=Text( locale=Locale(id=id_strings.report_menu()), ), fields=[ Field( header=Header( text=Text( locale=Locale(id=id_strings.report_name_header()) ) ), template=Template( text=Text( locale=Locale(id=id_strings.report_name(config.uuid)) ) ), ), Field( header=Header( text=Text( locale=Locale(id=id_strings.report_description_header()), ) ), template=Template( text=_get_description_text(config) ), ), ] + [ Field( header=Header( text=Text( locale=Locale(id=id_strings.report_last_sync()) ) ), template=Template(text=_get_last_sync(config)) ), ] + list(_get_graph_fields()), ) if config.show_data_table: return models.Detail(custom_xml=Detail( id=detail_id, title=Text( locale=Locale(id=id_strings.report_menu()), ), details=[detail, _get_data_detail(config, domain, new_mobile_ucr_restore)] ).serialize().decode('utf-8')) else: detail.id = detail_id return models.Detail(custom_xml=detail.serialize().decode('utf-8'))
def _get_summary_details(config, domain, module): def _get_graph_fields(): from corehq.apps.userreports.reports.specs import MultibarChartSpec from corehq.apps.app_manager.models import GraphConfiguration, GraphSeries def _locale_config(key): return id_strings.mobile_ucr_configuration(module, config.uuid, key) def _locale_series_config(index, key): return id_strings.mobile_ucr_series_configuration( module, config.uuid, index, key) def _locale_annotation(index): return id_strings.mobile_ucr_annotation(module, config.uuid, index) for chart_config in config.report(domain).charts: if isinstance(chart_config, MultibarChartSpec): graph_config = config.complete_graph_configs.get( chart_config.chart_id, GraphConfiguration(series=[ GraphSeries() for c in chart_config.y_axis_columns ], )) for index, column in enumerate(chart_config.y_axis_columns): graph_config.series[index].data_path = ( graph_config.series[index].data_path or get_data_path(config, domain)) graph_config.series[index].x_function = ( graph_config.series[index].x_function or COLUMN_XPATH_TEMPLATE.format( chart_config.x_axis_column)) graph_config.series[index].y_function = ( graph_config.series[index].y_function or COLUMN_XPATH_TEMPLATE.format(column.column_id)) yield Field(header=Header(text=Text()), template=GraphTemplate.build( 'graph', graph_config, locale_config=_locale_config, locale_series_config=_locale_series_config, locale_annotation=_locale_annotation)) def _get_description_text(report_config): if report_config.use_xpath_description: return Text(xpath=Xpath(function=config.xpath_description)) else: return Text(locale=Locale( id=id_strings.report_description(report_config.uuid))) detail_id = 'reports.{}.summary'.format(config.uuid) detail = Detail( title=Text(locale=Locale(id=id_strings.report_menu()), ), fields=[ Field( header=Header(text=Text(locale=Locale( id=id_strings.report_name_header()))), template=Template(text=Text(locale=Locale( id=id_strings.report_name(config.uuid)))), ), Field( header=Header(text=Text(locale=Locale( id=id_strings.report_description_header()), )), template=Template(text=_get_description_text(config)), ), ] + [ Field( header=Header(text=Text(locale=Locale( id=id_strings.report_last_sync()))), template=Template(text=Text(xpath=Xpath( function= "format-date(date(instance('reports')/reports/@last_sync), '%Y-%m-%d %H:%M')" )))), ] + list(_get_graph_fields()), ) if config.show_data_table: return models.Detail(custom_xml=Detail( id=detail_id, title=Text(locale=Locale(id=id_strings.report_menu()), ), details=[detail, _get_data_detail(config, domain) ]).serialize().decode('utf-8')) else: detail.id = detail_id return models.Detail(custom_xml=detail.serialize().decode('utf-8'))
def _get_summary_details(config, domain, module, new_mobile_ucr_restore=False): def _get_graph_fields(): from corehq.apps.userreports.reports.specs import MultibarChartSpec from corehq.apps.app_manager.models import GraphConfiguration, GraphSeries def _locale_config(key): return id_strings.mobile_ucr_configuration(module, config.uuid, key) def _locale_series_config(index, key): return id_strings.mobile_ucr_series_configuration( module, config.uuid, index, key) def _locale_annotation(index): return id_strings.mobile_ucr_annotation(module, config.uuid, index) for chart_config in config.report(domain).charts: if isinstance(chart_config, MultibarChartSpec): graph_config = config.complete_graph_configs.get( chart_config.chart_id, GraphConfiguration(series=[ GraphSeries() for c in chart_config.y_axis_columns ], )) # Reconcile graph_config.series with any additions/deletions in chart_config.y_axis_columns while len(chart_config.y_axis_columns) > len( graph_config.series): graph_config.series.append(GraphSeries()) if len(chart_config.y_axis_columns) < len(graph_config.series): graph_config.series = graph_config.series[:len( chart_config.y_axis_columns)] for index, column in enumerate(chart_config.y_axis_columns): graph_config.series[index].data_path = ( graph_config.series[index].data_path or get_data_path( config, domain, new_mobile_ucr_restore)) graph_config.series[index].x_function = ( graph_config.series[index].x_function or _get_column_xpath_template(new_mobile_ucr_restore). format(chart_config.x_axis_column)) graph_config.series[index].y_function = ( graph_config.series[index].y_function or _get_column_xpath_template( new_mobile_ucr_restore).format(column.column_id)) yield Field(header=Header(text=Text()), template=GraphTemplate.build( 'graph', graph_config, locale_config=_locale_config, locale_series_config=_locale_series_config, locale_annotation=_locale_annotation)) def _get_last_sync(report_config): if new_mobile_ucr_restore: last_sync_string = "format-date(date(instance('commcare-reports:{}')/@last_sync), '%Y-%m-%d %H:%M')" last_sync_string = last_sync_string.format( report_config.instance_id) else: last_sync_string = "format-date(date(instance('reports')/reports/@last_sync), '%Y-%m-%d %H:%M')" return Text(xpath=TextXPath(function=last_sync_string)) def _get_description_text(report_config): if report_config.use_xpath_description: return Text(xpath=TextXPath(function=config.xpath_description)) else: return Text(locale=Locale( id=id_strings.report_description(report_config.uuid))) detail_id = 'reports.{}.summary'.format(config.uuid) fields = [ Field( header=Header(text=Text(locale=Locale( id=id_strings.report_name_header()))), template=Template(text=Text(locale=Locale( id=id_strings.report_name(config.uuid)))), ), Field( header=Header(text=Text(locale=Locale( id=id_strings.report_description_header()), )), template=Template(text=_get_description_text(config)), ), ] if not getattr(module, 'report_context_tile', False): # Don't add "Last Sync" if the module already contains the similar-looking # "Reports last updated on" tile fields.append( Field(header=Header(text=Text(locale=Locale( id=id_strings.report_last_sync()))), template=Template(text=_get_last_sync(config)))) fields += list(_get_graph_fields()) detail = Detail( title=Text(locale=Locale(id=id_strings.report_menu()), ), fields=fields, ) if config.show_data_table: return models.Detail(custom_xml=Detail( id=detail_id, title=Text(locale=Locale(id=id_strings.report_menu()), ), details=[ detail, _get_data_detail(config, domain, new_mobile_ucr_restore) ]).serialize().decode('utf-8')) else: detail.id = detail_id return models.Detail(custom_xml=detail.serialize().decode('utf-8'))