diff --git a/src/backoffice/templates/backoffice/assembly_badge.html b/src/backoffice/templates/backoffice/assembly_badge.html index 22b6040e4d955fce2cdb5454b62b3b5f62c39ffa..0c62e1e5b9765d091f86143b0441d0cbed2f633e 100644 --- a/src/backoffice/templates/backoffice/assembly_badge.html +++ b/src/backoffice/templates/backoffice/assembly_badge.html @@ -177,12 +177,17 @@ </div> <div class="card-body"> {% for tok in valid_multiuse_tokens %} - <p><code>{{ tok.token }}</code> - <b>{{ tok.badge_class }}</b> - {% if tok.badge_class == 'limited' %} - <i> (Amount left: <code>{{ tok.limited_amount_left }}</code>)</i> - {% endif%} - </p> + <form class="form-inline" action="{% url 'backoffice:assembly-badge-redeem-token-delete' assembly=assembly.id badge=badge.id pk=tok.pk %}" method="POST"> + <p> + <code>{{ tok.token }}</code> + <b>{{ tok.badge_class }}</b> + {% if tok.badge_class == 'limited' %} + <i> (Amount left: <code>{{ tok.limited_amount_left }}</code>)</i> + {% endif%} + {% csrf_token %} + <button type="submit" class="btn btn-sm btn-secondary">{% trans 'delete' %}</button> + </p> + </form> {% endfor %} </div> </form> diff --git a/src/backoffice/urls.py b/src/backoffice/urls.py index 9ec532ba2da83e277c38bcfadf48068228092bfd..6f7685c07cf6af000434e1d8e1ef4790e576bf0f 100644 --- a/src/backoffice/urls.py +++ b/src/backoffice/urls.py @@ -55,6 +55,8 @@ urlpatterns = [ path('assembly/<uuid:assembly>/badge/<int:pk>/remove', assemblies.RemoveBadgeView.as_view(), name='assembly-badge-remove'), path('assembly/<uuid:assembly>/badge/<int:pk>/award', assemblies.AwardBadgeView.as_view(), name='assembly-badge-award'), path('assembly/<uuid:assembly>/badge/<int:pk>/redeem_token', assemblies.RedeemTokenBadgeView.as_view(), name='assembly-badge-redeem-token'), + path('assembly/<uuid:assembly>/badge/<int:badge>/redeem_token/<str:pk>/delete', + assemblies.RemoveBadgeTokenView.as_view(), name='assembly-badge-redeem-token-delete'), path('assembly/<uuid:assembly>/badge/<int:pk>/redeem_token/<str:badge_class>', assemblies.RedeemTokenBadgeView.as_view(), name='assembly-badge-redeem-token'), diff --git a/src/backoffice/views/assemblies.py b/src/backoffice/views/assemblies.py index 9a12292bc70b1588f784e5b3c46847f2c136bc39..33f156714cef9bacbf1f8819f5dfe7bc180c5aab 100644 --- a/src/backoffice/views/assemblies.py +++ b/src/backoffice/views/assemblies.py @@ -609,6 +609,21 @@ class RedeemTokenBadgeView(AssemblyMixin, View): return render(self.request, 'backoffice/assembly_badge_redeem_token.html', ctx) +class RemoveBadgeTokenView(AssemblyMixin, DeleteView): + assembly_url_param = 'assembly' + assembly_management = True + model = BadgeToken + + def delete(self, *args, **kwargs): + result = super().delete(*args, **kwargs) + messages.success(self.request, _('removed')) + logger.info(f'BadgeToken {self.object} removed by {self.request.user}') + return result + + def get_success_url(self, *args, **kwargs): + return reverse('backoffice:assembly-badge', kwargs={'assembly': self.assembly.pk, 'pk': self.kwargs['badge']}) + + class RemoveBadgeView(AssemblyMixin, DeleteView): assembly_url_param = 'assembly' assembly_management = True diff --git a/src/plainui/jinja2/plainui/world.html b/src/plainui/jinja2/plainui/world.html index 10ed585004800b9a6784d1169f1725db17bfbba7..19f841a3d399781cdd565e5eb35a3b8a12437305 100644 --- a/src/plainui/jinja2/plainui/world.html +++ b/src/plainui/jinja2/plainui/world.html @@ -17,4 +17,7 @@ {{ markdownMacro.markdown(markdown=page.rendered_body|safe) }} </article> + + <hr class="my-8"> + {% endblock %}