Screenshot 2024-04-10 123944-imageonline.co-merged

Projekt | Odoo-Zeiterfassung

Von am 27.05.2024

Idee dieses Projektes ist die Entwicklung eines Zeiterfassungs-/Stempelsystems für Unternehmensmitarbeiter, dass mit den in Odoo integrierten Modulen verknüpft ist bzw. auf die zugrundeliegene Datenbank aufbaut. Dies ist ein Ein-Personen-Projekt.

ODOO ERP-System

Odoo ist ein ERP-System. ERP (Enterprise Resource Planning) bezeichnet einen Software-Typ, den Unternehmen zur Verwaltung der täglichen Geschäftstätigkeit verwenden. Odoo ist als eine Art Suite von Betriebsanwendungen vorstellbar, die verschiedenste Bedürfnisse eines Unternehmens in einer Software vereint abdeckt. Beispiele dafür sind Projektmanagement, Rechnungsstellung, Einkauf, Lager, Personalwesen, uvw. Das System ist dabei beliebig um Applikationen erweiterbar – die unter anderem im Odoo App Store zum Kauf angeboten werden.

Beweggründe für das Projekt

Odoo gibt es in einem Abonnement oder as kostenlose Community Edition. Odoo muss einer vielzahl an Unternehmenstypen gerecht werden und kann damit nicht all die Sonderwünsche abdecken die ein jeder haben möchte. Wenngleich es einen erweiterbaren modularen Ansatz verfolgt.

Das Unternehmen Triolgic Automation GmbH nutzt seit Ende letzten Jahren Odoo für den eigenen Betrieb. Prinzipiell ist man zufrieden aber es gibt ein paar Kritikpunkte für die man noch keine Lösung hat. Ein Kritikpunkt an Odoo ist etwa die Aufteilung zwischen Anwesenheit und Zeiterfassung. Jeder Mitarbeiter sollte zu jeder Zeit auf ein Projekt gestempelt sein. In Odoo ist es aber so geregelt das die Zeiterfassung nachträglich erfolgen muss und diese nicht von der Anwesenheit abhängt. Deshalb besteht der Bedarf an einer eigens angepassten Stempelapp, welche diese Bedürnisse abdeckt. Diese soll mit den in Odoo integrierten Modulen Anwesenheit, Zeiterfassung und Abwesenheiten synchronisiert sein, da die Projektabrechnung von den geleisteten Stunden abhängig ist. Das folgende Video soll einen kurzen Einblick in die erwähnten Module geben.

Funktionsübersicht

Vorab ist es wichtig anzumerken das sämtliche Daten in der Applikation aus der Datenbank stammen auf die auch Odoo zugreift. Will heißen das zum Beispiel Anwesenheitseinträge die im Tool erstellt werden auch in Odoo aufscheinen und umgekehrt.

Login & Stempeln

Die Anmeldung erfolgt mithilfe der Zugangsdaten des Odoo-Benutzers. Alternativ kann man sich mit einem dem Odoo-Benutzer zugeordneten RFID-Chip am Kiosk anmelden. Nach der Anmeldung gelangt man auf die Stempelseite. Hier kann bzw. muss ein Projekt sowie eine diesem zugeordnete Aufgabe ausgewählt werden und ein kurzer Tätigkeitsbericht verfasst werden. Die Einstempelzeit wird automatisch mit der aktuellen Zeit ausgefüllt. Ist der Nutzer aktuell eingestempelt wird hingegen die Austempelzeit automatisch ausgefüllt. Zusätzlich hat der Benutzer die Möglichkeit über den Button “Aufgabenwechsel” sich auszustempeln und sich mit den eingegebenen Informationen gleich wieder einzustempeln. Weiters besteht die Möglichkeit Reisedaten einzugeben, falls der Mitarbeiter während dieser Anwesenheit eine Dienstreise unternehmen muss.

Eintragsübersicht & Bearbeiten von Einträgen

Über den Reiter Einträge bekommt man eine Übersicht über alle Stempeleinträge. Ganz oben kann die Zeitspanne ausgewählt werden. Mit den Buttons “M,W,T” (Monat,Woche,Tag) kann die Zeitspanne auf das entsprechende Intervall gesetzt werden. Die Buttons “<,>” erlauben ein vor und zurückgehen mit dem eingestellen zeitlichen Abstand. Danach wird anhand der in Odoo eingestellten Normalwochenstunden des Mitarbeiters die zu arbeitende bzw. die bereits erledigte Arbeitszeit angezeigt. Ist der eingeloggte User Administrator kann dieser zwischen den Mitarbeitern wählen. Das Balkendiagramm stellt die täglichen Stunden im gegebenen Zeitraum, unterteilt in Anwesenheiten und Abwesenheiten, dar.

Wird auf einen Anwesenheitseintrag gelickt gelangt man zur Stempelansicht, wo der Eintrag editiert werden kann. Wird gespeichtert, gelangt der User zurück auf die Einträge-Ansicht. Der eingestellte Zeiraum inkl. Userauswahl bleibt erhalten. Zusätzlich wird hinuntergescrollt zu der Stelle wo der Nutzer zuvor war.

Excel-Export

Über den Button “Stunden” können die angezeigten Einträge als Excel exportiert werden. “Diäten” liefert ein Excel-Template ausgefüllt mit den eingegebenen Reisedaten.

Technologiestack

Die Odoo-Webanwendung nutzt als Datenbank PostgreSQL und ist selbst in Python geschrieben. Da von meinerseite kaum Pyhton-Kentnisse vorhanden sind, wurde zware die selbe Datenbank verwendet, aber entschieden die Applikation mit anderen Sprachen/Frameworks zu gestalten.

Entwickelt wurde in Visual Studio Code. Mithilfe des Windows-Subsystem für Linux wurde der Programmcode auf einem Ubuntu-System ausgeführt. Die Datenbank wurde mittels Docker-Container betrieben. GitLab diente zur Kollaboration in der Entwicklung bzw. zur Code-Versionierung. PNPM – eine alternative zu NPM – kam zur Paketverwaltung zum Einsatz.

Das Service wurde anschließend in der virtuellen Maschine auf der auch die Odoo Instanz läuft mithilfe von pm2 bereitgestellt und anschließend wurde die bestehende Nginx Konfiguration angepasst um die Seite über einen Hostnamen im Firmennetzwerk erreichen zu können.

  • Nodes.js & PNPM
  • GitLab
  • VSCode
  • WSL (Ubuntu)
  • Docker
  • PM2
  • Nginx

Backend

Backendseitig wurde das NestJs Framework mit Fastify zur Erstellung einer REST API verwendet. Das Node.js Service greift auf die PostgreSQL-Datenbank zu. Aus den API Endpunkten wurde die Swagger Dokumentation automatisch generiert. Weiters wurde anstelle eines ORM der Querybuilder Knex eingesetzt.

  • NestJs
  • PostgreSQL
  • Swagger
  • Knex

Frontend

Im Frontend wurde – wie bereits im vorherigen Projekt – Angular 17 verwendet. Dies geschah aus dem Grund da beim letzten Projekt einige Sachen neu waren und damit eben diese Kentnisse gefestigt werden.

  • Angular
  • Tailwind
  • ChartJs
  • ExcelJs

Vorgangsweise

Die größte Herausforderung in diesem Projekt bestand darin den Aufbau der bestehenden Datenbank zu verstehen bzw. die richtigen Tabellen zu finden und diese sinngemäß aufzufüllen. Es gab dazu drei Möglichkeiten:

  • Analyse der Datenbank
  • Analyse des Python-Quellcodes
  • Odoo-Debug Browser Extension

Nach dem die erforderlichen Tabellen und deren Abängigkeiten identifiziert wurden, wurden deren Schematas in TypeScript Interfaces festgehalten. Mit diesen wurden Dtos gebildet und Restendpunkte gescriptet welche über die automatisierte Swagger-Dokumentation einsehbar sind. Anhand dieser Dokumentation wurde die Abfragen am Frontend erstellt. Das Design des Frontends ist zum Teil inspiriert von dem alten Zeitstempelsystems des Unternehmens wo ich vorher tätig war, der Vorgaben von seiten des Odoo Systems und den persönlichen Vorlieben einiger Mitarbeiter.

Mögliche Weiterentwicklung

Es ist ein Akt der Balance welche Features dem Odoo-Portal vorbehalten werden sollen und welche explizit nochmals angepasst auf das Unternehmen in eigenen Tools anwendbar sein sollen.

Eine mögliche Erweiterung wäre es ein Dashboard anzulegen in der die für ein Projekt geleisteten Stunden analysiert werden können oder ein Stundenexport für alle Mitarbeiter mit einem Click.

Schlussworte

Dieses Projekt brachte mich der Funktionsweise eines ERP-Systems näher. Da eigentlich jede Firma etwas in der Art benötigt oder alternativ auf viele Einzeltools setzt ist dies Wissen das sich auch später anwenden lässt.

The comments are closed.