# -*- 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 _ from dav_base.validators import DAVNumberValidator 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))