Fix email-Destinatär document linking and add email delete

- When manually assigning an email to a Destinatär, also update
  associated DokumentLink records so attachments appear in the
  Destinatär's Dokumente tab
- Add email delete functionality (view, URL, buttons in list and detail)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
SysAdmin Agent
2026-03-12 07:57:25 +00:00
parent 8c528308bd
commit f4fc512ad3
5 changed files with 49 additions and 4 deletions

View File

@@ -440,6 +440,7 @@ urlpatterns = [
# E-Mail-Eingang Destinatäre
path("email-eingang/", views.email_eingang_list, name="email_eingang_list"),
path("email-eingang/<uuid:pk>/", views.email_eingang_detail, name="email_eingang_detail"),
path("email-eingang/<uuid:pk>/loeschen/", views.email_eingang_delete, name="email_eingang_delete"),
path("email-eingang/poll/", views.email_eingang_poll_trigger, name="email_eingang_poll_trigger"),
# Kalender URLs
path("kalender/", views.kalender_view, name="kalender"),

View File

@@ -89,6 +89,7 @@ from .geschichte import ( # noqa: F401
kalender_api_events,
email_eingang_list,
email_eingang_detail,
email_eingang_delete,
email_eingang_poll_trigger,
)

View File

@@ -643,6 +643,11 @@ def email_eingang_detail(request, pk):
eingang.destinataer = destinataer
eingang.status = "zugewiesen"
eingang.save()
# Verknüpfte DokumentLinks ebenfalls dem Destinatär zuordnen
if eingang.paperless_dokument_ids:
DokumentLink.objects.filter(
paperless_document_id__in=eingang.paperless_dokument_ids
).update(destinataer_id=destinataer.pk)
messages.success(
request,
f"E-Mail wurde {destinataer} zugeordnet.",
@@ -716,6 +721,18 @@ def email_eingang_poll_trigger(request):
return redirect("stiftung:email_eingang_list")
@login_required
def email_eingang_delete(request, pk):
"""Löscht eine eingegangene E-Mail."""
eingang = get_object_or_404(DestinataerEmailEingang, pk=pk)
if request.method == "POST":
betreff = eingang.betreff or "(kein Betreff)"
eingang.delete()
messages.success(request, f'E-Mail "{betreff}" wurde gelöscht.')
return redirect("stiftung:email_eingang_list")
return redirect("stiftung:email_eingang_detail", pk=pk)
# ============================================================
# Veranstaltungsmodul
# ============================================================

View File

@@ -211,7 +211,7 @@
</div>
<!-- Metadaten -->
<div class="card">
<div class="card mb-4">
<div class="card-header"><i class="fas fa-info-circle me-2"></i>Metadaten</div>
<div class="card-body">
<dl class="row mb-0 small">
@@ -222,6 +222,23 @@
</dl>
</div>
</div>
<!-- Löschen -->
<div class="card border-danger">
<div class="card-header text-danger">
<i class="fas fa-trash-alt me-2"></i>E-Mail löschen
</div>
<div class="card-body">
<p class="small text-muted mb-2">Diese E-Mail unwiderruflich aus dem System entfernen.</p>
<form method="post" action="{% url 'stiftung:email_eingang_delete' eingang.pk %}"
onsubmit="return confirm('E-Mail wirklich löschen?');">
{% csrf_token %}
<button type="submit" class="btn btn-outline-danger w-100">
<i class="fas fa-trash-alt me-1"></i>Löschen
</button>
</form>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -180,9 +180,18 @@
{% endif %}
</td>
<td>
<a href="{% url 'stiftung:email_eingang_detail' e.pk %}" class="btn btn-sm btn-outline-primary">
<i class="fas fa-eye"></i>
</a>
<div class="btn-group btn-group-sm">
<a href="{% url 'stiftung:email_eingang_detail' e.pk %}" class="btn btn-outline-primary" title="Details">
<i class="fas fa-eye"></i>
</a>
<form method="post" action="{% url 'stiftung:email_eingang_delete' e.pk %}" class="d-inline"
onsubmit="return confirm('E-Mail wirklich löschen?');">
{% csrf_token %}
<button type="submit" class="btn btn-outline-danger" title="Löschen">
<i class="fas fa-trash-alt"></i>
</button>
</form>
</div>
</td>
</tr>
{% endfor %}