Ein namentlich adressiertes Schreiben landet bei der Person, die den Vorgang kennt, statt in der Poststelle. Am Vorgang laesst sich jetzt ein Kontakt aus dem Verzeichnis als Ansprechpartner benennen; die Sachstandsanfrage redet ihn an, und sein Name steht ueber der Behoerde. Die Sachstandsanfrage konnte das schon - sie bekam den Namen nur nie uebergeben. entwurf.ts lud einen der verknuepften Kontakte und verwarf ihn wieder. Wer angeredet wird, ist jetzt eine Entscheidung und kein Zufall. Aufbau: - Migration: ansprechpartnerId am Vorgang (SetNull - ein Vorgang darf nicht daran haengen, dass es den Kontakt noch gibt) und anrede am Kontakt. - Die Anrede als reine Funktion in kontakte/anrede.ts. Geraten wird nie: ohne hinterlegte Anrede wird mit vollem Namen angeredet. Ein leerer Name mit gesetzter Anrede faellt auf die allgemeine Anrede zurueck - "Sehr geehrte Frau ," darf nie herausgehen. - Der Wechsel des Ansprechpartners steht mit NAMEN im Protokoll. Zwei cuids nebeneinander waeren protokolliert, aber nicht nachvollziehbar, und nachvollziehbar war die Anforderung. - Der Ansprechpartner wird gegen die Akte geprueft, bevor er gespeichert wird - sein Name steht anschliessend im Briefkopf. Nebenbei behoben: Der Schreiben-Editor verwarf die empfaengerAnschrift aus dem Entwurf, sein State startete immer leer. Jetzt kommt die Anschrift des Ansprechpartners im Formular an. Geprueft: neun Einheitstests fuer die Anrede, fuenf End-to-End-Tests von der Auswahl bis zum Protokolleintrag. Refs #9
65 lines
2.0 KiB
TypeScript
65 lines
2.0 KiB
TypeScript
import type { Metadata } from 'next'
|
|
import { notFound, redirect } from 'next/navigation'
|
|
import { SeitenKopf } from '@/components/seiten-kopf'
|
|
import { KontaktFormular } from '@/components/kontakte/kontakt-formular'
|
|
import { aktiveBetreute, erfordereBenutzer, erfordereZugang } from '@/lib/auth/sitzung'
|
|
import { oeffnen } from '@/lib/crypto/feld'
|
|
import { db, nichtGeloescht } from '@/lib/db'
|
|
|
|
export const metadata: Metadata = { title: 'Kontakt bearbeiten' }
|
|
|
|
export default async function KontaktBearbeitenSeite({
|
|
params,
|
|
}: {
|
|
params: Promise<{ id: string }>
|
|
}) {
|
|
const { id } = await params
|
|
|
|
const benutzer = await erfordereBenutzer(`/kontakte/${id}/bearbeiten`)
|
|
const aktive = await aktiveBetreute(benutzer)
|
|
if (!aktive) redirect('/ersteinrichtung')
|
|
|
|
const { betreute } = await erfordereZugang(aktive.id, 'KONTAKTE', 'schreiben')
|
|
|
|
const roh = await db.kontakt.findFirst({
|
|
where: { id, betreuteId: betreute.id, ...nichtGeloescht },
|
|
})
|
|
if (!roh) notFound()
|
|
|
|
const kontakt = oeffnen('Kontakt', roh)
|
|
|
|
return (
|
|
<div className="max-w-3xl space-y-6">
|
|
<SeitenKopf
|
|
titel="Kontakt bearbeiten"
|
|
beschreibung={kontakt.name}
|
|
pfad={[
|
|
{ titel: 'Heute', href: '/heute' },
|
|
{ titel: 'Kontakte', href: '/kontakte' },
|
|
{ titel: kontakt.name, href: `/kontakte/${kontakt.id}` },
|
|
{ titel: 'Bearbeiten' },
|
|
]}
|
|
/>
|
|
<KontaktFormular
|
|
betreuteId={betreute.id}
|
|
kontakt={{
|
|
id: kontakt.id,
|
|
name: kontakt.name,
|
|
organisation: kontakt.organisation,
|
|
rolle: kontakt.rolle,
|
|
anrede: kontakt.anrede,
|
|
telefon: kontakt.telefon,
|
|
mobil: kontakt.mobil,
|
|
fax: kontakt.fax,
|
|
email: kontakt.email,
|
|
strasse: kontakt.strasse,
|
|
plz: kontakt.plz,
|
|
ort: kontakt.ort,
|
|
aktenzeichen: kontakt.aktenzeichen,
|
|
notizen: kontakt.notizen ?? null,
|
|
}}
|
|
/>
|
|
</div>
|
|
)
|
|
}
|