import type { Metadata } from 'next' import { db } from '@/lib/db' import { visiblePersonnelWhere } from '@/lib/access/personnelFilter' import { permissionsForPrint } from '@/lib/export/printAccess' import { effectiveCap } from '@/lib/export/dossier' import { DossierBody } from '@/components/print/DossierBody' import { de } from '@/lib/i18n/de' import { NotAvailable } from '../../../NotAvailable' export const dynamic = 'force-dynamic' export const metadata: Metadata = { title: de.export.dossier, robots: { index: false, follow: false }, } /** * Druckansicht einer Personalakte als vollständiges Dossier. * * Alles in **einer** Seite und nicht als mehrere zusammengeheftete PDFs: die * Druckansicht ist ohnehin die einzige Vorlage, und so laufen Seitenzahlen, * Wasserzeichen und Kopfzeile durch. Ein PDF-Zusammenfüger wäre ein zweiter * Weg, der irgendwann anders aussieht als der erste. * * `stufe` deckelt, was aufgenommen wird. Der Wert wird hier **erneut** auf die * Stufe des Abrufers gedeckelt und nicht bloss übernommen: er steht in der * Adresse, und eine Adresse ist eine Eingabe. */ export default async function PrintPersonnelDossierPage({ params, searchParams, }: { params: Promise<{ id: string }> searchParams: Promise<{ token?: string; stufe?: string }> }) { const { id } = await params const { token, stufe } = await searchParams const zugang = await permissionsForPrint(token) if (!zugang) return const { permissions, displayName } = zugang const akte = await db.personnelFile.findFirst({ where: { AND: [visiblePersonnelWhere(permissions), { id }] }, select: { id: true, userId: true, displayName: true, rank: true, classification: true, statusTags: true, note: true, createdAt: true, department: { select: { key: true, name: true } }, }, }) if (!akte) return const cap = effectiveCap(permissions, Number(stufe ?? permissions.clearanceLevel)) return (
) }