This commit is contained in:
Kara Engelhardt
2026-03-26 11:10:48 +01:00
parent a521956aca
commit 2e7d54174d
4 changed files with 22 additions and 61 deletions

View File

@@ -37,7 +37,7 @@ class WalletLayout(LoggedModel):
)
platform = models.CharField(max_length=10)
style = models.CharField(max_length=255)
layout = models.TextField()
layout = models.JSONField()
class Meta:
ordering = ("name",)

View File

@@ -10,15 +10,12 @@ class WalletPlatform:
identifier: str
name: str
def get_layout_qs(self):
return WalletLayout.objects.filter(platform=self.identifier)
class ApplePlatform(WalletPlatform):
identifier = "apple"
name = _("Apple")
class GooglePlatform(WalletPlatform):
identifier = "apple"
identifier = "google"
name = _("Google")
class PlaceholderFieldType(enum.Enum):

View File

@@ -1,6 +1,7 @@
{% extends "pretixcontrol/event/base.html" %}
{% load i18n %}
{% load money %}
{% load wallet %}
{% block title %}{% trans "Wallet layouts" %}{% endblock %}
{% block content %}
<h1>{% trans "Wallet layouts" %}</h1>
@@ -8,7 +9,8 @@
{% for platform in platforms.values %}
<fieldset>
<legend>{{platform.name}}</legend>
{% if platforms.get_layout_qs|length == 0 %}
{% with platform_layouts=platform|platform_layouts:request.event %}
{% if platform_layouts|length == 0 %}
<div class="empty-collection">
<p>
{% blocktrans trimmed %}
@@ -33,7 +35,7 @@
</tr>
</thead>
<tbody>
{% for l in platforms.get_layout_qs %}
{% for l in platform_layouts %}
<tr>
<td>
{% if "can_change_event_settings" in request.eventpermset %}
@@ -74,6 +76,7 @@
</table>
</div>
{% endif %}
{% endwith %}
</fieldset>
{% endfor %}
</div>

View File

@@ -34,7 +34,6 @@ class LayoutListView(EventPermissionRequiredMixin, ListView):
class LayoutEditForm(forms.ModelForm):
style = forms.TypedChoiceField()
layout = forms.JSONField(initial={})
def __init__(self, **kwargs):
self.platform = kwargs.pop('platform')
@@ -70,12 +69,13 @@ class LayoutEditForm(forms.ModelForm):
)
layout.validate()
return self.cleaned_data
class LayoutCreateView(EventPermissionRequiredMixin, FormView):
class LayoutEditorView(EventPermissionRequiredMixin, UpdateView):
template_name = "pretixplugins/wallet/edit.html"
form_class = LayoutEditForm
model = WalletLayout
permission = "can_change_event_settings" # TODO: new permission name
pk_url_kwarg = "layout"
@property
def platform(self):
@@ -106,57 +106,18 @@ class LayoutCreateView(EventPermissionRequiredMixin, FormView):
}
return context
def form_valid(self, form):
self.object = WalletLayout.objects.create(
event=self.request.event,
name=form.cleaned_data["name"],
platform=self.platform,
style=form.cleaned_data["style"],
layout=form.cleaned_data["layout"],
)
return redirect(
reverse(
"plugins:wallet:edit",
kwargs={
"organizer": self.request.event.organizer.slug,
"event": self.request.event.slug,
"platform": self.platform,
"layout": self.object.pk,
},
)
def get_success_url(self) -> str:
return reverse(
"plugins:wallet:edit",
kwargs={
"organizer": self.request.event.organizer.slug,
"event": self.request.event.slug,
"platform": self.platform,
"layout": self.object.pk,
},
)
class LayoutEditorView(EventPermissionRequiredMixin, UpdateView):
template_name = "pretixplugins/wallet/edit.html"
form_class = LayoutEditForm
success_url = ""
permission = "can_change_event_settings"
@property
def platform(self):
return self.kwargs["platform"]
def get_form_kwargs(self) -> dict[str, Any]:
kwargs = super().get_form_kwargs()
kwargs["platform"] = self.platform
return kwargs
def get_platform_styles(self):
if self.platform not in get_platforms():
raise Http404(
_("Unknown platform '{platform}'").format(platform=self.platform)
)
return get_platform_styles(self.platform)
def get_context_data(self, **kwargs) -> dict[str, Any]:
context = super().get_context_data(**kwargs)
context["styles"] = {
id: style.asdict() for id, style in self.get_platform_styles().items()
}
context["variables"] = {
"text": {
varname: {"label": var["label"], "editor_sample": var["editor_sample"]}
for varname, var in get_variables(self.request.event).items()
}
}
return context
class LayoutCreateView(LayoutEditorView):
def get_object(self, queryset=None):
return WalletLayout(event=self.request.event, platform=self.platform)