All checks were successful
Run tests / Execute tox to run the test suite (push) Successful in 3m42s
227 lines
8.8 KiB
Python
227 lines
8.8 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.http import JsonResponse
|
|
from django.urls import reverse_lazy
|
|
from django.utils.translation import ugettext as _
|
|
from django.views import generic
|
|
|
|
from dav_events.choices import SPORT_CHOICES, LEVEL_CHOICES
|
|
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 HomeView(generic.TemplateView):
|
|
template_name = 'dav_registration/home.html'
|
|
|
|
|
|
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
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
if hasattr(self, 'init_filter'):
|
|
context['init_filter'] = self.init_filter
|
|
return context
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
if 'filter' in request.GET:
|
|
choices = SPORT_CHOICES.codes + LEVEL_CHOICES.codes
|
|
filter_input = request.GET['filter'].split(',')
|
|
filter_cleaned = list(set(filter_input) & set(choices))
|
|
self.init_filter = filter_cleaned
|
|
return super().get(request, *args, **kwargs)
|
|
|
|
|
|
def EventListAsJSONView(request):
|
|
filter_cleaned = []
|
|
if 'filter' in request.GET:
|
|
choices = SPORT_CHOICES.codes + LEVEL_CHOICES.codes
|
|
filter_input = request.GET['filter'].split(',')
|
|
filter_cleaned = list(set(filter_input) & set(choices))
|
|
|
|
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)
|
|
if filter_cleaned:
|
|
filter_exp &= Q(sport__in=filter_cleaned) | Q(level__in=filter_cleaned)
|
|
|
|
qs = Event.objects.filter(filter_exp).order_by('first_day', 'number').distinct()
|
|
data = [event.as_dict(json=True, add_registration_url=True) for event in qs]
|
|
response = JsonResponse(data, safe=False)
|
|
return response
|
|
|
|
|
|
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
|