UPD: small steps to become python3 compatible.
This commit is contained in:
2
TODO.txt
2
TODO.txt
@@ -1,7 +1,7 @@
|
|||||||
- FIX: validation for first_day
|
- FIX: validation for first_day
|
||||||
- FIX: no timezone on pre_meeting
|
- FIX: no timezone on pre_meeting
|
||||||
|
|
||||||
- chainedform für update
|
- Test event list export
|
||||||
|
|
||||||
- bootstrap update
|
- bootstrap update
|
||||||
- python und django update
|
- python und django update
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.test import SimpleTestCase, tag
|
from django.test import SimpleTestCase, tag
|
||||||
from django.utils.translation import ugettext
|
from django.utils.translation import ugettext
|
||||||
@@ -11,7 +12,7 @@ from dav_base.tests.generic import SeleniumTestCase
|
|||||||
from .generic import SeleniumAuthMixin
|
from .generic import SeleniumAuthMixin
|
||||||
|
|
||||||
TEST_USERNAME = 'root@localhost'
|
TEST_USERNAME = 'root@localhost'
|
||||||
TEST_PASSWORD = u'me||ön 2'
|
TEST_PASSWORD = 'me||ön 2'
|
||||||
TEST_EMAIL = TEST_USERNAME
|
TEST_EMAIL = TEST_USERNAME
|
||||||
|
|
||||||
|
|
||||||
@@ -19,8 +20,8 @@ class TemplatesTestCase(SimpleTestCase):
|
|||||||
def test_reset_link_in_login_form(self):
|
def test_reset_link_in_login_form(self):
|
||||||
login_url = reverse('dav_auth:login')
|
login_url = reverse('dav_auth:login')
|
||||||
reset_url = reverse('dav_auth:reset_password')
|
reset_url = reverse('dav_auth:reset_password')
|
||||||
text = ugettext(u'Passwort vergessen?')
|
text = ugettext('Passwort vergessen?')
|
||||||
html = u'<a href="{url}">{text}</a>'.format(url=reset_url, text=text)
|
html = '<a href="{url}">{text}</a>'.format(url=reset_url, text=text)
|
||||||
response = self.client.get(login_url)
|
response = self.client.get(login_url)
|
||||||
self.assertInHTML(html, response.content)
|
self.assertInHTML(html, response.content)
|
||||||
|
|
||||||
@@ -50,18 +51,18 @@ class TestCase(SeleniumAuthMixin, SeleniumTestCase):
|
|||||||
c.get(self.complete_url(location))
|
c.get(self.complete_url(location))
|
||||||
|
|
||||||
field = c.find_element_by_id('id_username')
|
field = c.find_element_by_id('id_username')
|
||||||
self.assertEqual(field.get_attribute('required'), u'true')
|
self.assertEqual(field.get_attribute('required'), 'true')
|
||||||
field = c.find_element_by_id('id_password')
|
field = c.find_element_by_id('id_password')
|
||||||
self.assertEqual(field.get_attribute('required'), u'true')
|
self.assertEqual(field.get_attribute('required'), 'true')
|
||||||
|
|
||||||
def test_required_fields_in_set_password_form(self):
|
def test_required_fields_in_set_password_form(self):
|
||||||
c = self.login(self.selenium, self.test_username, self.test_password)
|
c = self.login(self.selenium, self.test_username, self.test_password)
|
||||||
|
|
||||||
c.get(self.complete_url(reverse('dav_auth:set_password')))
|
c.get(self.complete_url(reverse('dav_auth:set_password')))
|
||||||
field = self.wait_on_presence(c, (By.ID, "id_new_password"))
|
field = self.wait_on_presence(c, (By.ID, 'id_new_password'))
|
||||||
self.assertEqual(field.get_attribute('required'), u'true')
|
self.assertEqual(field.get_attribute('required'), 'true')
|
||||||
field = c.find_element_by_id('id_new_password_repeat')
|
field = c.find_element_by_id('id_new_password_repeat')
|
||||||
self.assertEqual(field.get_attribute('required'), u'true')
|
self.assertEqual(field.get_attribute('required'), 'true')
|
||||||
field = c.find_element_by_id('id_send_password_mail')
|
field = c.find_element_by_id('id_send_password_mail')
|
||||||
self.assertEqual(field.get_attribute('required'), None)
|
self.assertEqual(field.get_attribute('required'), None)
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import datetime
|
import datetime
|
||||||
import os
|
import os
|
||||||
import urllib
|
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.contrib.auth.models import AbstractUser
|
from django.contrib.auth.models import AbstractUser
|
||||||
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
|
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
|
||||||
@@ -9,6 +8,7 @@ from django.urls import reverse
|
|||||||
from selenium import webdriver
|
from selenium import webdriver
|
||||||
from selenium.webdriver.support.ui import WebDriverWait
|
from selenium.webdriver.support.ui import WebDriverWait
|
||||||
from selenium.webdriver.support import expected_conditions as EC
|
from selenium.webdriver.support import expected_conditions as EC
|
||||||
|
from six.moves.urllib.parse import quote
|
||||||
|
|
||||||
|
|
||||||
class AppSetting(object):
|
class AppSetting(object):
|
||||||
@@ -252,7 +252,7 @@ class ScreenshotTestCase(SeleniumTestCase):
|
|||||||
self.screenshot_sequences = {}
|
self.screenshot_sequences = {}
|
||||||
|
|
||||||
def sanitize_filename(self, location):
|
def sanitize_filename(self, location):
|
||||||
return urllib.quote(location).replace('/', '--')
|
return quote(location).replace('/', '--')
|
||||||
|
|
||||||
def save_screenshot(self, title=None, sequence=None, resize=True):
|
def save_screenshot(self, title=None, sequence=None, resize=True):
|
||||||
if sequence is None:
|
if sequence is None:
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
from __future__ import unicode_literals
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.test import SimpleTestCase
|
from django.test import SimpleTestCase
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from generic import Url, UrlsTestCase
|
from .generic import Url, UrlsTestCase
|
||||||
from ..views import RootView, generic
|
from ..views import RootView, generic
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
import datetime
|
import datetime
|
||||||
import difflib
|
import difflib
|
||||||
import logging
|
import logging
|
||||||
@@ -11,6 +12,7 @@ from django.contrib.auth import get_user_model
|
|||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.template.loader import get_template
|
from django.template.loader import get_template
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
from django.utils.translation import get_language, ugettext_lazy as _
|
from django.utils.translation import get_language, ugettext_lazy as _
|
||||||
from django_countries.fields import CountryField
|
from django_countries.fields import CountryField
|
||||||
|
|
||||||
@@ -24,206 +26,207 @@ from ..workflow import DefaultWorkflow
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Event(models.Model):
|
class Event(models.Model):
|
||||||
# Metadata
|
# Metadata
|
||||||
owner = models.ForeignKey(settings.AUTH_USER_MODEL,
|
owner = models.ForeignKey(settings.AUTH_USER_MODEL,
|
||||||
null=True,
|
null=True,
|
||||||
on_delete=models.SET(get_ghost_user),
|
on_delete=models.SET(get_ghost_user),
|
||||||
related_name='events',
|
related_name='events',
|
||||||
verbose_name=_(u'Ersteller'))
|
verbose_name=_('Ersteller'))
|
||||||
created_at = models.DateTimeField(auto_now_add=True,
|
created_at = models.DateTimeField(auto_now_add=True,
|
||||||
verbose_name=_(u'Erstellt'))
|
verbose_name=_('Erstellt'))
|
||||||
number = models.CharField(unique=True,
|
number = models.CharField(unique=True,
|
||||||
max_length=config.NUMBER_MAX_LENGTH,
|
max_length=config.NUMBER_MAX_LENGTH,
|
||||||
blank=True,
|
blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
default=None,
|
default=None,
|
||||||
verbose_name=_(u'Programmnummer'))
|
verbose_name=_('Programmnummer'))
|
||||||
|
|
||||||
# DescriptionForm
|
# DescriptionForm
|
||||||
title = models.CharField(max_length=config.TITLE_MAX_LENGTH, verbose_name=_(u'Titel'))
|
title = models.CharField(max_length=config.TITLE_MAX_LENGTH, verbose_name=_('Titel'))
|
||||||
description = models.TextField(verbose_name=_(u'Beschreibung'))
|
description = models.TextField(verbose_name=_('Beschreibung'))
|
||||||
|
|
||||||
# ModeForm
|
# ModeForm
|
||||||
mode = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
mode = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
||||||
choices=choices.MODE_CHOICES,
|
choices=choices.MODE_CHOICES,
|
||||||
verbose_name=_(u'Veranstaltungsart'))
|
verbose_name=_('Veranstaltungsart'))
|
||||||
sport = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
sport = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
||||||
choices=choices.SPORT_CHOICES,
|
choices=choices.SPORT_CHOICES,
|
||||||
verbose_name=_(u'Spielart'))
|
verbose_name=_('Spielart'))
|
||||||
ski_lift = models.BooleanField(default=False,
|
ski_lift = models.BooleanField(default=False,
|
||||||
verbose_name=_(u'Skiliftbenutzung'))
|
verbose_name=_('Skiliftbenutzung'))
|
||||||
level = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
level = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
||||||
choices=choices.LEVEL_CHOICES,
|
choices=choices.LEVEL_CHOICES,
|
||||||
verbose_name=_(u'Schwierigkeitsnivau'))
|
verbose_name=_('Schwierigkeitsnivau'))
|
||||||
first_day = models.DateField(verbose_name=_(u'Erster Tag'))
|
first_day = models.DateField(verbose_name=_('Erster Tag'))
|
||||||
alt_first_day = models.DateField(blank=True,
|
alt_first_day = models.DateField(blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
verbose_name=u'%s - %s' % (_(u'Ersatztermin'), _(u'Erster Tag')))
|
verbose_name='%s - %s' % (_('Ersatztermin'), _('Erster Tag')))
|
||||||
last_day = models.DateField(blank=True,
|
last_day = models.DateField(blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
verbose_name=_(u'Letzter Tag'))
|
verbose_name=_('Letzter Tag'))
|
||||||
alt_last_day = models.DateField(blank=True,
|
alt_last_day = models.DateField(blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
verbose_name=u'%s - %s' % (_(u'Ersatztermin'), _(u'Letzter Tag')))
|
verbose_name='%s - %s' % (_('Ersatztermin'), _('Letzter Tag')))
|
||||||
|
|
||||||
# LocationForm
|
# LocationForm
|
||||||
country = CountryField(countries=choices.CountryChoiceSet,
|
country = CountryField(countries=choices.CountryChoiceSet,
|
||||||
verbose_name=_(u'Land'))
|
verbose_name=_('Land'))
|
||||||
terrain = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
terrain = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
||||||
choices=choices.TERRAIN_CHOICES,
|
choices=choices.TERRAIN_CHOICES,
|
||||||
default=choices.TERRAIN_CHOICES[0][0],
|
default=choices.TERRAIN_CHOICES[0][0],
|
||||||
verbose_name=_(u'Gelände'))
|
verbose_name=_('Gelände'))
|
||||||
location = models.CharField(max_length=config.LOCATION_MAX_LENGTH,
|
location = models.CharField(max_length=config.LOCATION_MAX_LENGTH,
|
||||||
blank=True,
|
blank=True,
|
||||||
verbose_name=_(u'Ort oder Gebiet'))
|
verbose_name=_('Ort oder Gebiet'))
|
||||||
transport = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
transport = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
||||||
choices=choices.TRANSPORT_CHOICES,
|
choices=choices.TRANSPORT_CHOICES,
|
||||||
default=choices.TRANSPORT_CHOICES[0][0],
|
default=choices.TRANSPORT_CHOICES[0][0],
|
||||||
verbose_name=_(u'Verkehrsmittel'))
|
verbose_name=_('Verkehrsmittel'))
|
||||||
transport_other = models.CharField(max_length=config.TRANSPORT_OTHER_MAX_LENGTH,
|
transport_other = models.CharField(max_length=config.TRANSPORT_OTHER_MAX_LENGTH,
|
||||||
blank=True,
|
blank=True,
|
||||||
verbose_name=_(u'Anderes Verkehrsmittel'))
|
verbose_name=_('Anderes Verkehrsmittel'))
|
||||||
|
|
||||||
# JourneyForm
|
# JourneyForm
|
||||||
meeting_point = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
meeting_point = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
||||||
choices=choices.MEETING_POINT_CHOICES,
|
choices=choices.MEETING_POINT_CHOICES,
|
||||||
default=choices.MEETING_POINT_CHOICES[0][0],
|
default=choices.MEETING_POINT_CHOICES[0][0],
|
||||||
verbose_name=_(u'Treffpunkt'))
|
verbose_name=_('Treffpunkt'))
|
||||||
meeting_point_other = models.CharField(max_length=config.MEETING_POINT_OTHER_MAX_LENGTH,
|
meeting_point_other = models.CharField(max_length=config.MEETING_POINT_OTHER_MAX_LENGTH,
|
||||||
blank=True,
|
blank=True,
|
||||||
verbose_name=_(u'Anderer Treffpunkt'))
|
verbose_name=_('Anderer Treffpunkt'))
|
||||||
meeting_time = models.TimeField(blank=True,
|
meeting_time = models.TimeField(blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
verbose_name=_(u'Uhrzeit am Treffpunkt'))
|
verbose_name=_('Uhrzeit am Treffpunkt'))
|
||||||
departure_time = models.TimeField(blank=True,
|
departure_time = models.TimeField(blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
verbose_name=_(u'Uhrzeit Abfahrt'))
|
verbose_name=_('Uhrzeit Abfahrt'))
|
||||||
departure_ride = models.CharField(max_length=config.DEPARTURE_RIDE_MAX_LENGTH,
|
departure_ride = models.CharField(max_length=config.DEPARTURE_RIDE_MAX_LENGTH,
|
||||||
blank=True,
|
blank=True,
|
||||||
verbose_name=_(u'Bahn-/Bus-Linie'))
|
verbose_name=_('Bahn-/Bus-Linie'))
|
||||||
return_departure_time = models.TimeField(blank=True,
|
return_departure_time = models.TimeField(blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
verbose_name=_(u'Uhrzeit Rückfahrt'))
|
verbose_name=_('Uhrzeit Rückfahrt'))
|
||||||
return_arrival_time = models.TimeField(blank=True,
|
return_arrival_time = models.TimeField(blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
verbose_name=_(u'Uhrzeit Rückkunft'))
|
verbose_name=_('Uhrzeit Rückkunft'))
|
||||||
arrival_previous_day = models.BooleanField(default=False,
|
arrival_previous_day = models.BooleanField(default=False,
|
||||||
verbose_name=_(u'Anreise des Trainers am Vortag'))
|
verbose_name=_('Anreise des Trainers am Vortag'))
|
||||||
|
|
||||||
# AccommodationForm
|
# AccommodationForm
|
||||||
basecamp = models.CharField(max_length=config.BASECAMP_MAX_LENGTH,
|
basecamp = models.CharField(max_length=config.BASECAMP_MAX_LENGTH,
|
||||||
blank=True,
|
blank=True,
|
||||||
verbose_name=_(u'Stützpunkt'))
|
verbose_name=_('Stützpunkt'))
|
||||||
|
|
||||||
accommodation = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
accommodation = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
||||||
choices=choices.ACCOMMODATION_CHOICES,
|
choices=choices.ACCOMMODATION_CHOICES,
|
||||||
default=choices.ACCOMMODATION_CHOICES[0][0],
|
default=choices.ACCOMMODATION_CHOICES[0][0],
|
||||||
verbose_name=_(u'Unterkunft'))
|
verbose_name=_('Unterkunft'))
|
||||||
accommodation_other = models.CharField(max_length=config.ACCOMMODATION_OTHER_MAX_LENGTH,
|
accommodation_other = models.CharField(max_length=config.ACCOMMODATION_OTHER_MAX_LENGTH,
|
||||||
blank=True,
|
blank=True,
|
||||||
verbose_name=_(u'Andere Unterkunft'))
|
verbose_name=_('Andere Unterkunft'))
|
||||||
meals = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
meals = models.CharField(max_length=choices.CHOICE_FIELD_MAX_LENGTH,
|
||||||
choices=choices.MEALS_CHOICES,
|
choices=choices.MEALS_CHOICES,
|
||||||
default=choices.MEALS_CHOICES[0][0],
|
default=choices.MEALS_CHOICES[0][0],
|
||||||
verbose_name=_(u'Verpflegung'))
|
verbose_name=_('Verpflegung'))
|
||||||
meals_other = models.CharField(max_length=config.MEALS_OTHER_MAX_LENGTH,
|
meals_other = models.CharField(max_length=config.MEALS_OTHER_MAX_LENGTH,
|
||||||
blank=True,
|
blank=True,
|
||||||
verbose_name=_(u'Andere Verpflegung'))
|
verbose_name=_('Andere Verpflegung'))
|
||||||
|
|
||||||
# RequirementsForm
|
# RequirementsForm
|
||||||
requirements = models.TextField(blank=True,
|
requirements = models.TextField(blank=True,
|
||||||
verbose_name=_(u'Anforderungen'))
|
verbose_name=_('Anforderungen'))
|
||||||
equipment = models.TextField(blank=True,
|
equipment = models.TextField(blank=True,
|
||||||
verbose_name=_(u'Ausrüstung'))
|
verbose_name=_('Ausrüstung'))
|
||||||
pre_meeting_1 = models.DateTimeField(blank=True,
|
pre_meeting_1 = models.DateTimeField(blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
verbose_name=u'1. %s' % _(u'Vortreffen'))
|
verbose_name='1. %s' % _('Vortreffen'))
|
||||||
pre_meeting_2 = models.DateTimeField(blank=True,
|
pre_meeting_2 = models.DateTimeField(blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
verbose_name=u'2. %s' % _(u'Vortreffen'))
|
verbose_name='2. %s' % _('Vortreffen'))
|
||||||
|
|
||||||
# TrainerForm
|
# TrainerForm
|
||||||
trainer_firstname = models.CharField(max_length=config.TRAINER_NAME_MAX_LENGTH,
|
trainer_firstname = models.CharField(max_length=config.TRAINER_NAME_MAX_LENGTH,
|
||||||
blank=True,
|
blank=True,
|
||||||
verbose_name=u'1. %s %s' % (_(u'Trainer'), _(u'Vorname')))
|
verbose_name='1. %s %s' % (_('Trainer'), _('Vorname')))
|
||||||
trainer_familyname = models.CharField(max_length=config.TRAINER_NAME_MAX_LENGTH,
|
trainer_familyname = models.CharField(max_length=config.TRAINER_NAME_MAX_LENGTH,
|
||||||
blank=True,
|
blank=True,
|
||||||
verbose_name=u'1. %s %s' % (_(u'Trainer'), _(u'Familienname')))
|
verbose_name='1. %s %s' % (_('Trainer'), _('Familienname')))
|
||||||
trainer_email = models.EmailField(blank=True,
|
trainer_email = models.EmailField(blank=True,
|
||||||
verbose_name=u'1. %s %s' % (_(u'Trainer'), _(u'E-Mail')))
|
verbose_name='1. %s %s' % (_('Trainer'), _('E-Mail')))
|
||||||
trainer_phone = models.CharField(max_length=config.PHONE_NUMBER_MAX_LENGTH,
|
trainer_phone = models.CharField(max_length=config.PHONE_NUMBER_MAX_LENGTH,
|
||||||
blank=True,
|
blank=True,
|
||||||
verbose_name=u'1. %s %s' % (_(u'Trainer'), _(u'Telefon')))
|
verbose_name='1. %s %s' % (_('Trainer'), _('Telefon')))
|
||||||
trainer_2_fullname = models.CharField(max_length=config.TRAINER_NAME_MAX_LENGTH,
|
trainer_2_fullname = models.CharField(max_length=config.TRAINER_NAME_MAX_LENGTH,
|
||||||
blank=True,
|
blank=True,
|
||||||
verbose_name=u'2. %s %s' % (_(u'Trainer'), _(u'Name')))
|
verbose_name='2. %s %s' % (_('Trainer'), _('Name')))
|
||||||
trainer_2_email = models.EmailField(blank=True,
|
trainer_2_email = models.EmailField(blank=True,
|
||||||
verbose_name=u'2. %s %s' % (_(u'Trainer'), _(u'E-Mail')))
|
verbose_name='2. %s %s' % (_('Trainer'), _('E-Mail')))
|
||||||
trainer_2_phone = models.CharField(max_length=config.PHONE_NUMBER_MAX_LENGTH,
|
trainer_2_phone = models.CharField(max_length=config.PHONE_NUMBER_MAX_LENGTH,
|
||||||
blank=True,
|
blank=True,
|
||||||
verbose_name=u'2. %s %s' % (_(u'Trainer'), _(u'Telefon')))
|
verbose_name='2. %s %s' % (_('Trainer'), _('Telefon')))
|
||||||
trainer_3_fullname = models.CharField(max_length=config.TRAINER_NAME_MAX_LENGTH,
|
trainer_3_fullname = models.CharField(max_length=config.TRAINER_NAME_MAX_LENGTH,
|
||||||
blank=True,
|
blank=True,
|
||||||
verbose_name=u'3. %s %s' % (_(u'Trainer'), _(u'Name')))
|
verbose_name='3. %s %s' % (_('Trainer'), _('Name')))
|
||||||
trainer_3_email = models.EmailField(blank=True,
|
trainer_3_email = models.EmailField(blank=True,
|
||||||
verbose_name=u'3. %s %s' % (_(u'Trainer'), _(u'E-Mail')))
|
verbose_name='3. %s %s' % (_('Trainer'), _('E-Mail')))
|
||||||
trainer_3_phone = models.CharField(max_length=config.PHONE_NUMBER_MAX_LENGTH,
|
trainer_3_phone = models.CharField(max_length=config.PHONE_NUMBER_MAX_LENGTH,
|
||||||
blank=True,
|
blank=True,
|
||||||
verbose_name=u'3. %s %s' % (_(u'Trainer'), _(u'Telefon')))
|
verbose_name='3. %s %s' % (_('Trainer'), _('Telefon')))
|
||||||
|
|
||||||
# RegistrationForm
|
# RegistrationForm
|
||||||
min_participants = models.IntegerField(default=0,
|
min_participants = models.IntegerField(default=0,
|
||||||
verbose_name=_(u'Min. Teilnehmer'))
|
verbose_name=_('Min. Teilnehmer'))
|
||||||
max_participants = models.IntegerField(default=0,
|
max_participants = models.IntegerField(default=0,
|
||||||
verbose_name=_(u'Max. Teilnehmer'))
|
verbose_name=_('Max. Teilnehmer'))
|
||||||
registration_required = models.BooleanField(default=False,
|
registration_required = models.BooleanField(default=False,
|
||||||
verbose_name=_(u'Anmeldung notwendig'))
|
verbose_name=_('Anmeldung notwendig'))
|
||||||
deadline = models.DateField(blank=True,
|
deadline = models.DateField(blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
verbose_name=_(u'Anmeldeschluss'))
|
verbose_name=_('Anmeldeschluss'))
|
||||||
registration_howto = models.TextField(blank=True,
|
registration_howto = models.TextField(blank=True,
|
||||||
verbose_name=_(u'Anmeldungshinweis'))
|
verbose_name=_('Anmeldungshinweis'))
|
||||||
|
|
||||||
# ChargesForm
|
# ChargesForm
|
||||||
charge = models.FloatField(default=0,
|
charge = models.FloatField(default=0,
|
||||||
verbose_name=_(u'Teilnahmegebühr'))
|
verbose_name=_('Teilnahmegebühr'))
|
||||||
additional_costs = models.CharField(max_length=config.ADDITIONAL_COSTS_MAX_LENGTH,
|
additional_costs = models.CharField(max_length=config.ADDITIONAL_COSTS_MAX_LENGTH,
|
||||||
blank=True,
|
blank=True,
|
||||||
verbose_name=_(u'Zusätzliche Kosten'))
|
verbose_name=_('Zusätzliche Kosten'))
|
||||||
|
|
||||||
# TrainingForm
|
# TrainingForm
|
||||||
course_topic_1 = models.TextField(blank=True,
|
course_topic_1 = models.TextField(blank=True,
|
||||||
verbose_name=u'%s - %s 1' % (_(u'Kursinhalt'), _(u'Absatz')))
|
verbose_name='%s - %s 1' % (_('Kursinhalt'), _('Absatz')))
|
||||||
course_topic_2 = models.TextField(blank=True,
|
course_topic_2 = models.TextField(blank=True,
|
||||||
verbose_name=u'%s - %s 2' % (_(u'Kursinhalt'), _(u'Absatz')))
|
verbose_name='%s - %s 2' % (_('Kursinhalt'), _('Absatz')))
|
||||||
course_topic_3 = models.TextField(blank=True,
|
course_topic_3 = models.TextField(blank=True,
|
||||||
verbose_name=u'%s - %s 3' % (_(u'Kursinhalt'), _(u'Absatz')))
|
verbose_name='%s - %s 3' % (_('Kursinhalt'), _('Absatz')))
|
||||||
course_topic_4 = models.TextField(blank=True,
|
course_topic_4 = models.TextField(blank=True,
|
||||||
verbose_name=u'%s - %s 4' % (_(u'Kursinhalt'), _(u'Absatz')))
|
verbose_name='%s - %s 4' % (_('Kursinhalt'), _('Absatz')))
|
||||||
course_topic_5 = models.TextField(blank=True,
|
course_topic_5 = models.TextField(blank=True,
|
||||||
verbose_name=u'%s - %s 5' % (_(u'Kursinhalt'), _(u'Absatz')))
|
verbose_name='%s - %s 5' % (_('Kursinhalt'), _('Absatz')))
|
||||||
course_topic_6 = models.TextField(blank=True,
|
course_topic_6 = models.TextField(blank=True,
|
||||||
verbose_name=u'%s - %s 6' % (_(u'Kursinhalt'), _(u'Absatz')))
|
verbose_name='%s - %s 6' % (_('Kursinhalt'), _('Absatz')))
|
||||||
course_goal_1 = models.TextField(blank=True,
|
course_goal_1 = models.TextField(blank=True,
|
||||||
verbose_name=u'%s - %s 1' % (_(u'Kursziele'), _(u'Absatz')))
|
verbose_name='%s - %s 1' % (_('Kursziele'), _('Absatz')))
|
||||||
course_goal_2 = models.TextField(blank=True,
|
course_goal_2 = models.TextField(blank=True,
|
||||||
verbose_name=u'%s - %s 2' % (_(u'Kursziele'), _(u'Absatz')))
|
verbose_name='%s - %s 2' % (_('Kursziele'), _('Absatz')))
|
||||||
course_goal_3 = models.TextField(blank=True,
|
course_goal_3 = models.TextField(blank=True,
|
||||||
verbose_name=u'%s - %s 3' % (_(u'Kursziele'), _(u'Absatz')))
|
verbose_name='%s - %s 3' % (_('Kursziele'), _('Absatz')))
|
||||||
course_goal_4 = models.TextField(blank=True,
|
course_goal_4 = models.TextField(blank=True,
|
||||||
verbose_name=u'%s - %s 4' % (_(u'Kursziele'), _(u'Absatz')))
|
verbose_name='%s - %s 4' % (_('Kursziele'), _('Absatz')))
|
||||||
course_goal_5 = models.TextField(blank=True,
|
course_goal_5 = models.TextField(blank=True,
|
||||||
verbose_name=u'%s - %s 5' % (_(u'Kursziele'), _(u'Absatz')))
|
verbose_name='%s - %s 5' % (_('Kursziele'), _('Absatz')))
|
||||||
course_goal_6 = models.TextField(blank=True,
|
course_goal_6 = models.TextField(blank=True,
|
||||||
verbose_name=u'%s - %s 6' % (_(u'Kursziele'), _(u'Absatz')))
|
verbose_name='%s - %s 6' % (_('Kursziele'), _('Absatz')))
|
||||||
|
|
||||||
# SummaryForm
|
# SummaryForm
|
||||||
planned_publication_date = models.DateField(blank=True,
|
planned_publication_date = models.DateField(blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
verbose_name=_(u'Veröffentlichung am'))
|
verbose_name=_('Veröffentlichung am'))
|
||||||
internal_note = models.TextField(blank=True,
|
internal_note = models.TextField(blank=True,
|
||||||
verbose_name=_(u'Bearbeitungshinweis'))
|
verbose_name=_('Bearbeitungshinweis'))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def workflow(self):
|
def workflow(self):
|
||||||
@@ -240,12 +243,12 @@ class Event(models.Model):
|
|||||||
self._editor = editor
|
self._editor = editor
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _(u'Veranstaltung')
|
verbose_name = _('Veranstaltung')
|
||||||
verbose_name_plural = _(u'Veranstaltungen')
|
verbose_name_plural = _('Veranstaltungen')
|
||||||
ordering = ['first_day']
|
ordering = ['first_day']
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
return u'{number} - {title} ({date})'.format(number=self.get_number(),
|
return '{number} - {title} ({date})'.format(number=self.get_number(),
|
||||||
title=self.title,
|
title=self.title,
|
||||||
date=self.get_formated_date())
|
date=self.get_formated_date())
|
||||||
|
|
||||||
@@ -260,11 +263,11 @@ class Event(models.Model):
|
|||||||
user_model = get_user_model()
|
user_model = get_user_model()
|
||||||
username = self.trainer_email.lower()
|
username = self.trainer_email.lower()
|
||||||
if not username:
|
if not username:
|
||||||
s = self.trainer_firstname.replace(u'ß', u'ss')
|
s = self.trainer_firstname.replace('ß', 'ss')
|
||||||
s = unicodedata.normalize('NFKD', s).encode('ascii', 'ignore')
|
s = unicodedata.normalize('NFKD', s).encode('ascii', 'ignore')
|
||||||
s = re.sub(r'[^a-z-]', '', s.lower())
|
s = re.sub(r'[^a-z-]', '', s.lower())
|
||||||
username = s
|
username = s
|
||||||
s = self.trainer_familyname.replace(u'ß', u'ss')
|
s = self.trainer_familyname.replace('ß', 'ss')
|
||||||
s = unicodedata.normalize('NFKD', s).encode('ascii', 'ignore')
|
s = unicodedata.normalize('NFKD', s).encode('ascii', 'ignore')
|
||||||
s = re.sub(r'[^a-z-]', '', s.lower())
|
s = re.sub(r'[^a-z-]', '', s.lower())
|
||||||
username += '.' + s
|
username += '.' + s
|
||||||
@@ -362,7 +365,7 @@ class Event(models.Model):
|
|||||||
|
|
||||||
begin = format_date(begin_date, begin_format, locale=lang)
|
begin = format_date(begin_date, begin_format, locale=lang)
|
||||||
end = format_date(end_date, end_format, locale=lang)
|
end = format_date(end_date, end_format, locale=lang)
|
||||||
r = u'{begin} - {end}'.format(begin=begin, end=end)
|
r = '{begin} - {end}'.format(begin=begin, end=end)
|
||||||
|
|
||||||
return r
|
return r
|
||||||
|
|
||||||
@@ -376,7 +379,7 @@ class Event(models.Model):
|
|||||||
return self.get_formated_date(begin_date=begin_date, end_date=end_date, format='numeric')
|
return self.get_formated_date(begin_date=begin_date, end_date=end_date, format='numeric')
|
||||||
|
|
||||||
def get_trainer_full_name(self):
|
def get_trainer_full_name(self):
|
||||||
return u'%s %s' % (self.trainer_firstname, self.trainer_familyname)
|
return '%s %s' % (self.trainer_firstname, self.trainer_familyname)
|
||||||
|
|
||||||
def get_template_context(self, context=None):
|
def get_template_context(self, context=None):
|
||||||
if self.alt_last_day:
|
if self.alt_last_day:
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
|
from __future__ import unicode_literals
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
from ..utils import get_ghost_user, get_system_user
|
from ..utils import get_ghost_user, get_system_user
|
||||||
|
|
||||||
@@ -9,6 +11,7 @@ def get_system_user_id():
|
|||||||
return get_system_user().id
|
return get_system_user().id
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class EventFlag(models.Model):
|
class EventFlag(models.Model):
|
||||||
event = models.ForeignKey('dav_events.Event', related_name='flags')
|
event = models.ForeignKey('dav_events.Event', related_name='flags')
|
||||||
status = models.ForeignKey('dav_events.EventStatus',
|
status = models.ForeignKey('dav_events.EventStatus',
|
||||||
@@ -23,9 +26,9 @@ class EventFlag(models.Model):
|
|||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['event', 'timestamp', 'status']
|
ordering = ['event', 'timestamp', 'status']
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
s = u'{status} - {timestamp}'
|
s = '{status} - {timestamp}'
|
||||||
if self.user:
|
if self.user:
|
||||||
s += u' by user {user}'
|
s += ' by user {user}'
|
||||||
return s.format(status=self.status, timestamp=self.timestamp.strftime('%d.%m.%Y %H:%M:%S'),
|
return s.format(status=self.status, timestamp=self.timestamp.strftime('%d.%m.%Y %H:%M:%S'),
|
||||||
user=self.user)
|
user=self.user)
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
|
from __future__ import unicode_literals
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from ..validators import IdStringValidator
|
from ..validators import IdStringValidator
|
||||||
@@ -13,6 +15,7 @@ BOOTSTRAP_CONTEXT_CHOICES = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class EventStatus(models.Model):
|
class EventStatus(models.Model):
|
||||||
code = models.CharField(primary_key=True, max_length=254, validators=[IdStringValidator])
|
code = models.CharField(primary_key=True, max_length=254, validators=[IdStringValidator])
|
||||||
severity = models.IntegerField(unique=True)
|
severity = models.IntegerField(unique=True)
|
||||||
@@ -20,12 +23,12 @@ class EventStatus(models.Model):
|
|||||||
bootstrap_context = models.CharField(max_length=20, blank=True, choices=BOOTSTRAP_CONTEXT_CHOICES)
|
bootstrap_context = models.CharField(max_length=20, blank=True, choices=BOOTSTRAP_CONTEXT_CHOICES)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _(u'Veranstaltungsstatus')
|
verbose_name = _('Veranstaltungsstatus')
|
||||||
verbose_name_plural = _(u'Veranstaltungsstati')
|
verbose_name_plural = _('Veranstaltungsstati')
|
||||||
ordering = ['severity']
|
ordering = ['severity']
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
return u'{severity} - {code} ({label})'.format(code=self.code,
|
return '{severity} - {code} ({label})'.format(code=self.code,
|
||||||
severity=self.severity,
|
severity=self.severity,
|
||||||
label=self.label)
|
label=self.label)
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
import logging
|
import logging
|
||||||
import uuid
|
import uuid
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
from django.utils.translation import ugettext, ugettext_lazy as _
|
from django.utils.translation import ugettext, ugettext_lazy as _
|
||||||
|
|
||||||
from .event import Event
|
from .event import Event
|
||||||
@@ -12,6 +14,7 @@ from .event import Event
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class OneClickAction(models.Model):
|
class OneClickAction(models.Model):
|
||||||
COMMANDS = (
|
COMMANDS = (
|
||||||
('EVENT_LIST', 'login and go to event list (user id)'),
|
('EVENT_LIST', 'login and go to event list (user id)'),
|
||||||
@@ -32,14 +35,14 @@ class OneClickAction(models.Model):
|
|||||||
parameters = models.TextField(blank=True)
|
parameters = models.TextField(blank=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _(u'One-Click-Action')
|
verbose_name = _('One-Click-Action')
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
s = u'{command}({parameters}) - {description}'.format(description=self.get_command_display(),
|
s = '{command}({parameters}) - {description}'.format(description=self.get_command_display(),
|
||||||
command=self.command,
|
command=self.command,
|
||||||
parameters=self.parameters)
|
parameters=self.parameters)
|
||||||
if self.done and not self.allow_repeat:
|
if self.done and not self.allow_repeat:
|
||||||
s += u' - done'
|
s += ' - done'
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
@@ -50,7 +53,7 @@ class OneClickAction(models.Model):
|
|||||||
if self.done and not self.allow_repeat:
|
if self.done and not self.allow_repeat:
|
||||||
result['context'] = {
|
result['context'] = {
|
||||||
'status': 'warning',
|
'status': 'warning',
|
||||||
'message': ugettext(u'Diese Aktion hast du bereits ausgeführt.'),
|
'message': ugettext('Diese Aktion hast du bereits ausgeführt.'),
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@@ -77,17 +80,17 @@ class OneClickAction(models.Model):
|
|||||||
|
|
||||||
flag = event.flags.filter(status__code=status_code).first()
|
flag = event.flags.filter(status__code=status_code).first()
|
||||||
if flag:
|
if flag:
|
||||||
message = (ugettext(u'Der Status wurde bereits'
|
message = (ugettext('Der Status wurde bereits'
|
||||||
u' am %(date)s'
|
' am %(date)s'
|
||||||
u' von %(user)s'
|
' von %(user)s'
|
||||||
u' auf \'%(status)s\' gesetzt.') % {
|
' auf \'%(status)s\' gesetzt.') % {
|
||||||
'status': flag.status.label,
|
'status': flag.status.label,
|
||||||
'date': flag.timestamp.strftime('%d.%m.%Y %H:%M:%S'),
|
'date': flag.timestamp.strftime('%d.%m.%Y %H:%M:%S'),
|
||||||
'user': flag.user.get_full_name(),
|
'user': flag.user.get_full_name(),
|
||||||
})
|
})
|
||||||
else:
|
else:
|
||||||
flag = event.workflow.update_status(status_code, user)
|
flag = event.workflow.update_status(status_code, user)
|
||||||
message = (ugettext(u'Der Status wurde auf \'%(status)s\' gesetzt.') %
|
message = (ugettext('Der Status wurde auf \'%(status)s\' gesetzt.') %
|
||||||
{'status': flag.status.label})
|
{'status': flag.status.label})
|
||||||
|
|
||||||
result['context'] = {
|
result['context'] = {
|
||||||
@@ -108,7 +111,7 @@ class OneClickAction(models.Model):
|
|||||||
else:
|
else:
|
||||||
result['context'] = {
|
result['context'] = {
|
||||||
'status': 'danger',
|
'status': 'danger',
|
||||||
'message': ugettext(u'Invalid Command. Code on fire!'),
|
'message': ugettext('Invalid Command. Code on fire!'),
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|||||||
@@ -215,7 +215,7 @@ class EmailTestCase(EmailTestMixin, RoleMixin, TestCase):
|
|||||||
expected_body = EVENT_UPDATED_EMAIL_TEMPLATE.format(
|
expected_body = EVENT_UPDATED_EMAIL_TEMPLATE.format(
|
||||||
recipient_first_name=expected_recipient.first_name,
|
recipient_first_name=expected_recipient.first_name,
|
||||||
editor_full_name=editor.get_full_name(),
|
editor_full_name=editor.get_full_name(),
|
||||||
event=unicode(self.event),
|
event=self.event,
|
||||||
base_url=self.email_base_url,
|
base_url=self.email_base_url,
|
||||||
event_url=self.event.get_absolute_url(),
|
event_url=self.event.get_absolute_url(),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
import datetime
|
import datetime
|
||||||
import logging
|
import logging
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from dav_events.models.event import Event
|
from dav_events.models.event import Event
|
||||||
@@ -17,63 +19,64 @@ midnight = datetime.time(00, 00, 00)
|
|||||||
one_day = datetime.timedelta(1)
|
one_day = datetime.timedelta(1)
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Registration(models.Model):
|
class Registration(models.Model):
|
||||||
event = models.ForeignKey(Event, related_name='registrations')
|
event = models.ForeignKey(Event, related_name='registrations')
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
personal_names = models.CharField(max_length=1024,
|
personal_names = models.CharField(max_length=1024,
|
||||||
verbose_name=_(u'Vorname(n)'))
|
verbose_name=_('Vorname(n)'))
|
||||||
family_names = models.CharField(max_length=1024,
|
family_names = models.CharField(max_length=1024,
|
||||||
verbose_name=_(u'Familienname'))
|
verbose_name=_('Familienname'))
|
||||||
|
|
||||||
address = models.CharField(max_length=1024,
|
address = models.CharField(max_length=1024,
|
||||||
verbose_name=_(u'Anschrift'),
|
verbose_name=_('Anschrift'),
|
||||||
help_text=_(u'Straße, Hausnummer'))
|
help_text=_('Straße, Hausnummer'))
|
||||||
postal_code = models.CharField(max_length=254,
|
postal_code = models.CharField(max_length=254,
|
||||||
verbose_name=_(u'Postleitzahl'))
|
verbose_name=_('Postleitzahl'))
|
||||||
city = models.CharField(max_length=1024,
|
city = models.CharField(max_length=1024,
|
||||||
verbose_name=_(u'Ort'))
|
verbose_name=_('Ort'))
|
||||||
email_address = models.EmailField(verbose_name=_(u'E-Mail-Adresse'))
|
email_address = models.EmailField(verbose_name=_('E-Mail-Adresse'))
|
||||||
phone_number = models.CharField(max_length=254,
|
phone_number = models.CharField(max_length=254,
|
||||||
verbose_name=_(u'Telefonnummer'),
|
verbose_name=_('Telefonnummer'),
|
||||||
help_text=_(u'Idealerweise eine Mobilfunk-Nummer'))
|
help_text=_('Idealerweise eine Mobilfunk-Nummer'))
|
||||||
dav_number = models.CharField(max_length=62,
|
dav_number = models.CharField(max_length=62,
|
||||||
validators=[DAVNumberValidator],
|
validators=[DAVNumberValidator],
|
||||||
verbose_name=_(u'DAV Mitgliednummer'),
|
verbose_name=_('DAV Mitgliednummer'),
|
||||||
help_text=u'%s<br /> %s %s' % (
|
help_text='%s<br /> %s %s' % (
|
||||||
_(u'Deine Mitgliedsnummer findest du unter dem Strichcode'
|
_('Deine Mitgliedsnummer findest du unter dem Strichcode'
|
||||||
u' auf deinem DAV Ausweis.'),
|
' auf deinem DAV Ausweis.'),
|
||||||
_(u'Beispiel: <tt>131/00/012345</tt>'),
|
_('Beispiel: <tt>131/00/012345</tt>'),
|
||||||
_(u'(der Teil bis zum ersten * genügt)'),
|
_('(der Teil bis zum ersten * genügt)'),
|
||||||
))
|
))
|
||||||
emergency_contact = models.TextField(blank=True,
|
emergency_contact = models.TextField(blank=True,
|
||||||
verbose_name=_(u'Notfall-Kontakt'),
|
verbose_name=_('Notfall-Kontakt'),
|
||||||
help_text=_(u'Name und Telefonnummer bzw. Anschrift,'
|
help_text=_('Name und Telefonnummer bzw. Anschrift,'
|
||||||
u' die in Notfällen informiert werden soll.'))
|
' die in Notfällen informiert werden soll.'))
|
||||||
experience = models.TextField(blank=True,
|
experience = models.TextField(blank=True,
|
||||||
verbose_name=_(u'Erfahrung'),
|
verbose_name=_('Erfahrung'),
|
||||||
help_text=_(u'Welche Touren oder Kurse hast du bereits gemacht?'))
|
help_text=_('Welche Touren oder Kurse hast du bereits gemacht?'))
|
||||||
note = models.TextField(blank=True,
|
note = models.TextField(blank=True,
|
||||||
verbose_name=_(u'Anmerkung'),
|
verbose_name=_('Anmerkung'),
|
||||||
help_text=u'%s<br /> %s' % (
|
help_text='%s<br /> %s' % (
|
||||||
_(u'Wissenswertes für den Tourenleiter, z.B. Allergien,'
|
_('Wissenswertes für den Tourenleiter, z.B. Allergien,'
|
||||||
u' gesundheitliche Einschränkungen, ...'),
|
' gesundheitliche Einschränkungen, ...'),
|
||||||
_(u'Kann frei gelassen werden.'))
|
_('Kann frei gelassen werden.'))
|
||||||
)
|
)
|
||||||
|
|
||||||
privacy_policy = models.TextField(blank=True,
|
privacy_policy = models.TextField(blank=True,
|
||||||
verbose_name=_(u'Erklärung zur Datenspeicherung'))
|
verbose_name=_('Erklärung zur Datenspeicherung'))
|
||||||
privacy_policy_accepted = models.BooleanField(default=False,
|
privacy_policy_accepted = models.BooleanField(default=False,
|
||||||
verbose_name=_(u'Einwilligung zur Datenspeicherung'))
|
verbose_name=_('Einwilligung zur Datenspeicherung'))
|
||||||
purge_at = models.DateTimeField()
|
purge_at = models.DateTimeField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _(u'Anmeldung')
|
verbose_name = _('Anmeldung')
|
||||||
verbose_name_plural = _(u'Anmeldungen')
|
verbose_name_plural = _('Anmeldungen')
|
||||||
ordering = ['created_at']
|
ordering = ['created_at']
|
||||||
|
|
||||||
def __unicode__(self):
|
def __str__(self):
|
||||||
return u'{number} - {name} ({created} - {purge})'.format(number=self.event.get_number(),
|
return '{number} - {name} ({created} - {purge})'.format(number=self.event.get_number(),
|
||||||
name=self.get_full_name(),
|
name=self.get_full_name(),
|
||||||
created=self.created_at.strftime('%d.%m.%Y %H:%M'),
|
created=self.created_at.strftime('%d.%m.%Y %H:%M'),
|
||||||
purge=self.purge_at.strftime('%d.%m.%Y %H:%M'))
|
purge=self.purge_at.strftime('%d.%m.%Y %H:%M'))
|
||||||
@@ -82,7 +85,7 @@ class Registration(models.Model):
|
|||||||
return reverse('dav_registration:registered')
|
return reverse('dav_registration:registered')
|
||||||
|
|
||||||
def get_full_name(self):
|
def get_full_name(self):
|
||||||
return u'{} {}'.format(self.personal_names, self.family_names)
|
return '{} {}'.format(self.personal_names, self.family_names)
|
||||||
|
|
||||||
def save(self, **kwargs):
|
def save(self, **kwargs):
|
||||||
creating = False
|
creating = False
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
from test_suite import TestSuite
|
from .test_suite import TestSuite
|
||||||
test_suite = TestSuite()
|
test_suite = TestSuite()
|
||||||
|
|||||||
Reference in New Issue
Block a user