Files
django-dav-events/dav_registration/views.py
heinzel 98a6fc3ce7
All checks were successful
buildbot/tox Build done.
try to make pylint happy
2022-06-08 00:08:09 +02:00

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().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_exp = Q(flags__status__code__in=('publishing', 'publishing_web', 'publishing_facebook',
'published', 'published_web', 'published_facebook'))
filter_exp &= Q(planned_publication_date__isnull=True) | Q(planned_publication_date__lte=today)
filter_exp &= Q(first_day__gte=today)
# filter_exp &= Q(registration_closed=False)
# filter_exp &= Q(deadline__isnull=True) | Q(deadline__gte=today)
qs = self.model.objects.filter(filter_exp).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_exp = Q(flags__status__code__in=('publishing', 'publishing_web', 'publishing_facebook',
'published', 'published_web', 'published_facebook'))
filter_exp &= Q(planned_publication_date__isnull=True) | Q(planned_publication_date__lte=today)
filter_exp &= Q(first_day__gte=today)
# filter_exp &= Q(registration_closed=False)
# filter_exp &= Q(deadline__isnull=True) | Q(deadline__gte=today)
qs = self.model.objects.filter(filter_exp).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_exp = Q(flags__status__code__in=('publishing', 'publishing_web', 'publishing_facebook',
'published', 'published_web', 'published_facebook'))
filter_exp &= Q(planned_publication_date__isnull=True) | Q(planned_publication_date__lte=today)
filter_exp &= Q(first_day__gte=today)
filter_exp &= Q(registration_closed=False)
filter_exp &= Q(deadline__isnull=True) | Q(deadline__gte=today)
qs = Event.objects.filter(filter_exp).distinct()
return qs
def get_initial(self):
initials = super().get_initial()
return initials
def get_form(self, form_class=None):
form = super().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 = _('Eigene Bergerfahrung')
elif event.sport == 'K' and event.terrain == 'alpine':
experience_label = _('Eigene Fels- und Bergerfahrung')
if event.level == 'beginner':
experience_help_text = '%s<br /> %s<br /> %s' % (
_('Warst du schon mal im Gebirge klettern?'),
_('In welchem Schwierigkeitsgrad hast du Spaß?'),
_('Bist du schon mal vorgestiegen?')
)
else:
experience_help_text = '%s<br /> %s<br /> %s' % (
_('In welchen Klettergebieten/Touren warst du bisher unterwegs?'),
_('In welchem Schwierigkeitsgrad hast du im Vorstieg Spaß?'),
_('Wie waren die Touren abgesichert, in denen du dich noch wohlgefühlt hast?')
)
elif event.sport == 'K':
experience_label = _('Eigene Klettererfahrung')
if event.level == 'beginner':
experience_help_text = '%s<br /> %s<br /> %s' % (
_('Warst du schon mal am Fels klettern?'),
_('In welchem Schwierigkeitsgrad hast du Spaß?'),
_('Bist du schon mal vorgestiegen?')
)
else:
experience_help_text = '%s<br /> %s<br /> %s' % (
_('In welchen Klettergebieten warst du bisher unterwegs?'),
_('In welchem Schwierigkeitsgrad hast du im Vorstieg Spaß?'),
_('Wie waren die Touren abgesichert, in denen du dich noch wohlgefühlt hast?')
)
elif event.sport == 'M':
experience_label = _('Eigene MTB-Erfahrung')
experience_help_text = '%s' % (
_('Was für Touren bist du schon gefahren?')
)
if event.level != 'beginner':
experience_help_text += '<br /> %s' % (
_('Single-Trail-Schwierigkeit (S0-S5) bei der du dich wohl fühlst?')
)
elif event.sport == 'S':
experience_label = _('Eigene Skitouren- und Bergerfahrung')
elif event.sport == 'W':
experience_help_text += '<br /> %s' % (
_('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().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().form_valid(form)
self.request.session['registration_id'] = form.instance.pk
message = _('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().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