From fdd51b18e20d7f43eefa4d7eae20bdbc594aa246 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 2 Oct 2026 13:06:05 +0200 Subject: [PATCH] =?UTF-8?q?Lizenzen:=20Kunde=20auf=20der=20Detailseite=20z?= =?UTF-8?q?uweisen,=20=C3=A4ndern=20oder=20Zuordnung=20l=C3=B6sen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- apps/web/src/app/(app)/lizenzen/[id]/page.tsx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/apps/web/src/app/(app)/lizenzen/[id]/page.tsx b/apps/web/src/app/(app)/lizenzen/[id]/page.tsx index b4f08bf..6202aed 100644 --- a/apps/web/src/app/(app)/lizenzen/[id]/page.tsx +++ b/apps/web/src/app/(app)/lizenzen/[id]/page.tsx @@ -29,13 +29,15 @@ const Dd = ({ label, children }: { label: string; children: ReactNode }) =>
(iso ? new Date(new Date(iso).getTime() - new Date().getTimezoneOffset() * 60000).toISOString().slice(0, 10) : ''); export default function Lizenz() { - const { id } = useParams<{ id: string }>(); const { can } = useSession(); const staff = can('licenses.read'); + const { id } = useParams<{ id: string }>(); const { can } = useSession(); const staff = can('licenses.read'); const w = can('licenses.write'); + const [custs, setCusts] = useState<{ id: string; name: string; customerNumber: string }[]>([]); const [assignTo, setAssignTo] = useState(''); const [d, setD] = useState(null); const [msg, setMsg] = useState<{ k: 'ok' | 'err' | 'warn'; t: string } | null>(null); const [busy, setBusy] = useState(false); const [confirm, setConfirm] = useState Promise }>(null); const [products, setProducts] = useState(null); const load = useCallback(() => api('GET', `/licenses/${id}`).then(setD).catch((e) => setMsg({ k: 'err', t: errMsg(e) })), [id]); useEffect(() => { void load(); }, [load]); useEffect(() => { if (d?.can.manage && products === null) api<{ products: CatalogProduct[] }>('GET', '/admin/licenses/catalog').then((c) => setProducts(c.products)).catch(() => setProducts([])); }, [d?.can.manage, products]); + useEffect(() => { if (w) api('GET', '/admin/customers').then(setCusts).catch(() => undefined); }, [w]); if (!d) return msg ? {msg.t} :

Wird geladen …

; async function act(fn: () => Promise, ok: string) { @@ -82,9 +84,17 @@ export default function Lizenz() { {d.can.reveal &&

Lizenzschlüssel

} + {w &&

{d.orgId ? 'Kunde ändern' : 'Kunde zuweisen'}

+
+ + + {d.orgId && } +
+

Ändert nur die Zuordnung im Kundencenter, nicht die Lizenz im Lizenzsystem.

} +

Details

- {staff &&
{d.orgId ? {d.customerNumber} · {d.orgName} : 'nicht zugewiesen'}
} + {staff &&
{d.orgId ? {d.customerNumber} · {d.orgName} : Nicht zugewiesen}
}
{d.program ?? '–'}
{d.product ?? d.edition ?? '–'}
{d.durationType ? DURATION[d.durationType] ?? d.durationType : '–'}