Termine und Aufgaben: Ein Kalender, der Outlook und Nextcloud versteht
Ein Maklerbüro lebt von Terminen: Besichtigung am Dienstag, Notar am Freitag, der Rückruf, der seit zwei Wochen auf der Liste steht. Bisher hatten diese Dinge in unserer Maklersoftware keinen Platz, sie wohnten in Outlook, in Nextcloud, auf Zetteln. Seit dieser Woche gibt es im CRM einen Ort dafür: Kalender, Termine und Aufgaben, mit allem, was die beiden großen Welten auch können — Serien, Erinnerungen, Kategorien, Teilnehmer.
Wir haben bewusst mit der Datenbasis angefangen, nicht mit der Ansicht. Kein Wochenraster, kein Drag-and-Drop von Terminblöcken. Stattdessen Listen: eine Kalenderliste, eine Aufgabenliste, und im Kalender selbst die Liste seiner Termine. Das klingt bescheiden, ist aber die Reihenfolge, die hält. Die Ansichten kommen, wenn die Daten stimmen — und ob die Daten stimmen, erkennt man am Import.
Eine Sprache für Outlook und Nextcloud
Outlook und Nextcloud könnten unterschiedlicher nicht sein, und doch sprechen beide dieselbe Sprache, wenn es um Termine geht: iCalendar, ein Textformat aus den Neunzigern, das jeder Kalender auf der Welt lesen und schreiben kann. Ein Termin ist darin ein VEVENT, eine Aufgabe ein VTODO, eine Serie eine Regel wie FREQ=WEEKLY;BYDAY=MO,WE. Wir haben unser Datenmodell an diesem Format entlang gebaut. Nicht, weil es schön wäre — es ist es nicht —, sondern weil damit jeder Termin, der aus Outlook kommt, ohne Verlust bei uns ankommt und eines Tages genauso wieder hinausgeht.
Die Serien waren der schwierigste Teil. Eine Regel wie jeden zweiten Montag im Monat, bis Jahresende, außer am 14. Oktober muss die Maklersoftware nicht nur speichern, sondern entfalten können: Wann ist das nächste Vorkommen? Welche Termine fallen in diese Woche? Dafür gibt es jetzt einen eigenen Rechenkern im Datenmodell, der die Regelsprache liest, die Ausnahmen abzieht und geänderte Einzeltermine an ihrer Stelle einsetzt. Und weil kein Anwender BYMONTHDAY=15 tippen möchte, sitzt im Termin-Dialog ein Serien-Editor: Häufigkeit, Intervall, Wochentage, Monatstag, Ende — und darunter eine Vorschau der nächsten zehn Vorkommen, die sich bei jedem Klick aktualisiert. Regelteile, die der Editor nicht anzeigt, weil sie zu exotisch sind, bleiben unangetastet erhalten; der Editor sagt es dazu.
Import aus Outlook und Nextcloud
Der Import kennt zwei Wege. Der erste ist die Kalenderdatei: Outlook exportiert einen Kalender als .ics, Nextcloud ebenso, und die Maklersoftware liest beides ein — mit Vorschau, bevor etwas passiert. Die Vorschau zeigt je Eintrag, ob er neu wäre oder schon vorhanden, und ob er eine Serie trägt. Der Import selbst läuft als Serveraufgabe im Hintergrund, mit Fortschritt und Protokoll, wie beim Kontakt-Import vor zwei Wochen. Ein zweiter Import derselben Datei verdoppelt nichts: Jeder Termin trägt seine Kennung aus der Quelle, und ein bekannter Termin wird aktualisiert statt neu angelegt.
Der zweite Weg ist ein CalDAV-Konto — das Protokoll, über das Nextcloud seine Kalender freigibt. In der CRM-Administration legt man das Konto an, prüft die Verbindung und sieht, welche Kalender und Aufgabenlisten der Server anbietet. Ein Klick auf Kalender importieren holt sie alle: jede Sammlung bekommt bei uns einen eigenen Spiegelkalender, der weiß, woher er kommt. Zeitzonen werden dabei aufgelöst; ein Berliner Termin um zehn bleibt ein Termin um zehn, auch wenn die Datei ihn in UTC notiert hat.
Erinnerungen und Teilnehmer nehmen wir mit, werten sie aber noch nicht aus. Sie stehen als Text am Termin, damit nichts verloren geht, und warten auf die Ansichten, in denen sie etwas tun können.
Kalender teilt man, Termine nicht
Die interessanteste Entscheidung war eine über Rechte. Unser Rechtesystem kann jeden Datensatz einem Benutzer oder Team zuweisen, und für Kontakte ist das genau richtig: Der eine Kontakt gehört mir, der andere dem Team. Bei Terminen wäre das falsch. Niemand teilt einzelne Termine; man teilt einen Kalender. Also ist bei uns der Kalender der Rechteträger, und jeder Termin folgt ihm — dasselbe Muster, mit dem im letzten Bericht die Anfragen ihrem Lead folgten. Wer den Teamkalender sieht, sieht alle Termine darin; ein Termin, den man in einen anderen Kalender verschiebt, wechselt damit seine Sichtbarkeit.
Aufgaben dagegen sind einzeln zuweisbar, wie Kontakte. Der Rückruf gehört einer Person, nicht einem Kalender. Beides, Kalender und Aufgaben, stehen im Gruppenbaum des Maklerbüros und lassen sich per Drag-and-Drop einsortieren. Ein Einzelmakler merkt von alledem nichts: Er hat seinen Kalender, seine Aufgaben, fertig. Die Datentrennung ist da, sie ist nur nicht im Weg.
Und weil Termine im CRM etwas mit Menschen zu tun haben, hat jeder Kontakt und jeder Lead einen neuen Reiter: Termine & Aufgaben. Die Besichtigung steht am Interessenten, der Rückruf am Eigentümer — angelegt direkt dort, mit dem Bezug schon gesetzt.
Die Regel, die nicht in den Kern durfte
Jeder Benutzer hat einen Standardkalender: den, in den ein Termin fällt, wenn niemand einen anderen wählt. Beim Livetest der Zuweisung fiel eine Lücke auf. Wer einen Kalender einem anderen Benutzer zuweist, nimmt ihn dem bisherigen weg — und wenn es sein Standardkalender war, verliert der Kollege seinen Standard, ohne dass es jemand merkt. Der Server hätte ihm beim nächsten Termin still einen neuen, leeren angelegt.
Die erste Idee war, das im Zuweisungs-Endpunkt abzufangen. Nur: Dieser Endpunkt ist generisch. Er kennt Kontakte, Kalender, Vorlagen, Immobilien nur als Datensatz mit Zuständigem, und genau das macht ihn wertvoll. Eine Ausnahme für Kalender hineinzuschreiben hätte den Kern mit dem ersten Modul verheiratet, das eine Sonderregel braucht. Also bekam der Kern stattdessen eine Naht: Jedes Modul kann eine Zuweisungsregel anmelden, und der Endpunkt fragt vor dem Speichern alle an. Das CRM meldet eine an — ein Standardkalender bleibt bei seinem Benutzer; ein Teamwechsel ist frei — und der Kern weiß weiterhin nicht, was ein Kalender ist. Das nächste Modul mit einer solchen Regel, etwa eine Immobilie mit laufendem Vertrag, nutzt dieselbe Naht.
Die Bilanz in Zahlen
- 4 neue Datentypen: Kalender, Termin, Aufgabe, CalDAV-Konto — dazu ein Rechenkern für Serienregeln
- 2 Importwege: Kalenderdatei mit Vorschau und CalDAV-Konto mit Spiegelkalendern
- 1 Serien-Editor mit Vorschau, in Termin- und Aufgaben-Dialog
- 1 Naht im Kern für Zuweisungsregeln der Module
- über 4.700 automatische Tests, alle grün, null Befunde in der Code-Analyse
Was Anwender davon sehen: ein Dokument Planer mit Kalendern und Aufgaben, einen Kalender-Dialog mit seinen Terminen, den Reiter am Kontakt — und einen Import, der die Vergangenheit aus Outlook und Nextcloud mitbringt. Was als Nächstes kommt, steht in den Listen schon drin: die Kalenderansicht, die aus denselben Daten ein Wochenraster macht, und das Benutzerdokument, das Kalender, Aufgaben und Kontakte eines Maklers an einem Ort zeigt.