# -*- 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
%s
%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
%s
%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
%s
%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
%s
%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'
%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'
%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