import { benutzerNachId } from '@/lib/repos/benutzer'; import { ausbildungNachAzubi } from '@/lib/repos/ausbildung'; import { alsWochenblatt } from '@/lib/repos/berichtsheft'; import { berichtsheftPdf } from '@/lib/pdf/berichtsheft'; import { alsDatumText, alsZeitpunktText } from '@/lib/zeit'; import { ausbildungsjahr } from '@/lib/berichtsheft/jahr'; import { blattZumLesen } from '../../aktionen'; export const dynamic = 'force-dynamic'; /** Ein einzelnes Wochenblatt als PDF. Rechteprüfung über `blattZumLesen`. */ export async function GET(_anfrage: Request, kontext: { params: Promise<{ berichtId: string }> }) { const { berichtId } = await kontext.params; const gelesen = await blattZumLesen(berichtId); if (!gelesen) return new Response('Nicht gefunden.', { status: 404 }); const { bericht } = gelesen; const azubi = benutzerNachId(bericht.benutzerId); const ausbildung = ausbildungNachAzubi(bericht.benutzerId); const ausbilder = ausbildung ? benutzerNachId(ausbildung.ausbilderId) : null; const abzeichner = bericht.abgezeichnetVon ? benutzerNachId(bericht.abgezeichnetVon) : null; const pdf = await berichtsheftPdf([ { nr: bericht.nr, von: alsDatumText(bericht.von), bis: alsDatumText(bericht.bis), azubi: azubi?.name ?? 'unbekannt', ausbilder: ausbilder?.name ?? '', beruf: ausbildung?.beruf ?? 'Fachinformatiker/-in für Systemintegration', ausbildungsjahr: ausbildung ? ausbildungsjahr(ausbildung.beginn, bericht.von) : null, status: bericht.status, anmerkung: bericht.anmerkung, abgezeichnetVon: abzeichner?.name ?? null, abgezeichnetAm: bericht.abgezeichnetAm ? alsZeitpunktText(bericht.abgezeichnetAm) : null, blatt: alsWochenblatt(bericht), }, ]); const dateiname = `Ausbildungsnachweis_${String(bericht.nr).padStart(3, '0')}_${bericht.von}.pdf`; return new Response(new Uint8Array(pdf), { headers: { 'Content-Type': 'application/pdf', 'Content-Length': String(pdf.byteLength), 'Content-Disposition': `inline; filename="${dateiname}"`, 'Cache-Control': 'private, no-store', 'X-Content-Type-Options': 'nosniff', }, }); }