183 lines
7.0 KiB
Python
183 lines
7.0 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(registration_closed=False)
|
|
# 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(registration_closed=False)
|
|
# 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 = {
|
|
'dav_number': '131/00/',
|
|
}
|
|
|
|
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(registration_closed=False)
|
|
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
|