Geraeteformular zum Anlegen und Bearbeiten ergaenzen

Schliesst die letzte offene Luecke aus Phase 1. Bis dahin liessen sich Geraete
nur ueber den Import erfassen — fuer einen Bestand richtig, fuer ein einzelnes
nachbeschafftes Geraet umstaendlich.

Neu:
- /geraete/neu und /geraete/<id>/bearbeiten, beide ueber dieselbe Komponente
- Die Lagerung ist ein Umschalter statt zweier Auswahlfelder. Standort und
  Fahrzeug schliessen sich aus; so kann der Fehler gar nicht erst entstehen,
  den die Datenbank sonst abweisen wuerde. Beim Wechsel des Fahrzeugs wird die
  Raumangabe zurueckgesetzt.
- Prueftermin und Lebensdauerende werden beim Tippen vorgerechnet, mit
  denselben Funktionen wie auf dem Server. Beim Speichern rechnet der Server
  erneut und behaelt das letzte Wort.
- Gibt es nur einen Standort, ist er beim Anlegen vorbelegt.
- Knopf "Neues Geraet" in der Liste, "Bearbeiten" auf der Detailseite

Behoben:
- Das Formular stuerzte beim ersten Rechnen ab. Die Vorgabewerte lagen in einem
  "use client"-Modul und wurden von einer Server-Komponente importiert; dort
  kommt nur eine Client-Referenz an, kein Objekt, und das Spreaden ergibt lauter
  undefined. Die Werte liegen jetzt in geraet-formular-werte.ts ohne
  "use client".
- Das Sternchen an Pflichtfeldern wurde von Sprachausgaben mitgelesen
  ("Bezeichnung Stern"). Es traegt jetzt aria-hidden; dass ein Feld ausgefuellt
  werden muss, sagt bereits das required-Attribut.
- Fehlermeldungen in Formularen sind eindeutig ansteuerbar. Next.js haengt
  einen eigenen Routen-Ansager mit der Rolle "alert" in jede Seite.

Tests:
- 7 neue Playwright-Tests zum Formular, darunter die Lagerungsregel und die
  Fristenvorschau
- Zwei davon laufen nicht unter Touch-Emulation: Chromium nimmt dort keine
  zeichenweise Eingabe in Datumsfelder an. Begruendet uebersprungen, die
  Rechnung selbst deckt qr-und-fristen.test.ts ab.
- Insgesamt 104 Unit-Tests und 56 E2E-Tests gruen

Anleitung, Changelog, Devlog, Aufwandsschaetzung und Roadmap fortgeschrieben.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Florian Wilde
2026-09-03 09:20:30 +02:00
co-authored by Claude Opus 5
parent 47b8e36a38
commit 1744403620
26 changed files with 1237 additions and 22 deletions
+49
View File
@@ -186,6 +186,55 @@ bewusst keine zweite Historie: zwei Quellen könnten auseinanderlaufen.
---
## 5a. Ein Gerät anlegen oder ändern
![Formular für ein neues Gerät](screenshots/10-geraet-neu-light.png)
Über **Neues Gerät** in der Geräteliste, oder über **Bearbeiten** auf der
Detailseite eines vorhandenen Geräts. Für größere Bestände ist der Import der
schnellere Weg; dieses Formular ist für den Neuzugang zwischendurch.
Pflicht sind nur zwei Angaben: **Inventarnummer** und **Bezeichnung**. Alles
andere kann später nachgetragen werden.
### Der Gerätetyp nimmt Arbeit ab
Wird oben ein Gerätetyp gewählt, gelten dessen Prüfintervall, Prüfvorschrift
und Lebensdauer — man muss sie nicht eintragen. Die Felder darunter bleiben
trotzdem änderbar: Was dort steht, überschreibt die Vorgabe für dieses eine
Gerät. Das braucht man, wenn der Hersteller für eine bestimmte Charge etwas
anderes vorschreibt.
Ist die Bezeichnung noch leer, wird sie aus dem Typ übernommen.
### „Daraus ergibt sich"
Der graue Kasten zeigt, was aus den Angaben folgt: wann die nächste Prüfung
fällig wird und wann die Nutzungsdauer endet. Er rechnet beim Tippen mit,
sodass man vor dem Speichern sieht, was herauskommt. Gerechnet wird mit
denselben Regeln wie auf dem Server — beim Speichern rechnet dieser erneut und
behält das letzte Wort.
Steht dort „keine", fehlt entweder das Prüfintervall oder die Indienststellung.
Das ist kein Fehler: Für Geräte ohne Prüfpflicht ist es der Normalfall.
### Wo liegt es?
Entweder an einem Standort **oder** auf einem Fahrzeug. Der Umschalter lässt
nur eines von beidem zu — deshalb kann hier gar nicht erst der Fehler
entstehen, den die Datenbank sonst abweisen würde.
Bei „Auf einem Fahrzeug" lässt sich zusätzlich der Geräteraum angeben. Er darf
leer bleiben: Manches liegt lose in der Kabine. Wird das Fahrzeug gewechselt,
wird die Raumangabe zurückgesetzt — der Raum gehört zum Fahrzeug.
Gibt es in der Wehr nur einen Standort, ist er beim Anlegen schon ausgewählt.
> Jede Änderung landet im Verlauf des Geräts. Wer wissen will, wann ein
> Prüftermin verschoben wurde und von wem, findet es dort.
---
## 6. Etiketten drucken
Der Bogen ist auf das gängige Format mit **65 Etiketten je DIN-A4-Seite**