UPD: added app to submit participant registrations.
This commit is contained in:
189
dav_registration/views.py
Normal file
189
dav_registration/views.py
Normal file
@@ -0,0 +1,189 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import datetime
|
||||
import logging
|
||||
from django.apps import apps
|
||||
from django.contrib import messages
|
||||
from django.db.models import Q
|
||||
from django.urls import reverse_lazy
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.views import generic
|
||||
|
||||
from dav_events.models.event import Event
|
||||
|
||||
from .forms import RegistrationForm
|
||||
from .models import Registration
|
||||
from .utils import purge_registrations
|
||||
|
||||
app_config = apps.get_containing_app_config(__package__)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class RootView(generic.RedirectView):
|
||||
url = reverse_lazy('dav_registration:events')
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
purge_registrations()
|
||||
return super(RootView, self).get(request, *args, **kwargs)
|
||||
|
||||
|
||||
class EventListView(generic.ListView):
|
||||
model = Event
|
||||
template_name = 'dav_registration/event_list.html'
|
||||
|
||||
def get_queryset(self):
|
||||
today = datetime.date.today()
|
||||
|
||||
filter = Q(flags__status__code__in=('publishing', 'publishing_web', 'publishing_facebook',
|
||||
'published', 'published_web', 'published_facebook'))
|
||||
filter &= Q(planned_publication_date__isnull=True) | Q(planned_publication_date__lte=today)
|
||||
filter &= Q(first_day__gte=today)
|
||||
filter &= Q(deadline__isnull=True) | Q(deadline__gte=today)
|
||||
|
||||
qs = self.model.objects.filter(filter).order_by('first_day', 'number').distinct()
|
||||
|
||||
return qs
|
||||
|
||||
|
||||
class EventDetailView(generic.DetailView):
|
||||
model = Event
|
||||
template_name = 'dav_registration/event_detail.html'
|
||||
|
||||
def get_queryset(self):
|
||||
today = datetime.date.today()
|
||||
|
||||
filter = Q(flags__status__code__in=('publishing', 'publishing_web', 'publishing_facebook',
|
||||
'published', 'published_web', 'published_facebook'))
|
||||
filter &= Q(planned_publication_date__isnull=True) | Q(planned_publication_date__lte=today)
|
||||
filter &= Q(first_day__gte=today)
|
||||
filter &= Q(deadline__isnull=True) | Q(deadline__gte=today)
|
||||
|
||||
qs = self.model.objects.filter(filter).distinct()
|
||||
|
||||
return qs
|
||||
|
||||
|
||||
class RegistrationView(generic.CreateView):
|
||||
model = Registration
|
||||
form_class = RegistrationForm
|
||||
initial = {
|
||||
'personal_names': 'Jens',
|
||||
'family_names': 'Kleineheismann',
|
||||
'address': 'Marie-Alexandra-Str. 6',
|
||||
'postal_code': '76135',
|
||||
'city': 'Karlsruhe',
|
||||
'email_address': 'heinzel@heinzelwerk.de',
|
||||
'phone_number': '0178 143 2886',
|
||||
'note': 'Nur ein Test.',
|
||||
'dav_number': '131/00/007',
|
||||
'experience': 'Ich kann alles.',
|
||||
'privacy_policy_accepted': True,
|
||||
}
|
||||
|
||||
def get_queryset(self):
|
||||
today = datetime.date.today()
|
||||
|
||||
filter = Q(flags__status__code__in=('publishing', 'publishing_web', 'publishing_facebook',
|
||||
'published', 'published_web', 'published_facebook'))
|
||||
filter &= Q(planned_publication_date__isnull=True) | Q(planned_publication_date__lte=today)
|
||||
filter &= Q(first_day__gte=today)
|
||||
filter &= Q(deadline__isnull=True) | Q(deadline__gte=today)
|
||||
|
||||
qs = Event.objects.filter(filter).distinct()
|
||||
|
||||
return qs
|
||||
|
||||
def get_initial(self):
|
||||
initials = super(RegistrationView, self).get_initial()
|
||||
return initials
|
||||
|
||||
def get_form(self, form_class=None):
|
||||
form = super(RegistrationView, self).get_form(form_class)
|
||||
|
||||
event = self.get_object()
|
||||
|
||||
experience_label = form.fields['experience'].label
|
||||
experience_help_text = form.fields['experience'].help_text
|
||||
if event.sport == 'B':
|
||||
experience_label = _(u'Eigene Bergerfahrung')
|
||||
elif event.sport == 'K' and event.terrain == 'alpine':
|
||||
experience_label = _(u'Eigene Fels- und Bergerfahrung')
|
||||
if event.level == 'beginner':
|
||||
experience_help_text = u'%s<br /> %s<br /> %s' % (
|
||||
_(u'Warst du schon mal im Gebirge klettern?'),
|
||||
_(u'In welchem Schwierigkeitsgrad hast du Spaß?'),
|
||||
_(u'Bist du schon mal vorgestiegen?')
|
||||
)
|
||||
else:
|
||||
experience_help_text = u'%s<br /> %s<br /> %s' % (
|
||||
_(u'In welchen Klettergebieten/Touren warst du bisher unterwegs?'),
|
||||
_(u'In welchem Schwierigkeitsgrad hast du im Vorstieg Spaß?'),
|
||||
_(u'Wie waren die Touren abgesichert, in denen du dich noch wohlgefühlt hast?')
|
||||
)
|
||||
elif event.sport == 'K':
|
||||
experience_label = _(u'Eigene Klettererfahrung')
|
||||
if event.level == 'beginner':
|
||||
experience_help_text = u'%s<br /> %s<br /> %s' % (
|
||||
_(u'Warst du schon mal am Fels klettern?'),
|
||||
_(u'In welchem Schwierigkeitsgrad hast du Spaß?'),
|
||||
_(u'Bist du schon mal vorgestiegen?')
|
||||
)
|
||||
else:
|
||||
experience_help_text = u'%s<br /> %s<br /> %s' % (
|
||||
_(u'In welchen Klettergebieten warst du bisher unterwegs?'),
|
||||
_(u'In welchem Schwierigkeitsgrad hast du im Vorstieg Spaß?'),
|
||||
_(u'Wie waren die Touren abgesichert, in denen du dich noch wohlgefühlt hast?')
|
||||
)
|
||||
elif event.sport == 'M':
|
||||
experience_label = _(u'Eigene MTB-Erfahrung')
|
||||
experience_help_text = u'%s' % (
|
||||
_(u'Was für Touren bist du schon gefahren?')
|
||||
)
|
||||
if event.level != 'beginner':
|
||||
experience_help_text += u'<br /> %s' % (
|
||||
_(u'Single-Trail-Schwierigkeit (S0-S5) bei der du dich wohl fühlst?')
|
||||
)
|
||||
elif event.sport == 'S':
|
||||
experience_label = _(u'Eigene Skitouren- und Bergerfahrung')
|
||||
elif event.sport == 'W':
|
||||
experience_help_text += u'<br /> %s' % (
|
||||
_(u'Kann frei gelassen werden.')
|
||||
)
|
||||
|
||||
form.fields['experience'].label = experience_label
|
||||
form.fields['experience'].help_text = experience_help_text
|
||||
|
||||
form.instance.event = event
|
||||
form.instance.privacy_policy = app_config.settings.privacy_policy
|
||||
return form
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(RegistrationView, self).get_context_data(**kwargs)
|
||||
event = self.get_object()
|
||||
context['event'] = event
|
||||
context['privacy_policy'] = app_config.settings.privacy_policy
|
||||
context['purge_at'] = self.model.calc_purge_at(event)
|
||||
return context
|
||||
|
||||
def form_valid(self, form):
|
||||
r = super(RegistrationView, self).form_valid(form)
|
||||
self.request.session['registration_id'] = form.instance.pk
|
||||
message = _(u'Deine Anmeldung wurde erfolgreich gespeichert.')
|
||||
messages.success(self.request, message)
|
||||
return r
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
if 'registration_id' in request.session:
|
||||
del request.session['registration_id']
|
||||
return super(RegistrationView, self).post(request, *args, **kwargs)
|
||||
|
||||
|
||||
class RegistrationSuccessView(generic.DetailView):
|
||||
model = Registration
|
||||
|
||||
def get_object(self, queryset=None):
|
||||
try:
|
||||
pk = self.request.session['registration_id']
|
||||
obj = self.model.objects.get(pk=pk)
|
||||
except KeyError, self.model.DoesNotExist:
|
||||
obj = None
|
||||
return obj
|
||||
Reference in New Issue
Block a user