Improve add-on products

This commit is contained in:
Raphael Michel
2017-03-19 14:33:45 +01:00
parent 5bcfb958f0
commit b52f2f5a9e
36 changed files with 802 additions and 131 deletions

View File

@@ -3,6 +3,7 @@ import io
from collections import OrderedDict
from django import forms
from django.db.models.functions import Coalesce
from django.utils.translation import ugettext as _, ugettext_lazy
from pretix.base.exporter import BaseExporter
@@ -70,10 +71,10 @@ class CSVCheckinList(BaseCheckinList):
order__event=self.event, item_id__in=form_data['items']
).prefetch_related(
'answers', 'answers__question'
).select_related('order', 'item', 'variation')
).select_related('order', 'item', 'variation', 'addon_to')
if form_data['sort'] == 'name':
qs = qs.order_by('attendee_name')
qs = qs.order_by(Coalesce('attendee_name', 'addon_to__attendee_name'))
elif form_data['sort'] == 'code':
qs = qs.order_by('order__code')
@@ -100,7 +101,7 @@ class CSVCheckinList(BaseCheckinList):
for op in qs:
row = [
op.order.code,
op.attendee_name,
op.attendee_name or (op.addon_to.attendee_name if op.addon_to else ''),
str(op.item.name) + (" " + str(op.variation.value) if op.variation else ""),
op.price,
]
@@ -109,7 +110,7 @@ class CSVCheckinList(BaseCheckinList):
if form_data['secrets']:
row.append(op.secret)
if self.event.settings.attendee_emails_asked:
row.append(op.attendee_email)
row.append(op.attendee_email or (op.addon_to.attendee_name if op.addon_to else ''))
acache = {}
for a in op.answers.all():
acache[a.question_id] = str(a)

View File

@@ -74,7 +74,7 @@ class ApiRedeemView(ApiView):
try:
with transaction.atomic():
created = False
op = OrderPosition.objects.select_related('item', 'variation', 'order').get(
op = OrderPosition.objects.select_related('item', 'variation', 'order', 'addon_to').get(
order__event=self.event, secret=secret
)
if op.order.status == Order.STATUS_PAID:
@@ -105,7 +105,7 @@ class ApiRedeemView(ApiView):
'order': op.order.code,
'item': str(op.item),
'variation': str(op.variation) if op.variation else None,
'attendee_name': op.attendee_name
'attendee_name': op.attendee_name or (op.addon_to.attendee_name if op.addon_to else ''),
}
except OrderPosition.DoesNotExist:
@@ -136,7 +136,7 @@ class ApiSearchView(ApiView):
'order': op.order.code,
'item': str(op.item),
'variation': str(op.variation) if op.variation else None,
'attendee_name': op.attendee_name,
'attendee_name': op.attendee_name or (op.addon_to.attendee_name if op.addon_to else ''),
'redeemed': bool(op.checkins.all()),
'paid': op.order.status == Order.STATUS_PAID,
} for op in ops

View File

@@ -91,6 +91,8 @@ class PdfTicketOutput(BaseTicketOutput):
buffer = BytesIO()
p = self._create_canvas(buffer)
for op in order.positions.all():
if op.addon_to_id and not self.event.settings.ticket_download_addons:
continue
self._draw_page(p, op, order)
p.save()
outbuffer = self._render_with_background(buffer)