{% import "bausteine/bausatz.html" as b %} {# Ein Dokument als Tabellenzeile — die Listenansicht der Ablage. **Seit dem 04.09.2026 eine Tabelle, keine Karte je Zeile** (Vorgabe des Auftraggebers: «Das UI-Erlebnis soll identisch sein, nicht unterschiedliche Darstellung von Tabellen und Kacheln»). Sie war die letzte abweichende Form im Portal: eine gerahmte Karte mit Bild links und vier Angaben als Fliesstext darunter, während Meldungen, Mitteilungen und alle Dashboard-Karten in Spalten standen. **Die Vorschau bleibt.** Sie ist in der LISTE das Wiedererkennungsmerkmal («das mit dem blauen Briefkopf»), nur kleiner: 48 statt 72 px breit. Wer sie gross will, schaltet auf Kacheln um. **Der Rahmen steht nur, wenn eine Datei dahinterliegt** — ein leeres Kästchen neben jedem Eintrag sähe nach einem Fehler aus. **Das Datum ist das des BELEGS, nicht die Freigabe und nicht der Eingang.** Danach ist sortiert (`_dok_ordnung`) und danach steht das Dokument in seinem Jahr; die alte Zeile zeigte «freigegeben …», und das tragen 2 von 1031 Dokumenten im Dev-Bestand. Fehlt es — der Altbestand, den noch niemand gesichtet hat —, springt die Freigabe ein und sagt es. Bis zum 06.09.2026 stand hier `erstellt_am`, das Ablagedatum des Immotools. Der Satz hat sich mit dem Feld geändert, nicht daneben. **Die Kopfzeile heisst darum «Datum» und nicht «Erstellt»**: Sie deckt beide Fälle, und «Erstellt» über einem «freigegeben 26.08.2026» wäre ein Widerspruch in derselben Zeile (Sichtprobe 2026-09-04) — dieselbe Regel wie in der Kachel und auf dem Dashboard. **Kein Knopf, der in eine Absage fuehrt.** Sagt die Gegenseite ausdruecklich, dass keine Datei dahinterliegt, steht der Grund da statt eines Knopfes, der mit «Dokument nicht verfuegbar» antwortet. `is not sameas false` und nicht `if hat_datei`: `None` heisst «die Gegenseite sagt nichts dazu» (aeltere Fassung), und dann bleibt es beim bisherigen Verhalten. **Der Titel führt auf die Dokumentseite, der Knopf lädt herunter.** Zwei Ziele, aber nicht für dieselbe Sache: das eine zeigt das Dokument, das andere holt die Datei. Sie stehen in ZWEI Zellen — ein Knopf im Verweis wäre verschachtelt und träfe mit der Maus das Falsche. **Der Download ist ein POST.** Die Kennung gehoert nicht in die Adresszeile und damit nicht in Verlauf, Referer und Protokoll (Story 4.9). Das Vorschaubild ist ein GET und darf es sein: Ein Bild kann kein Formular sein, und die Freigabe wird bei jedem Abruf frisch geprueft. #} {%- set kennung = d.get('id') or '' -%} {#- **Die Spalte «Datum» zeigt das Datum AUF dem Beleg**, nicht das Ablagedatum des Immotools (Entscheid des Auftraggebers, 06.09.2026). Fehlt es — der Altbestand, den noch niemand gesichtet hat —, steht ersatzweise das Freigabedatum da, ausdrücklich beschriftet. Eine leere Zelle sähe aus wie ein Fehler, ein unbeschriftetes Datum wäre eine falsche Auskunft. -#} {%- set erstellt = datum_kurz(d.get('dokumentdatum') or '') -%} {%- set freigabe = datum_kurz(d.get('freigegeben_am') or '') -%} {% if d.get('hat_datei') and kennung %}{% endif %} {#- **Die Zeile sagt «neu» genauso wie die Kachel.** Die Spalte «Datum» zeigt `dokumentdatum` und nur ersatzweise das Freigabedatum — an ihr ist «seit Ihrem letzten Besuch freigegeben» also nicht ablesbar (Code-Review 05.09.2026). Ohne diese Marke hinge die Auskunft an der Ansicht, die man gerade gewählt hat. -#} {% if d.get('ist_neu') %}Neu seit Ihrem letzten Besuch: {% endif %}{% if kennung %}{{ d.get('titel') or '' }}{% else %}{{ d.get('titel') or '' }}{% endif %} {%- if d.get('zusammenfassung') %}{{ d.get('zusammenfassung') }}{% endif %} {%- if mit_gemeinschaft and d.get('mandant') %}{{ d.get('mandant') }}{% endif %} {#- **Die Themen stehen in der Hauptspalte, nicht in einer eigenen.** Ein Dokument trägt keines bis mehrere; eine Spalte dafür wäre bei den meisten Zeilen leer und bei manchen zu schmal. Als Kapseln unter dem Titel wachsen sie mit, ohne die Tabelle zu sprengen. Sie sind bewusst KEIN Link: Ein Klick in der Zeile öffnet das Dokument, und ein zweites Ziel darin wäre der Fall, den `docs/gestaltung.md` als «Zeile als Link bricht Knöpfe» festhält. **Das versteckte Wort davor ist Pflicht, nicht Zierde.** Die Rundung weist die Kapseln fürs Auge als Zuordnung aus; eine Vorlesesoftware liest ohne das Wort «Protokoll · Test AG · Sanierung · Versammlung» in einem Zug, und nichts trennt den Mandanten von den Themen (`docs/gestaltung.md` §1: Farbe sagt nie etwas allein). Zwei Zeilen höher löst dieselbe Vorlage dasselbe Problem mit «Neu seit Ihrem letzten Besuch». -#} {%- if d.get('themen') %}{% if d.get('themen')|length > 1 %}Themen{% else %}Thema{% endif %}: {% for th in d.get('themen') %}{{ th }}{% endfor %}{% endif %} {{ kategorie_wort(d.get('kategorie') or '') }} {{ d.get('nummer') or '' }} {% if erstellt %}{{ erstellt }}{% elif freigabe %}freigegeben {{ freigabe }}{% endif %} {% if d.get('hat_datei') is not sameas false %}
{{ b.knopf("Herunterladen", "zweit", klasse="klein") }}
{% else %}keine Datei{% endif %}