def saved_report_context_data(self): """ Returns a dictionary with every saved report config associated with the report """ def _get_context_for_saved_report(report_config): if report_config: report_config_data = report_config.to_json() report_config_data['filters'].update( report_config.get_date_range()) return report_config_data else: return ReportConfig.default() context = { 'report_configs': [ _get_context_for_saved_report(saved_report) for saved_report in ReportConfig.by_domain_and_owner(self.domain, self.request.couch_user._id, report_slug=self.slug) ], 'default_config': _get_context_for_saved_report(self.saved_report_config), 'datespan_filters': ReportConfig.datespan_filter_choices(self.datespan_filters, self.lang), } return context
def clean(self): name = self.cleaned_data['name'] _id = self.cleaned_data['_id'] user_configs = ReportConfig.by_domain_and_owner( self.domain, self.user_id) if not _id and name in [c.name for c in user_configs]: raise forms.ValidationError( "A saved report with the name '%(name)s' already exists." % { 'name': name, }) date_range = self.cleaned_data['date_range'] if (self.cleaned_data['report_type'] == ConfigurableReportView.prefix and not self.cleaned_data['datespan_slug']): self.cleaned_data['date_range'] = None else: if date_range == 'last7': self.cleaned_data['days'] = 7 elif date_range == 'last30': self.cleaned_data['days'] = 30 elif (date_range == 'lastn' and self.cleaned_data.get('days') is None and self.cleaned_data['report_type'] != ConfigurableReportView.prefix): raise forms.ValidationError( "Field 'days' was expected but not provided.") return self.cleaned_data
def saved_report_context_data(self): def _get_context_for_saved_report(report_config): if report_config: report_config_data = report_config.to_json() report_config_data['filters'].update( report_config.get_date_range()) return report_config_data else: return ReportConfig.default() saved_report_config_id = self.request.GET.get('config_id') saved_report_config = get_document_or_404(ReportConfig, self.domain, saved_report_config_id) \ if saved_report_config_id else None return { 'report_configs': [ _get_context_for_saved_report(saved_report) for saved_report in ReportConfig.by_domain_and_owner(self.domain, self.request.couch_user._id, report_slug=self.slug) ], 'default_config': _get_context_for_saved_report(saved_report_config), 'datespan_filters': ReportConfig.datespan_filter_choices(self.datespan_filters, self.lang), }
def clean(self): name = self.cleaned_data['name'] _id = self.cleaned_data['_id'] user_configs = ReportConfig.by_domain_and_owner(self.domain, self.user_id) if not _id and name in [c.name for c in user_configs]: raise forms.ValidationError( "A saved report with the name '%(name)s' already exists." % { 'name': name, } ) date_range = self.cleaned_data['date_range'] if ( self.cleaned_data['report_type'] == ConfigurableReportView.prefix and not self.cleaned_data['datespan_slug'] ): self.cleaned_data['date_range'] = None else: if date_range == 'last7': self.cleaned_data['days'] = 7 elif date_range == 'last30': self.cleaned_data['days'] = 30 elif (date_range == 'lastn' and self.cleaned_data.get('days') is None and self.cleaned_data['report_type'] != ConfigurableReportView.prefix): raise forms.ValidationError( "Field 'days' was expected but not provided." ) return self.cleaned_data
def _update_initial_context(self): """ Intention: Don't override. """ report_configs = ReportConfig.by_domain_and_owner(self.domain, self.request.couch_user._id, report_slug=self.slug) current_config_id = self.request.GET.get('config_id', '') default_config = ReportConfig.default() def is_editable_datespan(field): if isinstance(field, six.string_types): soft_assert_type_text(field) field_fn = to_function(field) if isinstance(field, six.string_types) else field return issubclass(field_fn, DatespanFilter) and field_fn.is_editable has_datespan = any([is_editable_datespan(field) for field in self.fields]) self.context.update( report=dict( title=self.rendered_report_title, description=self.description, section_name=self.section_name, slug=self.slug, sub_slug=None, type=self.dispatcher.prefix, url_root=self.url_root, is_async=self.asynchronous, is_exportable=self.exportable, dispatcher=self.dispatcher, filter_set=self.filter_set, needs_filters=self.needs_filters, has_datespan=has_datespan, show=( self.override_permissions_check or self.request.couch_user.can_view_some_reports(self.domain) ), is_emailable=self.emailable, is_export_all = self.exportable_all, is_printable=self.printable, is_admin=self.is_admin_report, special_notice=self.special_notice, report_title=self.report_title or self.rendered_report_title, report_subtitles=self.report_subtitles, export_target=self.export_target, js_options=self.js_options, custom_filter_action_template=( self.custom_filter_action_template if hasattr(self, 'custom_filter_action_template') else False ), ), current_config_id=current_config_id, default_config=default_config, report_configs=report_configs, show_time_notice=self.show_time_notice, domain=self.domain, layout_flush_content=self.flush_layout )
def test_no_shared_configs(self): config = self.create_report_config(self.DOMAIN, self.admin_user._id) configs = ReportConfig.by_domain_and_owner( self.DOMAIN, self.admin_user._id, include_shared=True, stale=False, ) self.assertEqual(len(configs), 1) self.assertEqual(configs[0]._id, config._id)
def _paginated_items(self, items_per_page, skip): reports = ReportConfig.by_domain_and_owner(self.request.domain, self.request.couch_user._id, limit=items_per_page, skip=skip) for report in reports: yield self._fmt_item(report.name, report.url, description="%(desc)s (%(date)s)" % { 'desc': report.description, 'date': report.date_description, }, full_name=report.full_name)
def test_with_other_owner_shared_config(self): _config = self.create_report_config(self.DOMAIN, self.admin_user._id) config2 = self.create_report_config(self.DOMAIN, self.other_admin_user._id) self.create_report_notification([config2], owner_id=self.other_admin_user._id) configs = ReportConfig.by_domain_and_owner( self.DOMAIN, self.admin_user._id, include_shared=True, stale=False, ) self.assertEqual(len(configs), 2)
def test_with_shared_config(self): config = self.create_report_config(self.DOMAIN, self.admin_user._id) self.create_report_notification([config], owner_id=self.admin_user._id) # Clear cached value ReportConfig.shared_on_domain.clear(ReportConfig, domain=self.DOMAIN) configs = ReportConfig.by_domain_and_owner( self.DOMAIN, self.admin_user._id, include_shared=True, stale=False, ) self.assertEqual(len(configs), 1) self.assertEqual(configs[0]._id, config._id)
def _paginated_items(self, items_per_page, skip): reports = ReportConfig.by_domain_and_owner( self.request.domain, self.request.couch_user._id, limit=items_per_page, skip=skip ) for report in reports: yield self._fmt_item( report.name, report.url, description="%(desc)s (%(date)s)" % { 'desc': report.description, 'date': report.date_description, }, full_name=report.full_name )
def saved_report_context_data(self): def _get_context_for_saved_report(report_config): if report_config: report_config_data = report_config.to_json() report_config_data['filters'].update(report_config.get_date_range()) return report_config_data else: return ReportConfig.default() saved_report_config_id = self.request.GET.get('config_id') saved_report_config = get_document_or_404(ReportConfig, self.domain, saved_report_config_id) \ if saved_report_config_id else None return { 'report_configs': [ _get_context_for_saved_report(saved_report) for saved_report in ReportConfig.by_domain_and_owner( self.domain, self.request.couch_user._id, report_slug=self.slug ) ], 'default_config': _get_context_for_saved_report(saved_report_config), 'datespan_filters': ReportConfig.datespan_filter_choices(self.datespan_filters, self.lang), }