Example #1
0
    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
Example #2
0
    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
Example #3
0
    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),
        }
Example #4
0
    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
Example #5
0
    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
        )
Example #6
0
    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)
Example #7
0
 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)
Example #8
0
    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)
Example #9
0
    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)
Example #10
0
 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
         )
Example #11
0
    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),
        }