import type { Metadata } from 'next' import { redirect } from 'next/navigation' import { Alert, AlertDescription } from '@/components/ui/alert' import { AlertCircle, Scale } from 'lucide-react' import { SeitenKopf } from '@/components/seiten-kopf' import { SchreibenEditor } from '@/components/schreiben/schreiben-editor' import { aktiveBetreute, erfordereBenutzer, erfordereZugang } from '@/lib/auth/sitzung' import { db, nichtGeloescht } from '@/lib/db' import { entwurfBauen } from '@/lib/schreiben/entwurf' import { SCHREIBEN_EIGENSCHAFTEN, istSchreibenArt } from '@/lib/schreiben/arten' export const metadata: Metadata = { title: 'Schreiben' } export const dynamic = 'force-dynamic' /** * Ein Schreiben erzeugen, bearbeiten, ausgeben und ablegen. * * Eine Seite für alle Arten und alle drei Empfängerwege — statt die * Bearbeitung dreimal an Vertrag, Vorgang und Freitext nachzubauen. Die * bestehenden Seiten verlinken hierher. * * Der Fall ohne Bezug ist ausdrücklich vorgesehen: Am Anfang einer * Betreuung schreibt man an Stellen, zu denen es noch keinen Datensatz * gibt — man fragt ja gerade an, um zu erfahren, ob dort etwas besteht. */ export default async function SchreibenSeite({ searchParams, }: { searchParams: Promise> }) { const parameter = await searchParams const benutzer = await erfordereBenutzer('/schreiben/neu') const aktive = await aktiveBetreute(benutzer) if (!aktive) redirect('/ersteinrichtung') const { darfSchreiben } = await erfordereZugang(aktive.id, 'DOKUMENTE', 'lesen') if (!darfSchreiben('DOKUMENTE')) redirect('/dokumente') const text = (name: string): string => { const wert = parameter[name] return typeof wert === 'string' ? wert.trim() : '' } const rohArt = text('art') const art = istSchreibenArt(rohArt) ? rohArt : 'FREI' const eigenschaften = SCHREIBEN_EIGENSCHAFTEN[art] let entwurf try { entwurf = await entwurfBauen({ betreuteId: aktive.id, benutzerName: benutzer.name, art, vertragId: text('vertragId') || null, vorgangId: text('vorgangId') || null, }) } catch (ausnahme) { // Fehlender oder fremder Bezug: Das ist kein Absturz, sondern eine // Angabe, die nicht stimmt. Die Seite sagt es und bietet den freien // Weg an, statt den Benutzer vor eine Fehlerseite zu setzen. const meldung = ausnahme instanceof Error ? ausnahme.message : 'Der Entwurf ließ sich nicht bauen.' return (
) } const kontakte = await db.kontakt.findMany({ where: { betreuteId: aktive.id, ...nichtGeloescht }, select: { id: true, name: true, organisation: true, strasse: true, plz: true, ort: true, email: true, }, orderBy: [{ organisation: 'asc' }, { name: 'asc' }], take: 200, }) return (
) }