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
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)
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)
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%'] ] ] ] )
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)
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"),
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
def configurable_report(self): from corehq.apps.userreports.reports.view import ConfigurableReport return ConfigurableReport.get_report(self.domain, self.report_slug, self.subreport_slug)
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/$',
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
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
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 []
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