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
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
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}))
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}))
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
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}))
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
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