Badges: Add per-position downloads

This commit is contained in:
Raphael Michel
2018-12-19 12:31:44 +01:00
parent 215514fca7
commit eb85fa956e
4 changed files with 35 additions and 4 deletions

View File

@@ -12,7 +12,9 @@ from pretix.base.signals import (
event_copy_data, item_copy_data, logentry_display, logentry_object_link,
register_data_exporters,
)
from pretix.control.signals import item_forms, nav_event, order_info
from pretix.control.signals import (
item_forms, nav_event, order_info, order_position_buttons,
)
from pretix.plugins.badges.forms import BadgeItemForm
from pretix.plugins.badges.models import BadgeItem, BadgeLayout
@@ -95,6 +97,20 @@ def register_pdf(sender, **kwargs):
return BadgeExporter
@receiver(order_position_buttons, dispatch_uid="badges_control_order_buttons")
def control_order_position_info(sender: Event, position, request, order: Order, **kwargs):
template = get_template('pretixplugins/badges/control_order_position_buttons.html')
ctx = {
'order': order,
'request': request,
'event': sender,
'position': position
}
return template.render(ctx, request=request).strip()
@receiver(order_info, dispatch_uid="badges_control_order_info")
def control_order_info(sender: Event, request, order: Order, **kwargs):

View File

@@ -14,11 +14,11 @@ logger = logging.getLogger(__name__)
@app.task()
def badges_create_pdf(fileid: int, event: int, orders: List[int]) -> int:
def badges_create_pdf(fileid: int, event: int, positions: List[int]) -> int:
file = CachedFile.objects.get(id=fileid)
event = Event.objects.get(id=event)
pdfcontent = render_pdf(event, OrderPosition.objects.filter(order_id__in=orders))
pdfcontent = render_pdf(event, OrderPosition.objects.filter(id__in=positions))
file.file.save(cachedfile_name(file, file.filename), ContentFile(pdfcontent.read()))
file.save()
return file.pk

View File

@@ -0,0 +1,11 @@
{% load i18n %}
{% load eventurl %}
{% load bootstrap3 %}
<form action="{% url "plugins:badges:print" event=event.slug organizer=event.organizer.slug %}?code={{ order.code }}&position={{ position.pk }}"
method="post" data-asynctask data-asynctask-download data-asynctask-long class="form-inline helper-display-inline">
{% csrf_token %}
<button class="btn btn-default btn-xs" type="submit">
<span class="fa fa-print"></span>
{% trans "Badge" %}
</button>
</form>

View File

@@ -217,8 +217,12 @@ class OrderPrintDo(EventPermissionRequiredMixin, AsyncAction, View):
cf.type = 'application/pdf'
cf.expires = now() + timedelta(days=3)
cf.save()
if 'position' in request.GET:
positions = [p.pk for p in order.positions.filter(pk=request.GET.get('position'))]
else:
positions = [p.pk for p in order.positions.all()]
return self.do(
str(cf.id),
self.request.event.pk,
[order.pk],
positions,
)