UPD: trainer email address is now optional.
This commit is contained in:
@@ -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))
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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' }}">
|
||||
|
||||
Reference in New Issue
Block a user