# -*- coding: utf-8 -*- import datetime import logging from django import forms from django.utils.translation import gettext, gettext_lazy as _ from .models import Registration logger = logging.getLogger(__name__) class RegistrationForm(forms.ModelForm): not_dav_member = forms.BooleanField(required=False, label=_('Ich bin noch kein DAV Mitglied.'), help_text='%s
\n%s' % ( _('Wenn du noch kein DAV Mitglied bist,' ' oder deine Aufnahme noch in Arbeit ist,' ' kreuze dieses Feld hier an.'), _('Spätestens zu Veranstaltungsbeginn muss' ' jedoch eine Mitgliedschaft bestehen.') )) class Meta: model = Registration exclude = ['event', 'created_at', 'privacy_policy', 'purge_at', 'answered'] widgets = { 'dav_member': forms.HiddenInput(), 'emergency_contact': forms.Textarea(attrs={'rows': 4}), 'experience': forms.Textarea(attrs={'rows': 5}), 'note': forms.Textarea(attrs={'rows': 5}), } labels = { 'apply_reduced_fee': _('Ich bin noch keine 25 Jahre alt oder besitze einen "Karlsruher Pass".'), } def clean_year_of_birth(self): now = datetime.datetime.now() year_now = now.year max_age = 100 val = self.cleaned_data.get('year_of_birth') if val > year_now: raise forms.ValidationError( gettext('Dein Geburtsjahr liegt in der Zukunft?' ' Das finden wir gut,' ' aber bitte melde dich besser mal per E-Mail bei uns.'), code='to_young', ) elif val < (year_now - max_age): raise forms.ValidationError( gettext('Du bist schon über %(max_age)d Jahre alt?' ' Das finden wir gut,' ' aber bitte melde dich besser mal per E-Mail bei uns.'), params={'max_age': max_age}, code='to_old', ) return val def clean_experience(self): val = self.cleaned_data.get('experience') if val == '': need_experience = True if self.instance.event.sport == 'W': need_experience = False if need_experience: raise forms.ValidationError( gettext('Die Tourenleiter*innen brauchen ein paar Angaben,' ' was du bereits kannst oder wie fit du bist.'), code='need_experience', ) return val def clean_privacy_policy_accepted(self): val = self.cleaned_data.get('privacy_policy_accepted') if not val and self.instance.privacy_policy: raise forms.ValidationError( gettext('Wir müssen deine Daten leider speichern können,' ' damit wir wissen, dass du teilnehmen möchtest.'), code='privacy_policy_not_accepted', ) return val def clean(self): super().clean() dav_member = self.cleaned_data.get('dav_member') dav_number = self.cleaned_data.get('dav_number') if dav_member and not dav_number: error_msg = gettext('Wenn du DAV Mitglied bist, brauchen wir deine Mitgliedsnummer.') self.add_error('not_dav_member', error_msg) raise forms.ValidationError(error_msg, code='dav_number_missing') return self.cleaned_data