Complete dashboard loose ends and reconcile blocked pilot work
All checks were successful
Application acceptance / application-tests (push) Successful in 1m26s
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Build and Publish Container Image / build-and-push (push) Successful in 34s

Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a0e394-2a69-7df0-8980-22a0ebe55216
This commit is contained in:
tegwick 2026-09-27 18:34:48 +02:00
parent 387b7e9782
commit 35df9bb772
13 changed files with 325 additions and 55 deletions

View file

@ -98,5 +98,19 @@
{% endif %}
</div>
<div class="card">
<div class="flex items-center justify-between mb-3">
<h2 class="text-sm font-semibold text-slate-700">Ablaufende Nachweise (60 Tage)</h2>
<span class="text-sm">{{ ablaufende_nachweise|length }}</span>
</div>
{% for n in ablaufende_nachweise %}
<div class="flex items-center justify-between py-1 text-sm">
<a href="{% url 'bibliothek:nachweis_detail' pk=n.pk %}" class="text-brand-700 hover:underline">{{ n.titel }}</a>
<span class="{% if n.gueltig_bis < today %}text-red-600{% else %}text-amber-600{% endif %}">{{ n.gueltig_bis|date:"d.m.Y" }}</span>
</div>
{% empty %}
<p class="text-slate-400 text-sm">Keine ablaufenden Nachweise.</p>
{% endfor %}
</div>
</div>
{% endblock %}

View file

@ -119,6 +119,11 @@
<label class="form-label">Teilnahmeentscheidung</label>
{{ form.teilnahmeentscheidung }}
</div>
<div>
<label class="form-label" for="id_ergebnis">Ergebnis</label>
{{ form.ergebnis }}
{{ form.ergebnis.errors }}
</div>
<div>
<label class="form-label">Begründung</label>
{{ form.entscheidungsbegruendung }}

View file

@ -13,8 +13,12 @@
hx-get="{% url 'ausschreibungen:liste' %}"
hx-target="#ausschreibungen-table"
hx-push-url="true"
hx-trigger="change from:select, change from:input[type=checkbox]"
hx-trigger="change from:select, change from:input[type=checkbox], input changed delay:300ms from:input[type=search]"
class="flex flex-wrap gap-3 items-end">
<div>
<label for="tender-search" class="form-label">Suche</label>
<input id="tender-search" type="search" name="q" value="{{ q }}" class="form-input" placeholder="Titel oder Ausschreiber">
</div>
<div>
<label class="form-label">Status</label>
<select name="status" class="form-input">

View file

@ -8,7 +8,7 @@
<link rel="stylesheet" href="{% static 'dist/main.css' %}">
<script src="{% static 'vendor/alpinejs/alpine.min.js' %}" defer></script>
</head>
<body class="bg-paper-2 min-h-screen text-ink">
<body class="bg-paper-2 min-h-screen text-ink" hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'>
{% include "partials/topbar.html" %}
<div class="flex h-[calc(100vh-56px)]">

View file

@ -15,6 +15,19 @@
{% endfor %}
{% endif %}
{% if aufgaben %}
<div class="px-3 py-1 text-xs font-medium text-slate-400 uppercase tracking-wide">Aufgaben</div>
{% for a in aufgaben %}
<a href="{% url 'ausschreibungen:aufgaben:detail' ausschreibung_id=a.ausschreibung_id pk=a.pk %}" class="block px-4 py-2 text-sm text-slate-700 hover:bg-slate-50">{{ a.titel }}</a>
{% endfor %}
{% endif %}
{% if subunternehmer %}
<div class="px-3 py-1 text-xs font-medium text-slate-400 uppercase tracking-wide">Subunternehmer</div>
{% for s in subunternehmer %}
<a href="{% url 'partner:su_detail' pk=s.pk %}" class="block px-4 py-2 text-sm text-slate-700 hover:bg-slate-50">{{ s.name }}</a>
{% endfor %}
{% endif %}
{% if dokumente %}
<div class="px-3 py-1 text-xs font-medium text-slate-400 uppercase tracking-wide mt-1">Dokumente</div>
{% for d in dokumente %}