Eigene Vorlagen fuer Anschreiben
Wer zum dritten Mal denselben Brief tippt, tippt ihn beim vierten Mal
falsch. Neu unter Einstellungen -> Schreibvorlagen: eigene Texte
hinterlegen, beim freien Schreiben auswaehlen, Platzhalter fuellen sich
aus den Daten, die ohnehin im System stehen.
Aufbau:
- Die Ersetzung als reine Funktionen in schreiben/platzhalter.ts. Drei
Faelle, keiner davon still: Wert einsetzen, sichtbare Luecke
[Aktenzeichen des Gerichts], unbekannter Platzhalter markiert. Ein
Tippfehler in der Vorlage darf das Schreiben nicht verhindern - aber
er muss ins Auge springen.
- Die Bestellungsabsatz-Warnung ist zweistufig: Der erste Speicherversuch
ohne ihn kommt mit einer Rueckfrage zurueck, erst die Bestaetigung
speichert. Ohne den Nachweis der Vertretungsmacht kommt keine Auskunft,
und das faellt erst nach vier Wochen auf. Ein ausformulierter Absatz
zaehlt so viel wie der Platzhalter, ein halber Nachweis ("Beschluss der
Eigentuemerversammlung") nicht.
- Vier mitgelieferte Vorlagen bleiben Code und damit unveraenderlich;
"Als Kopie uebernehmen" legt eine eigene Fassung an. Fuer Rueckkaufswert
und Kuendigung fuehrt die Oberflaeche weiter zuerst zu den
fallbezogenen Erzeugern - die rechnen Kuendigungstermine aus, was eine
Vorlage nicht kann.
- Vorlagen haengen an der betreuten Person, nicht am Benutzer: Sie
beziehen sich auf ihren Fall, liegen im Papierkorb wie alles andere und
sind im Vollexport ihrer Akte enthalten.
Der Editor haelt Betreff und Text als eigenen State. Beim Wechsel der
Vorlage ueberlebte der alte Entwurf die Navigation, die Vorlage kam nie
im Textfeld an - ein key auf dem Editor setzt ihn neu auf. Gefunden hat
das erst der End-to-End-Test.
Geprueft: dreizehn Einheitstests fuer die Ersetzung, sechs
End-to-End-Tests fuer Warnung, Kopie, Aufloesung und Papierkorb.
Refs #7
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
-- Eigene Schreibvorlagen.
|
||||
--
|
||||
-- ACHTUNG, zum vierten Mal: "prisma migrate diff" wollte wieder die
|
||||
-- Trigramm-Indizes aus prisma/sql/suche.sql loeschen. Zeilen entfernt.
|
||||
-- Wer die naechste Migration erzeugt: nachsehen.
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "schreibvorlage" (
|
||||
"id" TEXT NOT NULL,
|
||||
"betreuteId" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"betreff" TEXT NOT NULL DEFAULT '',
|
||||
"text" TEXT NOT NULL,
|
||||
"ohneBestellungsabsatz" BOOLEAN NOT NULL DEFAULT false,
|
||||
"erstelltAm" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"aktualisiertAm" TIMESTAMP(3) NOT NULL,
|
||||
"geloeschtAm" TIMESTAMP(3),
|
||||
|
||||
CONSTRAINT "schreibvorlage_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "schreibvorlage_betreuteId_idx" ON "schreibvorlage"("betreuteId");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "schreibvorlage" ADD CONSTRAINT "schreibvorlage_betreuteId_fkey" FOREIGN KEY ("betreuteId") REFERENCES "betreute"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
@@ -313,6 +313,7 @@ model Betreute {
|
||||
konten Konto[]
|
||||
buchungen Buchung[]
|
||||
zahlungsgruppen ZahlungsgruppeGeklaert[]
|
||||
schreibvorlagen Schreibvorlage[]
|
||||
vermoegensposten Vermoegensposten[]
|
||||
immobilien Immobilie[]
|
||||
vertraege Vertrag[]
|
||||
@@ -842,6 +843,39 @@ enum BuchungKategorie {
|
||||
/// wieder auf. Das ist unangenehm, aber ungefaehrlich - schlimmer waere,
|
||||
/// eine Gruppe stillschweigend weiter zu verbergen, die inzwischen anders
|
||||
/// zugeschnitten ist.
|
||||
/// Eine eigene Schreibvorlage.
|
||||
///
|
||||
/// Die mitgelieferten Vorlagen (Rueckkaufswert, Kuendigung,
|
||||
/// Sachstandsanfrage) stehen bewusst NICHT in dieser Tabelle - sie sind
|
||||
/// Code, getestet und unveraenderlich. "Wiederherstellen" heisst: die
|
||||
/// mitgelieferte Fassung als neue Kopie hierher holen.
|
||||
///
|
||||
/// Der Text traegt Platzhalter im Format {{name}} - aufgeloest in
|
||||
/// src/lib/schreiben/platzhalter.ts. Er ist bewusst NICHT verschluesselt:
|
||||
/// Eine Vorlage ist ein Textbaustein ohne Fallbezug; die Fachdaten kommen
|
||||
/// erst beim Erzeugen hinein.
|
||||
model Schreibvorlage {
|
||||
id String @id @default(cuid())
|
||||
|
||||
betreuteId String
|
||||
betreute Betreute @relation(fields: [betreuteId], references: [id], onDelete: Cascade)
|
||||
|
||||
name String
|
||||
betreff String @default("")
|
||||
text String
|
||||
|
||||
/// Beim Speichern bestaetigt, dass der fehlende Bestellungsabsatz
|
||||
/// Absicht ist - dann wird nicht bei jedem Bearbeiten erneut gewarnt.
|
||||
ohneBestellungsabsatz Boolean @default(false)
|
||||
|
||||
erstelltAm DateTime @default(now())
|
||||
aktualisiertAm DateTime @updatedAt
|
||||
geloeschtAm DateTime?
|
||||
|
||||
@@index([betreuteId])
|
||||
@@map("schreibvorlage")
|
||||
}
|
||||
|
||||
model ZahlungsgruppeGeklaert {
|
||||
id String @id @default(cuid())
|
||||
|
||||
|
||||
Reference in New Issue
Block a user