UPD: try to make trainers happy. registration is is now hex coded. made

clear, that attendance is not guaranteed.
This commit is contained in:
2019-04-24 15:17:13 +02:00
parent f942d2ce56
commit 506abd02c8
7 changed files with 64 additions and 28 deletions

View File

@@ -71,16 +71,33 @@ class Registration(models.Model):
verbose_name=_('Einwilligung zur Datenspeicherung'))
purge_at = models.DateTimeField()
@staticmethod
def pk2hexstr(pk):
return hex(pk * 113)[2:] # 113 has no meaning, but it produce nice looking hex codes.
@staticmethod
def hexstr2pk(hexstr):
return int('0x' + hexstr, 0) // 113
@property
def hexstr(self):
if not self.pk:
return None
return self.pk2hexstr(self.pk)
class Meta:
verbose_name = _('Anmeldung')
verbose_name_plural = _('Anmeldungen')
ordering = ['created_at']
def __str__(self):
return '{number} - {name} ({created} - {purge})'.format(number=self.event.get_number(),
name=self.get_full_name(),
created=self.created_at.strftime('%d.%m.%Y %H:%M'),
purge=self.purge_at.strftime('%d.%m.%Y %H:%M'))
return '{eventnumber} - {name} ({registration_id} - {created} - {purge})'.format(
eventnumber=self.event.get_number(),
name=self.get_full_name(),
registration_id=self.hexstr,
created=self.created_at.strftime('%d.%m.%Y %H:%M'),
purge=self.purge_at.strftime('%d.%m.%Y %H:%M')
)
def get_absolute_url(self):
return reverse('dav_registration:registered')

View File

@@ -3,15 +3,17 @@ Hallo {{ registration.get_full_name }},
wir haben deine Anmeldung zur Veranstaltung
{{ event.number }} - {{ event.title }}
an den/die Tourenleiter/in {{ event.get_trainer_full_name }} weitergegeben.
{{ event.trainer_firstname }} wird sich bei dir melden und dir mitteilen,
ob du teilnehmen kannst oder nicht.
!!! Diese E-Mail ist noch keine Zusage zur Teilnahme !!!
{{ event.trainer_firstname }} wird sich bei dir melden und dir zu- oder absagen.
========================================================================
Veranstaltung: {{ event.number }} - {{ event.title }}
Datum: {{ event.get_formated_date }}
Tourenleitung: {{ event.get_trainer_full_name }}
Anmeldezeitpunkt: {{ registration.created_at|date:'l, d. F Y, G:i' }}
Referenz-Nr: {{ registration.id }}
Vorgang: {{ registration.hexstr }} (wird nur gebraucht, wenn irgendwas schief geht)
Personendaten
-------------

View File

@@ -4,7 +4,7 @@ Anmeldung zu deiner Veranstaltung
{{ event.number }} - {{ event.title }}
========================================================================
Anmeldezeitpunkt: {{ registration.created_at|date:'l, d. F Y, G:i' }}
Referenz-Nr: {{ registration.id }}
Vorgang: {{ registration.hexstr }}
Teilnehmer*in:
{{ registration.get_full_name }}

View File

@@ -10,11 +10,13 @@
<p>
Du solltest in Kürze eine E-Mail von uns mit deinen Anmeldedaten erhalten.
</p>
<p>
Diese E-Mail gilt <strong>noch nicht als Zusage</strong> zur Teilnahme.
<p class="lead">
Diese Nachricht gilt <strong>noch nicht als Zusage</strong> zur Teilnahme.
</p>
<p>
Die Tourenleitung wurde über deine Anmeldung informiert und wird sich bei dir melden.
Ob du teilnehmen kannst, muss die Tourenleitung entscheiden.
Möglicherweise sind bereits alle Teilnehmerplätze vergeben.
Der/die Tourenleiter/in wurde über deine Anmeldung informiert und wird sich bei dir melden.
</p>
</div>
{% if object %}
@@ -26,9 +28,9 @@
<li class="list-group-item">Datum: {{ object.event.get_formated_date }}</li>
<li class="list-group-item">Tourenleitung: {{ object.event.get_trainer_full_name }} (<a href="{{ object.event.trainer_email }}">{{ object.event.trainer_email }}</a>)</li>
<li class="list-group-item">Anmeldezeitpunkt: {{ object.created_at|date:'l, d. F Y, G:i' }}</li>
<li class="list-group-item">Anmeldenummer: {{ object.pk }}</li>
<li class="list-group-item">Speicherung bis: {{ object.purge_at|date:'l, d. F Y' }}</li>
<li class="list-group-item">Teilnehmer*in: {{ object.get_full_name }} ({{ object.email_address }})</li>
<li class="list-group-item">Vorgang: {{ object.hexstr }} <small>(wird nur gebraucht, wenn irgendwas schief geht)</small></li>
</ul>
</div>
{% else %}

View File

@@ -87,7 +87,7 @@
{% endif %}
<div class="checkbox">
<label>
<input type="checkbox" name="privacy_policy_accepted" {% if form.privacy_policy_accepted.value %}checked="checked"{% endif %}">
<input type="checkbox" name="privacy_policy_accepted" {% if form.privacy_policy_accepted.value %}checked="checked"{% endif %}>
{% trans 'Ich willige in die oben erläuterte Datenspeicherung ein.' %}
</label>
</div>
@@ -104,6 +104,28 @@
</div>
{% endblock form-fields-visible %}
{% endblock form-fields %}
<div class="row">
<div class="col-sm-12">
<h5>Teilnahmevorbehalt</h5>
<div class="well well-sm">
<p><small>
<strong>
Die erfolgreiche Anmeldung bedeutet nicht, dass du auf jeden Fall
an der Tour oder dem Kurs teilnehmen kannst.
</strong>
<br />
Bei vielen Veranstaltungen wollen mehr Mitglieder teilnehmen,
als der oder die Tourenleiter/innen mitnehmen können.
Zudem muss die Tourenleitung erst noch entscheiden, ob du
die erforderlichen Anforderungen zur Teilnahme erfüllst
(evtl. wird er/sie sich dafür bei dir melden).
Die Plätze werden daher nicht unbedingt nach dem first-come-first-serve-Prinzip vergeben.
<br/>
Der/die Tourenleiter/in wird dir also persönlich per E-Mail zu- oder absagen.
</small></p>
</div>
</div>
</div>
<div class="row">&nbsp;</div>
{% block form-buttons %}
{% buttons %}

View File

@@ -16,15 +16,17 @@ MAIL_SELF_TEMPLATE = """Hallo {participant_full_name},
wir haben deine Anmeldung zur Veranstaltung
{event_number} - {event_title}
an den/die Tourenleiter/in {trainer_full_name} weitergegeben.
{trainer_first_name} wird sich bei dir melden und dir mitteilen,
ob du teilnehmen kannst oder nicht.
!!! Diese E-Mail ist noch keine Zusage zur Teilnahme !!!
{trainer_first_name} wird sich bei dir melden und dir zu- oder absagen.
========================================================================
Veranstaltung: {event_number} - {event_title}
Datum: {event_formated_date}
Tourenleitung: {trainer_full_name}
Anmeldezeitpunkt: {registration_at}
Referenz-Nr: {registration_id}
Vorgang: {registration_hexstr} (wird nur gebraucht, wenn irgendwas schief geht)
Personendaten
-------------
@@ -59,7 +61,7 @@ Anmeldung zu deiner Veranstaltung
{event_number} - {event_title}
========================================================================
Anmeldezeitpunkt: {registration_at}
Referenz-Nr: {registration_id}
Vorgang: {registration_hexstr}
Teilnehmer*in:
{participant_full_name}
@@ -128,7 +130,7 @@ class EmailsTestCase(EmailTestMixin, EventMixin, RegistrationMixin, TestCase):
event_formated_date=event.get_formated_date(),
trainer_full_name=trainer.get_full_name(),
trainer_first_name=trainer.first_name,
registration_id=registration.id,
registration_hexstr=registration.hexstr,
registration_at=format_datetime(registration.created_at, 'EEEE, dd. MMMM yyyy, H:mm', locale=locale),
purge_at=format_datetime(registration.purge_at, 'EEEE, dd. MMMM yyyy', locale=locale),
)
@@ -223,7 +225,7 @@ class EmailsTestCase(EmailTestMixin, EventMixin, RegistrationMixin, TestCase):
event_title=event.title,
event_formated_date=event.get_formated_date(),
trainer_first_name=trainer.first_name,
registration_id=registration.id,
registration_hexstr=registration.hexstr,
registration_at=format_datetime(registration.created_at, 'EEEE, dd. MMMM yyyy, H:mm', locale=locale),
purge_at=format_datetime(registration.purge_at, 'EEEE, dd. MMMM yyyy', locale=locale),
)

View File

@@ -66,16 +66,7 @@ class RegistrationView(generic.CreateView):
model = Registration
form_class = RegistrationForm
initial = {
# 'personal_names': u'Jens',
# 'family_names': u'Kleineheismann',
# 'address': u'Am Fächerbad 2',
# 'postal_code': u'76131',
# 'city': u'Karlsruhe',
# 'email_address': 'heinzel@alpenverein-karlsruhe.de',
# 'note': u'Nur ein Test.',
'dav_number': '131/00/',
# 'experience': u'Ich kann alles.',
# 'privacy_policy_accepted': True,
}
def get_queryset(self):