From 0220ed36fd6e3702a4b207156c06f04414ca4ca6 Mon Sep 17 00:00:00 2001 From: Christian Merten Date: Sun, 27 Oct 2024 21:48:06 +0100 Subject: [PATCH] finance/admin: add statement unconfirm button --- jdav_web/finance/admin.py | 42 +++++++++++++++++++ .../templates/admin/unconfirm_statement.html | 41 ++++++++++++++++++ .../change_form_object_tools.html | 2 +- 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 jdav_web/finance/templates/admin/unconfirm_statement.html diff --git a/jdav_web/finance/admin.py b/jdav_web/finance/admin.py index d4a89cd..119c9bd 100644 --- a/jdav_web/finance/admin.py +++ b/jdav_web/finance/admin.py @@ -259,6 +259,48 @@ class StatementConfirmedAdmin(admin.ModelAdmin): # To preserve integrity, no one is allowed to change confirmed statements return False + def get_urls(self): + urls = super().get_urls() + + def wrap(view): + def wrapper(*args, **kwargs): + return self.admin_site.admin_view(view)(*args, **kwargs) + + wrapper.model_admin = self + return update_wrapper(wrapper, view) + + custom_urls = [ + path( + "/unconfirm/", + wrap(self.unconfirm_view), + name="%s_%s_unconfirm" % (self.opts.app_label, self.opts.model_name), + ), + ] + return custom_urls + urls + + def unconfirm_view(self, request, object_id): + statement = StatementConfirmed.objects.get(pk=object_id) + if not statement.confirmed: + messages.error(request, + _("%(name)s is not yet confirmed.") % {'name': str(statement)}) + return HttpResponseRedirect(reverse('admin:%s_%s_change' % (self.opts.app_label, self.opts.model_name), args=(statement.pk,))) + if "unconfirm" in request.POST: + statement.confirmed = False + statement.confirmed_date = None + statement.confired_by = None + statement.save() + + messages.success(request, + _("Successfully unconfirmed %(name)s. I hope you know what you are doing.") + % {'name': str(statement)}) + return HttpResponseRedirect(reverse('admin:%s_%s_changelist' % (self.opts.app_label, self.opts.model_name))) + + context = dict(self.admin_site.each_context(request), + title=_('Unconfirm statement'), + opts=self.opts, + statement=statement) + + return render(request, 'admin/unconfirm_statement.html', context=context) @admin.register(Transaction) class TransactionAdmin(admin.ModelAdmin): diff --git a/jdav_web/finance/templates/admin/unconfirm_statement.html b/jdav_web/finance/templates/admin/unconfirm_statement.html new file mode 100644 index 0000000..cfff95d --- /dev/null +++ b/jdav_web/finance/templates/admin/unconfirm_statement.html @@ -0,0 +1,41 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_urls static %} + +{% block extrahead %} + {{ block.super }} + {{ media }} + + + +{% endblock %} + +{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} admin-view +{% endblock %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block content %} +

{% translate "Unconfirm statement" %}

+ +

+{% blocktrans %}You are entering risk zone! Do you really want to manually set this statement back to unconfirmed?{% endblocktrans %} +

+ +
+ {% csrf_token %} +

+ + {% blocktrans %}I am aware that this is not a standard procedure and this might cause data integrity issues.{% endblocktrans %} +

+ + {% trans 'Cancel' %} +
+{% endblock %} diff --git a/jdav_web/templates/admin/finance/statementconfirmed/change_form_object_tools.html b/jdav_web/templates/admin/finance/statementconfirmed/change_form_object_tools.html index bae452a..1906f52 100644 --- a/jdav_web/templates/admin/finance/statementconfirmed/change_form_object_tools.html +++ b/jdav_web/templates/admin/finance/statementconfirmed/change_form_object_tools.html @@ -4,7 +4,7 @@ {% block object-tools-items %}
  • - {% url opts|admin_urlname:'submit' original.pk|admin_urlquote as invite_url %} + {% url opts|admin_urlname:'unconfirm' original.pk|admin_urlquote as invite_url %} {% trans 'Unconfirm' %}