Reduced participant fee: added toggle buttons within office views and
All checks were successful
buildbot/tox Build done.

improved html
This commit is contained in:
2020-12-18 11:48:10 +01:00
parent dab2e5cb76
commit cbc3df97c1
5 changed files with 104 additions and 40 deletions

View File

@@ -210,6 +210,17 @@
<form action="" method="post" class="form-inline"> <form action="" method="post" class="form-inline">
{% csrf_token %} {% csrf_token %}
<input type="hidden" name="id" value="{{ participant.id }}"> <input type="hidden" name="id" value="{{ participant.id }}">
{% if event.charge and has_permission_payment %}
<button name="action" value="toggle_reduced_fee"
title="{% trans 'Hier klicken, um zwischen voller und reduzierter Teilnahmegebühr umzuschalten' %}"
class="btn btn-link no-padding">
<span class="text-primary">
{% if participant.apply_reduced_fee %}{% bootstrap_icon 'check' %}{% else %}{% bootstrap_icon 'unchecked' %}{% endif %}
Reduzierte Teilnamegebühr
</span>
</button>
&nbsp;
{% endif %}
{% if has_permission_update_participants %} {% if has_permission_update_participants %}
<button name="action" value="moveup_participant" <button name="action" value="moveup_participant"
title="{% trans 'Nach oben verschieben' %}" title="{% trans 'Nach oben verschieben' %}"
@@ -229,30 +240,35 @@
{% endif %} {% endif %}
{% if event.charge and participant.paid and has_permission_payment %} {% if event.charge and participant.paid and has_permission_payment %}
&nbsp; &nbsp;
<span class="text-success"><strong>{% if participant.apply_reduced_fee %}%{% else %}&emsp;{% endif %}</strong></span><button <span class="text-success {% if not participant.apply_reduced_fee %}invisible{% endif %}"
title="{% trans 'Reduzierte Teilnahmegebühr' %}"><strong>%</strong></span><button
name="action" value="revoke_payment" name="action" value="revoke_payment"
title="{% trans 'Geldeingang wurde bestätigt' %} - {% trans 'Bestätigung des Geldeingangs zurückziehen' %}" title="{% trans 'Geldeingang wurde bestätigt' %} - {% trans 'Bestätigung des Geldeingangs zurückziehen' %}"
class="btn btn-link no-padding"><span class="text-success">{% bootstrap_icon 'piggy-bank' %}</span></button> class="btn btn-link no-padding"><span class="text-success">{% bootstrap_icon 'piggy-bank' %}</span></button>
{% elif event.charge and participant.paid %} {% elif event.charge and participant.paid %}
&nbsp; &nbsp;
<span class="text-success" title="{% trans 'Geldeingang bestätigt' %}"> <span class="text-success {% if not participant.apply_reduced_fee %}invisible{% endif %}"
<strong>{% if participant.apply_reduced_fee %}%{% else %}&emsp;{% endif %}</strong>{% bootstrap_icon 'piggy-bank' %} title="{% trans 'Reduzierte Teilnahmegebühr' %}"><strong>%</strong></span><span
</span> class="text-success"
title="{% trans 'Geldeingang bestätigt' %}">{% bootstrap_icon 'piggy-bank' %}</span>
{% elif event.charge and has_permission_payment %} {% elif event.charge and has_permission_payment %}
&nbsp; &nbsp;
<span class="text-danger"><strong>{% if participant.apply_reduced_fee %}%{% elif participant.created_at|date:'U' < '1608764400' %}? {% else %}&emsp;{% endif %}</strong></span><button <span class="text-danger {% if not participant.apply_reduced_fee and participant.created_at|date:'U' > '1608764400' %}invisible{% endif %}"
title="{% trans 'Reduzierte Teilnahmegebühr' %}"><strong>{% if participant.apply_reduced_fee %}%{% else %}? {% endif %}</strong></span><button
name="action" value="confirm_payment" name="action" value="confirm_payment"
title="{% trans 'Geldeingang bestätigen' %}" title="{% trans 'Geldeingang bestätigen' %}"
class="btn btn-link no-padding"><span class="text-danger">{% bootstrap_icon 'piggy-bank' %}</span></button> class="btn btn-link no-padding"><span class="text-danger">{% bootstrap_icon 'piggy-bank' %}</span></button>
{% elif event.charge %} {% elif event.charge %}
&nbsp; &nbsp;
<span class="text-danger" title="{% trans 'Geldeingang unbestätigt' %}"> <span class="text-danger {% if not participant.apply_reduced_fee and participant.created_at|date:'U' > '1608764400' %}invisible{% endif %}"
<strong>{% if participant.apply_reduced_fee %}%{% elif participant.created_at|date:'U' < '1608764400' %}? {% else %}&emsp;{% endif %}</strong>{% bootstrap_icon 'piggy-bank' %} title="{% trans 'Reduzierte Teilnahmegebühr' %}"><strong>{% if participant.apply_reduced_fee %}%{% else %}? {% endif %}</strong></span><span
</span> class="text-danger"
title="{% trans 'Geldeingang unbestätigt' %}">{% bootstrap_icon 'piggy-bank' %}</span>
{% else %} {% else %}
<span class="hidden" title="{% trans 'Keine Teilnehmergebühr gefordert' %}"> <span class="hidden {% if not participant.apply_reduced_fee %}invisible{% endif %}"
<strong>&emsp;</strong>{% bootstrap_icon 'piggy-bank' %} title="{% trans 'Reduzierte Teilnahmegebühr' %}"><strong>%</strong></span><span
</span> class="hidden"
title="{% trans 'Keine Teilnehmergebühr gefordert' %}">{% bootstrap_icon 'piggy-bank' %}</span>
{% endif %} {% endif %}
</form> </form>
</div> </div>
@@ -287,6 +303,11 @@
</div> </div>
</div> </div>
{% endif %} {% endif %}
<div class="panel panel-default">
<div class="panel-body">
<strong title="Summe der bestätigten Geldeingänge (theoretisch!, da wir hier nur die Gebühren, aber nicht die tatsächlich überwiesenen Beträge kennen)">{% trans 'Gebuchte Teilnahmegebühren' %}:</strong> {{ earnings|floatformat:2 }} €
</div>
</div>
{% if participant_emails %} {% if participant_emails %}
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-body"> <div class="panel-body">
@@ -380,14 +401,16 @@
</span> </span>
{% if event.charge and participant.paid %} {% if event.charge and participant.paid %}
&nbsp; &nbsp;
<span class="text-success" title="{% trans 'Geldeingang bestätigt' %}"> <span class="text-success {% if not participant.apply_reduced_fee %}invisible{% endif %}"
<strong>{% if participant.apply_reduced_fee %}%{% else %}&emsp;{% endif %}</strong>{% bootstrap_icon 'piggy-bank' %} title="{% trans 'Reduzierte Teilnahmegebühr' %}"><strong>%</strong></span><span
</span> class="text-success"
title="{% trans 'Geldeingang bestätigt' %}">{% bootstrap_icon 'piggy-bank' %}</span>
{% elif event.charge %} {% elif event.charge %}
&nbsp; &nbsp;
<span class="text-danger" title="{% trans 'Geldeingang unbestätigt' %}"> <span class="text-danger {% if not participant.apply_reduced_fee %}invisible{% endif %}"
<strong>{% if participant.apply_reduced_fee %}%{% else %}&emsp;{% endif %}</strong>{% bootstrap_icon 'piggy-bank' %} title="{% trans 'Reduzierte Teilnahmegebühr' %}"><strong>%</strong></span><span
</span> class="text-danger"
title="{% trans 'Geldeingang unbestätigt' %}">{% bootstrap_icon 'piggy-bank' %}</span>
{% endif %} {% endif %}
</span> </span>
</div> </div>

View File

@@ -71,24 +71,37 @@
<form action="" method="post" class="form-inline"> <form action="" method="post" class="form-inline">
{% csrf_token %} {% csrf_token %}
<input type="hidden" name="id" value="{{ participant.id }}"> <input type="hidden" name="id" value="{{ participant.id }}">
{% if event.charge %}
<button name="action" value="toggle_reduced_fee"
title="{% trans 'Hier klicken, um zwischen voller und reduzierter Teilnahmegebühr umzuschalten' %}"
class="btn btn-link no-padding">
<span class="text-primary">
{% if participant.apply_reduced_fee %}{% bootstrap_icon 'check' %}{% else %}{% bootstrap_icon 'unchecked' %}{% endif %}
</span>
</button>
&nbsp;
{% endif %}
{% if event.charge and participant.paid %} {% if event.charge and participant.paid %}
<span class="text-success"><strong>{% if participant.apply_reduced_fee %}%{% else %}&emsp;{% endif %}</strong></span><button <span class="text-success {% if not participant.apply_reduced_fee %}invisible{% endif %}"
title="{% trans 'Reduzierte Teilnahmegebühr' %}"><strong>%</strong></span><button
name="action" value="revoke_payment" name="action" value="revoke_payment"
title="{% trans 'Geldeingang wurde bestätigt' %} - {% trans 'Bestätigung des Geldeingangs zurückziehen' %}" title="{% trans 'Geldeingang wurde bestätigt' %} - {% trans 'Bestätigung des Geldeingangs zurückziehen' %}"
class="btn btn-link no-padding"><span class="text-success">{% bootstrap_icon 'piggy-bank' %}</span></button> class="btn btn-link no-padding"><span class="text-success">{% bootstrap_icon 'piggy-bank' %}</span></button>
&nbsp; &nbsp;
({{ event.charge|floatformat:'-2' }}{% if participant.apply_reduced_fee %} / 2{% endif %} €) ({{ event.charge|floatformat:'-2' }}{% if participant.apply_reduced_fee %} / 2{% endif %} €)
{% elif event.charge %} {% elif event.charge %}
<span class="text-danger"><strong>{% if participant.apply_reduced_fee %}%{% elif participant.created_at|date:'U' < '1608764400' %}? {% else %}&emsp;{% endif %}</strong></span><button <span class="text-danger {% if not participant.apply_reduced_fee and participant.created_at|date:'U' > '1608764400' %}invisible{% endif %}"
title="{% trans 'Reduzierte Teilnahmegebühr' %}"><strong>{% if participant.apply_reduced_fee %}%{% else %}? {% endif %}</strong></span><button
name="action" value="confirm_payment" name="action" value="confirm_payment"
title="{% trans 'Geldeingang bestätigen' %}" title="{% trans 'Geldeingang bestätigen' %}"
class="btn btn-link no-padding"><span class="text-danger">{% bootstrap_icon 'piggy-bank' %}</span></button> class="btn btn-link no-padding"><span class="text-danger">{% bootstrap_icon 'piggy-bank' %}</span></button>
&nbsp; &nbsp;
({{ event.charge|floatformat:'-2' }}{% if participant.apply_reduced_fee %} / 2{% endif %} €) ({{ event.charge|floatformat:'-2' }}{% if participant.apply_reduced_fee %} / 2{% endif %} €)
{% else %} {% else %}
<span class="text-muted" title="{% trans 'Keine Teilnehmergebühr gefordert' %}"> <span class="hidden {% if not participant.apply_reduced_fee %}invisible{% endif %}"
<strong>&emsp;</strong>{% bootstrap_icon 'piggy-bank' %} title="{% trans 'Reduzierte Teilnahmegebühr' %}"><strong>%</strong></span><span
</span> class="hidden"
title="{% trans 'Keine Teilnehmergebühr gefordert' %}">{% bootstrap_icon 'piggy-bank' %}</span>
{% endif %} {% endif %}
</form> </form>
</td> </td>

View File

@@ -53,6 +53,11 @@ class ParticipantListView(generic.ListView):
participant = get_object_or_404(Participant, pk=participant_id) participant = get_object_or_404(Participant, pk=participant_id)
participant.paid = False participant.paid = False
participant.save() participant.save()
elif action == 'toggle_reduced_fee':
participant_id = request.POST.get('id')
participant = get_object_or_404(Participant, pk=participant_id)
participant.apply_reduced_fee = not participant.apply_reduced_fee
participant.save()
else: else:
messages.error(request, 'unsupported action: {}'.format(action)) messages.error(request, 'unsupported action: {}'.format(action))
return HttpResponseRedirect(reverse('dav_event_office:participant-list')) return HttpResponseRedirect(reverse('dav_event_office:participant-list'))

View File

@@ -305,7 +305,7 @@ Das musst du selbst (per E-Mail oder telefonisch) machen.
{% if registration.apply_reduced_fee %} {% if registration.apply_reduced_fee %}
&nbsp; &nbsp;
<span class="text-info"> <span class="text-info">
<strong>%</strong>{% bootstrap_icon 'piggy-bank' %} (reduzierte Gebühr) <strong title="{% trans 'reduzierte Teilnahmegebühr' %}">%</strong>{% bootstrap_icon 'piggy-bank' %} (reduzierte Gebühr)
</span> </span>
{% endif %} {% endif %}
</form> </form>
@@ -399,30 +399,35 @@ Wichtig: das System verschickt keine Bestätigung an dich oder den neuen Teilneh
{% endif %} {% endif %}
{% if event.charge and participant.paid and has_permission_payment %} {% if event.charge and participant.paid and has_permission_payment %}
&nbsp; &nbsp;
<span class="text-success"><strong>{% if participant.apply_reduced_fee %}%{% else %}&emsp;{% endif %}</strong></span><button <span class="text-success {% if not participant.apply_reduced_fee %}invisible{% endif %}"
title="{% trans 'Reduzierte Teilnahmegebühr' %}"><strong>%</strong></span><button
name="action" value="revoke_payment" name="action" value="revoke_payment"
title="{% trans 'Geldeingang wurde bestätigt' %} - {% trans 'Bestätigung des Geldeingangs zurückziehen' %}" title="{% trans 'Geldeingang wurde bestätigt' %} - {% trans 'Bestätigung des Geldeingangs zurückziehen' %}"
class="btn btn-link no-padding"><span class="text-success">{% bootstrap_icon 'piggy-bank' %}</span></button> class="btn btn-link no-padding"><span class="text-success">{% bootstrap_icon 'piggy-bank' %}</span></button>
{% elif event.charge and participant.paid %} {% elif event.charge and participant.paid %}
&nbsp; &nbsp;
<span class="text-success" title="{% trans 'Geldeingang bestätigt' %}"> <span class="text-success {% if not participant.apply_reduced_fee %}invisible{% endif %}"
<strong>{% if participant.apply_reduced_fee %}%{% else %}&emsp;{% endif %}</strong>{% bootstrap_icon 'piggy-bank' %} title="{% trans 'Reduzierte Teilnahmegebühr' %}"><strong>%</strong></span><span
</span> class="text-success"
title="{% trans 'Geldeingang bestätigt' %}">{% bootstrap_icon 'piggy-bank' %}</span>
{% elif event.charge and has_permission_payment %} {% elif event.charge and has_permission_payment %}
&nbsp; &nbsp;
<span class="text-danger"><strong>{% if participant.apply_reduced_fee %}%{% else %}&emsp;{% endif %}</strong></span><button <span class="text-danger {% if not participant.apply_reduced_fee %}invisible{% endif %}"
title="{% trans 'Reduzierte Teilnahmegebühr' %}"><strong>%</strong></span><button
name="action" value="confirm_payment" name="action" value="confirm_payment"
title="{% trans 'Geldeingang bestätigen' %}" title="{% trans 'Geldeingang bestätigen' %}"
class="btn btn-link no-padding"><span class="text-danger">{% bootstrap_icon 'piggy-bank' %}</span></button> class="btn btn-link no-padding"><span class="text-danger">{% bootstrap_icon 'piggy-bank' %}</span></button>
{% elif event.charge %} {% elif event.charge %}
&nbsp; &nbsp;
<span class="text-danger" title="{% trans 'Geldeingang unbestätigt' %}"> <span class="text-danger {% if not participant.apply_reduced_fee %}invisible{% endif %}"
<strong>{% if participant.apply_reduced_fee %}%{% else %}&emsp;{% endif %}</strong>{% bootstrap_icon 'piggy-bank' %} title="{% trans 'Reduzierte Teilnahmegebühr' %}"><strong>%</strong></span><span
</span> class="text-danger"
title="{% trans 'Geldeingang unbestätigt' %}">{% bootstrap_icon 'piggy-bank' %}</span>
{% else %} {% else %}
<span class="hidden" title="{% trans 'Keine Teilnehmergebühr gefordert' %}"> <span class="hidden {% if not participant.apply_reduced_fee %}invisible{% endif %}"
<strong>{% if participant.apply_reduced_fee %}%{% else %}&emsp;{% endif %}</strong>{% bootstrap_icon 'piggy-bank' %} title="{% trans 'Reduzierte Teilnahmegebühr' %}"><strong>%</strong></span><span
</span> class="hidden"
title="{% trans 'Keine Teilnehmergebühr gefordert' %}">{% bootstrap_icon 'piggy-bank' %}</span>
{% endif %} {% endif %}
</form> </form>
</div> </div>
@@ -587,14 +592,16 @@ von Position {{ participant.position }} der Teilnehmerliste entfernt.
</span> </span>
{% if event.charge and participant.paid %} {% if event.charge and participant.paid %}
&nbsp; &nbsp;
<span class="text-success" title="{% trans 'Geldeingang bestätigt' %}"> <span class="text-success {% if not participant.apply_reduced_fee %}invisible{% endif %}"
<strong>{% if participant.apply_reduced_fee %}%{% else %}&emsp;{% endif %}</strong>{% bootstrap_icon 'piggy-bank' %} title="{% trans 'Reduzierte Teilnahmegebühr' %}"><strong>%</strong></span><span
</span> class="text-success"
title="{% trans 'Geldeingang bestätigt' %}">{% bootstrap_icon 'piggy-bank' %}</span>
{% elif event.charge %} {% elif event.charge %}
&nbsp; &nbsp;
<span class="text-danger" title="{% trans 'Geldeingang unbestätigt' %}"> <span class="text-danger {% if not participant.apply_reduced_fee %}invisible{% endif %}"
<strong>{% if participant.apply_reduced_fee %}%{% else %}&emsp;{% endif %}</strong>{% bootstrap_icon 'piggy-bank' %} title="{% trans 'Reduzierte Teilnahmegebühr' %}"><strong>%</strong></span><span
</span> class="text-danger"
title="{% trans 'Geldeingang unbestätigt' %}">{% bootstrap_icon 'piggy-bank' %}</span>
{% endif %} {% endif %}
</span> </span>

View File

@@ -219,6 +219,16 @@ class EventRegistrationsView(EventPermissionMixin, generic.DetailView):
participants_trash = event.trashed_participants.all() participants_trash = event.trashed_participants.all()
context['participants_trash'] = participants_trash context['participants_trash'] = participants_trash
earnings = 0
if event.charge:
for participant in participants:
if participant.paid:
if participant.apply_reduced_fee:
earnings += event.charge / 2
else:
earnings += event.charge
context['earnings'] = earnings
if participants.count() > 1: if participants.count() > 1:
email_list = [u'"{}" <{}>'.format(p.get_full_name(), p.email_address) for p in participants] email_list = [u'"{}" <{}>'.format(p.get_full_name(), p.email_address) for p in participants]
email_list.sort() email_list.sort()
@@ -344,6 +354,12 @@ class EventRegistrationsView(EventPermissionMixin, generic.DetailView):
self._reset_registration(registration) self._reset_registration(registration)
else: else:
raise FieldDoesNotExist('Event has no registrations') raise FieldDoesNotExist('Event has no registrations')
elif action == 'toggle_reduced_fee':
self.enforce_permission(event, permission='payment')
participant_id = request.POST.get('id')
participant = event.participants.get(id=participant_id)
participant.apply_reduced_fee = not participant.apply_reduced_fee
participant.save()
elif action == 'confirm_payment': elif action == 'confirm_payment':
self.enforce_permission(event, permission='payment') self.enforce_permission(event, permission='payment')
participant_id = request.POST.get('id') participant_id = request.POST.get('id')