Offer download options per position, not per order

This commit is contained in:
Raphael Michel
2016-11-01 17:58:41 +01:00
parent 3344c02c80
commit ad35110166
25 changed files with 630 additions and 703 deletions

View File

@@ -6,7 +6,7 @@ from django.utils.translation import ugettext as _
from pretix.base.i18n import language
from pretix.base.models import (
CachedFile, CachedTicket, Event, Order, cachedfile_name,
CachedFile, CachedTicket, Event, Order, OrderPosition, cachedfile_name,
)
from pretix.base.signals import register_ticket_outputs
from pretix.celery import app
@@ -14,23 +14,23 @@ from pretix.helpers.database import rolledback_transaction
@app.task
def generate(order: str, provider: str):
order = Order.objects.select_related('event').get(id=order)
ct = CachedTicket.objects.get_or_create(order=order, provider=provider)[0]
def generate(order_position: str, provider: str):
order_position = OrderPosition.objects.select_related('order', 'order__event').get(id=order_position)
ct = CachedTicket.objects.get_or_create(order_position=order_position, provider=provider)[0]
if not ct.cachedfile:
cf = CachedFile()
cf.date = now()
cf.expires = order.event.date_from + timedelta(days=30)
cf.expires = order_position.order.event.date_from + timedelta(days=30)
cf.save()
ct.cachedfile = cf
ct.save()
with language(order.locale):
responses = register_ticket_outputs.send(order.event)
with language(order_position.order.locale):
responses = register_ticket_outputs.send(order_position.order.event)
for receiver, response in responses:
prov = response(order.event)
prov = response(order_position.order.event)
if prov.identifier == provider:
ct.cachedfile.filename, ct.cachedfile.type, data = prov.generate(order)
ct.cachedfile.filename, ct.cachedfile.type, data = prov.generate(order_position)
ct.cachedfile.file.save(cachedfile_name(ct.cachedfile, ct.cachedfile.filename), ContentFile(data))
ct.cachedfile.save()
@@ -49,10 +49,10 @@ def preview(event: int, provider: str):
email='sample@pretix.eu',
expires=now(), code="PREVIEW1234", total=119)
order.positions.create(item=item, attendee_name=_("John Doe"), price=item.default_price)
p = order.positions.create(item=item, attendee_name=_("John Doe"), price=item.default_price)
responses = register_ticket_outputs.send(event)
for receiver, response in responses:
prov = response(event)
if prov.identifier == provider:
return prov.generate(order)
return prov.generate(p)