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.
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:
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.
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:
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
.