"use client"; import { useActionState, useState } from "react"; import type { AktionsErgebnis } from "@/server/actions/kunden"; import { laufzeitAnlegenAktion } from "@/server/actions/rechnungen"; const LEER: AktionsErgebnis = {}; /** Ein Jahr minus einen Tag – dieselbe Rechnung wie beim Vorschlag aus dem Agenten-Report. */ function endeAus(start: string): string { if (!start) return ""; const datum = new Date(`${start}T00:00:00Z`); datum.setUTCFullYear(datum.getUTCFullYear() + 1); datum.setUTCDate(datum.getUTCDate() - 1); return datum.toISOString().slice(0, 10); } /** * Laufzeit von Hand anlegen (#043). * * Der Normalfall ist der Vorschlag aus dem Agenten-Report. Von Hand braucht man es, wenn ein Host * (noch) kein Ablaufdatum meldet – etwa weil der Key erst bestellt ist – oder wenn ein * zurückliegendes Lizenzjahr nachgetragen werden soll. */ export function LaufzeitAnlegen({ hosts, }: { hosts: { id: string; hostname: string; kundeName: string | null; subKey: string | null }[]; }) { const [ergebnis, aktion, laeuft] = useActionState(laufzeitAnlegenAktion, LEER); const [hostId, setHostId] = useState(""); const [key, setKey] = useState(""); const [start, setStart] = useState(""); const [ende, setEnde] = useState(""); const gewaehlt = hosts.find((host) => host.id === hostId); return (
{ergebnis.fehler ?
{ergebnis.fehler}
: null} {ergebnis.erfolg ?
{ergebnis.erfolg}
: null}
setKey(e.target.value)} placeholder="pve2s-…" required /> {gewaehlt?.subKey ? (
Gemeldet: {gewaehlt.subKey}
) : (
Dieser Host meldet keinen Key – Nummer aus der Bestellung eintragen.
)}
{ setStart(e.target.value); setEnde(endeAus(e.target.value)); }} required />
setEnde(e.target.value)} required />
Ein Jahr, vorbelegt.
); }