Ejemplo n.º 1
0
    def download(self, request, output, **kwargs):
        provider = self._get_output_provider(output)
        pos = self.get_object()

        if pos.order.status != Order.STATUS_PAID:
            raise PermissionDenied(
                "Downloads are not available for unpaid orders.")
        if not pos.generate_ticket:
            raise PermissionDenied(
                "Downloads are not enabled for this product.")

        ct = CachedTicket.objects.filter(order_position=pos,
                                         provider=provider.identifier,
                                         file__isnull=False).last()
        if not ct or not ct.file:
            generate.apply_async(args=('orderposition', pos.pk,
                                       provider.identifier))
            raise RetryException()
        else:
            resp = FileResponse(ct.file.file, content_type=ct.type)
            resp[
                'Content-Disposition'] = 'attachment; filename="{}-{}-{}-{}{}"'.format(
                    self.request.event.slug.upper(), pos.order.code,
                    pos.positionid, provider.identifier, ct.extension)
            return resp
Ejemplo n.º 2
0
    def download(self, request, output, **kwargs):
        provider = self._get_output_provider(output)
        order = self.get_object()

        if order.status != Order.STATUS_PAID:
            raise PermissionDenied(
                "Downloads are not available for unpaid orders.")

        ct = CachedCombinedTicket.objects.filter(order=order,
                                                 provider=provider.identifier,
                                                 file__isnull=False).last()
        if not ct or not ct.file:
            generate.apply_async(args=('order', order.pk, provider.identifier))
            raise RetryException()
        else:
            if ct.type == 'text/uri-list':
                resp = HttpResponse(ct.file.file.read(),
                                    content_type='text/uri-list')
                return resp
            else:
                resp = FileResponse(ct.file.file, content_type=ct.type)
                resp[
                    'Content-Disposition'] = 'attachment; filename="{}-{}-{}{}"'.format(
                        self.request.event.slug.upper(), order.code,
                        provider.identifier, ct.extension)
                return resp
Ejemplo n.º 3
0
    def get(self, request, *args, **kwargs):
        if not self.output or not self.output.is_enabled:
            messages.error(request,
                           _('You requested an invalid ticket output type.'))
            return redirect(self.get_order_url())
        if not self.order or not self.order_position:
            raise Http404(
                _('Unknown order code or not authorized to access this order.')
            )
        if self.order.status != Order.STATUS_PAID:
            messages.error(request, _('Order is not paid.'))
            return redirect(self.get_order_url())
        if (not self.request.event.settings.ticket_download or
            (self.request.event.settings.ticket_download_date is not None
             and now() < self.request.event.settings.ticket_download_date)):
            messages.error(request, _('Ticket download is not (yet) enabled.'))
            return redirect(self.get_order_url())

        ct = CachedTicket.objects.get_or_create(
            order_position=self.order_position,
            provider=self.output.identifier)[0]
        if not ct.cachedfile:
            cf = CachedFile()
            cf.date = now()
            cf.expires = self.request.event.date_from + timedelta(days=30)
            cf.save()
            ct.cachedfile = cf
            ct.save()
        generate.apply_async(args=(self.order_position.id,
                                   self.output.identifier))
        return redirect(
            reverse('cachedfile.download', kwargs={'id': ct.cachedfile.id}))
Ejemplo n.º 4
0
Archivo: order.py Proyecto: rixx/pretix
    def get(self, request, *args, **kwargs):
        if not self.output or not self.output.is_enabled:
            messages.error(request, _('You requested an invalid ticket output type.'))
            return redirect(self.get_order_url())
        if not self.order or not self.order_position:
            raise Http404(_('Unknown order code or not authorized to access this order.'))
        if self.order.status != Order.STATUS_PAID:
            messages.error(request, _('Order is not paid.'))
            return redirect(self.get_order_url())
        if (not self.request.event.settings.ticket_download
            or (self.request.event.settings.ticket_download_date is not None
                and now() < self.request.event.settings.ticket_download_date)):
            messages.error(request, _('Ticket download is not (yet) enabled.'))
            return redirect(self.get_order_url())

        ct = CachedTicket.objects.get_or_create(
            order_position=self.order_position, provider=self.output.identifier
        )[0]
        if not ct.cachedfile:
            cf = CachedFile()
            cf.date = now()
            cf.expires = self.request.event.date_from + timedelta(days=30)
            cf.save()
            ct.cachedfile = cf
            ct.save()
        generate.apply_async(args=(self.order_position.id, self.output.identifier))
        return redirect(reverse('cachedfile.download', kwargs={'id': ct.cachedfile.id}))
Ejemplo n.º 5
0
    def _download_position(self):
        try:
            ct = CachedTicket.objects.filter(
                order_position=self.order_position, provider=self.output.identifier
            ).last()
        except CachedTicket.DoesNotExist:
            ct = None

        if not ct:
            ct = CachedTicket.objects.create(
                order_position=self.order_position, provider=self.output.identifier,
                extension='', type='', file=None)
            generate.apply_async(args=(self.order_position.id, self.output.identifier))

        if not ct.file:
            if now() - ct.created > timedelta(minutes=5):
                generate.apply_async(args=(self.order_position.id, self.output.identifier))

        if 'ajax' in self.request.GET:
            return JsonResponse({
                'ready': bool(ct and ct.file),
                'success': False,
                'redirect': self.get_self_url()
            })
        elif not ct.file:
            return render(self.request, "pretixbase/cachedfiles/pending.html", {})
        else:
            resp = FileResponse(ct.file.file, content_type=ct.type)
            resp['Content-Disposition'] = 'attachment; filename="{}-{}-{}-{}{}"'.format(
                self.request.event.slug.upper(), self.order.code, self.order_position.positionid,
                self.output.identifier, ct.extension
            )
            return resp
Ejemplo n.º 6
0
    def get(self, request, *args, **kwargs):
        if not self.output or not self.output.is_enabled:
            messages.error(request, _("You requested an invalid ticket output type."))
            return redirect(self.get_order_url())
        if not self.order:
            raise Http404(_("Unknown order code or not authorized to access this order."))
        if self.order.status != Order.STATUS_PAID:
            messages.error(request, _("Order is not paid."))
            return redirect(self.get_order_url())
        if not self.request.event.settings.ticket_download or (
            self.request.event.settings.ticket_download_date is not None
            and now() < self.request.event.settings.ticket_download_date
        ):
            messages.error(request, _("Ticket download is not (yet) enabled."))
            return redirect(self.get_order_url())

        try:
            ct = CachedTicket.objects.get(order=self.order, provider=self.output.identifier)
        except CachedTicket.DoesNotExist:
            ct = CachedTicket(order=self.order, provider=self.output.identifier)
        try:
            ct.cachedfile
        except CachedFile.DoesNotExist:
            cf = CachedFile()
            cf.date = now()
            cf.expires = self.request.event.date_from + timedelta(days=30)
            cf.save()
            ct.cachedfile = cf
        ct.save()
        generate.apply_async(args=(self.order.id, self.output.identifier))
        return redirect(reverse("cachedfile.download", kwargs={"id": ct.cachedfile.id}))
Ejemplo n.º 7
0
    def download(self, request, output, **kwargs):
        provider = self._get_output_provider(output)
        order = self.get_object()

        if order.status != Order.STATUS_PAID:
            raise PermissionDenied("Downloads are not available for unpaid orders.")

        ct = CachedCombinedTicket.objects.filter(
            order=order, provider=provider.identifier, file__isnull=False
        ).last()
        if not ct or not ct.file:
            generate.apply_async(args=('order', order.pk, provider.identifier))
            raise RetryException()
        else:
            resp = FileResponse(ct.file.file, content_type=ct.type)
            resp['Content-Disposition'] = 'attachment; filename="{}-{}-{}{}"'.format(
                self.request.event.slug.upper(), order.code,
                provider.identifier, ct.extension
            )
            return resp
Ejemplo n.º 8
0
    def get(self, request, *args, **kwargs):
        if not self.output or not self.output.is_enabled:
            messages.error(request, _('You requested an invalid ticket output type.'))
            return redirect(self.get_order_url())
        if not self.order or not self.order_position:
            raise Http404(_('Unknown order code or not authorized to access this order.'))
        if self.order.status != Order.STATUS_PAID:
            messages.error(request, _('Order is not paid.'))
            return redirect(self.get_order_url())
        if (not self.request.event.settings.ticket_download
            or (self.request.event.settings.ticket_download_date is not None
                and now() < self.request.event.settings.ticket_download_date)):
            messages.error(request, _('Ticket download is not (yet) enabled.'))
            return redirect(self.get_order_url())

        try:
            ct = CachedTicket.objects.filter(
                order_position=self.order_position, provider=self.output.identifier
            ).last()
        except CachedTicket.DoesNotExist:
            ct = None

        if not ct:
            ct = CachedTicket.objects.create(
                order_position=self.order_position, provider=self.output.identifier,
                extension='', type='', file=None)
            generate.apply_async(args=(self.order_position.id, self.output.identifier))

        if 'ajax' in request.GET:
            return HttpResponse('1' if ct and ct.file else '0')
        elif not ct.file:
            return render(request, "pretixbase/cachedfiles/pending.html", {})
        else:
            resp = FileResponse(ct.file.file, content_type=ct.type)
            resp['Content-Disposition'] = 'attachment; filename="{}-{}-{}-{}{}"'.format(
                self.request.event.slug.upper(), self.order.code, self.order_position.positionid,
                self.output.identifier, ct.extension
            )
            return resp