def _get_fixture_detail(module): d = Detail( id=id_strings.fixture_detail(module), title=Text(), ) xpath = Xpath(function=module.fixture_select.display_column) if module.fixture_select.localize: template_text = Text(locale=Locale(child_id=Id(xpath=xpath))) else: template_text = Text( xpath_function=module.fixture_select.display_column) fields = [Field(header=Header(text=Text()), template=Template(text=template_text), sort_node='')] d.fields = fields return d
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)))
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): def _get_graph_fields(): from corehq.apps.userreports.reports.specs import MultibarChartSpec # todo: make this less hard-coded for chart_config in config.report(domain).charts: if isinstance(chart_config, MultibarChartSpec): graph_config = config.graph_configs.get( chart_config.chart_id, ReportGraphConfig()) def _column_to_series(column): return Series(nodeset=( "instance('reports')/reports/report[@id='{}']/rows/row[@is_total_row='False']{}" .format( config.uuid, _MobileSelectFilterHelpers.get_data_filter_xpath( config, domain))), x_function="column[@id='{}']".format( chart_config.x_axis_column), y_function="column[@id='{}']".format(column), configuration=ConfigurationGroup(configs=[ ConfigurationItem(id=key, xpath_function=value) for key, value in graph_config. series_configs.get(column, {}).items() ])) yield Field( header=Header(text=Text()), template=GraphTemplate( form='graph', graph=Graph( type=graph_config.graph_type, series=[ _column_to_series(c.column_id) for c in chart_config.y_axis_columns ], configuration=ConfigurationGroup(configs=[ ConfigurationItem(id=key, xpath_function=value) for key, value in graph_config.config.items() ]), ), )) 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))) return models.Detail(custom_xml=Detail( id='reports.{}.summary'.format(config.uuid), title=Text(locale=Locale(id=id_strings.report_menu()), ), details=[ 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()), ), _get_data_detail(config, domain), ], ).serialize().decode('utf-8'))
def _get_xpath(col): def _get_conditional(condition, if_true, if_false): return 'if({condition}, {if_true}, {if_false})'.format( condition=condition, if_true=if_true, if_false=if_false, ) def _get_word_eval(word_translations, default_value): word_eval = default_value for lang, translation in word_translations.items(): word_eval = _get_conditional( "$lang = '{lang}'".format( lang=lang, ), "'{translation}'".format( translation=translation.replace("'", "''"), ), word_eval ) return word_eval try: transform = col['transform'] except KeyError: transform = {} if transform.get('type') == 'translation': if new_mobile_ucr_restore: default_val = "{column_id}" else: default_val = "column[@id='{column_id}']" xpath_function = default_val for word, translations in transform['translations'].items(): if isinstance(translations, str): # This is a flat mapping, not per-language translations word_eval = "'{}'".format(translations) else: word_eval = _get_word_eval(translations, default_val) xpath_function = _get_conditional( "{value} = '{word}'".format( value=default_val, word=word, ), word_eval, xpath_function ) return Xpath( function=xpath_function.format( column_id=col.column_id ), variables=[XpathVariable(name='lang', locale_id='lang.current')], ) else: if new_mobile_ucr_restore: return Xpath( function="{}".format(col.column_id), ) else: return Xpath( function="column[@id='{}']".format(col.column_id), )
def get_xpath(column_id): if new_mobile_ucr_restore: return Xpath(function="{}".format(column_id), ) else: return Xpath(function="column[@id='{}']".format(column_id), )