def delete_report(request, domain, report_id): if not (toggle_enabled(request, toggles.USER_CONFIGURABLE_REPORTS) or toggle_enabled(request, toggles.REPORT_BUILDER) or toggle_enabled(request, toggles.REPORT_BUILDER_BETA_GROUP) or has_report_builder_add_on_privilege(request)): raise Http404() config = get_document_or_404(ReportConfiguration, domain, report_id) # Delete the data source too if it's not being used by any other reports. try: data_source, __ = get_datasource_config(config.config_id, domain) except DataSourceConfigurationNotFoundError: # It's possible the data source has already been deleted, but that's fine with us. pass else: if data_source.get_report_count() <= 1: # No other reports reference this data source. data_source.deactivate() config.delete() did_purge_something = purge_report_from_mobile_ucr(config) messages.success(request, _(u'Report "{}" deleted!').format(config.title)) if did_purge_something: messages.warning( request, _(u"This report was used in one or more applications. " "It has been removed from there too.") ) redirect = request.GET.get("redirect", None) if not redirect: redirect = reverse('configurable_reports_home', args=[domain]) return HttpResponseRedirect(redirect)
def delete_report(request, domain, report_id): if not (toggle_enabled(request, toggles.USER_CONFIGURABLE_REPORTS) or toggle_enabled(request, toggles.REPORT_BUILDER) or toggle_enabled(request, toggles.REPORT_BUILDER_BETA_GROUP) or has_report_builder_add_on_privilege(request)): raise Http404() config = get_document_or_404(ReportConfiguration, domain, report_id) # Delete the data source too if it's not being used by any other reports. try: data_source, __ = get_datasource_config(config.config_id, domain) except DataSourceConfigurationNotFoundError: # It's possible the data source has already been deleted, but that's fine with us. pass else: if data_source.get_report_count() <= 1: # No other reports reference this data source. data_source.deactivate() config.delete() did_purge_something = purge_report_from_mobile_ucr(config) messages.success(request, _(u'Report "{}" deleted!').format(config.title)) if did_purge_something: messages.warning( request, _(u"This report was used in one or more applications. " "It has been removed from there too.")) redirect = request.GET.get("redirect", None) if not redirect: redirect = reverse('configurable_reports_home', args=[domain]) return HttpResponseRedirect(redirect)
def test_purge_report_from_mobile_ucr(self, get_db): report_config = ReportConfiguration(domain='domain', config_id='foo1') report_config._id = "my_report_config" app = Application.new_app('domain', "App") report_module = app.add_module(ReportModule.new_module('Reports', None)) report_module.report_configs = [ ReportAppConfig(report_id=report_config._id, header={'en': 'CommBugz'}), ReportAppConfig(report_id='other_config_id', header={'en': 'CommBugz'}) ] self.assertEqual(len(app.modules[0].report_configs), 2) with patch('corehq.apps.app_manager.util.get_apps_in_domain') as get_apps: get_apps.return_value = [app] # this will get called when report_config is deleted purge_report_from_mobile_ucr(report_config) self.assertEqual(len(app.modules[0].report_configs), 1)