feat(aufgaben): Verknüpfungen, implizite Fälligkeit, Issue-Facade (WP-0015)

- Aufgabe.erstellt_am für implizite 7-Tage-Fälligkeit
- frist_effektiv property; ist_ueberfaellig nutzt sie
- AufgabenVerknuepfung (GenericForeignKey) mit HTMX-Panel
- ExternalIssue (OneToOne) mit IssueAdapter-ABC und HTMX-Panel
- link_registry.py und issue_facade.py als zentrale Registries
- 8 neue Tests, 76 gesamt grün

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-14 04:18:28 +02:00
parent a0c0ddf2eb
commit 816c281f6a
19 changed files with 713 additions and 19 deletions

View File

@@ -0,0 +1,22 @@
<li class="flex items-start gap-2 py-1 text-sm" id="vk-{{ v.pk }}">
<div class="flex-1">
<span class="inline-block text-xs bg-slate-100 text-slate-600 rounded px-1 py-0.5 mr-1">
{{ v.content_type.model }}
</span>
{% if v.ziel %}
<span class="text-slate-800">{{ v.ziel }}</span>
{% else %}
<span class="text-slate-400">Objekt nicht gefunden (ID {{ v.object_id }})</span>
{% endif %}
{% if v.kommentar %}
<p class="text-xs text-slate-500 mt-0.5 ml-1">{{ v.kommentar }}</p>
{% endif %}
</div>
<form hx-post="{% url 'ausschreibungen:aufgaben:verknuepfung_loeschen' ausschreibung.pk aufgabe.pk v.pk %}"
hx-target="closest li"
hx-swap="outerHTML"
hx-confirm="Verknüpfung entfernen?">
{% csrf_token %}
<button type="submit" class="btn-ghost text-xs text-red-500 shrink-0">×</button>
</form>
</li>