UPD: trainer email address is now optional.

This commit is contained in:
2018-05-28 12:26:57 +02:00
parent 24e2a2effc
commit 12760f48cd
4 changed files with 74 additions and 24 deletions

View File

@@ -2,6 +2,7 @@
import calendar
import datetime
import logging
import re
from babel.dates import format_date
from django import forms
from django.apps import apps
@@ -517,7 +518,9 @@ class TrainerForm(EventCreateForm):
max_length=config.TRAINER_NAME_MAX_LENGTH)
trainer_familyname = forms.CharField(label=_(u'Familienname'),
max_length=config.TRAINER_NAME_MAX_LENGTH)
trainer_email = forms.EmailField(label=_(u'E-Mail-Adresse'))
trainer_email = forms.EmailField(required=False,
label=_(u'E-Mail-Adresse'),
)
trainer_phone = forms.CharField(required=False,
max_length=config.PHONE_NUMBER_MAX_LENGTH,
label=_(u'Telefonnummer'),
@@ -577,6 +580,20 @@ class TrainerForm(EventCreateForm):
self.fields['trainer_familyname'].initial = _(u'Kleineheismann')
self.fields['trainer_email'].initial = _(u'heinzel@alpenverein-karlsruhe.de')
def clean_trainer_phone(self):
return re.sub(r'[-.]', ' ', self.cleaned_data['trainer_phone'])
def clean(self):
super(TrainerForm, self).clean()
trainer_email = self.cleaned_data.get('trainer_email', None)
trainer_phone = self.cleaned_data.get('trainer_phone', None)
if not trainer_email and not trainer_phone:
error_msg = _(u'Bitte E-Mail-Adresse und/oder Telefonnummer angeben.')
self.add_error('trainer_email', error_msg)
self.add_error('trainer_phone', error_msg)
raise forms.ValidationError(error_msg)
return self.cleaned_data
class RegistrationForm(EventCreateForm):
_form_title = _(u'Teilnehmer / Anmeldung')
@@ -625,9 +642,17 @@ class RegistrationForm(EventCreateForm):
def get_initial_for_field(self, field, field_name):
value = super(RegistrationForm, self).get_initial_for_field(field, field_name)
if field_name == 'registration_howto' and value is not None:
trainer_fullname = u'%s %s' % (self._session_data.get('trainer_firstname'),
self._session_data.get('trainer_familyname'))
value = value % {'name': trainer_fullname, 'emailaddr': self._session_data.get('trainer_email')}
trainer_firstname = self._session_data.get('trainer_firstname')
trainer_familyname = self._session_data.get('trainer_familyname')
trainer_email = self._session_data.get('trainer_email', None)
trainer_phone = self._session_data.get('trainer_phone', None)
if trainer_email:
trainer_contact = u'%s %s (%s)' % (trainer_firstname, trainer_familyname, trainer_email)
elif trainer_phone:
trainer_contact = u'%s %s (%s)' % (trainer_firstname, trainer_familyname, trainer_phone)
else:
trainer_contact = u'%s %s' % (trainer_firstname, trainer_familyname)
value %= {'trainer_contact': trainer_contact}
elif field_name in ('min_participants', 'max_participants') and value is None:
trainer_2 = bool(self._session_data.get('trainer_2_fullname', False))
trainer_3 = bool(self._session_data.get('trainer_3_fullname', False))

View File

@@ -3,6 +3,7 @@ import datetime
import logging
import os
import re
import unicodedata
import uuid
from babel.dates import format_date
from django.conf import settings
@@ -263,10 +264,23 @@ class Event(models.Model):
if not self.id:
user_model = get_user_model()
username = self.trainer_email.lower()
if not username:
s = self.trainer_firstname.replace(u'ß', u'ss')
s = unicodedata.normalize('NFKD', s).encode('ascii', 'ignore')
s = re.sub(r'[^a-z-]', '', s.lower())
username = s
s = self.trainer_familyname.replace(u'ß', u'ss')
s = unicodedata.normalize('NFKD', s).encode('ascii', 'ignore')
s = re.sub(r'[^a-z-]', '', s.lower())
username += '.' + s
s = re.sub(r'[^0-9]', '', str(self.trainer_phone))
username += '@' + s
try:
owner = user_model.objects.get(username=self.trainer_email.lower())
owner = user_model.objects.get(username=username)
except user_model.DoesNotExist:
owner = user_model(username=self.trainer_email.lower(),
owner = user_model(username=username,
first_name=self.trainer_firstname,
last_name=self.trainer_familyname,
email=self.trainer_email,
@@ -285,14 +299,16 @@ class Event(models.Model):
managers = get_users_by_role('manage_all')
managers += get_users_by_role('manage_{}'.format(self.sport.lower()))
for user in managers:
action = OneClickAction(command='EA')
action.parameters = '{event},{user}'.format(event=self.id, user=user.id)
action.save()
email = emails.EventToAcceptMail(recipient=user, event=self, accept_action=action)
email.send()
if user.email:
action = OneClickAction(command='EA')
action.parameters = '{event},{user}'.format(event=self.id, user=user.id)
action.save()
email = emails.EventToAcceptMail(recipient=user, event=self, accept_action=action)
email.send()
email = emails.NewEventMail(recipient=self.owner, event=self)
email.send()
if self.owner.email:
email = emails.NewEventMail(recipient=self.owner, event=self)
email.send()
def accept(self, user=None):
if not self.accepted:
@@ -309,14 +325,16 @@ class Event(models.Model):
publishers = get_users_by_role('publish_incremental')
for user in publishers:
action = OneClickAction(command='EP')
action.parameters = '{event},{user}'.format(event=self.id, user=user.id)
action.save()
email = emails.EventToPublishMail(recipient=user, event=self, confirm_publication_action=action)
email.send()
if user.email:
action = OneClickAction(command='EP')
action.parameters = '{event},{user}'.format(event=self.id, user=user.id)
action.save()
email = emails.EventToPublishMail(recipient=user, event=self, confirm_publication_action=action)
email.send()
email = emails.EventAcceptedMail(recipient=self.owner, event=self)
email.send()
if self.owner.email:
email = emails.EventAcceptedMail(recipient=self.owner, event=self)
email.send()
return self.number
else:
@@ -453,6 +471,9 @@ class Event(models.Model):
def get_numeric_date(self, begin_date=None, end_date=None):
return self.get_formated_date(begin_date=begin_date, end_date=end_date, format='numeric')
def get_trainer_full_name(self):
return u'%s %s' % (self.trainer_firstname, self.trainer_familyname)
def get_template_context(self, context=None):
r = {
'event': self,
@@ -494,6 +515,7 @@ class Event(models.Model):
'pre_meeting_2': self.pre_meeting_2,
'trainer_firstname': self.trainer_firstname,
'trainer_familyname': self.trainer_familyname,
'trainer_fullname': self.get_trainer_full_name(),
'trainer_email': self.trainer_email,
'trainer_phone': self.trainer_phone,
'trainer_2_fullname': self.trainer_2_fullname,

View File

@@ -51,10 +51,13 @@
<a href="{% url 'dav_events:event_detail' event.pk %}">{{ event.title }}</a>
</td>
<td>
{% if event.owner.get_full_name %}
{{ event.owner.get_full_name }}<br />{{ event.owner.email }}
{{ event.get_trainer_full_name }}
{% if event.trainer_email %}
<br />{{ event.trainer_email}}
{% elif event.trainer_phone %}
<br />{{ event.trainer_phone}}
{% else %}
{{ event.owner }}
<br /><span class="text-danger">{% trans 'Weder E-Mail-Adresse noch Telefonnummer!' %}</span>
{% endif %}
</td>
<td data-order="{{ event.first_day|date:'U' }}">

View File

@@ -45,7 +45,7 @@ if sys.version_info.major != 2:
setup(
name='django-dav-events',
version='0.1.dev0',
version='0.2',
description='A django based web application project to submit DAV Events.',
url='https://www.heinzelwelt.de',
maintainer='Jens Kleineheismann',