Badges: Create templates for common paper sizes (#3660)

* Badges: Create templates for common paper sizes

* Add more sizes

* format lazy
This commit is contained in:
Raphael Michel
2023-11-03 12:37:20 +01:00
committed by GitHub
parent ec2085f125
commit 0400b577bb
4 changed files with 273 additions and 14 deletions

View File

@@ -23,9 +23,11 @@ import json
from datetime import timedelta
from io import BytesIO
from _decimal import Decimal
from django.contrib import messages
from django.contrib.staticfiles import finders
from django.core.files import File
from django.core.files.base import ContentFile
from django.core.files.storage import default_storage
from django.db import transaction
from django.http import Http404
@@ -37,6 +39,7 @@ from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _
from django.views import View
from django.views.generic import CreateView, DetailView, ListView
from pypdf import PdfWriter
from reportlab.lib import pagesizes
from reportlab.pdfgen import canvas
@@ -51,6 +54,7 @@ from pretix.plugins.badges.tasks import badges_create_pdf
from ...helpers.compat import CompatDeleteView
from .models import BadgeLayout
from .templates import TEMPLATES
class LayoutListView(EventPermissionRequiredMixin, ListView):
@@ -71,14 +75,32 @@ class LayoutCreate(EventPermissionRequiredMixin, CreateView):
context_object_name = 'layout'
success_url = '/ignored'
def get_form(self, form_class=None):
form = super().get_form(form_class)
if self.copy_from:
del form.fields['template']
return form
@transaction.atomic
def form_valid(self, form):
form.instance.event = self.request.event
if not self.request.event.badge_layouts.filter(default=True).exists():
form.instance.default = True
messages.success(self.request, _('The new badge layout has been created.'))
if not self.copy_from:
form.instance.layout = json.dumps(TEMPLATES[form.cleaned_data["template"]]["layout"])
super().form_valid(form)
if form.instance.background and form.instance.background.name:
if not self.copy_from:
p = PdfWriter()
p.add_blank_page(
width=Decimal('%.5f' % TEMPLATES[form.cleaned_data["template"]]["pagesize"][0]),
height=Decimal('%.5f' % TEMPLATES[form.cleaned_data["template"]]["pagesize"][1]),
)
buffer = BytesIO()
p.write(buffer)
buffer.seek(0)
form.instance.background.save('background.pdf', ContentFile(buffer.read()))
elif form.instance.background and form.instance.background.name:
form.instance.background.save('background.pdf', form.instance.background)
form.instance.log_action('pretix.plugins.badges.layout.added', user=self.request.user,
data=dict(form.cleaned_data))