|
|
|
@ -14,7 +14,7 @@ from django.utils.html import format_html
|
|
|
|
from django.urls import reverse
|
|
|
|
from django.urls import reverse
|
|
|
|
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
|
|
|
|
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
|
|
|
|
from django.contrib.contenttypes.models import ContentType
|
|
|
|
from django.contrib.contenttypes.models import ContentType
|
|
|
|
from utils import RestrictedFileField
|
|
|
|
from utils import RestrictedFileField, normalize_name
|
|
|
|
import os
|
|
|
|
import os
|
|
|
|
from mailer.mailutils import send as send_mail, get_mail_confirmation_link,\
|
|
|
|
from mailer.mailutils import send as send_mail, get_mail_confirmation_link,\
|
|
|
|
prepend_base_url, get_registration_link, get_wait_confirmation_link,\
|
|
|
|
prepend_base_url, get_registration_link, get_wait_confirmation_link,\
|
|
|
|
@ -312,7 +312,7 @@ class Member(Person):
|
|
|
|
default=True)
|
|
|
|
default=True)
|
|
|
|
unsubscribe_key = models.CharField(max_length=32, default="")
|
|
|
|
unsubscribe_key = models.CharField(max_length=32, default="")
|
|
|
|
unsubscribe_expire = models.DateTimeField(default=timezone.now)
|
|
|
|
unsubscribe_expire = models.DateTimeField(default=timezone.now)
|
|
|
|
created = models.DateField(auto_now=True, verbose_name=_('created'))
|
|
|
|
created = models.DateField(default=timezone.now, verbose_name=_('created'))
|
|
|
|
active = models.BooleanField(default=True, verbose_name=_('Active'))
|
|
|
|
active = models.BooleanField(default=True, verbose_name=_('Active'))
|
|
|
|
registration_form = RestrictedFileField(verbose_name=_('registration form'),
|
|
|
|
registration_form = RestrictedFileField(verbose_name=_('registration form'),
|
|
|
|
upload_to='registration_forms',
|
|
|
|
upload_to='registration_forms',
|
|
|
|
@ -866,7 +866,7 @@ class InvitationToGroup(models.Model):
|
|
|
|
"""An invitation of a waiter to a group."""
|
|
|
|
"""An invitation of a waiter to a group."""
|
|
|
|
waiter = models.ForeignKey('MemberWaitingList', verbose_name=_('Waiter'), on_delete=models.CASCADE)
|
|
|
|
waiter = models.ForeignKey('MemberWaitingList', verbose_name=_('Waiter'), on_delete=models.CASCADE)
|
|
|
|
group = models.ForeignKey(Group, verbose_name=_('Group'), on_delete=models.CASCADE)
|
|
|
|
group = models.ForeignKey(Group, verbose_name=_('Group'), on_delete=models.CASCADE)
|
|
|
|
date = models.DateField(auto_now=True, verbose_name=_('Invitation date'))
|
|
|
|
date = models.DateField(default=timezone.now, verbose_name=_('Invitation date'))
|
|
|
|
rejected = models.BooleanField(verbose_name=_('Invitation rejected'), default=False)
|
|
|
|
rejected = models.BooleanField(verbose_name=_('Invitation rejected'), default=False)
|
|
|
|
key = models.CharField(max_length=32, default=gen_key)
|
|
|
|
key = models.CharField(max_length=32, default=gen_key)
|
|
|
|
|
|
|
|
|
|
|
|
@ -898,13 +898,13 @@ class MemberWaitingList(Person):
|
|
|
|
application_text = models.TextField(_('Do you want to tell us something else?'), default='', blank=True)
|
|
|
|
application_text = models.TextField(_('Do you want to tell us something else?'), default='', blank=True)
|
|
|
|
application_date = models.DateTimeField(verbose_name=_('application date'), default=timezone.now)
|
|
|
|
application_date = models.DateTimeField(verbose_name=_('application date'), default=timezone.now)
|
|
|
|
|
|
|
|
|
|
|
|
last_wait_confirmation = models.DateField(auto_now=True, verbose_name=_('Last wait confirmation'))
|
|
|
|
last_wait_confirmation = models.DateField(default=timezone.now, verbose_name=_('Last wait confirmation'))
|
|
|
|
wait_confirmation_key = models.CharField(max_length=32, default="")
|
|
|
|
wait_confirmation_key = models.CharField(max_length=32, default="")
|
|
|
|
wait_confirmation_key_expire = models.DateTimeField(default=timezone.now)
|
|
|
|
wait_confirmation_key_expire = models.DateTimeField(default=timezone.now)
|
|
|
|
|
|
|
|
|
|
|
|
leave_key = models.CharField(max_length=32, default="")
|
|
|
|
leave_key = models.CharField(max_length=32, default="")
|
|
|
|
|
|
|
|
|
|
|
|
last_reminder = models.DateTimeField(auto_now=True, verbose_name=_('Last reminder'))
|
|
|
|
last_reminder = models.DateTimeField(default=timezone.now, verbose_name=_('Last reminder'))
|
|
|
|
sent_reminders = models.IntegerField(default=0, verbose_name=_('Missed reminders'))
|
|
|
|
sent_reminders = models.IntegerField(default=0, verbose_name=_('Missed reminders'))
|
|
|
|
|
|
|
|
|
|
|
|
registration_key = models.CharField(max_length=32, default="")
|
|
|
|
registration_key = models.CharField(max_length=32, default="")
|
|
|
|
@ -948,7 +948,7 @@ class MemberWaitingList(Person):
|
|
|
|
|
|
|
|
|
|
|
|
def ask_for_wait_confirmation(self):
|
|
|
|
def ask_for_wait_confirmation(self):
|
|
|
|
"""Sends an email to the person asking them to confirm their intention to wait."""
|
|
|
|
"""Sends an email to the person asking them to confirm their intention to wait."""
|
|
|
|
self.last_reminder = datetime.now()
|
|
|
|
self.last_reminder = timezone.now()
|
|
|
|
self.sent_reminders += 1
|
|
|
|
self.sent_reminders += 1
|
|
|
|
self.leave_key = gen_key()
|
|
|
|
self.leave_key = gen_key()
|
|
|
|
self.save()
|
|
|
|
self.save()
|
|
|
|
@ -2020,8 +2020,3 @@ def import_from_csv_waitinglist(path):
|
|
|
|
|
|
|
|
|
|
|
|
for row in rows:
|
|
|
|
for row in rows:
|
|
|
|
transform_row(row)
|
|
|
|
transform_row(row)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def normalize_name(raw):
|
|
|
|
|
|
|
|
noumlaut = raw.replace('ö', 'oe').replace('ä', 'ae').replace('ü', 'ue').replace(' ', '_')
|
|
|
|
|
|
|
|
return unicodedata.normalize('NFKD', noumlaut).encode('ascii', 'ignore').decode('ascii')
|
|
|
|
|
|
|
|
|