From 30b64546a768959dffa64106b156c3c2d2dfce56 Mon Sep 17 00:00:00 2001 From: Kara Engelhardt Date: Mon, 13 Apr 2026 19:28:38 +0200 Subject: [PATCH] WIP: use api --- src/pretix/plugins/wallet/api.py | 66 ++++++++ src/pretix/plugins/wallet/models.py | 2 +- .../pretixplugins/wallet/components/app.vue | 110 +++++++++---- .../wallet/components/field-settings.vue | 35 ++-- .../wallet/components/style-settings.vue | 23 ++- .../static/pretixplugins/wallet/index.d.ts | 6 +- src/pretix/plugins/wallet/styles.py | 37 +++-- .../pretixplugins/wallet/create.html | 35 ++++ .../templates/pretixplugins/wallet/edit.html | 11 +- .../pretixplugins/wallet/layout_list.html | 10 +- src/pretix/plugins/wallet/urls.py | 12 +- src/pretix/plugins/wallet/views.py | 153 ++++++------------ 12 files changed, 299 insertions(+), 201 deletions(-) create mode 100644 src/pretix/plugins/wallet/api.py create mode 100644 src/pretix/plugins/wallet/templates/pretixplugins/wallet/create.html diff --git a/src/pretix/plugins/wallet/api.py b/src/pretix/plugins/wallet/api.py new file mode 100644 index 0000000000..78b68be752 --- /dev/null +++ b/src/pretix/plugins/wallet/api.py @@ -0,0 +1,66 @@ +from rest_framework import viewsets +from django.db import transaction +from .styles import PassLayout, get_platform_styles, get_platforms +from .models import WalletLayout +from pretix.api.serializers.i18n import I18nAwareModelSerializer +import django_filters.rest_framework +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ + +class WalletLayoutSerializer(I18nAwareModelSerializer): + class Meta: + model = WalletLayout + fields = ("event","platform","name","style","layout") + read_only_fields = ("event", "platform") + + def validate_layout(self, value): + if not isinstance(value, dict): + raise ValidationError(_("Layout must be a dict")) + return value + + + def validate_platform(self, value): + if value not in get_platforms(): + raise ValidationError(_("Invalid Platform")) + return value + + def validate(self, data): + if "style" in data and "layout" in data and "platform" in data: + platform_styles = get_platform_styles(data['platform']) + if data['style'] not in platform_styles: + raise ValidationError(_("Invalid style")) + style = get_platform_styles(data['platform'])[data['style']] + + layout = PassLayout( + style=style, layout=data["layout"] + ) + breakpoint() + layout.validate(data['event']) + return data + + + +class WalletLayoutViewSet(viewsets.ModelViewSet): + model = WalletLayout + queryset = WalletLayout.objects.none() + serializer_class = WalletLayoutSerializer + filter_backends = (django_filters.rest_framework.DjangoFilterBackend,) + filterset_fields = ['platform'] + permission = "event.settings.general:write" + + def get_queryset(self): + return self.request.event.wallet_layouts.all() + + def get_serializer(self, *args, **kwargs): + return super().get_serializer(*args, **kwargs) + + + @transaction.atomic() + def perform_update(self, serializer): + super().perform_update(serializer) + serializer.instance.log_action( + action='pretix.plugins.wallet.layout.changed', + user=self.request.user, + auth=self.request.auth, + data=self.request.data, + ) diff --git a/src/pretix/plugins/wallet/models.py b/src/pretix/plugins/wallet/models.py index b9cdd07842..45cceb01e8 100644 --- a/src/pretix/plugins/wallet/models.py +++ b/src/pretix/plugins/wallet/models.py @@ -37,7 +37,7 @@ class WalletLayout(LoggedModel): ) platform = models.CharField(max_length=10) style = models.CharField(max_length=255) - layout = models.JSONField() + layout = models.JSONField(default={}) class Meta: ordering = ("name",) diff --git a/src/pretix/plugins/wallet/static/pretixplugins/wallet/components/app.vue b/src/pretix/plugins/wallet/static/pretixplugins/wallet/components/app.vue index e1d9d554a0..e69456ea7e 100644 --- a/src/pretix/plugins/wallet/static/pretixplugins/wallet/components/app.vue +++ b/src/pretix/plugins/wallet/static/pretixplugins/wallet/components/app.vue @@ -1,46 +1,86 @@ diff --git a/src/pretix/plugins/wallet/static/pretixplugins/wallet/components/field-settings.vue b/src/pretix/plugins/wallet/static/pretixplugins/wallet/components/field-settings.vue index 76f8b05146..37b60fdf7e 100644 --- a/src/pretix/plugins/wallet/static/pretixplugins/wallet/components/field-settings.vue +++ b/src/pretix/plugins/wallet/static/pretixplugins/wallet/components/field-settings.vue @@ -1,31 +1,32 @@