feat(protokoll): Protokoll ansehen, mit Filtern und Mandantensicht
Prüfung / pruefung (pull_request) Canceled after 0s
Prüfung / pruefung (push) Canceled after 0s
Prüfung / e2e (pull_request) Canceled after 0s
Prüfung / e2e (push) Canceled after 0s

Geschrieben wurde es seit dem Datenmodell, ansehen konnte es niemand: wer
wissen wollte, wer wann eine Rolle geaendert hat, brauchte psql.

Neue Seite Verwaltung -> Protokoll: Volltext ueber Aktion und Lauftitel, Filter
nach Urheber und Zeitraum, fuenfzig Eintraege je Seite, neueste zuerst. Ein
Eintrag ohne Urheber steht als Systemlauf da und nicht als Luecke -- der
Zeitplan des Verzeichnisabgleichs hat keinen Menschen hinter sich.

Am Lauf selbst stehen seine Eintraege eingeklappt in der Abarbeitungsansicht.
Kein eigenes Recht dafuer: wer den Lauf sehen darf, darf auch sehen, was an ihm
geschehen ist.

Dafuer traegt Protokoll jetzt eine kundeId, wie CLAUDE.md es fuer jede
kundenbezogene Zeile verlangt. Ohne sie liess sich die Mandantensicht nicht
anwenden, ohne je Eintrag die Entitaet nachzuschlagen. Leer heisst global;
laufbezogene Eintraege bleiben ohne, weil der Lauf die bessere Quelle ist. Die
Migration fuehrt bestehende Eintraege nach -- an echten Daten gefahren, 59 von
733 bekamen einen Kunden.

Ein Eintrag, der sich keinem Kunden zuordnen laesst, wird einem beschraenkten
Benutzer nicht gezeigt: vorher/nachher koennen einen Hostnamen enthalten, und
bei einer Mandantengrenze wird im Zweifel zugemacht.

Keine Tabelle, sondern Karten: sieben Spalten sind bei 390 px nicht
darstellbar, ohne horizontal zu scrollen.

Im gebauten Stand durchgeklickt: blaettern, filtern, Werte aufklappen,
Abschnitt am Lauf, 390 px auf beiden Seiten ohne Scrollen.

Closes #35
This commit is contained in:
Florian Wilde
2026-10-04 18:05:48 +02:00
parent f5936327a0
commit ac51753d53
23 changed files with 1103 additions and 22 deletions
+14
View File
@@ -313,6 +313,20 @@ test.describe("Onboarding", () => {
protokoll: Number(spuren[0]?.protokoll),
}).toEqual({ ergebnisse: 0, kommentare: 0, protokoll: 0 });
/*
* ---- Auch nicht in der Protokoll-Ansicht -------------------------------
*
* Seit #023 ist das Protokoll sichtbar, und die Seite zeigt `vorher` und
* `nachher` als Text. Die Abfrage oben belegt, dass dort nichts steht; dieser
* Griff belegt, dass die **Ansicht** nichts hinzuerfindet — etwa aus einer
* aufgelösten Vorschau.
*/
await page.goto("/admin/protokoll");
const protokollSeite = (await page.locator("body").innerText()).replace(/\s+/gu, " ");
expect(protokollSeite).not.toContain(passwort);
// Gegenprobe: die Seite ist überhaupt da und zeigt Einträge.
await expect(page.getByRole("heading", { name: "Protokoll", level: 1 })).toBeVisible();
// ---- Auch nicht auf dem Ausdruck ---------------------------------------
await page.goto(`/drucken/lauf/${laufId}`);
const blatt = (await page.locator("body").innerText()).replace(/\s+/gu, " ");