mirror of
https://github.com/pretix/pretix.git
synced 2026-05-05 15:14:04 +00:00
Feature/optional team provisioning (#1487)
* Event creation: Add option to select existing team instead of provisioning. * Event creation: disallow event team provisioning on organizer level. * Event team provisioning: update default setting location and display strings. * Update src/pretix/control/views/main.py Co-Authored-By: Raphael Michel <mail@raphaelmichel.de>
This commit is contained in:
committed by
Raphael Michel
parent
f88a09a78c
commit
dddf91d3bf
@@ -22,7 +22,7 @@ from pytz import common_timezones, timezone
|
||||
from pretix.base.channels import get_all_sales_channels
|
||||
from pretix.base.email import get_available_placeholders
|
||||
from pretix.base.forms import I18nModelForm, PlaceholderValidator, SettingsForm
|
||||
from pretix.base.models import Event, Organizer, TaxRule
|
||||
from pretix.base.models import Event, Organizer, TaxRule, Team
|
||||
from pretix.base.models.event import EventMetaValue, SubEvent
|
||||
from pretix.base.reldate import RelativeDateField, RelativeDateTimeField
|
||||
from pretix.base.settings import PERSON_NAME_SCHEMES, PERSON_NAME_TITLE_GROUPS
|
||||
@@ -101,6 +101,16 @@ class EventWizardBasicsForm(I18nModelForm):
|
||||
required=False
|
||||
)
|
||||
|
||||
team = forms.ModelChoiceField(
|
||||
label=_("Grant access to team"),
|
||||
help_text=_("You are allowed to create events under this organizer, however you do not have permission "
|
||||
"to edit all events under this organizer. Please select one of your existing teams that will"
|
||||
" be granted access to this event."),
|
||||
queryset=Team.objects.none(),
|
||||
required=False,
|
||||
empty_label=_('Create a new team for this event with me as the only member')
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Event
|
||||
fields = [
|
||||
@@ -133,7 +143,7 @@ class EventWizardBasicsForm(I18nModelForm):
|
||||
self.organizer = kwargs.pop('organizer')
|
||||
self.locales = kwargs.get('locales')
|
||||
self.has_subevents = kwargs.pop('has_subevents')
|
||||
kwargs.pop('user')
|
||||
self.user = kwargs.pop('user')
|
||||
kwargs.pop('session')
|
||||
super().__init__(*args, **kwargs)
|
||||
self.initial['timezone'] = get_current_timezone_name()
|
||||
@@ -147,6 +157,15 @@ class EventWizardBasicsForm(I18nModelForm):
|
||||
del self.fields['presale_start']
|
||||
del self.fields['presale_end']
|
||||
|
||||
if self.has_control_rights(self.user, self.organizer):
|
||||
del self.fields['team']
|
||||
else:
|
||||
self.fields['team'].queryset = self.user.teams.filter(organizer=self.organizer)
|
||||
if not self.organizer.settings.get("event_team_provisioning", True, as_type=bool):
|
||||
self.fields['team'].required = True
|
||||
self.fields['team'].empty_label = None
|
||||
self.fields['team'].initial = 0
|
||||
|
||||
def clean(self):
|
||||
data = super().clean()
|
||||
if data.get('locale') not in self.locales:
|
||||
@@ -179,6 +198,13 @@ class EventWizardBasicsForm(I18nModelForm):
|
||||
)
|
||||
return slug
|
||||
|
||||
@staticmethod
|
||||
def has_control_rights(user, organizer):
|
||||
return user.teams.filter(
|
||||
organizer=organizer, all_events=True, can_change_event_settings=True, can_change_items=True,
|
||||
can_change_orders=True, can_change_vouchers=True
|
||||
).exists()
|
||||
|
||||
|
||||
class EventChoiceMixin:
|
||||
def label_from_instance(self, obj):
|
||||
|
||||
Reference in New Issue
Block a user