forked from CGM_Public/pretix_original
Badges: Add per-position downloads
This commit is contained in:
@@ -12,7 +12,9 @@ from pretix.base.signals import (
|
|||||||
event_copy_data, item_copy_data, logentry_display, logentry_object_link,
|
event_copy_data, item_copy_data, logentry_display, logentry_object_link,
|
||||||
register_data_exporters,
|
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.forms import BadgeItemForm
|
||||||
from pretix.plugins.badges.models import BadgeItem, BadgeLayout
|
from pretix.plugins.badges.models import BadgeItem, BadgeLayout
|
||||||
|
|
||||||
@@ -95,6 +97,20 @@ def register_pdf(sender, **kwargs):
|
|||||||
return BadgeExporter
|
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")
|
@receiver(order_info, dispatch_uid="badges_control_order_info")
|
||||||
def control_order_info(sender: Event, request, order: Order, **kwargs):
|
def control_order_info(sender: Event, request, order: Order, **kwargs):
|
||||||
|
|
||||||
|
|||||||
@@ -14,11 +14,11 @@ logger = logging.getLogger(__name__)
|
|||||||
|
|
||||||
|
|
||||||
@app.task()
|
@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)
|
file = CachedFile.objects.get(id=fileid)
|
||||||
event = Event.objects.get(id=event)
|
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.file.save(cachedfile_name(file, file.filename), ContentFile(pdfcontent.read()))
|
||||||
file.save()
|
file.save()
|
||||||
return file.pk
|
return file.pk
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -217,8 +217,12 @@ class OrderPrintDo(EventPermissionRequiredMixin, AsyncAction, View):
|
|||||||
cf.type = 'application/pdf'
|
cf.type = 'application/pdf'
|
||||||
cf.expires = now() + timedelta(days=3)
|
cf.expires = now() + timedelta(days=3)
|
||||||
cf.save()
|
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(
|
return self.do(
|
||||||
str(cf.id),
|
str(cf.id),
|
||||||
self.request.event.pk,
|
self.request.event.pk,
|
||||||
[order.pk],
|
positions,
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user