Esempio n. 1
0
    def get_report_content(self, attach_excel=False):
        """
        Get the report's HTML content as rendered by the static view format.

        """
        try:
            if self.report is None:
                return _(
                    "The report used to create this scheduled report is no"
                    " longer available on CommCare HQ.  Please delete this"
                    " scheduled report and create a new one using an available"
                    " report."), None
        except Exception:
            pass

        from django.http import HttpRequest, QueryDict
        request = HttpRequest()
        request.couch_user = self.owner
        request.user = self.owner.get_django_user()
        request.domain = self.domain
        request.couch_user.current_domain = self.domain

        request.GET = QueryDict(self.query_string + '&filterSet=true')

        # Make sure the request gets processed by PRBAC Middleware
        CCHQPRBACMiddleware.process_request(request)

        try:
            response = self._dispatcher.dispatch(request,
                                                 render_as='email',
                                                 **self.view_kwargs)
            if attach_excel is True:
                file_obj = self._dispatcher.dispatch(request,
                                                     render_as='excel',
                                                     **self.view_kwargs)
            else:
                file_obj = None
            return json.loads(response.content)['report'], file_obj
        except PermissionDenied:
            return _("We are sorry, but your saved report '%(config_name)s' "
                     "is no longer accessible because your subscription does "
                     "not allow Custom Reporting. Please talk to your Project "
                     "Administrator about enabling Custom Reports. If you "
                     "want CommCare HQ to stop sending this message, please "
                     "visit %(saved_reports_url)s to remove this "
                     "Emailed Report.") % {
                         'config_name':
                         self.name,
                         'saved_reports_url':
                         "%s%s" %
                         (get_url_base(),
                          reverse('saved_reports', args=[request.domain])),
                     }, None
        except Exception as e:
            notify_exception(None, "Error generating report")
            return _("An error occurred while generating this report."), None
Esempio n. 2
0
    def get_report_content(self, attach_excel=False):
        """
        Get the report's HTML content as rendered by the static view format.

        """
        try:
            if self.report is None:
                return _("The report used to create this scheduled report is no"
                         " longer available on CommCare HQ.  Please delete this"
                         " scheduled report and create a new one using an available"
                         " report."), None
        except Exception:
            pass

        from django.http import HttpRequest, QueryDict
        request = HttpRequest()
        request.couch_user = self.owner
        request.user = self.owner.get_django_user()
        request.domain = self.domain
        request.couch_user.current_domain = self.domain

        request.GET = QueryDict(self.query_string + '&filterSet=true')

        # Make sure the request gets processed by PRBAC Middleware
        CCHQPRBACMiddleware.apply_prbac(request)

        try:
            response = self._dispatcher.dispatch(request, render_as='email',
                **self.view_kwargs)
            if attach_excel is True:
                file_obj = self._dispatcher.dispatch(request, render_as='excel',
                **self.view_kwargs)
            else:
                file_obj = None
            return json.loads(response.content)['report'], file_obj
        except PermissionDenied:
            return _("We are sorry, but your saved report '%(config_name)s' "
                     "is no longer accessible because your subscription does "
                     "not allow Custom Reporting. Please talk to your Project "
                     "Administrator about enabling Custom Reports. If you "
                     "want CommCare HQ to stop sending this message, please "
                     "visit %(saved_reports_url)s to remove this "
                     "Emailed Report.") % {
                         'config_name': self.name,
                         'saved_reports_url': "%s%s" % (
                             get_url_base(), reverse(
                                 'saved_reports', args=[request.domain])),
                     }, None
        except Exception as e:
            notify_exception(None, "Error generating report")
            return _("An error occurred while generating this report."), None
Esempio n. 3
0
    def get_report_content(self, lang, attach_excel=False):
        """
        Get the report's HTML content as rendered by the static view format.

        """
        from corehq.apps.locations.middleware import LocationAccessMiddleware

        try:
            if self.report is None:
                return ReportContent(
                    _("The report used to create this scheduled report is no"
                      " longer available on CommCare HQ.  Please delete this"
                      " scheduled report and create a new one using an available"
                      " report."),
                    None,
                )
        except Exception:
            pass

        if getattr(self.report, 'is_deprecated', False):
            return ReportContent(
                self.report.deprecation_email_message or
                _("[DEPRECATED] %s report has been deprecated and will stop working soon. "
                  "Please update your saved reports email settings if needed."
                  % self.report.name),
                None,
            )

        mock_request = HttpRequest()
        mock_request.couch_user = self.owner
        mock_request.user = self.owner.get_django_user()
        mock_request.domain = self.domain
        mock_request.couch_user.current_domain = self.domain
        mock_request.couch_user.language = lang
        mock_request.method = 'GET'
        mock_request.bypass_two_factor = True

        mock_query_string_parts = [self.query_string, 'filterSet=true']
        if self.is_configurable_report:
            mock_query_string_parts.append(urlencode(self.filters, True))
            mock_query_string_parts.append(
                urlencode(self.get_date_range(), True))
        mock_request.GET = QueryDict('&'.join(mock_query_string_parts))

        # Make sure the request gets processed by PRBAC Middleware
        CCHQPRBACMiddleware.apply_prbac(mock_request)
        LocationAccessMiddleware.apply_location_access(mock_request)

        try:
            dispatch_func = functools.partial(
                self._dispatcher.__class__.as_view(), mock_request,
                **self.view_kwargs)
            email_response = dispatch_func(render_as='email')
            if email_response.status_code == 302:
                return ReportContent(
                    _("We are sorry, but your saved report '%(config_name)s' "
                      "is no longer accessible because the owner %(username)s "
                      "is no longer active.") % {
                          'config_name': self.name,
                          'username': self.owner.username
                      },
                    None,
                )
            try:
                content_json = json.loads(email_response.content)
            except ValueError:
                email_text = email_response.content
            else:
                email_text = content_json['report']
            excel_attachment = dispatch_func(
                render_as='excel') if attach_excel else None
            return ReportContent(email_text, excel_attachment)
        except PermissionDenied:
            return ReportContent(
                _("We are sorry, but your saved report '%(config_name)s' "
                  "is no longer accessible because your subscription does "
                  "not allow Custom Reporting. Please talk to your Project "
                  "Administrator about enabling Custom Reports. If you "
                  "want CommCare HQ to stop sending this message, please "
                  "visit %(saved_reports_url)s to remove this "
                  "Emailed Report.") % {
                      'config_name':
                      self.name,
                      'saved_reports_url':
                      absolute_reverse('saved_reports',
                                       args=[mock_request.domain]),
                  },
                None,
            )
        except Http404:
            return ReportContent(
                _("We are sorry, but your saved report '%(config_name)s' "
                  "can not be generated since you do not have the correct permissions. "
                  "Please talk to your Project Administrator about getting permissions for this"
                  "report.") % {
                      'config_name': self.name,
                  },
                None,
            )
        except UnsupportedSavedReportError:
            return ReportContent(
                _("We are sorry, but your saved report '%(config_name)s' "
                  "is no longer available. If you think this is a mistake, please report an issue."
                  ) % {
                      'config_name': self.name,
                  },
                None,
            )
Esempio n. 4
0
    def get_report_content(self, lang, attach_excel=False):
        """
        Get the report's HTML content as rendered by the static view format.

        """
        try:
            if self.report is None:
                return ReportContent(
                    _("The report used to create this scheduled report is no"
                      " longer available on CommCare HQ.  Please delete this"
                      " scheduled report and create a new one using an available"
                      " report."),
                    None,
                )
        except Exception:
            pass

        from django.http import HttpRequest, QueryDict
        mock_request = HttpRequest()
        mock_request.couch_user = self.owner
        mock_request.user = self.owner.get_django_user()
        mock_request.domain = self.domain
        mock_request.couch_user.current_domain = self.domain
        mock_request.couch_user.language = lang
        mock_request.method = 'GET'

        mock_query_string_parts = [self.query_string, 'filterSet=true']
        if self.is_configurable_report:
            mock_query_string_parts.append(urlencode(self.filters, True))
            mock_query_string_parts.append(
                urlencode(self.get_date_range(), True))
        mock_request.GET = QueryDict('&'.join(mock_query_string_parts))

        # Make sure the request gets processed by PRBAC Middleware
        CCHQPRBACMiddleware.apply_prbac(mock_request)

        try:
            dispatch_func = functools.partial(
                self._dispatcher.__class__.as_view(), mock_request,
                **self.view_kwargs)
            email_response = dispatch_func(render_as='email')
            if email_response.status_code == 302:
                return ReportContent(
                    _("We are sorry, but your saved report '%(config_name)s' "
                      "is no longer accessible because the owner %(username)s "
                      "is no longer active.") % {
                          'config_name': self.name,
                          'username': self.owner.username
                      },
                    None,
                )
            return ReportContent(
                json.loads(email_response.content)['report'],
                dispatch_func(render_as='excel') if attach_excel else None,
            )
        except PermissionDenied:
            return ReportContent(
                _("We are sorry, but your saved report '%(config_name)s' "
                  "is no longer accessible because your subscription does "
                  "not allow Custom Reporting. Please talk to your Project "
                  "Administrator about enabling Custom Reports. If you "
                  "want CommCare HQ to stop sending this message, please "
                  "visit %(saved_reports_url)s to remove this "
                  "Emailed Report.") % {
                      'config_name':
                      self.name,
                      'saved_reports_url':
                      absolute_reverse('saved_reports',
                                       args=[mock_request.domain]),
                  },
                None,
            )
        except Http404:
            return ReportContent(
                _("We are sorry, but your saved report '%(config_name)s' "
                  "can not be generated since you do not have the correct permissions. "
                  "Please talk to your Project Administrator about getting permissions for this"
                  "report.") % {
                      'config_name': self.name,
                  },
                None,
            )
        except UnsupportedSavedReportError:
            return ReportContent(
                _("We are sorry, but your saved report '%(config_name)s' "
                  "is no longer available. If you think this is a mistake, please report an issue."
                  ) % {
                      'config_name': self.name,
                  },
                None,
            )
        except Exception:
            notify_exception(None,
                             "Error generating report: {}".format(
                                 self.report_slug),
                             details={
                                 'domain': self.domain,
                                 'user': self.owner.username,
                                 'report': self.report_slug,
                                 'report config': self.get_id
                             })
            return ReportContent(
                _("An error occurred while generating this report."), None)
Esempio n. 5
0
    def get_report_content(self, lang, attach_excel=False):
        """
        Get the report's HTML content as rendered by the static view format.

        """
        try:
            if self.report is None:
                return ReportContent(
                    _("The report used to create this scheduled report is no"
                      " longer available on CommCare HQ.  Please delete this"
                      " scheduled report and create a new one using an available"
                      " report."),
                    None,
                )
        except Exception:
            pass

        from django.http import HttpRequest, QueryDict
        mock_request = HttpRequest()
        mock_request.couch_user = self.owner
        mock_request.user = self.owner.get_django_user()
        mock_request.domain = self.domain
        mock_request.couch_user.current_domain = self.domain
        mock_request.couch_user.language = lang

        mock_query_string_parts = [self.query_string, 'filterSet=true']
        if self.is_configurable_report:
            mock_query_string_parts.append(urlencode(self.filters, True))
            mock_query_string_parts.append(urlencode(self.get_date_range(), True))
        mock_request.GET = QueryDict('&'.join(mock_query_string_parts))

        # Make sure the request gets processed by PRBAC Middleware
        CCHQPRBACMiddleware.apply_prbac(mock_request)

        try:
            dispatch_func = functools.partial(self._dispatcher.dispatch, mock_request, **self.view_kwargs)
            email_response = dispatch_func(render_as='email')
            if email_response.status_code == 302:
                return ReportContent(
                    _(
                        "We are sorry, but your saved report '%(config_name)s' "
                        "is no longer accessible because the owner %(username)s "
                        "is no longer active."
                    ) % {
                        'config_name': self.name,
                        'username': self.owner.username
                    },
                    None,
                )
            return ReportContent(
                json.loads(email_response.content)['report'],
                dispatch_func(render_as='excel') if attach_excel else None,
            )
        except PermissionDenied:
            return ReportContent(
                _(
                    "We are sorry, but your saved report '%(config_name)s' "
                    "is no longer accessible because your subscription does "
                    "not allow Custom Reporting. Please talk to your Project "
                    "Administrator about enabling Custom Reports. If you "
                    "want CommCare HQ to stop sending this message, please "
                    "visit %(saved_reports_url)s to remove this "
                    "Emailed Report."
                ) % {
                    'config_name': self.name,
                    'saved_reports_url': absolute_reverse(
                        'saved_reports', args=[mock_request.domain]
                    ),
                },
                None,
            )
        except Http404:
            return ReportContent(
                _(
                    "We are sorry, but your saved report '%(config_name)s' "
                    "can not be generated since you do not have the correct permissions. "
                    "Please talk to your Project Administrator about getting permissions for this"
                    "report."
                ) % {
                    'config_name': self.name,
                },
                None,
            )
        except UnsupportedSavedReportError:
            return ReportContent(
                _(
                    "We are sorry, but your saved report '%(config_name)s' "
                    "is no longer available. If you think this is a mistake, please report an issue."
                ) % {
                    'config_name': self.name,
                },
                None,
            )
        except Exception:
            notify_exception(None, "Error generating report: {}".format(self.report_slug), details={
                'domain': self.domain,
                'user': self.owner.username,
                'report': self.report_slug,
                'report config': self.get_id
            })
            return ReportContent(_("An error occurred while generating this report."), None)
Esempio n. 6
0
    def get_report_content(self, lang, attach_excel=False):
        """
        Get the report's HTML content as rendered by the static view format.

        """
        try:
            if self.report is None:
                return _("The report used to create this scheduled report is no"
                         " longer available on CommCare HQ.  Please delete this"
                         " scheduled report and create a new one using an available"
                         " report."), None
        except Exception:
            pass

        from django.http import HttpRequest, QueryDict
        request = HttpRequest()
        request.couch_user = self.owner
        request.user = self.owner.get_django_user()
        request.domain = self.domain
        request.couch_user.current_domain = self.domain
        request.couch_user.language = lang

        request.GET = QueryDict(
            self.query_string
            + '&filterSet=true'
            + ('&'
               + urlencode(self.filters, True)
               + '&'
               + urlencode(self.get_date_range(), True)
               if self.is_configurable_report else '')
        )

        # Make sure the request gets processed by PRBAC Middleware
        CCHQPRBACMiddleware.apply_prbac(request)

        try:
            if self.is_configurable_report:
                response = self._dispatcher.dispatch(
                    request,
                    self.subreport_slug,
                    render_as='email',
                    **self.view_kwargs
                )
            else:
                response = self._dispatcher.dispatch(
                    request,
                    render_as='email',
                    permissions_check=self._dispatcher.permissions_check,
                    **self.view_kwargs
                )
            if attach_excel is True:
                if self.is_configurable_report:
                    file_obj = self._dispatcher.dispatch(
                        request, self.subreport_slug,
                        render_as='excel',
                        **self.view_kwargs
                    )
                else:
                    file_obj = self._dispatcher.dispatch(
                        request,
                        render_as='excel',
                        permissions_check=self._dispatcher.permissions_check,
                        **self.view_kwargs
                    )
            else:
                file_obj = None
            return json.loads(response.content)['report'], file_obj
        except PermissionDenied:
            return _(
                "We are sorry, but your saved report '%(config_name)s' "
                "is no longer accessible because your subscription does "
                "not allow Custom Reporting. Please talk to your Project "
                "Administrator about enabling Custom Reports. If you "
                "want CommCare HQ to stop sending this message, please "
                "visit %(saved_reports_url)s to remove this "
                "Emailed Report."
            ) % {
                'config_name': self.name,
                'saved_reports_url': absolute_reverse('saved_reports',
                                                      args=[request.domain]),
            }, None
        except Http404:
            return _("We are sorry, but your saved report '%(config_name)s' "
                     "can not be generated since you do not have the correct permissions. "
                     "Please talk to your Project Administrator about getting permissions for this"
                     "report.") % {'config_name': self.name}, None
        except Exception:
            notify_exception(None, "Error generating report: {}".format(self.report_slug), details={
                'domain': self.domain,
                'user': self.owner.username,
                'report': self.report_slug,
                'report config': self.get_id
            })
            return _("An error occurred while generating this report."), None