diff --git a/src/pretix/control/forms/organizer.py b/src/pretix/control/forms/organizer.py index 188bdab039..9702e4222f 100644 --- a/src/pretix/control/forms/organizer.py +++ b/src/pretix/control/forms/organizer.py @@ -489,6 +489,7 @@ class DeviceForm(forms.ModelForm): help_text=self.fields['security_profile'].help_text, choices=[(k, v.verbose_name) for k, v in get_all_security_profiles().items()], ) + self.fields["sales_channel"].queryset = organizer.sales_channels.all() def clean(self): d = super().clean() @@ -499,7 +500,7 @@ class DeviceForm(forms.ModelForm): class Meta: model = Device - fields = ['name', 'all_events', 'limit_events', 'security_profile', 'gate'] + fields = ['name', 'all_events', 'limit_events', 'security_profile', 'gate', 'sales_channel'] widgets = { 'limit_events': forms.CheckboxSelectMultiple(attrs={ 'data-inverse-dependency': '#id_all_events', @@ -507,7 +508,8 @@ class DeviceForm(forms.ModelForm): }), } field_classes = { - 'limit_events': SafeEventMultipleChoiceField + 'limit_events': SafeEventMultipleChoiceField, + "sales_channel": SafeModelChoiceField, } diff --git a/src/pretix/control/templates/pretixcontrol/organizers/device_edit.html b/src/pretix/control/templates/pretixcontrol/organizers/device_edit.html index 45b2f6dbed..92858a520e 100644 --- a/src/pretix/control/templates/pretixcontrol/organizers/device_edit.html +++ b/src/pretix/control/templates/pretixcontrol/organizers/device_edit.html @@ -24,6 +24,7 @@ {% trans "Advanced settings" %} {% bootstrap_field form.security_profile layout="control" %} {% bootstrap_field form.gate layout="control" %} + {% bootstrap_field form.sales_channel layout="control" %}
- + {% trans "Create a new team" %} @@ -65,11 +65,11 @@ + class="btn btn-default btn-sm" title="{% trans "Team members" %}"> + class="btn btn-default btn-sm" title="{% trans "Edit" %}"> + class="btn btn-danger btn-sm" title="{% trans "Delete" %}"> {% endfor %} diff --git a/src/pretix/control/views/organizer.py b/src/pretix/control/views/organizer.py index f262841c0d..e5cfe48a1f 100644 --- a/src/pretix/control/views/organizer.py +++ b/src/pretix/control/views/organizer.py @@ -40,6 +40,8 @@ from collections import Counter from datetime import time, timedelta from decimal import Decimal from hashlib import sha1 + +from django_scopes.forms import SafeModelChoiceField from itertools import groupby from json import JSONDecodeError @@ -180,6 +182,11 @@ class InviteForm(forms.Form): class TokenForm(forms.Form): name = forms.CharField(required=False, label=_('Token name')) + sales_channel = SafeModelChoiceField(required=False, label=_('Sales channel'), queryset=SalesChannel.objects.none()) + + def __init__(self, organizer, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields["sales_channel"].queryset = organizer.sales_channels.all() class OrganizerDetailViewMixin: @@ -1019,7 +1026,7 @@ class TeamMemberView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, @cached_property def add_token_form(self): return TokenForm(data=(self.request.POST - if self.request.method == "POST" and "name" in self.request.POST else None)) + if self.request.method == "POST" and "name" in self.request.POST else None), organizer=self.request.organizer) def get_context_data(self, **kwargs): ctx = super().get_context_data(**kwargs) @@ -1164,10 +1171,14 @@ class TeamMemberView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, return redirect(self.get_success_url()) elif "name" in self.request.POST and self.add_token_form.is_valid() and self.add_token_form.has_changed(): - token = self.object.tokens.create(name=self.add_token_form.cleaned_data['name']) + token = self.object.tokens.create( + name=self.add_token_form.cleaned_data['name'], + sales_channel=self.add_token_form.cleaned_data['sales_channel'] + ) self.object.log_action( 'pretix.team.token.created', user=self.request.user, data={ 'name': self.add_token_form.cleaned_data['name'], + 'sales_channel': self.add_token_form.cleaned_data['sales_channel'], 'id': token.pk } )