Elektronische Urlaubsverwaltung made by Youngsters

Für die erfolgreiche Genehmigung von Urlaub muss der synyx’sche Mitarbeiter sich bisher mit einem Stück Papier alias ‘schriftlich ausgefüllter Urlaubsantrag’ bewaffnen und sich an einen der drei Chefs anpirschen, um eine Unterschrift zu ergattern.
Dies ist nicht nur zeitaufwändig, sondern auch einfach nicht zeitgemäß für eine junge Software-Schmiede wie Synyx.
So erhielten Johannes Reuter (Studentische Hilfskraft seit 1. August 2011) und ich, Aljona Murygina (Auszubildende zur Fachinformatikerin seit 1. August 2011), den Auftrag, das ganze Prozedere zu modernisieren, wir befinden uns schließlich im Jahr 2011:
Ein Urlaubsverwaltungs-Tool als Webapplikation muss her.
Als Grundgerüst der Applikation wurden drei verschiedene Arten von Usern festgelegt:
der normale User (Antragssteller: Urlaub beantragen),
der Chef (Vergabeberechtigter: Urlaubsantrag genehmigen/ablehnen) und
das Office (eine Art Super-User mit Verwaltungs- und Editierfunktion: Urlaubsantrag bearbeiten).
Essentielle Grundfunktionen des Urlaubsverwaltungs-Tool sollen sein:

  • Die Authentifizierung soll mittels bereits vorhandenen LDAP-Benutzerdaten der Mitarbeiter erfolgen.
  • Urlaubsanträge sollen digital validiert werden, das heißt Antragssteller und Antraggenehmigender müssen jeweils über einen einzigartigen Identifikationsnachweis (‘digitale Unterschrift’) verfügen.
  • Eine Interaktion mit dem firmeninternen Google-Kalender soll für automatisierte Übersichtlichkeit sorgen, welche Mitarbeiter in welchem Zeitraum im Urlaub sind.
  • Transparenz ist die Quintessenz einer Open Source Firma und hört auch nicht bei firmeninternen Vorgängen auf. Daher sollen jegliche Schritte der Bearbeitung von Anträgen durch eine Log-Datei nachvollziehbar sein können.
  • Via E-Mail sollen die jeweils Beteiligten über den laufenden Antragsvorgang informiert werden, ob zum Beispiel ein neuer zu genehmigender Antrag vorliegt oder ein Antrag genehmigt wurde.
  • Urlaubstage per Hand abzuzählen ist ziemlich retro, weshalb im digitalen Urlaubsantrag nur noch via Datumseingabe ein Zeitraum angegeben werden soll. Über einen Feiertagskalender berechnet dann die Applikation statt der Antragssteller, wie viele Urlaubstage netto für diesen Zeitraum vom Urlaubskonto des Mitarbeiters abgezogen werden.

Was die programmatischen Werkzeuge betrifft, wurde uns freie Hand gelassen.
Wir entschieden uns, den Kern des Tools in Java zu schreiben und für die ‘äußere Hülle’ der Webapplikation das Framework Spring MVC zu benutzen.
Zunächst erschien uns der Arbeitsauftrag ziemlich trivial.
Bei der Konzeption des Tools allerdings stießen wir doch schnell an einige Stolpersteine.
Zu nennen wäre hier beispielsweise:
Die LDAP-Authentifizierung erschien auf den ersten Blick einfacher, bis wir feststellten, was für ein komplexes und weites Feld Spring Security eigentlich darstellt.
Bei der digitalen Validierung wechselten wir mehrmals unsere Meinung. Zur Auswahl verfügbar wäre erstens ein Photo der eigenen Unterschrift, verknüpft mit der jeweiligen Person, oder zweitens die Signatur mittels eines persönlichen PGP-Schlüssels. (momentan favorisieren wir letztere Möglichkeit)
Auch die Interaktion mit einem Google-Kalender ist ein Feld, in das es sich noch einzulesen gilt.
Den inneren Kern unseres Tools, die Domain-Objekte, haben wir nun letztendlich in die Klassen Antrag, Person, Urlaubsanspruch und Urlaubskonto gegliedert.

 
Als formelle Stolpersteine bei der Konzeption und Implementierung der Domain-Objekte und Services erwies sich die Unterscheidung in ‘normalen’ Urlaub und Resturlaub.
Resturlaub ist übrig gebliebener Jahresurlaub aus dem vorherigen Jahr, den ein Mitarbeiter mit ins neue Jahr nimmt.
Zwei wichtige Daten sind also der 1. Januar und der 1. April.
Am 1. Januar wird aus dem verbliebenem Urlaub des vorigen Jahres Resturlaub, während am 1. April dieser Resturlaub verfällt.
Wenn der Urlaubszeitraum also über einen dieser beiden Termine fällt (z.B. Urlaub vom 25.03. – 04.04.), erfordert die Berechnung des Urlaubskontos des Mitarbeiters eine besondere Logik.
Die entsprechenden Services (AntragService, PersonService, UrlaubskontoService) sind großteils schon ausimplementiert, jedoch ergeben sich aufgrund der Herausforderung der besonderen datumsabhängigen Logik immer wieder Veränderungen im Code.
Der MailService ist bisher gelöst mit dem JavaMailSender und MimeMessagePreparator (org.springframework.mail.javamail.*), benötigt sicherlich jedoch auch noch eine Überarbeitung der genauen Details.
Controller und die zugehörigen JSPs sind ebenfalls bereits großteils funktionsfähig, z.B. Darstellung von Mitarbeiter- oder Antragslisten (zum Beispiel nach Status, Person, Datum), Formular zur Antragsstellung.
Das Design betreffend (z.B. dynamische Menü-Navigation oder Kalenderdarstellung ‘DatePicker’) werden wir aller Wahrscheinlichkeit nach zu Bibliotheken von jQuery greifen.
Bevor wir allerdings überhaupt an das i-Tüpfelchen Design denken können, haben wir noch einen langen Weg vor uns….