feat(calllog): kontaktadresse_id als Pflicht-FK + is_erledigt()-Methoden

- Migration V01_13: Spalte kontaktadresse_id auf call_logs mit Backfill
  über die erste Kontaktadresse des Projekts; Commit vor dem
  Systeminfo-Update (Muster wie V01_08) gegen 'database is locked'.
- CallLog gehört zu genau einer Kontaktadresse (FK, Pflichtfeld);
  create/update validieren Existenz und Projekt-Zugehörigkeit.
- is_erledigt() auf Kontaktadresse (mind. ein erledigend-Tag reicht)
  und Projekt (False ohne Kontakte, sonst alle erledigt); beide in
  to_dict() serialisiert.
- Client: kontaktadresse_id in Notizmaske/Submit (required), Interfaces
  um is_erledigt erweitert.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
gg committed 2026-09-22 20:12:02 +02:00
1 parent 24b492c5c1
commit 977b64292c
9 files changed
+174 -18

No files matched your search

+6 -1
View File
@@ -5,7 +5,10 @@ import m from "mithril"
* Jede Kontaktadresse ist genau einem Projekt zugeordnet (FK projekt_id).
* Die Feldnamen entsprechen den serverseitigen ORM-Spalten (snake_case).
* projekt_name ist keine ORM-Spalte, sondern wird serverseitig aus der
* Projekt-Relationship abgeleitet und im JSON ergänzt.
* Projekt-Relationship abgeleitet und im JSON ergänzt. is_erledigt ist
* ebenfalls keine Spalte, sondern wird serverseitig dynamisch berechnet:
* True, sobald mindestens eine Gesprächsnotiz des Kontakts einen Tag mit
* is_erledigend=True hat.
*/
export interface iKontaktadresse {
id: number
@@ -22,6 +25,8 @@ export interface iKontaktadresse {
ort: string
land: string
notiz: string
/** Dynamisch berechneter Erledigt-Status (keine ORM-Spalte). */
is_erledigt: boolean
}
/* ------------------------------------------------------------------ */