def _create_view(self, filter_values):
     request = HttpRequest()
     request.method = 'GET'
     request.GET.update(filter_values)
     view = ConfigurableReportView(request=request)
     view._domain = self.domain
     view._lang = "en"
     view._report_config_id = self.report_config._id
     return view
Example #2
0
 def _create_view(self, filter_values):
     request = HttpRequest()
     request.method = 'GET'
     request.GET.update(filter_values)
     view = ConfigurableReportView(request=request)
     view._domain = self.domain
     view._lang = "en"
     view._report_config_id = self.report_config._id
     return view
Example #3
0
    def _dispatcher(self):
        from corehq.apps.userreports.models import CUSTOM_REPORT_PREFIX
        from corehq.apps.userreports.reports.view import (
            ConfigurableReportView,
            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 ConfigurableReportView()

        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)
Example #4
0
    def test_report_preview_data(self):
        """
        Test the output of ConfigurableReportView.export_table()
        """
        report, view = self._build_report_and_view()

        actual = ConfigurableReportView.report_preview_data(
            report.domain, report)
        expected = {
            "table": [[
                'report_column_display_fruit',
                'report_column_display_percent',
                'report_column_display_expanded_num1-1',
                'report_column_display_expanded_num1-4',
                'report_column_display_expanded_num1-7',
            ], ['apple', '150%', 0, 1, 0], ['mango', '57%', 0, 0, 1],
                      ['unknown', '0%', 1, 0, 0]],
            "map_config":
            report.map_config,
            "chart_configs":
            report.charts,
            "aaData": [{
                "report_column_col_id_fruit": "apple",
                "report_column_col_id_percent": "150%",
                'report_column_col_id_expanded_num1-0': 0,
                'report_column_col_id_expanded_num1-1': 1,
                'report_column_col_id_expanded_num1-2': 0,
            }, {
                'report_column_col_id_fruit': 'mango',
                'report_column_col_id_percent': '57%',
                'report_column_col_id_expanded_num1-0': 0,
                'report_column_col_id_expanded_num1-1': 0,
                'report_column_col_id_expanded_num1-2': 1,
            }, {
                'report_column_col_id_fruit': 'unknown',
                'report_column_col_id_percent': '0%',
                'report_column_col_id_expanded_num1-0': 1,
                'report_column_col_id_expanded_num1-1': 0,
                'report_column_col_id_expanded_num1-2': 0,
            }]
        }
        self.assertEqual(actual, expected)
Example #5
0
    def test_report_charts_with_expanded_columns(self):
        report, view = self._build_report_and_view()

        preview_data = ConfigurableReportView.report_preview_data(
            report.domain, report)
        multibar_chart = preview_data['chart_configs'][1].to_json()
        self.assertEqual(multibar_chart['type'], 'multibar')
        self.assertEqual(multibar_chart['y_axis_columns'], [
            {
                'column_id': 'report_column_col_id_expanded_num1-0',
                'display': 'report_column_display_expanded_num1-1'
            },
            {
                'column_id': 'report_column_col_id_expanded_num1-1',
                'display': 'report_column_display_expanded_num1-4'
            },
            {
                'column_id': 'report_column_col_id_expanded_num1-2',
                'display': 'report_column_display_expanded_num1-7'
            },
        ])
Example #6
0
    def test_report_charts(self):
        report, view = self._build_report_and_view()

        preview_data = ConfigurableReportView.report_preview_data(
            report.domain, report)
        preview_data_pie_chart = preview_data['chart_configs'][0]
        self.assertEqual(preview_data_pie_chart.type, 'pie')
        self.assertEqual(preview_data_pie_chart.title, 'Fruits')
        self.assertEqual(preview_data_pie_chart.value_column, 'count')
        self.assertEqual(preview_data_pie_chart.aggregation_column, 'fruit')

        preview_data_multibar_chart = preview_data['chart_configs'][1]
        self.assertEqual(preview_data_multibar_chart.type, 'multibar')
        self.assertEqual(preview_data_multibar_chart.title, 'Fruit Properties')
        self.assertEqual(preview_data_multibar_chart.title, 'Fruit Properties')
        self.assertEqual(preview_data_multibar_chart.x_axis_column, 'fruit')
        self.assertEqual(
            preview_data_multibar_chart.y_axis_columns[0].column_id,
            'report_column_col_id_expanded_num1')
        self.assertEqual(preview_data_multibar_chart.y_axis_columns[0].display,
                         'Num1 values')
Example #7
0
 def configurable_report(self):
     from corehq.apps.userreports.reports.view import ConfigurableReportView
     return ConfigurableReportView.get_report(self.domain, self.report_slug,
                                              self.subreport_slug)
 def _create_view(self, report_config):
     view = ConfigurableReportView(request=HttpRequest())
     view._domain = self.domain
     view._lang = "en"
     view._report_config_id = report_config._id
     return view
Example #9
0
    hq_download_saved_export,
    hq_deid_download_saved_export,
    export_report,
    email_report,
    delete_config,
    delete_scheduled_report,
    send_test_scheduled_report,
    view_scheduled_report,
)

custom_report_urls = [
    CustomProjectReportDispatcher.url_pattern(),
]

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

    # Report Builder
    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),
    url(r'^builder/edit/(?P<report_id>[\w\-]+)/$',
        EditReportInBuilder.as_view(),
        name='edit_report_in_builder'),
Example #10
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)

        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 = ConfigurableReportView(request=HttpRequest())
        view._domain = self.domain
        view._lang = "en"
        view._report_config_id = report_config._id

        return report_config, view
 def _create_view(self, report_config):
     view = ConfigurableReportView(request=HttpRequest())
     view._domain = self.domain
     view._lang = "en"
     view._report_config_id = report_config._id
     return view
Example #12
0
    project_health_user_details,
    export_report,
    email_report,
    delete_config,
    delete_scheduled_report,
    send_test_scheduled_report,
    view_scheduled_report,
)


custom_report_urls = [
    CustomProjectReportDispatcher.url_pattern(),
]

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

    # Report Builder
    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),
    url(r'^builder/edit/(?P<report_id>[\w\-]+)/$', EditReportInBuilder.as_view(), name='edit_report_in_builder'),
    url(r'builder/subscribe/pricing/$', ReportBuilderPaywallPricing.as_view(),
        name=ReportBuilderPaywallPricing.urlname),
    url(r'builder/subscribe/activating_subscription/$', ReportBuilderPaywallActivatingSubscription.as_view(),
        name=ReportBuilderPaywallActivatingSubscription.urlname),

    url(r'^$', MySavedReportsView.as_view(), name="reports_home"),
    url(r'^saved/', MySavedReportsView.as_view(), name=MySavedReportsView.urlname),
Example #13
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)

        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 = ConfigurableReportView(request=HttpRequest())
        view._domain = self.domain
        view._lang = "en"
        view._report_config_id = report_config._id

        return report_config, view
Example #14
0
 def configurable_report(self):
     from corehq.apps.userreports.reports.view import ConfigurableReportView
     return ConfigurableReportView.get_report(
         self.domain, self.report_slug, self.subreport_slug
     )