forked from CGM_Public/pretix_original
221 lines
7.5 KiB
Python
221 lines
7.5 KiB
Python
from django import forms
|
|
from django.conf import settings
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from pytz import common_timezones
|
|
|
|
from pretix.base.forms import SettingsForm, VersionedModelForm
|
|
from pretix.base.models import Event
|
|
|
|
|
|
class EventCreateForm(VersionedModelForm):
|
|
error_messages = {
|
|
'duplicate_slug': _("You already used this slug for a different event. Please choose a new one."),
|
|
}
|
|
|
|
class Meta:
|
|
model = Event
|
|
fields = [
|
|
'name',
|
|
'slug',
|
|
'currency',
|
|
'date_from',
|
|
'date_to',
|
|
'presale_start',
|
|
'presale_end'
|
|
]
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
self.organizer = kwargs.pop('organizer')
|
|
super().__init__(*args, **kwargs)
|
|
|
|
def clean_slug(self):
|
|
slug = self.cleaned_data['slug']
|
|
if Event.objects.filter(slug=slug, organizer=self.organizer).exists():
|
|
raise forms.ValidationError(
|
|
self.error_messages['duplicate_slug'],
|
|
code='duplicate_slug'
|
|
)
|
|
return slug
|
|
|
|
|
|
class EventUpdateForm(VersionedModelForm):
|
|
def clean_slug(self):
|
|
return self.instance.slug
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
self.fields['slug'].widget.attrs['readonly'] = 'readonly'
|
|
|
|
class Meta:
|
|
model = Event
|
|
localized_fields = '__all__'
|
|
fields = [
|
|
'name',
|
|
'slug',
|
|
'currency',
|
|
'date_from',
|
|
'date_to',
|
|
'presale_start',
|
|
'presale_end',
|
|
]
|
|
|
|
|
|
class EventSettingsForm(SettingsForm):
|
|
show_date_to = forms.BooleanField(
|
|
label=_("Show event end date"),
|
|
help_text=_("If disabled, only event's start date will be displayed to the public."),
|
|
required=False
|
|
)
|
|
show_times = forms.BooleanField(
|
|
label=_("Show dates with time"),
|
|
help_text=_("If disabled, the event's start and end date will be displayed without the time of day."),
|
|
required=False
|
|
)
|
|
payment_term_days = forms.IntegerField(
|
|
label=_('Payment term in days'),
|
|
help_text=_("The number of days after placing an order the user has to pay to preserve his reservation."),
|
|
)
|
|
show_items_outside_presale_period = forms.BooleanField(
|
|
label=_("Show items outside presale period"),
|
|
help_text=_("Show item details before presale has started and after presale has ended"),
|
|
required=False
|
|
)
|
|
presale_start_show_date = forms.BooleanField(
|
|
label=_("Show start date"),
|
|
help_text=_("Show the presale start date before presale has started"),
|
|
required=False
|
|
)
|
|
payment_term_last = forms.DateTimeField(
|
|
label=_('Last date of payments'),
|
|
help_text=_("The last date any payments are accepted. This has precedence over the number of "
|
|
"days configured above."),
|
|
required=False
|
|
)
|
|
payment_term_accept_late = forms.BooleanField(
|
|
label=_('Accept late payments'),
|
|
help_text=_("Accept payments that come after the end of the order's payment term. "
|
|
"Payments will only be accepted if the regarding quotas have remaining "
|
|
"capacity. No payments will be accepted after the 'Last date of payments' "
|
|
"configured above."),
|
|
required=False
|
|
)
|
|
last_order_modification_date = forms.DateTimeField(
|
|
label=_('Last date of modifications'),
|
|
help_text=_("The last date users can modify details of their orders, such as attendee names or "
|
|
"answers to questions."),
|
|
required=False
|
|
)
|
|
timezone = forms.ChoiceField(
|
|
choices=((a, a) for a in common_timezones),
|
|
label=_("Default timezone"),
|
|
)
|
|
locales = forms.MultipleChoiceField(
|
|
choices=settings.LANGUAGES,
|
|
label=_("Available langauges"),
|
|
)
|
|
locale = forms.ChoiceField(
|
|
choices=settings.LANGUAGES,
|
|
label=_("Default language"),
|
|
)
|
|
user_mail_required = forms.BooleanField(
|
|
label=_("Require e-mail adresses"),
|
|
help_text=_("Require all customers to provide an e-mail address."),
|
|
required=False
|
|
)
|
|
attendee_names_asked = forms.BooleanField(
|
|
label=_("Ask for attendee names"),
|
|
help_text=_("Ask for a name for all tickets which include admission to the event."),
|
|
required=False
|
|
)
|
|
attendee_names_required = forms.BooleanField(
|
|
label=_("Require attendee names"),
|
|
help_text=_("Require customers to fill in the names of all attendees."),
|
|
required=False
|
|
)
|
|
max_items_per_order = forms.IntegerField(
|
|
min_value=1,
|
|
label=_("Maximum number of items per order")
|
|
)
|
|
reservation_time = forms.IntegerField(
|
|
min_value=0,
|
|
label=_("Reservation period"),
|
|
help_text=_("The number of minutes the items in a user's card are reserved for this user."),
|
|
)
|
|
imprint_url = forms.URLField(
|
|
label=_("Imprint URL"),
|
|
required=False,
|
|
)
|
|
contact_mail = forms.EmailField(
|
|
label=_("Contact address"),
|
|
required=False,
|
|
help_text=_("Public email address for contacting the organizer")
|
|
)
|
|
mail_prefix = forms.CharField(
|
|
label=_("Subject prefix"),
|
|
help_text=_("This will be prepended to the subject of all outgoing emails. This could be a short form of "
|
|
"your event name."),
|
|
required=False
|
|
)
|
|
mail_from = forms.EmailField(
|
|
label=_("Sender address"),
|
|
help_text=_("Sender address for outgoing e-mails")
|
|
)
|
|
|
|
|
|
class ProviderForm(SettingsForm):
|
|
"""
|
|
This is a SettingsForm, but if fields are set to required=True, validation
|
|
errors are only raised if the payment method is enabled.
|
|
"""
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
self.settingspref = kwargs.pop('settingspref')
|
|
super().__init__(*args, **kwargs)
|
|
|
|
def prepare_fields(self):
|
|
for k, v in self.fields.items():
|
|
v._required = v.required
|
|
v.required = False
|
|
v.widget.is_required = False
|
|
|
|
def clean(self):
|
|
cleaned_data = super().clean()
|
|
enabled = cleaned_data.get(self.settingspref + '_enabled') == 'True'
|
|
if not enabled:
|
|
return
|
|
for k, v in self.fields.items():
|
|
val = cleaned_data.get(k)
|
|
if v._required and (val is None or val == ""):
|
|
self.add_error(k, _('This field is required.'))
|
|
|
|
|
|
class TicketSettingsForm(SettingsForm):
|
|
ticket_download = forms.BooleanField(
|
|
label=_("Use feature"),
|
|
help_text=_("Use pretix to generate tickets for the user to download and print out."),
|
|
required=False
|
|
)
|
|
ticket_download_date = forms.DateTimeField(
|
|
label=_("Download date"),
|
|
help_text=_("Ticket download will be offered after this date."),
|
|
required=True
|
|
)
|
|
|
|
def prepare_fields(self):
|
|
# See clean()
|
|
for k, v in self.fields.items():
|
|
v._required = v.required
|
|
v.required = False
|
|
v.widget.is_required = False
|
|
|
|
def clean(self):
|
|
# required=True files should only be required if the feature is enabled
|
|
cleaned_data = super().clean()
|
|
enabled = cleaned_data.get('ticket_download') == 'True'
|
|
if not enabled:
|
|
return
|
|
for k, v in self.fields.items():
|
|
val = cleaned_data.get(k)
|
|
if v._required and (val is None or val == ""):
|
|
self.add_error(k, _('This field is required.'))
|