feat: Tab „Führungen" für ausgefallene und verschobene Sonderführungen — Version 1.14.0

Fällt eine Sonderführung aus oder wird sie verschoben, gibt es dafür keinen
Logbuch-Eintrag. Der neue Tab listet die kommenden zugesagten Führungen aus
SoFue2 und bietet je Zeile „Ausgefallen" und „Verschoben auf …" — offen für
jeden angemeldeten BEO.

Absage setzt status=3 und lässt den Termin stehen. Beim Verschieben wandert
der bisherige wtermin in die bis dahin ungenutzte Spalte 'verlegt'; beide
Aktionen hängen eine datierte Zeile mit dem Kürzel an 'bemerkung' an, statt
sie zu ersetzen. Damit ist die Terminhistorie erstmals nachvollziehbar.

Die Anleitung wird nun aus ANLEITUNG.md erzeugt (scripts/build-anleitung.mjs,
Design in scripts/anleitung.template.html), automatisch vor jedem Build.
public/anleitung.html ist deshalb nicht mehr in git.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-08 18:03:43 +02:00
parent 1945f1f8e0
commit b3fbc391b1
14 changed files with 674 additions and 497 deletions
+30
View File
@@ -158,6 +158,36 @@ export async function getFahrkosten(ab: string, bis: string): Promise<Fahrkosten
return call('LB_FAHRKOSTEN', { ab, bis });
}
// ---- Sonderführungs-Register (SoFue2) ----
export interface SofueTermin {
id: number;
wtermin: string;
verein: string;
name: string;
vorname: string;
anzahl: number;
mitarbeiter: string | null;
bemerkung: string | null;
}
export async function getSofueTermine(): Promise<SofueTermin[]> {
return call('LB_SOFUE_TERMINE');
}
export async function sofueAbsagen(id: number, grund: string, kuerzel: string): Promise<void> {
await call('LB_SOFUE_ABSAGEN', { id, grund, kuerzel });
}
export async function sofueVerschieben(
id: number,
termin: string,
grund: string,
kuerzel: string
): Promise<void> {
await call('LB_SOFUE_VERSCHIEBEN', { id, termin, grund, kuerzel });
}
export interface StatistikResult {
monthly: {
monat: number;