Files
django-dav-events/dav_registration/views.py

189 lines
7.2 KiB
Python

# -*- 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': u'Jens',
# 'family_names': u'Kleineheismann',
# 'address': u'Am Fächerbad 2',
# 'postal_code': u'76131',
# 'city': u'Karlsruhe',
# 'email_address': 'heinzel@alpenverein-karlsruhe.de',
# 'note': u'Nur ein Test.',
'dav_number': '131/00/',
# 'experience': u'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