UPD: added app to submit participant registrations.
This commit is contained in:
111
dav_registration/models.py
Normal file
111
dav_registration/models.py
Normal file
@@ -0,0 +1,111 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import datetime
|
||||
import logging
|
||||
from django.db import models
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from dav_events.models.event import Event
|
||||
|
||||
from . import signals
|
||||
from .validators import DAVNumberValidator
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
midnight = datetime.time(00, 00, 00)
|
||||
one_day = datetime.timedelta(1)
|
||||
|
||||
|
||||
class Registration(models.Model):
|
||||
event = models.ForeignKey(Event, related_name='registrations')
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
personal_names = models.CharField(max_length=1024,
|
||||
verbose_name=_(u'Vorname(n)'))
|
||||
family_names = models.CharField(max_length=1024,
|
||||
verbose_name=_(u'Familienname'))
|
||||
|
||||
address = models.CharField(max_length=1024,
|
||||
verbose_name=_(u'Anschrift'),
|
||||
help_text=_(u'Straße, Hausnummer'))
|
||||
postal_code = models.CharField(max_length=254,
|
||||
verbose_name=_(u'Postleitzahl'))
|
||||
city = models.CharField(max_length=1024,
|
||||
verbose_name=_(u'Ort'))
|
||||
email_address = models.EmailField(verbose_name=_(u'E-Mail-Adresse'))
|
||||
phone_number = models.CharField(max_length=254,
|
||||
verbose_name=_(u'Telefonnummer'),
|
||||
help_text=_(u'Idealerweise eine Mobilfunk-Nummer'))
|
||||
dav_number = models.CharField(max_length=62,
|
||||
validators=[DAVNumberValidator],
|
||||
verbose_name=_(u'DAV Mitgliednummer'),
|
||||
help_text=u'%s<br /> %s %s' % (
|
||||
_(u'Deine Mitgliedsnummer findest du unter dem Strichcode'
|
||||
u' auf deinem DAV Ausweis.'),
|
||||
_(u'Beispiel: <tt>131/00/012345</tt>'),
|
||||
_(u'(der Teil bis zum ersten * genügt)'),
|
||||
))
|
||||
emergency_contact = models.TextField(blank=True,
|
||||
verbose_name=_(u'Notfall-Kontakt'),
|
||||
help_text=_(u'Name und Telefonnummer bzw. Anschrift,'
|
||||
u' die in Notfällen informiert werden soll.'))
|
||||
experience = models.TextField(blank=True,
|
||||
verbose_name=_(u'Erfahrung'),
|
||||
help_text=_(u'Welche Touren oder Kurse hast du bereits gemacht?'))
|
||||
note = models.TextField(blank=True,
|
||||
verbose_name=_(u'Anmerkung'),
|
||||
help_text=u'%s<br /> %s' % (
|
||||
_(u'Wissenswertes für den Tourenleiter, z.B. Allergien,'
|
||||
u' gesundheitliche Einschränkungen, ...'),
|
||||
_(u'Kann frei gelassen werden.'))
|
||||
)
|
||||
|
||||
privacy_policy = models.TextField(blank=True,
|
||||
verbose_name=_(u'Erklärung zur Datenspeicherung'))
|
||||
privacy_policy_accepted = models.BooleanField(default=False,
|
||||
verbose_name=_(u'Einwilligung zur Datenspeicherung'))
|
||||
purge_at = models.DateTimeField()
|
||||
|
||||
class Meta:
|
||||
verbose_name = _(u'Anmeldung')
|
||||
verbose_name_plural = _(u'Anmeldungen')
|
||||
ordering = ['created_at']
|
||||
|
||||
def __unicode__(self):
|
||||
return u'{number} - {name} ({created} - {purge})'.format(number=self.event.get_number(),
|
||||
name=self.get_full_name(),
|
||||
created=self.created_at.strftime('%d.%m.%Y %H:%M'),
|
||||
purge=self.purge_at.strftime('%d.%m.%Y %H:%M'))
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('dav_registration:registered')
|
||||
|
||||
def get_full_name(self):
|
||||
return u'{} {}'.format(self.personal_names, self.family_names)
|
||||
|
||||
def save(self, **kwargs):
|
||||
creating = False
|
||||
if not self.id:
|
||||
creating = True
|
||||
|
||||
if self.event:
|
||||
self.purge_at = self.__class__.calc_purge_at(self.event)
|
||||
|
||||
super(Registration, self).save(**kwargs)
|
||||
|
||||
if creating:
|
||||
logger.info('Registration stored: %s', self)
|
||||
signals.registration_created.send(sender=self.__class__, registration=self)
|
||||
|
||||
@classmethod
|
||||
def calc_purge_at(cls, event):
|
||||
if event.alt_last_day:
|
||||
last_day = event.alt_last_day
|
||||
elif event.last_day:
|
||||
last_day = event.last_day
|
||||
elif event.alt_first_day:
|
||||
last_day = event.alt_fisrt_day
|
||||
else:
|
||||
last_day = event.first_day
|
||||
return timezone.make_aware(datetime.datetime.combine(last_day + one_day * 7, midnight))
|
||||
Reference in New Issue
Block a user