def get_static_report_mapping(from_domain, to_domain): from corehq.apps.userreports.models import StaticReportConfiguration, STATIC_PREFIX, \ CUSTOM_REPORT_PREFIX report_map = {} for static_report in StaticReportConfiguration.by_domain(from_domain): if static_report.get_id.startswith(STATIC_PREFIX): report_id = static_report.get_id.replace( STATIC_PREFIX + from_domain + '-', '') is_custom_report = False else: report_id = static_report.get_id.replace( CUSTOM_REPORT_PREFIX + from_domain + '-', '') is_custom_report = True new_id = StaticReportConfiguration.get_doc_id(to_domain, report_id, is_custom_report) # check that new report is in new domain's list of static reports try: StaticReportConfiguration.by_id(new_id, to_domain) except (BadSpecError, DocumentNotFound): pass else: report_map[static_report.get_id] = new_id return report_map
def get_static_report_mapping(from_domain, to_domain): from corehq.apps.userreports.models import StaticReportConfiguration, STATIC_PREFIX, \ CUSTOM_REPORT_PREFIX report_map = {} for static_report in StaticReportConfiguration.by_domain(from_domain): if static_report.get_id.startswith(STATIC_PREFIX): report_id = static_report.get_id.replace( STATIC_PREFIX + from_domain + '-', '' ) is_custom_report = False else: report_id = static_report.get_id.replace( CUSTOM_REPORT_PREFIX + from_domain + '-', '' ) is_custom_report = True new_id = StaticReportConfiguration.get_doc_id( to_domain, report_id, is_custom_report ) # check that new report is in new domain's list of static reports try: StaticReportConfiguration.by_id(new_id, to_domain) except (BadSpecError, DocumentNotFound): pass else: report_map[static_report.get_id] = new_id return report_map
def _get_report_module_context(app, module): def _report_to_config(report): return { 'report_id': report._id, 'title': report.title, 'description': report.description, 'charts': [chart for chart in report.charts if chart.type == 'multibar'], 'filter_structure': report.filters_without_prefilters, } all_reports = ReportConfiguration.by_domain(app.domain) + \ StaticReportConfiguration.by_domain(app.domain) validity = module.check_report_validity() # We're now proactively deleting these references, so after that's been # out for a while, this can be removed (say June 2016 or later) if not validity.is_valid: module.report_configs = validity.valid_report_configs filter_choices = [ {'slug': f.doc_type, 'description': f.short_description} for f in get_all_mobile_filter_configs() ] auto_filter_choices = [ {'slug': f.slug, 'description': f.short_description} for f in get_auto_filter_configurations() ] return { 'all_reports': [_report_to_config(r) for r in all_reports], 'current_reports': [r.to_json() for r in module.report_configs], 'filter_choices': filter_choices, 'auto_filter_choices': auto_filter_choices, 'daterange_choices': [choice._asdict() for choice in get_simple_dateranges()], }
def _get_report_module_context(app, module): def _report_to_config(report): return { 'report_id': report._id, 'title': report.title, 'description': report.description, 'charts': [chart for chart in report.charts if chart.type == 'multibar'], 'filter_structure': report.filters_without_prefilters, } all_reports = ReportConfiguration.by_domain(app.domain) + \ StaticReportConfiguration.by_domain(app.domain) warnings = [] validity = module.check_report_validity() # We're now proactively deleting these references, so after that's been # out for a while, this can be removed (say June 2016 or later) if not validity.is_valid: module.report_configs = validity.valid_report_configs warnings.append( gettext_lazy('Your app contains references to reports that are ' 'deleted. These will be removed on save.')) return { 'all_reports': [_report_to_config(r) for r in all_reports], 'current_reports': [r.to_json() for r in module.report_configs], 'warnings': warnings, }
def _get_report_module_context(app, module): def _report_to_config(report): return { 'report_id': report._id, 'title': report.title, 'description': report.description, 'charts': [chart for chart in report.charts if chart.type == 'multibar'], 'filter_structure': report.filters, } all_reports = ReportConfiguration.by_domain(app.domain) + \ StaticReportConfiguration.by_domain(app.domain) warnings = [] validity = module.check_report_validity() # We're now proactively deleting these references, so after that's been # out for a while, this can be removed (say June 2016 or later) if not validity.is_valid: module.report_configs = validity.valid_report_configs warnings.append( gettext_lazy('Your app contains references to reports that are ' 'deleted. These will be removed on save.') ) return { 'all_reports': [_report_to_config(r) for r in all_reports], 'current_reports': [r.to_json() for r in module.report_configs], 'warnings': warnings, }
def _get_configurable_reports(project): """ User configurable reports """ configs = ReportConfiguration.by_domain(project.name) + StaticReportConfiguration.by_domain(project.name) if configs: def _make_report_class(config): from corehq.apps.reports.generic import GenericReportView # this is really annoying. # the report metadata should really be pulled outside of the report classes @classmethod def get_url(cls, domain, **kwargs): from corehq.apps.userreports.models import CUSTOM_REPORT_PREFIX slug = ( ConfigurableReport.slug if not config._id.startswith(CUSTOM_REPORT_PREFIX) else CustomConfigurableReportDispatcher.slug ) return reverse(slug, args=[domain, config._id]) @classmethod def show_in_navigation(cls, domain=None, project=None, user=None): return config.visible or (user and toggles.USER_CONFIGURABLE_REPORTS.enabled(user.username)) return type('DynamicReport{}'.format(config._id), (GenericReportView, ), { 'name': config.title, 'description': config.description or None, 'get_url': get_url, 'show_in_navigation': show_in_navigation, }) yield (_('Reports'), [_make_report_class(config) for config in configs])
def copy_ucr_reports(self, datasource_map): report_map = {} reports = get_report_configs_for_domain(self.existing_domain) for report in reports: old_datasource_id = report.config_id try: report.config_id = datasource_map[old_datasource_id] except KeyError: pass # datasource not found old_id, new_id = self.save_couch_copy(report, self.new_domain) report_map[old_id] = new_id for static_report in StaticReportConfiguration.by_domain( self.existing_domain): if static_report.get_id.startswith(STATIC_PREFIX): report_id = static_report.get_id.replace( STATIC_PREFIX + self.existing_domain + '-', '') is_custom_report = False else: report_id = static_report.get_id.replace( CUSTOM_REPORT_PREFIX + self.existing_domain + '-', '') is_custom_report = True new_id = StaticReportConfiguration.get_doc_id( self.new_domain, report_id, is_custom_report) # check that new report is in new domain's list of static reports StaticReportConfiguration.by_id(new_id) report_map[static_report.get_id] = new_id return report_map
def copy_ucr_reports(self, datasource_map): report_map = {} reports = get_report_configs_for_domain(self.existing_domain) for report in reports: old_datasource_id = report.config_id try: report.config_id = datasource_map[old_datasource_id] except KeyError: pass # datasource not found old_id, new_id = self.save_couch_copy(report, self.new_domain) report_map[old_id] = new_id for static_report in StaticReportConfiguration.by_domain(self.existing_domain): if static_report.get_id.startswith(STATIC_PREFIX): report_id = static_report.get_id.replace( STATIC_PREFIX + self.existing_domain + '-', '' ) is_custom_report = False else: report_id = static_report.get_id.replace( CUSTOM_REPORT_PREFIX + self.existing_domain + '-', '' ) is_custom_report = True new_id = StaticReportConfiguration.get_doc_id( self.new_domain, report_id, is_custom_report ) # check that new report is in new domain's list of static reports StaticReportConfiguration.by_id(new_id) report_map[static_report.get_id] = new_id return report_map
def _shared_context(domain): static_reports = list(StaticReportConfiguration.by_domain(domain)) static_data_sources = list(StaticDataSourceConfiguration.by_domain(domain)) return { 'domain': domain, 'reports': ReportConfiguration.by_domain(domain) + static_reports, 'data_sources': DataSourceConfiguration.by_domain(domain) + static_data_sources, }
def main_context(self): static_reports = list(StaticReportConfiguration.by_domain(self.domain)) static_data_sources = list(StaticDataSourceConfiguration.by_domain(self.domain)) context = super(BaseUserConfigReportsView, self).main_context context.update({ 'reports': ReportConfiguration.by_domain(self.domain) + static_reports, 'data_sources': DataSourceConfiguration.by_domain(self.domain) + static_data_sources, }) return context
def _get_report_module_context(app, module): def _report_to_config(report): return { 'report_id': report._id, 'title': report.title, 'description': report.description, 'charts': [chart for chart in report.charts if chart.type == 'multibar'], 'filter_structure': report.filters_without_prefilters, } all_reports = ReportConfiguration.by_domain(app.domain) + \ StaticReportConfiguration.by_domain(app.domain) validity = module.check_report_validity() # We're now proactively deleting these references, so after that's been # out for a while, this can be removed (say June 2016 or later) if not validity.is_valid: module.report_configs = validity.valid_report_configs filter_choices = [ {'slug': f.doc_type, 'description': f.short_description} for f in get_all_mobile_filter_configs() ] auto_filter_choices = [ {'slug': f.slug, 'description': f.short_description} for f in get_auto_filter_configurations() ] from corehq.apps.app_manager.suite_xml.features.mobile_ucr import get_column_xpath_client_template, get_data_path data_path_placeholders = {} for r in module.report_configs: data_path_placeholders[r.report_id] = {} for chart_id in r.complete_graph_configs.keys(): data_path_placeholders[r.report_id][chart_id] = get_data_path(r, app.domain) context = { 'report_module_options': { 'moduleName': module.name, 'moduleFilter': module.module_filter, 'availableReports': [_report_to_config(r) for r in all_reports], # structure for all reports 'currentReports': [r.to_json() for r in module.report_configs], # config data for app reports 'columnXpathTemplate': get_column_xpath_client_template(app.mobile_ucr_restore_version), 'dataPathPlaceholders': data_path_placeholders, 'languages': app.langs, 'mobileUcrV1': app.mobile_ucr_restore_version == MOBILE_UCR_VERSION_1, 'globalSyncDelay': Domain.get_by_name(app.domain).default_mobile_ucr_sync_interval, }, 'static_data_options': { 'filterChoices': filter_choices, 'autoFilterChoices': auto_filter_choices, 'dateRangeOptions': [choice._asdict() for choice in get_simple_dateranges()], }, 'uuids_by_instance_id': get_uuids_by_instance_id(app.domain), 'legacy_select2': True, } return context
def _get_report_module_context(app, module): def _report_to_config(report): return { 'report_id': report._id, 'title': report.title, 'description': report.description, 'charts': [chart for chart in report.charts if chart.type == 'multibar'], 'filter_structure': report.filters_without_prefilters, } all_reports = ReportConfiguration.by_domain(app.domain) + \ StaticReportConfiguration.by_domain(app.domain) validity = module.check_report_validity() # We're now proactively deleting these references, so after that's been # out for a while, this can be removed (say June 2016 or later) if not validity.is_valid: module.report_configs = validity.valid_report_configs filter_choices = [ {'slug': f.doc_type, 'description': f.short_description} for f in get_all_mobile_filter_configs() ] auto_filter_choices = [ {'slug': f.slug, 'description': f.short_description} for f in get_auto_filter_configurations() ] from corehq.apps.app_manager.suite_xml.features.mobile_ucr import get_column_xpath_client_template, get_data_path data_path_placeholders = {} for r in module.report_configs: data_path_placeholders[r.report_id] = {} for chart_id in r.complete_graph_configs.keys(): data_path_placeholders[r.report_id][chart_id] = get_data_path(r, app.domain) context = { 'report_module_options': { 'moduleName': module.name, 'moduleFilter': module.module_filter, 'availableReports': [_report_to_config(r) for r in all_reports], # structure for all reports 'currentReports': [r.to_json() for r in module.report_configs], # config data for app reports 'columnXpathTemplate': get_column_xpath_client_template(app.mobile_ucr_restore_version), 'dataPathPlaceholders': data_path_placeholders, 'languages': app.langs, 'supportSyncDelay': app.mobile_ucr_restore_version != MOBILE_UCR_VERSION_1, 'globalSyncDelay': Domain.get_by_name(app.domain).default_mobile_ucr_sync_interval, }, 'static_data_options': { 'filterChoices': filter_choices, 'autoFilterChoices': auto_filter_choices, 'dateRangeOptions': [choice._asdict() for choice in get_simple_dateranges()], }, } return context
def main_context(self): static_reports = list(StaticReportConfiguration.by_domain(self.domain)) static_data_sources = list( StaticDataSourceConfiguration.by_domain(self.domain)) context = super(BaseUserConfigReportsView, self).main_context context.update({ 'reports': ReportConfiguration.by_domain(self.domain) + static_reports, 'data_sources': DataSourceConfiguration.by_domain(self.domain) + static_data_sources, }) return context
def _safely_get_report_configs(project_name): try: configs = ReportConfiguration.by_domain(project_name) except BadSpecError as e: logging.exception(e) # Pick out the UCRs that don't have spec errors configs = [] for config_id in get_doc_ids_in_domain_by_class(project_name, ReportConfiguration): try: configs.append(ReportConfiguration.get(config_id)) except BadSpecError as e: logging.error("%s with report config %s" % (e.message, config_id)) try: configs.extend(StaticReportConfiguration.by_domain(project_name)) except BadSpecError as e: logging.exception(e) return configs
def get_configurable_and_static_reports(domain): from corehq.apps.userreports.models import StaticReportConfiguration return get_existing_reports(domain) + StaticReportConfiguration.by_domain( domain)
def _safely_get_static_report_configs(project_name): try: return StaticReportConfiguration.by_domain(project_name) except (BadSpecError, BadValueError) as e: logging.exception(e)