import Link from "next/link"; import { notFound } from "next/navigation"; import { Download, ListChecks } from "lucide-react"; import { requireSession } from "@/server/auth"; import { dbForTenant } from "@/server/db"; import { PageHead, Pill } from "@/components/mockup-ui"; import { Button } from "@/components/ui/button"; import { buildAbgabeRows } from "@/server/export-context"; import { PRUEFZIEL_LABEL } from "@/lib/export/vda-isa"; /** * ABGABE-Vorschau (VDA-ISA-Prüfungsdokumentation) — Seite des Audit-Wizards. * Zeigt je Control den zusammengesetzten „Beschreibung der Umsetzung"-Text * (übernommene ControlDescription je Anforderung), den bestätigten Reifegrad * und die Referenz-Dokumentation. Download über die geteilte Export-Route als CSV * (`?format=abgabe`) oder als echte xlsx (`?format=abgabe-xlsx`). */ export default async function AbgabePreviewPage({ params }: { params: Promise<{ auditId: string }> }) { const session = await requireSession(); const { auditId } = await params; const db = dbForTenant(session.user.tenantId); const audit = await db.audit.findFirst({ where: { id: auditId } }); if (!audit) notFound(); const rows = await buildAbgabeRows(db, session.user.tenantId); const withText = rows.filter((r) => r.umsetzung).length; return (
{/* Datei-Download über einen Route-Handler (kein Page-Route) — bewusst ``, nicht ``. */} {/* eslint-disable-next-line @next/next/no-html-link-for-pages */} {/* eslint-disable-next-line @next/next/no-html-link-for-pages */} } /> {rows.length === 0 ? (

Keine Controls vorhanden.

) : (
{rows.map((r) => (

{r.control} · {r.frage}

{PRUEFZIEL_LABEL[r.pruefziel]} Reifegrad {r.reifegrad ?? "—"}{r.zielReifegrad !== null ? ` / Ziel ${r.zielReifegrad}` : ""}
{r.umsetzung ? (

{r.umsetzung}

) : (

Noch keine übernommene Beschreibung — im Beschreibungs-Schritt erzeugen und übernehmen.

)} {r.referenzen && (

Referenz Dokumentation: {r.referenzen}

)}
))}
)}

Download als CSV (DE-Excel, semikolongetrennt) oder als xlsx im VDA-ISA-ABGABE-Layout.

); }