Script: Absenzenerfassung Mitarbeiter

Produktlinien: Expert
Module: Leistung & CRM
Erstellt: 25.06.2010, Änderung:
Script ab Vertec 6.1.0.14 eingefügt: vtcForms durch Python Dialog ersetzt.
Mehr ansehen

Inhalt

Erzeugt Absenzen-Leistungen für einen Zeitraum, der vom User abgefragt wird. Als Aufwand wird die Sollzeit des entsprechenden Tages für den Mitarbeiter eingetragen, abzüglich allenfalls bereits erfasster anderer Leistungen.

Vorab müssen folgende Voraussetzungen erfüllt werden:

  • Das interne Absenzenprojekt, auf das die Leistungen erfasst werden sollen, muss im Script eingetragen werden mit dem Projektcode. Die Beispielzeile lautet:
    absProjekt = "Absenzen"
  • Das Projekt muss mindestens eine Phase haben; in den Systemeinstellungen  muss eine Ferientätigkeit definiert und diese der Phase als Tätigkeit zugeordnet werden. Siehe dazu den Artikel Ferienerfassung. Die aktiven Phasen des Absenzenprojektes können dann in einer Abfrage als Absenzenkategorien vom User ausgewählt werden.

Ausführen

Auf dem Mitarbeiter, für den Ferienleistungen erfasst werden sollen. Entweder über das Kontextmenü / rechte Maustaste oder über das Menü Eintrag / Aktionen.

Versionen

Das Script ist ein Python-Script und wird registriert wie im Artikel Scripts registrieren beschrieben.

Vertec Version Besonderheiten Version Script
Ab Version 5.5.

Python Script.

Ab Vertec 6.0 läuft das Script nur in der Desktop App und der Classic App (enthält vtcForms). Bei der Registrierung kann folgende OCL-Expression als Bedingung angegeben werden, dann erscheint der Menüpunkt nicht in der Cloud App und der Web App:

(Timsession.allinstances->first.appType='Desktop') or (Timsession.allinstances->first.appType='Classic')
Absenz von-bis erfassen.py
Ab Version 6.1.0.14

vtcForms durch Python Dialog ersetzt. Verwendet vtcapp.currentdate().

Absenzenerfassung.py

Scripttext

# coding: windows-1252
#
#---Bezeichnung: Absenzen von - bis erfassen
#   Klassen: Projektbearbeiter
#   CondExpression: 
#   ObjectScript: Y
#   ContainerScript: N
#   EventType: Kein
#   EventClass:
#   EventMembers:
#   ExtendedRights: N
#---Erstellt Leistungen im angegeben Zeitrahmen  auf der ausgewählten Absenzphase.
#   Das interne "Absenzenprojekt" muss untenstehend im Script eingetragen werden mit dem Projektcode. absProjekt =
#	Die aktiven Phasen des Absenzenprojektes stehen als Dropdownauswahl für die Absenzenerfassung zur Verfügung.
#	Beim Erfassen von Ferien als Phase muss in den Systemeinstellungen eine Ferientätigkeit definiert und der Phase zugeordnet werden (siehe www.vertec.com/de/kb/ferienerfassung).
#	Die Sollzeit jeden Tages in der Absenzperiode wird als Absenzleistung erzeugt.
#---31.03.2011, IB: erstellt.
#---17.04.2018, STH: vtcForm durch Python Dialog ersetzt. Ab Vertec 6.1.0.14 (verwendet vtcapp.currentdate()).

absProjekt = "Absenzen"

def main():

    if argobject.eval("self.oclistypeof(Projektbearbeiter)"):
        bearbeiter = argobject
    else:
        vtcapp.msgbox("Die Absenzerfassung muss auf einem Bearbeiter gemacht werden.")
        return

    projekt = vtcapp.evalocl("projekt->select(code='%s')->first" % absProjekt)
    if not projekt:
        vtcapp.msgbox("Das Absenzprojekt '%s' existiert nicht." % absProjekt)
        return

    phase = projekt.eval("phasen->select(aktiv)->first")
    if not phase:
        vtcapp.msgbox("Es muss mindestens eine aktive Phase auf dem Projekt '%s' haben." % absProjekt)
        return

    # Python Script für Custom Dialog
    dlgDefinition="""

 

 

 

    """

    initValues = {}
    initValues["Projekt"] = projekt.eval("code")
    initValues["Absenzenkategorie.ListExpression"] = "Projekt.allInstances->select(code='%s')->first.phasen->select(aktiv)" % absProjekt
    initValues["Absenzenkategorie.SelectedValue"] = phase.eval("boldid")
    initValues["Von"] = vtcapp.currentdate()
    initValues["Bis"] = vtcapp.currentdate()
    ok, values = vtcapp.showcustomdialog(dlgDefinition, initValues)
    if ok:
        phase = vtcapp.getobjectbyid(values["Absenzenkategorie"])
        datum = values["Von"]
        while datum <= values['Bis']: sollzeit = bearbeiter.eval("self->getSollzeit(%s, %s)" % (vtcapp.ocldate(datum), vtcapp.ocldate(datum)))
            arbeitszeit = bearbeiter.eval("self->getArbeitszeit(%s, %s)" % (vtcapp.ocldate(datum), vtcapp.ocldate(datum)))
            sollzeit = sollzeit - arbeitszeit
            if sollzeit > 0:
                leistung = vtcapp.createobject("OffeneLeistung")
                leistung.projekt = projekt
                leistung.phase = phase
                leistung.minutenint = sollzeit
                leistung.bearbeiter = bearbeiter
                leistung.datum = datum
            datum = vtcapp.incday(datum, 1)
main()