Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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)))
Ejemplo n.º 3
0
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'))
Ejemplo n.º 4
0
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'))
Ejemplo n.º 5
0
        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),
                    )
Ejemplo n.º 6
0
 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), )