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:
@@ -440,6 +440,7 @@ urlpatterns = [
|
|||||||
# E-Mail-Eingang Destinatäre
|
# E-Mail-Eingang Destinatäre
|
||||||
path("email-eingang/", views.email_eingang_list, name="email_eingang_list"),
|
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>/", 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"),
|
path("email-eingang/poll/", views.email_eingang_poll_trigger, name="email_eingang_poll_trigger"),
|
||||||
# Kalender URLs
|
# Kalender URLs
|
||||||
path("kalender/", views.kalender_view, name="kalender"),
|
path("kalender/", views.kalender_view, name="kalender"),
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ from .geschichte import ( # noqa: F401
|
|||||||
kalender_api_events,
|
kalender_api_events,
|
||||||
email_eingang_list,
|
email_eingang_list,
|
||||||
email_eingang_detail,
|
email_eingang_detail,
|
||||||
|
email_eingang_delete,
|
||||||
email_eingang_poll_trigger,
|
email_eingang_poll_trigger,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -643,6 +643,11 @@ def email_eingang_detail(request, pk):
|
|||||||
eingang.destinataer = destinataer
|
eingang.destinataer = destinataer
|
||||||
eingang.status = "zugewiesen"
|
eingang.status = "zugewiesen"
|
||||||
eingang.save()
|
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(
|
messages.success(
|
||||||
request,
|
request,
|
||||||
f"E-Mail wurde {destinataer} zugeordnet.",
|
f"E-Mail wurde {destinataer} zugeordnet.",
|
||||||
@@ -716,6 +721,18 @@ def email_eingang_poll_trigger(request):
|
|||||||
return redirect("stiftung:email_eingang_list")
|
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
|
# Veranstaltungsmodul
|
||||||
# ============================================================
|
# ============================================================
|
||||||
|
|||||||
@@ -211,7 +211,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Metadaten -->
|
<!-- 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-header"><i class="fas fa-info-circle me-2"></i>Metadaten</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<dl class="row mb-0 small">
|
<dl class="row mb-0 small">
|
||||||
@@ -222,6 +222,23 @@
|
|||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
</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>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -180,9 +180,18 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{% url 'stiftung:email_eingang_detail' e.pk %}" class="btn btn-sm btn-outline-primary">
|
<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>
|
<i class="fas fa-eye"></i>
|
||||||
</a>
|
</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>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
Reference in New Issue
Block a user