import { db } from '@/lib/db'
import { de } from '@/lib/i18n/de'
import type { EffectivePermissions } from '@/lib/auth/permissions'
/**
* Der Druckbogen einer Personalakte: die Kopfdaten selbst.
*
* Die Personalakte trägt keine Vorlage mit Abschnitten wie eine Fallakte - was
* über die Person aktenkundig ist, steht in ihren Dokumenten. Deshalb ist
* dieser Bogen kurz; das Gewicht des Dossiers liegt in dem, was dahinter
* kommt. Siehe lib/export/dossier.ts.
*/
export type PersonnelForPrint = {
id: string
userId: string | null
displayName: string
rank: string | null
classification: number
statusTags: string[]
note: string | null
department: { key: string; name: string } | null
createdAt: Date
}
export async function PersonnelSheet({
permissions,
displayName,
akte,
withCover = true,
}: {
permissions: EffectivePermissions
displayName: string
akte: PersonnelForPrint
withCover?: boolean
}) {
const [levels, etiketten] = await Promise.all([
db.clearanceLevelConfig.findMany({ orderBy: { level: 'asc' } }),
akte.statusTags.length === 0
? []
: db.personnelStatusTag.findMany({
where: { key: { in: akte.statusTags } },
orderBy: { sortOrder: 'asc' },
select: { key: true, name: true },
}),
])
const levelName = new Map(levels.map((l) => [l.level, l.name]))
const stufe = `${akte.classification} · ${levelName.get(akte.classification) ?? de.common.unknown}`
return (
<>
{withCover ? (
{de.personnel.one}
{de.export.coverNote}
{akte.department?.name ?? de.personnel.noDepartment}
{akte.rank ? `[${akte.rank}] ` : ''}
{akte.displayName}
{akte.rank ? `[${akte.rank}] ` : ''}
{akte.displayName}