Preview for ticket outputs

This commit is contained in:
Raphael Michel
2016-06-14 12:51:00 +02:00
parent d6478e66de
commit 39e940da5e
5 changed files with 85 additions and 14 deletions

View File

@@ -1,9 +1,14 @@
from datetime import timedelta
from django.core.files.base import ContentFile
from django.db import transaction
from django.utils.timezone import now
from django.utils.translation import ugettext as _
from pretix.base.models import CachedFile, CachedTicket, Order, cachedfile_name
from pretix.base.i18n import language
from pretix.base.models import (
CachedFile, CachedTicket, Event, Order, cachedfile_name,
)
from pretix.base.signals import register_ticket_outputs
from pretix.celery import app
@@ -20,10 +25,40 @@ def generate(order: str, provider: str):
ct.cachedfile = cf
ct.save()
responses = register_ticket_outputs.send(order.event)
for receiver, response in responses:
prov = response(order.event)
if prov.identifier == provider:
ct.cachedfile.filename, ct.cachedfile.type, data = prov.generate(order)
ct.cachedfile.file.save(cachedfile_name(ct.cachedfile, ct.cachedfile.filename), ContentFile(data))
ct.cachedfile.save()
with language(order.locale):
responses = register_ticket_outputs.send(order.event)
for receiver, response in responses:
prov = response(order.event)
if prov.identifier == provider:
ct.cachedfile.filename, ct.cachedfile.type, data = prov.generate(order)
ct.cachedfile.file.save(cachedfile_name(ct.cachedfile, ct.cachedfile.filename), ContentFile(data))
ct.cachedfile.save()
class DummyRollbackException(Exception):
pass
def preview(event: int, provider: str):
event = Event.objects.get(id=event)
res = None
try:
with transaction.atomic(), language(event.settings.locale):
item = event.items.create(name=_("Sample product"), default_price=42.23)
order = event.orders.create(status=Order.STATUS_PENDING, datetime=now(),
expires=now(), code="PREVIEW1234", total=119)
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:
res = prov.generate(order)
raise DummyRollbackException()
except DummyRollbackException:
return res
else:
raise Exception('Invalid state, should have rolled back.')