forked from CGM_Public/pretix_original
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:
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user