Support vertec.com

Vertec Feiertage importieren

Automatischer Import der Feiertage via Excel
Produktlinien: Expert, Standard
Module: Leistung & CRM
Created: 19. Dezember 2005
Updated: 17. September 2020
Feiertageimport ab 2021: Neues Vorgehen beschrieben und Script hinzugefügt.

Feiertageimport ab 2021

Damit Sie Ihre regionalen Feiertage nicht von Hand erfassen müssen, bietet Ihnen Vertec die Möglichkeit, diese automatisiert importieren zu lassen.

Dafür stellen wir ein Script zur Verfügung, das einen Dialog zeigt mit Auswahl von Jahr und Region, und im Hintergrund auf Daten zugreift, die Vertec jeweils rechtzeitig bereitstellt.

Zur Verfügung stellen wir gesetzlich anerkannte Feiertage und den Sonntagen gleich gestellte Feiertage der Schweiz, von Liechtenstein, Deutschland und Österreich. Es werden nur Feiertage berücksichtigt, die jeweils für den ganzen Kanton / das ganze Bundesland gelten. Bezieht sich ein Feiertag nur auf gewisse Bezirke, ist er in dieser Liste nicht enthalten.

Einzelne lokale Feiertage sowie firmeninterne Feiertage müssen von Hand erfasst werden.

Vertec Linie Expert

  • Für Kunden, welche Vertec Linie Expert einsetzen, stellen wir dafür eine Konfiguration zur Verfügung. Das genaue Vorgehen ist im Artikel Konfiguration: Feiertage importieren beschrieben.

Vertec Linie Standard

  • Kunden, welche Vertec Linie Standard einsetzen, gehen vor wie hier nachfolgend beschrieben:

Benutzergruppe wählen

Navigieren Sie in Vertec in den Ordner Einstellungen > Benutzergruppen und wählen Sie die Benutzergruppe, auf der Sie die Feiertage importieren möchten.Öffnen Sie über Menü Einstellungen den Script Editor:

Script laden

Im Script Editor fügen Sie folgenden Script-Text ein:

#---Bezeichnung: Import holidays
#   Klassen: BenutzerGruppe
#   ObjectScript: Yes
#   ContainerScript: No
#   EventType: Kein
#---Das Script importiert Feiertage CH, DE und AT. 
#   In einem Dialog kann das Jahr, die Region und der Abwesenheitstyp ausgewählt werden.
#---25.08.2020, Vertec AG: erstellt.
#   Ab Vertec 6.2.0.8 in allen full-featured Apps verfügbar.
#   In Versionen vor 6.2.0.8 nur in der Desktop App verfügbar.

import requests

def import_feiertage(benutzergruppe):
    if not benutzergruppe.eval('oclisKindOf(Benutzergruppe)'):
        vtcapp.msgbox(vtcapp.translate('You can run this script only on a user group.'))
        return False
    regionenliste = []
    jahresliste = []
    url = "https://downloads.vertec.com/downloads/feiertageimport/Feiertage.csv"
    feiertage_utf8 = GetTextFile(url)
    feiertage = feiertage_utf8.decode('UTF-8').encode('WINDOWS-1252')
    records = feiertage.splitlines()
    # Hole alle Regionen für die Auswahl im Dialog
    regionalrecords = [s for s in records if "Region" in s]
    for r in regionalrecords:
        fields = r.split(';')
        land = fields[0]
        regionen = fields[3]
        for region in regionen.split(','):
            regionenliste.append("%s-%s" % (land, region.strip()))
    regionenStr = ','.join(regionenliste)
    # Hole alle vorhandenen Jahre für die Auswahl im Dialog
    for r in records:
        fields = r.split(';')
        jahr = fields[1]
        if jahr:
            jahresliste.append(jahr[6:])
    jahresliste = list(set(jahresliste))
    jahresStr = ','.join(jahresliste)
    selectedJahr = jahresStr[:4]

    # Hole alle Abwesenheitstypen für die Auswahl im Dialog. 
    # Suche zunächst den Abwesenheitstyp mit der EintragId 'AbwesenheitsTypFrei'
    selectedTyp = vtcapp.evalocl("Abwesenheitstyp.allinstances->select(aktiv)->select(eintragid='AbwesenheitsTypFrei').objid->first")
    # Falls es keinen Abwesenheitstyp mit dieser EintragId gibt, nimm den mit der kleinsten objid. Das ist in den meisten Installationen der Abwesenheitstyp FREI
    if not selectedTyp:
        selectedTyp = vtcapp.evalocl("Abwesenheitstyp.allinstances->select(aktiv)->orderby(objid)->first.objid")
   
    dlgDefinition="""
    <Dialog Title="{Translate 'Import holidays'}" Width="400">
        <TextBlock FitMode="Wrap" Text="{Translate 'Select the year, country and region for which you want to import holidays.'}" Appearance="Info"/>
        <Group Orientation="Vertical" >
            <StringComboBox Name="Jahr" Label="{Translate 'Year'}"/>        
            <StringComboBox Name="Selection" Label="{Translate 'Country, region'}"/>
            <AbsenceTypeComboBox Name="Abwesenheitstyp" Label="{Translate 'Absence type'}" />
        </Group>
        <Dialog.Buttons>
            <Button Text="OK" IsAccept="True" Command="{Binding OkCommand}" />
            <Button Text="Cancel" IsCancel="True" Command="{Binding CancelCommand}" />
        </Dialog.Buttons>
    </Dialog>
    """ 
    initValues = {}
    initValues["Jahr.ListItemsString"] = jahresStr
    initValues["Jahr.SelectedValue"] = selectedJahr
    initValues["Selection.ListItemsString"] = regionenStr
    initValues["Abwesenheitstyp.SelectedValue"] = selectedTyp

    ok, values = vtcapp.showcustomdialog(dlgDefinition, initValues)
    if not ok:
        return False
        
    selection = values["Selection"]
    if selection:
        region = selection[3:]
    else:
        return False
        
    jahr = values["Jahr"]
    if not jahr:
        return False

    abwesenheitstypId = values["Abwesenheitstyp"]
    if not abwesenheitstypId:
        return False
    abwesenheitstyp = vtcapp.evalocl("Abwesenheitstyp.allinstances->select(aktiv)->select(objid=%s)->first" % (abwesenheitstypId))    
    if not abwesenheitstyp:
        return False

    # Hole nun die Feiertage der getroffenen Auswahl
    feiertagrecords = [s for s in records if ((region in s) and (jahr in s))]
    for feiertagrecord in feiertagrecords:
        fields = feiertagrecord.split(';')
        datum = fields[1]
        feiertag = fields[2]
        
        abwesenheit = vtcapp.createobject("Abwesenheit")
        abwesenheit.datum = vtcapp.strtodate(datum)
        abwesenheit.beschreibung = feiertag
        abwesenheit.bearbeiter = benutzergruppe
        abwesenheit.typlink = abwesenheitstyp
        
    vtcapp.msgbox(vtcapp.translate("Holidays import completed. %i holidays have been imported into the user group %s.") % (len(feiertagrecords), benutzergruppe), 0 , vtcapp.translate("Import holidays"))

def GetTextFile(url):
    """Holt die Textdatei online oder vom Filesystem via requests, UTF-8 encodiert.    
       Der Rückgabewert dieser Funktion ist ein UTF-8 encodierter Byte-String."""
    response = requests.get(url)
    response.encoding = "WINDOWS-1252"
    unicodetext = response.text
    return unicodetext.encode("UTF-8")                    

import_feiertage(argobject)

Achten Sie darauf, dass als argobject Ihre Benutzergruppe angegeben ist. Das sehen Sie unterhalb des Titels Script Editor. Ist das argobject nicht Ihre Benutzergruppe, wechseln Sie kurz auf den Tab mit der Benutzergruppe und dann zurück in den Tab mit dem Script Editor.

Für das Ausführen des Feiertageimports ist eine aktive Internetverbindung Voraussetzung.

Klicken Sie nun auf den Ausführen-Button (Pfeil nach rechts).

Daraufhin erscheint ein Dialog, in welchem Sie folgende Auswahl treffen können:

Jahr Hier können Sie wählen, für welches Jahr Sie Feiertage importieren wollen. Zur Verfügung stehen alle Jahre, für die die Vertec bereits Feiertage hinterlegt hat.
Land, Region Wählen Sie das Land und die Region, von welcher Sie die Feiertage importieren wollen.
Abwesenheitstyp Hier können Sie den Abwesenheitstyp auswählen, auf welchen Sie die Feiertage importieren wollen.
Zur Auswahl stehen alle Abwesenheitstypen, welche Sie unter Einstellungen > Abwesenheitstypen definiert haben.
Feiertage werden mormalerweise auf einen Abwesenheitstyp der Art "Frei" importiert.
Gibt es einen Abwesenheitstyp mit der Eintrag-Id AbwesenheitsTypFrei im System, dann ist dieser in der Auswahl voreingestellt. Ansonsten wird, wenn möglich, der erste Abwesenheitstyp der Art "Frei" voreingestellt. Sie können diese Auswahl im Dialog ändern.

Durch Klick auf OK werden die Feiertage der getroffenen Auswahl importiert. Nach Beendigung erscheint ein Dialog mit einer Zusammenfassung:

Es findet keine Überprüfung statt, ob diese Feiertage auf dieser Benutzergruppe bereits einmal importiert wurden. Wie Sie vorgehen, wenn Sie die Feiertage doppelt importiert haben, ist hier nachfolgend beschrieben.

Bitte beachten Sie, dass in Vertec Versionen vor 6.4.0.10 noch nicht alle Werte im Dialog übersetzt sind, da die vollständige Übersetzung erst mit dieser Version erfolgt. Auf die Funktionalität hat dies jedoch keinen Einfluss.

Feiertage doppelt importiert - was tun?

Haben Sie aus Versehen Feiertage doppelt importiert, können Sie sie in Vertec einfach wieder löschen.

Gehen Sie dafür in den Ordner Einstellungen > Benutzergruppen und wählen Sie die Benutzergruppe, auf der Sie die Feiertage importiert haben.

Im Unterordner Abwesenheiten sind die Feiertage aufgelistet. Markieren Sie mit gedrückter CTRL-Taste die zuviel importierten Feiertage, klicken Sie dann mit der rechten Maustaste in die erste Spalte und wählen Sie Löschen...:

Die daraufhin erscheinende Sicherheitsabfrage bestätigen Sie mit Ja:

Feiertageimport bis 2020

Bis 2020 erfolgte der Feiertageimport via Excel-File. Hier nachfolgend die entsprechenden Dateien der letzten Jahre für allfällige Nachimporte.

Die Excel-Dokumente enthalten die Anleitung zur Verwendung auf der Einstiegsseite namens ReadMe.

Jahr Schweiz Deutschland Österreich
2020 Feiertage Schweiz 2020 Feiertage Deutschland 2020 Feiertage Österreich 2020
2019 Feiertage Schweiz 2019 Feiertage Deutschland 2019 Feiertage Österreich 2019
2018 Feiertage Schweiz 2018 Feiertage Deutschland 2018 Feiertage Österreich 2018
2017 Feiertage Schweiz 2017 Feiertage Deutschland 2017 Feiertage Österreich 2017
2016 Feiertage Schweiz 2016 Feiertage Deutschland 2016 Feiertage Österreich 2016
2015 Feiertage Schweiz 2015 Feiertage Deutschland 2015 Feiertage Österreich 2015
2014 Feiertage Schweiz 2014 Feiertage Deutschland 2014 Feiertage Österreich 2014
2013 Feiertage Schweiz 2013 Feiertage Deutschland 2013 Feiertage Österreich 2013
2012 Feiertage Schweiz 2012 Feiertage Deutschland 2012 -
2011 Feiertage Schweiz 2011 - -