Exemplo n.º 1
0
 def _create_view(self, filter_values):
     request = HttpRequest()
     request.method = 'GET'
     request.GET.update(filter_values)
     view = ConfigurableReport(request=request)
     view._domain = self.domain
     view._lang = "en"
     view._report_config_id = self.report_config._id
     return view
Exemplo n.º 2
0
    def _dispatcher(self):
        from corehq.apps.userreports.models import CUSTOM_REPORT_PREFIX
        from corehq.apps.userreports.reports.view import (
            ConfigurableReport,
            CustomConfigurableReportDispatcher,
        )

        dispatchers = [
            ProjectReportDispatcher,
            CustomProjectReportDispatcher,
        ]

        for dispatcher in dispatchers:
            if dispatcher.prefix == self.report_type:
                return dispatcher()

        if self.report_type == 'configurable':
            if self.subreport_slug.startswith(CUSTOM_REPORT_PREFIX):
                return CustomConfigurableReportDispatcher()
            else:
                return ConfigurableReport()

        if self.doc_type != 'ReportConfig-Deleted':
            self.doc_type += '-Deleted'
            self.save()
            notify_exception(
                None,
                "This saved-report (id: %s) is unknown (report_type: %s) and so we have archived it"
                % (self._id, self.report_type))
        raise UnsupportedSavedReportError("Unknown dispatcher: %s" %
                                          self.report_type)
Exemplo n.º 3
0
    def test_export_table(self):
        """
        Test the output of ConfigurableReport.export_table()
        """
        report = self._build_report()
        # Create a configurable report
        view = ConfigurableReport()
        view._domain = self.domain
        view._lang = "en"
        view._report_config_id = report._id

        expected = [
            [
                u'foo',
                [
                    [u'report_column_display_fruit', u'report_column_display_percent'],
                    [u'apple', '150%']
                ]
            ]
        ]
        self.assertEqual(view.export_table, expected)
Exemplo n.º 4
0
    def test_export_table(self):
        """
        Test the output of ConfigurableReport.export_table()
        """
        # Create a configurable report
        view = ConfigurableReport()
        view.domain = self.domain
        view.lang = "en"
        view.report_config_id = self.report._id

        self.assertEqual(
            view.export_table,
            [
                [
                    u'foo',
                    [
                        [u'report_column_display_fruit', u'report_column_display_percent'],
                        [u'apple', '150%']
                    ]
                ]
            ]
        )
Exemplo n.º 5
0
    def test_paginated_build_table(self):
        """
        Simulate building a report where chunking occurs
        """

        with patch('corehq.apps.userreports.tasks.CHUNK_SIZE', 1):
            report = self._build_report()

        view = ConfigurableReport()
        view._domain = self.domain
        view._lang = "en"
        view._report_config_id = report._id

        expected = [
            [
                u'foo',
                [
                    [u'report_column_display_fruit', u'report_column_display_percent'],
                    [u'apple', '150%']
                ]
            ]
        ]
        self.assertEqual(view.export_table, expected)
Exemplo n.º 6
0
from corehq.apps.userreports.views import (
    CreateNewReportBuilderView,
    ConfigureBarChartReportBuilderView,
    ConfigureTableReportBuilderView,
    ConfigurePieChartReportBuilderView,
)
from .filters import urls as filter_urls


custom_report_urls = patterns('',
    CustomProjectReportDispatcher.url_pattern(),
)

urlpatterns = patterns('corehq.apps.reports.views',
    TestReport.url_pattern(),
    ConfigurableReport.url_pattern(),
    url(r'^builder/create/$', CreateNewReportBuilderView.as_view(), name="create_new_report_builder"),
    url(r'^builder/configure/bar/$', ConfigureBarChartReportBuilderView.as_view(), name="configure_bar_chart_report_builder"),
    url(r'^builder/configure/pie/$', ConfigurePieChartReportBuilderView.as_view(), name="configure_pie_chart_report_builder"),
    url(r'^builder/configure/table/$', ConfigureTableReportBuilderView.as_view(), name="configure_table_report_builder"),
    url(r'^$', "default", name="reports_home"),
    url(r'^saved/', "saved_reports", name="saved_reports"),
    url(r'^saved_reports', 'old_saved_reports'),

    url(r'^case_data/(?P<case_id>[\w\-]+)/$', 'case_details', name="case_details"),
    url(r'^case_data/(?P<case_id>[\w\-]+)/attachments/$', 'case_attachments', name="single_case_attachments"),
    url(r'^case_data/(?P<case_id>[\w\-]+)/view/xml/$', 'case_xml', name="single_case_xml"),
    url(r'^case_data/(?P<case_id>[\w\-]+)/rebuild/$', 'rebuild_case_view', name="rebuild_case"),
    url(r'^case_data/(?P<case_id>[\w\-]+)/resave/$', 'resave_case', name="resave_case"),
    url(r'^case_data/(?P<case_id>[\w\-]+)/close/$', 'close_case_view', name="close_case"),
    url(r'^case_data/(?P<case_id>[\w\-]+)/undo-close/$', 'undo_close_case_view', name="undo_close_case"),
Exemplo n.º 7
0
 def _create_view(self, report_config):
     view = ConfigurableReport(request=HttpRequest())
     view._domain = self.domain
     view._lang = "en"
     view._report_config_id = report_config._id
     return view
Exemplo n.º 8
0
 def configurable_report(self):
     from corehq.apps.userreports.reports.view import ConfigurableReport
     return ConfigurableReport.get_report(self.domain, self.report_slug,
                                          self.subreport_slug)
Exemplo n.º 9
0
    delete_config,
    delete_scheduled_report,
    send_test_scheduled_report,
    view_scheduled_report,
    export_all_form_metadata,
    export_all_form_metadata_async,
    download_cases,
    download_cases_internal,
)

custom_report_urls = [
    CustomProjectReportDispatcher.url_pattern(),
]

urlpatterns = [
    ConfigurableReport.url_pattern(),
    CustomConfigurableReportDispatcher.url_pattern(),

    # Report Builder V2 urls
    url(r'^builder/select_source/$',
        ReportBuilderDataSourceSelect.as_view(),
        name=ReportBuilderDataSourceSelect.urlname),
    url(r'^builder/configure/$',
        ConfigureReport.as_view(),
        name=ConfigureReport.urlname),
    url(r'^builder/preview/(?P<data_source>[\w\-]+)/$',
        ReportPreview.as_view(),
        name=ReportPreview.urlname),

    # Report Builder V1 urls
    url(r'^builder/select_type/$',
Exemplo n.º 10
0
    def _build_report_and_view(cls):

        # Create Cases
        cls._new_case({'fruit': 'apple', 'num1': 4, 'num2': 6}).save()

        # Create report
        data_source_config = DataSourceConfiguration(
            domain=cls.domain,
            display_name='foo',
            referenced_doc_type='CommCareCase',
            table_id="woop_woop",
            configured_filter={
                "type": "boolean_expression",
                "operator": "eq",
                "expression": {
                    "type": "property_name",
                    "property_name": "type"
                },
                "property_value": cls.case_type,
            },
            configured_indicators=[
                {
                    "type": "expression",
                    "expression": {
                        "type": "property_name",
                        "property_name": 'fruit'
                    },
                    "column_id": 'indicator_col_id_fruit',
                    "display_name": 'indicator_display_name_fruit',
                    "datatype": "string"
                },
                {
                    "type": "expression",
                    "expression": {
                        "type": "property_name",
                        "property_name": 'num1'
                    },
                    "column_id": 'indicator_col_id_num1',
                    "datatype": "integer"
                },
                {
                    "type": "expression",
                    "expression": {
                        "type": "property_name",
                        "property_name": 'num2'
                    },
                    "column_id": 'indicator_col_id_num2',
                    "datatype": "integer"
                },
            ],
        )
        data_source_config.validate()
        data_source_config.save()
        tasks.rebuild_indicators(data_source_config._id)

        report_config = ReportConfiguration(
            domain=cls.domain,
            config_id=data_source_config._id,
            title='foo',
            aggregation_columns=['doc_id'],
            columns=[
                {
                    "type": "field",
                    "display": "report_column_display_fruit",
                    "field": 'indicator_col_id_fruit',
                    'column_id': 'report_column_col_id_fruit',
                    'aggregation': 'simple'
                },
                {
                    "type": "percent",
                    "display": "report_column_display_percent",
                    'column_id': 'report_column_col_id_percent',
                    'format': 'percent',
                    "denominator": {
                        "type": "field",
                        "aggregation": "sum",
                        "field": "indicator_col_id_num1",
                        "column_id": "report_column_col_id_percent_num1"
                    },
                    "numerator": {
                        "type": "field",
                        "aggregation": "sum",
                        "field": "indicator_col_id_num2",
                        "column_id": "report_column_col_id_percent_num2"
                    }
                },
            ],
        )
        report_config.save()

        view = ConfigurableReport(request=HttpRequest())
        view._domain = cls.domain
        view._lang = "en"
        view._report_config_id = report_config._id

        return report_config, view
Exemplo n.º 11
0
    def _build_report_and_view(self):
        # Create report
        data_source_config = DataSourceConfiguration(
            domain=self.domain,
            display_name='foo',
            referenced_doc_type='CommCareCase',
            table_id="woop_woop",
            configured_filter={
                "type": "boolean_expression",
                "operator": "eq",
                "expression": {
                    "type": "property_name",
                    "property_name": "type"
                },
                "property_value": self.case_type,
            },
            configured_indicators=[
                {
                    "type": "expression",
                    "expression": {
                        "type": "property_name",
                        "property_name": 'fruit'
                    },
                    "column_id": 'indicator_col_id_fruit',
                    "display_name": 'indicator_display_name_fruit',
                    "datatype": "string"
                },
                {
                    "type": "expression",
                    "expression": {
                        "type": "property_name",
                        "property_name": 'num1'
                    },
                    "column_id": 'indicator_col_id_num1',
                    "datatype": "integer"
                },
                {
                    "type": "expression",
                    "expression": {
                        "type": "property_name",
                        "property_name": 'num2'
                    },
                    "column_id": 'indicator_col_id_num2',
                    "datatype": "integer"
                },
            ],
        )
        data_source_config.validate()
        data_source_config.save()
        self.addCleanup(data_source_config.delete)
        tasks.rebuild_indicators(data_source_config._id)
        adapter = get_indicator_adapter(data_source_config)
        adapter.refresh_table()

        report_config = ReportConfiguration(
            domain=self.domain,
            config_id=data_source_config._id,
            title='foo',
            aggregation_columns=['doc_id'],
            columns=[
                {
                    "type": "field",
                    "display": "report_column_display_fruit",
                    "field": 'indicator_col_id_fruit',
                    'column_id': 'report_column_col_id_fruit',
                    'aggregation': 'simple'
                },
                {
                    "type": "percent",
                    "display": "report_column_display_percent",
                    'column_id': 'report_column_col_id_percent',
                    'format': 'percent',
                    "denominator": {
                        "type": "field",
                        "aggregation": "sum",
                        "field": "indicator_col_id_num1",
                        "column_id": "report_column_col_id_percent_num1"
                    },
                    "numerator": {
                        "type": "field",
                        "aggregation": "sum",
                        "field": "indicator_col_id_num2",
                        "column_id": "report_column_col_id_percent_num2"
                    }
                },
            ],
        )
        report_config.save()
        self.addCleanup(report_config.delete)

        view = ConfigurableReport(request=HttpRequest())
        view._domain = self.domain
        view._lang = "en"
        view._report_config_id = report_config._id

        return report_config, view
Exemplo n.º 12
0
 def datespan_filters(self):
     from corehq.apps.userreports.reports.view import ConfigurableReport
     return ConfigurableReport.get_report(
         self.domain, self.report_slug, self.subreport_slug
     ).datespan_filters if self.is_configurable_report else []
Exemplo n.º 13
0
 def configurable_report(self):
     from corehq.apps.userreports.reports.view import ConfigurableReport
     return ConfigurableReport.get_report(
         self.domain, self.report_slug, self.subreport_slug
     )
 def _create_view(self, report_config):
     view = ConfigurableReport()
     view._domain = self.domain
     view._lang = "en"
     view._report_config_id = report_config._id
     return view