Kivitendo-Patches (3): Kontaktdaten aus ERP-System in der Telefonanlage

Veröffentlicht am: Di 04 Juni 2024

Artikelserie Kivitendo-Patches

Ich verwende das freie ERP-System Kivitendo für meine Buchhaltung, Rechnungslegung und Wareverwaltung. Im täglichen Betrieb fallen mir immer wieder fehlende Features oder Bugs auf, die ich durch eigene Patches behebe. Alles, was "druckreif" ist, veröffentliche ich und gebe es in Form von Pull-Requests an das Upstream-Projekt zurück. Manche dieser Pull-Requests, wie der verbesserte ZUGFeRD/XRechnung-Import, werden angenommen, andere nicht. Damit auch die nicht angenommenen Patches nicht in Vergessenheit geraten, halte ich sie hier nochmal in Form von ausführlichen Artikeln fest.

Selbstverständlich biete ich die Pflege und Anpassung dieser Patches an aktuelle und zukünftige Kivitendo-Versionen, sowie die Neuentwicklung von Patches als Dienstleistung an. Bei Interesse daran kontaktieren Sie mich bitte per E-Mail für ein unverbindliches Angebot.

Screenshot der bisherigen Kreditorenbuchung ohne Metadaten zu den Einzelposten

Abb. 1: Eine unbekannte Mobilnummer ruft an...

Fritzbox kann CardDAV...

Vor kurzem stellte ich fest, dass die Fritzbox unter anderem CardDAV-Telefonbücher unterstützt.

Bei CardDAV handelt es sich um ein HTTP-basiertes Protokoll, über das Kontaktdaten im VCard-Format auf einem zentralen Server verwaltet werden können. Auf diesen Server können Nutzer oder auch Programme Kontaktdaten im vCard-Format hochladen. Andere Systeme wie die Fritzbox können diese Kontaktdaten nutzen um zum Beispiel der Rufnummer eines eingehenden Anrufs einen Namen zuzuordnen. Das ist auch nicht auf die Fritzbox beschränkt: Auch Email-Programme oder die Addressbücher von Smartphones unterstützen oft die Synchronisation mit CardDAV-Servern.

Screenshot der verbesserten Kreditorenbuchung mit Metadaten zu den Einzelposten

Abb. 2: ...mit CardDAV sieht man, dass es Max Mustermann von Mustermann Sanitär ist.

...Kivitendo bisher noch nicht

Die Kontaktdaten meiner Kunden und Lieferanten liegen in der Datenbank meines Kivitendo-Servers in strukturierter Form vor. Allerdings waren sie bisher nur über das Webinterface des Kivitendo-Servers zugänglich, mit dem die Fritzbox selbstverständlich nicht umgehen kann. Daher wollte ich diese Daten auch per CardDAV verfügbar machen und habe einen entsprechenden Patch entwickelt.

Bei diesem Patch handelt es sich um einen Hintergrundjob, der im Task Server von Kivitendo läuft. Solche Hintegrundjobs laufen periodisch zu konfigurierbaren Zeitpunkten und verrichten in der Regel diverse Aufräum- und Pflegearbeiten in der Kivitendo-Datenbank. In diesem Fall erzeugt der Hintergrundjob aus sämtlichen Kontaktdaten von Kunden und Lieferanten vCard-Dateien und legt sie in einem Verzeichnis im Dateisystem des Kivitendo-Servers ab.

Radicale statt eigener CardDAV-Implementierung

Das Exportverzeichnis spielt eine zentrale Rolle beim eigentlichen CardDAV-Export. Hierfür verwende ich den CardDAV-Server Radicale. Neben den vCard-Dateien erzeugt der Hintergrundjob genau die gleiche Verzeichnisstruktur wie die, in der Radicale seine Addressbücher ablegt. Somit kann man dieses Verzeichnis in der Radicale-Konfiguration als filesystem_folder angeben und auf dem Kivitendo-Server Radicale starten.

Für diesen Ansatz habe ich mich aus pragmatischen Gründen entschieden: CardDAV ist ein relativ komplexes Protokoll und es ganz oder teilweise in Kivitendo selbst umzusetzen hätte erheblichen Mehraufwand bedeutet: Ich habe ungefähr zwei Tage mit Entwicklung und Testen des ganzen Ensembles zugebracht. Eine nur teilweise Eigenimplementierung von CardDAV läge dagegen in der Größenordnung von mindestens zwei Wochen.

CardDAV für meine Kunden

Der Kontaktdatenexport über einen CardDAV-Server ist nicht auf Kivitendo beschränkt. Ich schaue mir gerne die Software an, die Sie verwenden und entwickle eine individuelle Lösung für Sie. In der Regel ist das möglich. Einzige Voraussetzung ist ein Weg um Kontaktdaten zu exportieren. Um die Konvertierung in ein CardDAV-taugliches Format kümmere ich mich gegebenenfalls auch.

×