Baustein 7: Berichtsheft mit Vorschlaegen, Pruefung, Abzeichnen und PDF

- Taegliche Stichworte, je Tag ein eigenes Formular
- Wochenblatt mit Betrieb, Berufsschule und Sonstiges, je mit Stunden
- Vorschlaege aus Tagesnotizen, Aufgaben, Checklisten und Handouts
- Pruefung mitlaufend beim Tippen: fehlende Stunden, Floskeln,
  IP- und MAC-Adressen, E-Mail, Zugangsdaten, Kundennamen
- Warnung, keine Sperre - Einreichen ist immer moeglich
- Formulierungshilfe mit Taetigkeitsverben und Gegenueberstellungen
- Einreichen, zurueckgeben mit Anmerkung, abzeichnen; danach gesperrt
- Fehlende Wochen werden benannt und lassen sich nachtragen; die laufende
  Nummer richtet sich nach dem Zeitraum, nicht nach dem Anlegen
- PDF im IHK-Layout, einzeln oder als ganzer Zeitraum

Behoben: Im PDF-Kopffeld liefen die Spalten auseinander (dokument.y als
Bezugspunkt in der Schleife). Das Abzeichnen-Formular hatte keine action -
gefunden ueber die ESLint-Meldung zur ungenutzten Serveraktion.

55 neue Tests, insgesamt 241.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Florian Wilde
2026-09-10 23:09:54 +02:00
co-authored by Claude Opus 5
parent b9d6041f3b
commit 7c4a051347
47 changed files with 3679 additions and 8 deletions
@@ -0,0 +1,56 @@
'use client';
import { useActionState } from 'react';
import { Absenden, Meldung } from '@/komponenten/Formularmeldung';
import { blattAbzeichnen, blattZurueckgeben, type Rueckmeldung } from '../aktionen';
/**
* Abzeichnen oder zurückgeben.
*
* Zurückgeben verlangt eine Anmerkung – ohne sie weiß der Azubi nicht, was er
* ändern soll, und das Blatt pendelt hin und her.
*/
export function Abzeichnen({
berichtId,
anmerkung,
status,
}: {
berichtId: string;
anmerkung: string;
status: string;
}) {
const [abzeichenZustand, abzeichnen] = useActionState<Rueckmeldung, FormData>(blattAbzeichnen, {});
const [rueckgabeZustand, zurueckgeben] = useActionState<Rueckmeldung, FormData>(blattZurueckgeben, {});
if (status === 'abgezeichnet') return null;
return (
<form action={abzeichnen} className="stapel-eng">
<input type="hidden" name="berichtId" value={berichtId} />
<Meldung zustand={abzeichenZustand} />
<Meldung zustand={rueckgabeZustand} />
<label htmlFor="anmerkung">Anmerkung an den Azubi</label>
<textarea
id="anmerkung"
name="anmerkung"
rows={3}
maxLength={2000}
defaultValue={anmerkung}
placeholder="Beim Abzeichnen freiwillig, beim Zurückgeben nötig: Was soll er ändern?"
/>
<div className="reihe">
<Absenden className="knopf knopf-akzent">Abzeichnen</Absenden>
<button type="submit" className="knopf knopf-zweit" formAction={zurueckgeben}>
Zur Nacharbeit zurückgeben
</button>
</div>
<p className="leise" style={{ marginBottom: 0 }}>
Abzeichnen sperrt das Blatt endgültig – der Azubi kann es danach nicht mehr ändern.
</p>
</form>
);
}