Files
django-dav-events/dav_events/models/participant.py

80 lines
3.0 KiB
Python

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import datetime
from django.db import models
from django.utils import timezone
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
midnight = datetime.time(00, 00, 00)
one_day = datetime.timedelta(1)
@python_2_unicode_compatible
class Participant(models.Model):
event = models.ForeignKey('Event', related_name='participants')
created_at = models.DateTimeField(auto_now_add=True)
position = models.IntegerField(verbose_name='Listennummer')
personal_names = models.CharField(max_length=1024,
verbose_name=_('Vorname(n)'))
family_names = models.CharField(max_length=1024,
verbose_name=_('Familienname'))
address = models.CharField(max_length=1024,
verbose_name=_('Anschrift'),
help_text=_('Straße, Hausnummer'))
postal_code = models.CharField(max_length=254,
verbose_name=_('Postleitzahl'))
city = models.CharField(max_length=1024,
verbose_name=_('Ort'))
email_address = models.EmailField(verbose_name=_('E-Mail-Adresse'))
phone_number = models.CharField(max_length=254,
verbose_name=_('Telefonnummer'))
dav_number = models.CharField(max_length=62,
#validators=[DAVNumberValidator],
verbose_name=_('DAV Mitgliednummer'))
emergency_contact = models.TextField(blank=True,
verbose_name=_('Notfall-Kontakt'))
experience = models.TextField(blank=True,
verbose_name=_('Erfahrung'))
note = models.TextField(blank=True,
verbose_name=_('Anmerkung'))
paid = models.BooleanField('Teilnehmerbeitrag bezahlt', default=False)
purge_at = models.DateTimeField()
class Meta:
unique_together = (('event', 'position'), )
verbose_name = _('Teilnehmer')
verbose_name_plural = _('Teilnehmer')
ordering = ['event', 'position']
def __str__(self):
return '{position}. {name}'.format(
position=self.position,
name=self.get_full_name(),
)
def get_full_name(self):
return '{} {}'.format(self.personal_names, self.family_names)
def save(self, **kwargs):
if not self.purge_at and self.event:
self.purge_at = self.__class__.calc_purge_at(self.event)
super(Participant, self).save(**kwargs)
@staticmethod
def calc_purge_at(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_first_day
else:
last_day = event.first_day
return timezone.make_aware(datetime.datetime.combine(last_day + one_day * 7, midnight))