mirror of
https://github.com/pretix/pretix.git
synced 2026-05-05 15:14:04 +00:00
Improve add-on products
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user