'use client' import { useState } from 'react' import { useTheme } from '@/lib/ThemeContext' import { calendarApi } from '@/lib/schulkalender/api' import type { SchoolYearRolloverResult } from '@/app/schulkalender/types' interface RolloverWizardProps { onClose: () => void onDone: () => void } function nextSchoolYearISO(): { start: string; end: string } { const now = new Date() let y = now.getFullYear() if (now.getMonth() + 1 >= 8) y++ // Aug → bumped to next year return { start: `${y}-08-01`, end: `${y + 1}-07-31` } } export function RolloverWizard({ onClose, onDone }: RolloverWizardProps) { const { isDark } = useTheme() const defaults = nextSchoolYearISO() const [start, setStart] = useState(defaults.start) const [end, setEnd] = useState(defaults.end) const [confirm, setConfirm] = useState('') const [saving, setSaving] = useState(false) const [error, setError] = useState(null) const [result, setResult] = useState(null) const expected = 'SCHULJAHR WECHSELN' const handleSubmit = async () => { setSaving(true) setError(null) try { const r = await calendarApi.rolloverSchoolYear(start, end) setResult(r) } catch (e) { setError(e instanceof Error ? e.message : 'Rollover fehlgeschlagen') } finally { setSaving(false) } } const cardClass = isDark ? 'bg-slate-900/95 border-white/20 text-white' : 'bg-white border-black/10 text-slate-900' const inputClass = isDark ? 'bg-white/10 border-white/20 text-white' : 'bg-white border-slate-300 text-slate-900' return (

Schuljahres-Wechsel

{result ? (
Rollover erfolgreich
  • {result.classes_promoted} Klassen um eine Stufe aufgerueckt
  • {result.classes_graduated} Abschlussklassen entfernt
  • Neues Schuljahr: {result.new_year_start} – {result.new_year_end}
) : ( <>

Was passiert?

  • Alle Klassen ruecken eine Stufe hoeher (5a → 6, 6a → 7, …)
  • Abschlussklassen (Stufe 13) werden entfernt
  • Lehrer, Faecher, Raeume, Zeitraster bleiben unveraendert
  • Vorhandene Stundenplaene bleiben als Historie erhalten
setStart(e.target.value)} className={`w-full px-3 py-2 rounded-lg border ${inputClass}`} />
setEnd(e.target.value)} className={`w-full px-3 py-2 rounded-lg border ${inputClass}`} />
setConfirm(e.target.value)} data-testid="rollover-confirm" className={`w-full px-3 py-2 rounded-lg border ${inputClass}`} />
{error && (
{error}
)}
)}
) }