UPD: added app to submit participant registrations.

This commit is contained in:
2019-02-08 16:44:53 +01:00
parent b3abadf2a8
commit f1a97c66a0
49 changed files with 1156 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
{% extends "dav_base/base.html" %}
{% block head-title %}Touren und Kurse - {{ block.super }}{% endblock %}

View File

@@ -0,0 +1,40 @@
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.
========================================================================
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' }}
Anmeldenummer: {{ registration.id }}
Personendaten
-------------
{{ registration.get_full_name }}
{{ registration.address }}
{{ registration.postal_code }} {{ registration.city }}
Telefon: {{ registration.phone_number }}
E-Mail: {{ registration.email_address }}
DAV Mitgliedsnummer: {{ registration.dav_number }}
Notfall-Kontakt
---------------
{% if registration.emergency_contact %}{{ registration.emergency_contact }}{% else %}-{% endif %}
Erfahrung
---------
{% if registration.experience %}{{ registration.experience }}{% else %}-{% endif %}
Anmerkung
---------
{% if registration.note %}{{ registration.note }}{% else %}-{% endif %}
Erklärung zur Datenspeicherung
------------------------------
{% if registration.privacy_policy %}{{ registration.privacy_policy }}{% else %}-{% endif %}
Zeitpunkt der Datenlöschung: {{ registration.purge_at|date:'l, d. F Y' }}

View File

@@ -0,0 +1,42 @@
Hallo {{ recipient.first_name }},
Anmeldung zu deiner Veranstaltung {{ event.number }}
{{ event.title }}
========================================================================
Anmeldezeitpunkt: {{ registration.created_at|date:'l, d. F Y, G:i' }}
Anmeldenummer: {{ registration.id }}
Teilnehmer*in
-------------
{{ registration.get_full_name }}
Telefonnummer und E-Mail-Adresse
--------------------------------
{{ registration.phone_number }}
{{ registration.email_address }}
Erfahrung
---------
{% if registration.experience %}{{ registration.experience }}{% else %}-{% endif %}
Anmerkung
---------
{% if registration.note %}{{ registration.note }}{% else %}-{% endif %}
Personendaten
-------------
{{ registration.get_full_name }}
{{ registration.address }}
{{ registration.postal_code }} {{ registration.city }}
Telefon: {{ registration.phone_number }}
E-Mail: {{ registration.email_address }}
DAV Mitgliedsnummer: {{ registration.dav_number }}
Notfall-Kontakt
---------------
{% if registration.emergency_contact %}{{ registration.emergency_contact }}{% else %}-{% endif %}
Erklärung zur Datenspeicherung
------------------------------
{% if registration.privacy_policy %}{{ registration.privacy_policy }}{% else %}-{% endif %}
Zeitpunkt der Datenlöschung: {{ registration.purge_at|date:'l, d. F Y' }}

View File

@@ -0,0 +1,119 @@
{% load i18n %}
{% if event.requirements %}
<strong>{% trans 'Anforderungen' %}:</strong> {{ event.requirements }}<br />
{% endif %}
{% if event.equipment %}
<strong>{% trans 'Ausrüstung' %}:</strong> {{ event.equipment }}<br />
{% endif %}
{% if event.location %}
<strong>{% trans 'Ort' %}:</strong> {{ event.location }}
{% if event.country and event.country != 'DE' and event.country != 'XX' %}({{ event.country }}){% endif %}<br />
{% endif %}
{% if event.basecamp %}
<strong>{% trans 'Stützpunkt' %}:</strong> {{ event.basecamp }}<br />
{% endif %}
{% if event.accommodation and event.accommodation != 'NONE' %}
<strong>{% trans 'Unterkunft' %}:</strong>
{% if event.accommodation == 'OTHER' %}
{{ event.accommodation_other }}
{% else %}
{{ event.get_accommodation_display }}
{% endif %}
<br />
{% endif %}
{% if event.meals and event.meals != 'NONE' %}
<strong>{% trans 'Verpflegung' %}:</strong>
{% if event.meals == 'OTHER' %}
{{ event.meals_other }}
{% else %}
{{ event.get_meals_display }}
{% endif %}
<br />
{% endif %}
{% if event.transport and event.transport != 'NONE' and event.transport != 'public' %}
<strong>{% trans 'Hin- / Rückfahrt' %}:</strong>
{% if event.transport == 'OTHER' %}
{{ event.transport_other }}
{% else %}
{{ event.get_transport_display }}
{% endif %}
<br />
{% endif %}
{% if event.meeting_point and event.meeting_point != 'NONE' %}
<strong>{% trans 'Treffpunkt' %}:</strong>
{% if event.meeting_time %}
{{ event.meeting_time|time:'G:i'|cut:':00' }} Uhr,
{% endif %}
{% if event.meeting_point == 'OTHER' %}
{{ event.meeting_point_other }}
{% else %}
{{ event.get_meeting_point_display }}
{% endif %}
<br />
{% endif %}
{% if event.transport == 'public' %}
{% if event.departure_time or event.departure_ride %}
<strong>{% trans 'Abfahrt' %}:</strong>
{% if event.departure_time %}{{ event.departure_time|time:'G:i'|cut:':00' }} Uhr{% endif %}{% if event.departure_time and event.departure_ride %}, {% endif %}{%if event.departure_ride %}{{ event.departure_ride }}{% endif %}
<br />
{% endif %}
{% endif %}
{% if event.return_departure_time or event.return_arrival_time %}
<strong>{% trans 'Rückfahrt' %}:</strong>
{% if event.return_arrival_time %}{{ event.return_arrival_time|time:'G:i'|cut:':00' }} Uhr ({% trans 'Ankunft in' %} Karlsruhe)
{% elif event.return_departure_time %}{{ event.return_departure_time|time:'G:i'|cut:':00' }} Uhr ({% trans 'Abfahrt am Tourenort' %})
{% endif %}
<br />
{% endif %}
{% if event.pre_meeting_1 %}
{% if event.pre_meeting_2 %}
<strong>{% trans 'Vortreffen' %} 1:</strong> {{ event.pre_meeting_1|date:'l, d. F Y, G:i'|cut:':00' }} {% trans 'Uhr' %}, DAV {% trans 'Sektionszentrum' %}<br />
<strong>{% trans 'Vortreffen' %} 2:</strong> {{ event.pre_meeting_2|date:'l, d. F Y, G:i'|cut:':00' }} {% trans 'Uhr' %}, DAV {% trans 'Sektionszentrum' %}<br />
{% else %}
<strong>{% trans 'Vortreffen' %}:</strong> {{ event.pre_meeting_1|date:'l, d. F Y, G:i'|cut:':00' }} {% trans 'Uhr' %}, DAV {% trans 'Sektionszentrum' %}<br />
{% endif %}
{% endif %}
{% if event.min_participants > 0 or event.max_participants > 0 %}
<strong>{% trans 'Teilnehmerzahl' %}:</strong>
{% if event.min_participants == event.max_participants %}
{{ event.max_participants }} {% trans 'Teilnehmer' %}
{% elif event.min_participants > 0 and event.max_participants > 0 %}
{{ event.min_participants }} - {{ event.max_participants }} {% trans 'Teilnehmer' %}
{% elif event.min_participants > 0 %}
min. {{ event.min_participants }} {% trans 'Teilnehmer' %}
{% else %}
max. {{ event.max_participants }} {% trans 'Teilnehmer' %}
{% endif %}
<br />
{% endif %}
{% if event.charge > 0 or event.additional_costs %}
<strong>{% trans 'Kosten' %}:</strong>
{% if event.charge > 0 %}
{{ event.charge|floatformat:'-2' }} € {% trans 'Teilnahmegebühr' %}
{% endif %}
{% if event.additional_costs %}
{% if event.charge > 0 %}{% trans 'zzgl.' %}{% endif %}
{{ event.additional_costs }}
{% endif %}
<br />
{% endif %}
{% if event.registration_required and event.deadline %}<strong>{% trans 'Anmeldeschluss' %}:</strong> {{ event.deadline|date:'l, d. F Y' }}<br />{% endif %}
{% if event.trainer_2_fullname %}
{% if event.mode == 'training' %}
<strong>{% trans 'Ausbildungsteam' %}:</strong>
{% else %}
<strong>{% trans 'Team' %}:</strong>
{% endif %}
{{ event.trainer_firstname }} {{ event.trainer_familyname }},
{{ event.trainer_2_fullname }}{% if event.trainer_3_fullname %},
{{ event.trainer_3_fullname }}{% endif %}
<br />
{% endif %}
{% if event.trainer_familyname %}
<strong>{% trans 'Leitung' %}:</strong>
{{ event.trainer_firstname }} {{ event.trainer_familyname }}
{% if event.trainer_email or event.trainer_phone %}
({% if event.trainer_email %}<a href="mailto:{{ event.trainer_email }}">{{ event.trainer_email }}</a>{% endif %}{% if event.trainer_email and event.trainer_phone %}, {% endif %}{% if event.trainer_phone %}{{ event.trainer_phone }}{% endif %})
{% endif %}
{% endif %}

View File

@@ -0,0 +1,52 @@
{% load i18n %}
<p>
<em>{{ event.description|urlize|linebreaksbr }}</em>
</p>
{% if event.mode == 'training' %}
<div>
<p><strong>{% trans 'Kursinhalte' %}:</strong></p>
{% if event.course_topic_2 %}
<ul>
<li>{{ event.course_topic_1|urlize }}</li>
<li>{{ event.course_topic_2|urlize }}</li>
{% if event.course_topic_3 %}
<li>{{ event.course_topic_3|urlize }}</li>
{% endif %}
{% if event.course_topic_4 %}
<li>{{ event.course_topic_4|urlize }}</li>
{% endif %}
{% if event.course_topic_5 %}
<li>{{ event.course_topic_5|urlize }}</li>
{% endif %}
{% if event.course_topic_6 %}
<li>{{ event.course_topic_6|urlize }}</li>
{% endif %}
</ul>
{% else %}
<p>{{ event.course_topic_1|urlize|linebreaksbr }}</p>
{% endif %}
</div>
<div>
<p><strong>{% trans 'Kursziele' %}:</strong></p>
{% if event.course_goal_2 %}
<ul>
<li>{{ event.course_goal_1|urlize }}</li>
<li>{{ event.course_goal_2|urlize }}</li>
{% if event.course_goal_3 %}
<li>{{ event.course_goal_3|urlize }}</li>
{% endif %}
{% if event.course_goal_4 %}
<li>{{ event.course_goal_4|urlize }}</li>
{% endif %}
{% if event.course_goal_5 %}
<li>{{ event.course_goal_5|urlize }}</li>
{% endif %}
{% if event.course_goal_6 %}
<li>{{ event.course_goal_6|urlize }}</li>
{% endif %}
</ul>
{% else %}
<p>{{ event.course_goal_1|urlize|linebreaksbr }}</p>
{% endif %}
</div>
{% endif %}

View File

@@ -0,0 +1,36 @@
{% extends 'dav_registration/base.html' %}
{% load i18n %}
{% load dav_registration %}
{% block head-title %}{{ event.number }} - {{ block.super }}{% endblock head-title %}
{% block page-container-fluid %}
<div class="row">
<div class="col-sm-12">
<div class="panel panel-default">
<div class="panel-heading">
<span class="panel-title">{{ event.number }} - {{ event.title }}</span>
</div>
<ul class="list-group">
<li class="list-group-item">
<strong>{{ event.get_formated_date }}</strong>
{% if event.get_alt_formated_date %}
<br />
<strong>({% trans 'Ersatztermin' %}: {{ event.get_alt_formated_date }})</strong>
{% endif %}
</li>
<li class="list-group-item">
{% render_event_paragraphs event %}
</li>
<li class="list-group-item">
{% render_event_facts event %}
</li>
<li class="list-group-item">
<a class="btn btn-primary" href="{% url 'dav_registration:register' event.pk %}">{% trans 'Anmelden' %}</a>
<a class="btn btn-danger" href="{% url 'dav_registration:events' %}">{% trans 'Zurück' %}</a>
</li>
</ul>
</div>
</div>
</div>
{% endblock page-container-fluid %}

View File

@@ -0,0 +1,103 @@
{% extends 'dav_registration/base.html' %}
{% load static %}
{% load i18n %}
{% load dav_registration %}
{% block page-container-fluid %}
<div>
<h3>Touren & Kurse</h3>
<table id="objects_table" class="table table-bordered table-hover">
<thead>
<tr>
<th><input type="text" id="searchfield" placeholder="{% trans 'Suche' %}"></th>
</tr>
</thead>
<tbody>
{% for event in event_list %}
<tr>
<td>
<div class="pull-right" style="margin-left: 2em;">
<a role="button" id="controlCollapseDetails{{ event.id }}" data-toggle="collapse"
href="#collapseDetails{{ event.id }}"
aria-expanded="false" aria-controls="collapseDetails{{ event.id }}">
<span title="{% trans 'Details aufklappen' %}" class="glyphicon glyphicon-chevron-down"></span>
</a>
</div>
<div class="pull-right" style="margin-left: 1em;">
<a class="btn btn-primary" href="{% url 'dav_registration:event' event.pk %}">Details & Anmeldung</a>
</div>
<div class="pull-left" style="margin-right: 12px;">
{% with event.sport as sport %}
{% with 'dav_registration/img/sport_icons/'|add:sport|add:'.png' as icon %}
<img src="{% static icon %}" width="48px"
alt="{{ event.get_sport_display }}" title="{{ event.get_sport_display }}">
<span class="hidden">{{ event.get_sport_display }}</span>
{% endwith %}
{% endwith %}
</div>
<div>
<strong>
{{ event.get_number }} - {{ event.title }}
</strong>
<p>
{{ event.get_formated_date }}
{% if event.get_alt_formated_date %}
<br />({% trans 'Ersatztermin' %}: {{ event.get_alt_formated_date }})
{% endif %}
</p>
<div class="panel panel-default collapse" id="collapseDetails{{ event.id }}" style="margin-top: 2ex;">
<ul class="list-group">
<li class="list-group-item">
{% render_event_paragraphs event %}
</li>
<li class="list-group-item">
{% render_event_facts event %}
</li>
<li class="list-group-item">
<a class="btn btn-primary" href="{% url 'dav_registration:event' event.pk %}">zur Anmeldung</a>
</li>
</ul>
</div>
</div>
<script>
$("#collapseDetails{{ event.id }}").on("shown.bs.collapse", function() {
icon = $("#controlCollapseDetails{{ event.id }}").find(".glyphicon")
icon.removeClass("glyphicon-chevron-down").addClass("glyphicon-chevron-up");
icon.attr("title", "{% trans 'Details verbergen' %}");
});
$("#collapseDetails{{ event.id }}").on("hidden.bs.collapse", function() {
icon = $("#controlCollapseDetails{{ event.id }}").find(".glyphicon")
icon.removeClass("glyphicon-chevron-up").addClass("glyphicon-chevron-down");
icon.attr("title", "{% trans 'Details aufklappen' %}");
});
</script>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<script type="text/javascript">
$(document).ready( function () {
var table = $("#objects_table").DataTable( {
ordering: false,
paging: false,
language: {
search: "{% trans 'Suche' %}:",
info: "{% trans 'Zeige _TOTAL_ Einträge' %}",
infoFiltered: "{% trans 'aus insgesamt _MAX_ Einträgen' %}",
infoEmpty: "{% trans 'Zeige 0 Einträge' %}",
infoPostFix: ".",
emptyTable: "{% trans 'Keine Daten vorhanden.' %}",
zeroRecords: "{% trans 'Keine passenden Einträge.' %}",
}
} );
$("#searchfield").on( "keyup change", function() {
table
.search( this.value )
.draw();
} );
$("#objects_table_filter").hide();
} );
</script>
</div>
{% endblock page-container-fluid %}

View File

@@ -0,0 +1,44 @@
{% extends 'dav_registration/base.html' %}
{% load bootstrap3 %}
{% load i18n %}
{% load dav_registration %}
{% block head-title %}Anmeldung abgeschickt - {{ block.super }}{% endblock head-title %}
{% block page-container-fluid %}
<div class="well">
<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>
<p>
Die Tourenleitung wurde über deine Anmeldung informiert und wird sich bei dir melden.
</p>
</div>
{% if object %}
<div class="panel panel-default">
<div class="panel-heading">
Anmeldung zu <strong>{{ object.event.number }} - {{ object.event.title }}</strong>
</div>
<ul class="list-group">
<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>
</ul>
</div>
{% else %}
<div class="alert alert-danger" role="alert">
Äh, ich bin mir gerade nicht sicher, wo ich bin.
Hast du auf <i>Reload</i>, <i>Aktualisieren</i>, <i>Neu laden</i> oder sonst was geklickt?
</div>
{% endif %}
<a class="btn btn-primary" href="{% url 'dav_registration:events' %}">
{% bootstrap_icon 'list' %}&thinsp;
{% trans 'zurück zur Tourenliste' %}
</a>
{% endblock page-container-fluid %}

View File

@@ -0,0 +1,123 @@
{% extends "dav_registration/base.html" %}
{% load bootstrap3 %}
{% load i18n %}
{% block head-title %}{% block form-title %}{% trans 'Anmeldung' %} - {{ event.number }}{% endblock form-title %} - {{ block.super }}{% endblock head-title %}
{% block page-container-fluid %}
<h3>{% trans 'Anmeldung' %}</h3>
<form>
<div class="form-group">
<label class="control-label" for="event">{% trans 'Veranstaltung' %}</label>
<input id="event" class="form-control" type="text" value="{{ event }}" readonly>
</div>
</form>
{% block form-errors %}
{% bootstrap_form_errors form %}
{% endblock form-errors %}
{% block form %}
<form action="" method="post">
{% block form-content %}
{% csrf_token %}
{% block form-fields %}
{% block form-fields-hidden %}
{% for field in form.hidden_fields %}
{{ field }}
{% endfor %}
{% endblock form-fields-hidden %}
{% block form-fields-visible %}
<div class="row">
<div class="col-sm-6">
{% bootstrap_field form.personal_names %}
</div>
<div class="col-sm-6">
{% bootstrap_field form.family_names %}
</div>
</div>
<div class="row">
<div class="col-sm-12">
{% bootstrap_field form.address %}
</div>
</div>
<div class="row">
<div class="col-sm-4">
{% bootstrap_field form.postal_code %}
</div>
<div class="col-sm-8">
{% bootstrap_field form.city %}
</div>
</div>
<div class="row">
<div class="col-sm-6">
{% bootstrap_field form.email_address %}
</div>
<div class="col-sm-6">
{% bootstrap_field form.phone_number %}
</div>
</div>
<div class="row">
<div class="col-sm-6">
{% bootstrap_field form.dav_number %}
</div>
<div class="col-sm-6">
{% bootstrap_field form.emergency_contact %}
</div>
</div>
<div class="row">
<div class="col-sm-6">
{% bootstrap_field form.experience %}
</div>
<div class="col-sm-6">
{% bootstrap_field form.note %}
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="form-group">
<label class="control-label" for="privacy_policy">{% trans 'Erklärung zur Datenspeicherung' %}</label>
<div id="privacy_policy" class="well well-sm form-control-static">
<p>
<small>{{ privacy_policy|linebreaksbr }}</small>
</p>
<small>{% trans 'Zeitpunkt der Löschung' %}: {{ purge_at|date:'l, d. F Y' }}</small>
</div>
</div>
{% if form.privacy_policy_accepted.errors %}
<div class="has-error">
{% endif %}
<div class="checkbox">
<label>
<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>
{% if form.privacy_policy_accepted.errors %}
<div class="help-block">
{% for error in form.privacy_policy_accepted.errors %}
<p>{{ error }}</p>
{% endfor %}
</div>
</div>
{% endif %}
</div>
</div>
{% endblock form-fields-visible %}
{% endblock form-fields %}
<div class="row">&nbsp;</div>
{% block form-buttons %}
{% buttons %}
<button type="submit" class="btn btn-success">
{% bootstrap_icon 'ok' %}&thinsp;
{% trans 'Anmeldung abschicken' %}
</button>
<a class="btn btn-danger" href="{% url 'dav_registration:event' event.pk %}">
{% bootstrap_icon 'remove' %}&thinsp;
{% trans 'Zurück' %}
</a>
{% endbuttons %}
{% endblock form-buttons %}
{% endblock form-content %}
</form>
{% endblock form %}
{% endblock page-container-fluid %}