Create new events

This commit is contained in:
Raphael Michel
2015-05-27 23:09:33 +02:00
parent 79dfe7a084
commit 3ac26f64f3
10 changed files with 185 additions and 16 deletions

View File

@@ -1,7 +1,13 @@
from django import forms
from django.contrib import messages
from django.core.urlresolvers import reverse
from django.shortcuts import render
from django.views.generic import ListView
from django.views.generic import ListView, CreateView, TemplateView
from django.utils.translation import ugettext_lazy as _
from pretix.base.forms import VersionedModelForm
from pretix.base.models import Event
from pretix.base.models import Event, EventPermission, Organizer, OrganizerPermission
from pretix.control.permissions import OrganizerPermissionRequiredMixin
class EventList(ListView):
@@ -20,3 +26,79 @@ class EventList(ListView):
def index(request):
return render(request, 'pretixcontrol/base.html', {})
class EventForm(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 EventCreateStart(TemplateView):
template_name = 'pretixcontrol/events/start.html'
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx['organizers'] = [
p.organizer for p in OrganizerPermission.objects.current.filter(
user=self.request.user, can_create_events=True
).select_related("organizer")
]
return ctx
class EventCreate(OrganizerPermissionRequiredMixin, CreateView):
model = Event
form_class = EventForm
template_name = 'pretixcontrol/events/create.html'
context_object_name = 'event'
permission = 'can_create_events'
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs['organizer'] = self.request.organizer
return kwargs
def form_valid(self, form):
messages.success(self.request, _('The new event has been created.'))
form.instance.organizer = self.request.organizer
ret = super().form_valid(form)
EventPermission.objects.create(
event=form.instance, user=self.request.user,
)
self.object = form.instance
return ret
def get_success_url(self) -> str:
return reverse('control:event.settings', kwargs={
'organizer': self.request.organizer.slug,
'event': self.object.slug,
})