Remove 'Abgeschlossen' from payment pipeline, make 'Überwiesen' the final step

The 'Abgeschlossen' column was redundant after 'Überwiesen' since no further
action occurs after a payment is transferred. The pipeline is now 4 stages:
Offen → Nachweis eingereicht → Freigegeben → Überwiesen.

Existing 'abgeschlossen' records are merged into the 'Überwiesen' column.
Financial reports and queries are unaffected as they already include both statuses.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
SysAdmin Agent
2026-03-21 20:59:42 +00:00
parent 7c7bd73404
commit 4ef09750d6
3 changed files with 4 additions and 15 deletions

View File

@@ -362,7 +362,6 @@ class DestinataerUnterstuetzung(models.Model):
("nachweis_eingereicht", "Nachweis eingereicht"), ("nachweis_eingereicht", "Nachweis eingereicht"),
("freigegeben", "Freigegeben"), ("freigegeben", "Freigegeben"),
("ausgezahlt", "Überwiesen"), ("ausgezahlt", "Überwiesen"),
("abgeschlossen", "Abgeschlossen"),
] ]
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
@@ -485,7 +484,7 @@ class DestinataerUnterstuetzung(models.Model):
"in_bearbeitung": 3, "in_bearbeitung": 3,
"freigegeben": 3, "freigegeben": 3,
"ausgezahlt": 4, "ausgezahlt": 4,
"abgeschlossen": 5, "abgeschlossen": 4,
"storniert": 0, "storniert": 0,
} }
return stage_map.get(self.status, 1) return stage_map.get(self.status, 1)

View File

@@ -1813,7 +1813,7 @@ def batch_nachweis_aufforderung_senden(request):
@login_required @login_required
def zahlungs_pipeline(request): def zahlungs_pipeline(request):
"""2c: Zahlungs-Pipeline 5-Stufen-Kanban-Ansicht.""" """2c: Zahlungs-Pipeline 4-Stufen-Kanban-Ansicht."""
heute = date.today() heute = date.today()
destinataer_id = request.GET.get("destinataer", "") destinataer_id = request.GET.get("destinataer", "")
konto_id = request.GET.get("konto", "") konto_id = request.GET.get("konto", "")
@@ -1831,8 +1831,7 @@ def zahlungs_pipeline(request):
"offen": qs.filter(status__in=["geplant", "faellig"]).order_by("faellig_am"), "offen": qs.filter(status__in=["geplant", "faellig"]).order_by("faellig_am"),
"nachweis_eingereicht": qs.filter(status="nachweis_eingereicht").order_by("faellig_am"), "nachweis_eingereicht": qs.filter(status="nachweis_eingereicht").order_by("faellig_am"),
"freigegeben": qs.filter(status__in=["freigegeben", "in_bearbeitung"]).order_by("faellig_am"), "freigegeben": qs.filter(status__in=["freigegeben", "in_bearbeitung"]).order_by("faellig_am"),
"ueberwiesen": qs.filter(status="ausgezahlt").order_by("-ausgezahlt_am"), "ueberwiesen": qs.filter(status__in=["ausgezahlt", "abgeschlossen"]).order_by("-ausgezahlt_am"),
"abgeschlossen": qs.filter(status="abgeschlossen").order_by("-ausgezahlt_am"),
} }
stage_meta = { stage_meta = {
@@ -1840,7 +1839,6 @@ def zahlungs_pipeline(request):
"nachweis_eingereicht": ("Nachweis eingereicht", "info", "fa-file-alt"), "nachweis_eingereicht": ("Nachweis eingereicht", "info", "fa-file-alt"),
"freigegeben": ("Freigegeben (4-Augen)", "warning", "fa-shield-alt"), "freigegeben": ("Freigegeben (4-Augen)", "warning", "fa-shield-alt"),
"ueberwiesen": ("Überwiesen", "success", "fa-university"), "ueberwiesen": ("Überwiesen", "success", "fa-university"),
"abgeschlossen": ("Abgeschlossen", "dark", "fa-check-double"),
} }
pipeline_stages = [ pipeline_stages = [
@@ -1852,7 +1850,7 @@ def zahlungs_pipeline(request):
"zahlungen": list(pipeline[key]), "zahlungen": list(pipeline[key]),
"gesamt": pipeline[key].aggregate(s=Sum("betrag"))["s"] or Decimal("0"), "gesamt": pipeline[key].aggregate(s=Sum("betrag"))["s"] or Decimal("0"),
} }
for key in ["offen", "nachweis_eingereicht", "freigegeben", "ueberwiesen", "abgeschlossen"] for key in ["offen", "nachweis_eingereicht", "freigegeben", "ueberwiesen"]
] ]
destinataere = Destinataer.objects.filter(aktiv=True).order_by("nachname", "vorname") destinataere = Destinataer.objects.filter(aktiv=True).order_by("nachname", "vorname")

View File

@@ -130,14 +130,6 @@
<a href="{% url 'stiftung:unterstuetzung_mark_paid' pk=z.pk %}" class="btn btn-xs btn-outline-success" style="font-size:0.7rem;padding:2px 6px;" title="Als überwiesen markieren"> <a href="{% url 'stiftung:unterstuetzung_mark_paid' pk=z.pk %}" class="btn btn-xs btn-outline-success" style="font-size:0.7rem;padding:2px 6px;" title="Als überwiesen markieren">
<i class="fas fa-university"></i> <i class="fas fa-university"></i>
</a> </a>
{% elif stage.key == 'ueberwiesen' %}
<form method="post" action="{% url 'stiftung:unterstuetzung_abschliessen' pk=z.pk %}">
{% csrf_token %}
<input type="hidden" name="next" value="{% url 'stiftung:zahlungs_pipeline' %}">
<button type="submit" class="btn btn-xs btn-outline-dark" style="font-size:0.7rem;padding:2px 6px;" title="Abschließen">
<i class="fas fa-check-double"></i>
</button>
</form>
{% endif %} {% endif %}
<a href="{% url 'stiftung:unterstuetzung_detail' pk=z.pk %}" class="btn btn-xs btn-outline-secondary" style="font-size:0.7rem;padding:2px 6px;" title="Details"> <a href="{% url 'stiftung:unterstuetzung_detail' pk=z.pk %}" class="btn btn-xs btn-outline-secondary" style="font-size:0.7rem;padding:2px 6px;" title="Details">
<i class="fas fa-eye"></i> <i class="fas fa-eye"></i>