import { db } from '@/lib/db' import { de } from '@/lib/i18n/de' import { collectPersonnelDossier, type Dossier } from '@/lib/export/dossier' import { CaseSheet } from '@/components/print/CaseSheet' import { DocumentSheet } from '@/components/print/DocumentSheet' import { PersonnelSheet, type PersonnelForPrint } from '@/components/print/PersonnelSheet' import type { EffectivePermissions } from '@/lib/auth/permissions' /** * Ein Dossier: die Personalakte, dahinter ihre Dokumente, dahinter die * Fallakten, in denen die Person vorkommt. * * Die Reihenfolge ist die Vorgabe und keine Geschmacksfrage - wer eine Akte * aufschlägt, will zuerst wissen, um wen es geht. * * Der Vermerk über das Weggelassene steht **vorn**, gleich hinter der Akte, * nicht am Ende: wer die letzten Seiten nicht liest, muss trotzdem erfahren, * dass die Mappe gekürzt ist. */ export async function DossierBody({ permissions, displayName, akte, cap, /** Im Abteilungsbogen steht der Deckel schon vorn. */ withCover = true, }: { permissions: EffectivePermissions displayName: string akte: PersonnelForPrint cap: number withCover?: boolean }) { const [inhalt, autoren] = await Promise.all([ collectPersonnelDossier(permissions, { id: akte.id, userId: akte.userId }, cap), db.user.findMany({ select: { id: true, displayName: true } }), ]) const nameVon = new Map(autoren.map((a) => [a.id, a.displayName])) return ( <>

{de.export.documentsHeading}

{inhalt.documents.length === 0 ? (

{de.export.noDocuments}

) : ( inhalt.documents.map((doc, index) => (
)) )}

{de.export.casesHeading}

{inhalt.cases.length === 0 ? (

{de.export.noCases}

) : ( inhalt.cases.map((akte, index) => (
)) )} ) } /** * Was der Abrufer hätte sehen dürfen und selbst ausgeschlossen hat. * * Steht bewusst da, auch wenn nichts weggelassen wurde - dann als leere * Aussage: "nichts weggelassen" ist eine Information. Nur was **über** der * Stufe des Abrufers liegt, taucht hier nie auf; das existiert für ihn nicht. */ export function OmittedNote({ inhalt, eigeneStufe, }: { inhalt: Pick eigeneStufe: number }) { if (inhalt.omittedTotal === 0 && !inhalt.truncated) return null return (

{de.export.omittedHeading}

{inhalt.omittedTotal > 0 ? ( <>

{de.export.omittedNote(eigeneStufe)}

    {inhalt.omitted.map((zeile) => (
  • {de.export.omittedRow(zeile.level, zeile.documents, zeile.cases)}
  • ))}
) : null} {inhalt.truncated ? (

{de.export.truncated}

) : null}
) }