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
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)
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)
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' }, ])
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')
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
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'),
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
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),
def configurable_report(self): from corehq.apps.userreports.reports.view import ConfigurableReportView return ConfigurableReportView.get_report( self.domain, self.report_slug, self.subreport_slug )