Arbeitszeiten dokumentieren

  • Hallo liebe Community,

    ich habe mal ein kleines Programm geschrieben, mti dem man seine Arbeitszeiten erfassen und dokumentieren kann.
    Die Idee dazu kam mir durch meine Politik Lehrerin in der BBS, die uns mit extremen Beispielen klar machte, wie sehr viele Azubis doch was Überstunden anbelangt nach Strich und Faden ausgenutzt werden.
    Das Script erklärt sich ja eigentlich von alleine, sollten dennoch Fragen oder Anregungen eurer Seite vorhanden sein, einfach hier schreiben oder eine Email schicken.

    Soweit so Gut. Also viel Spaß damit ;)

    Gruß
    Dome

    #Edit
    Habe mir jetzt etwas Webspace angelegt und eine kleine Homepage drauf gebastelt.
    Auf dieser werden unter anderem zukünftig auch die Updates und andere schöne Sachen zu finden sein.
    Unter "Downloads" gibt es dann auf der Seite auch immer die aktuellsten Versionen.
    Link: Homepage
    Und da ich kein nerv mehr habe Homepage und diese Seite hier zu pflegen, bitte jetzt alles auf der Homepage nachlesen ;)

    Spoiler anzeigen

    #Edit:
    Alles fertig alles super.
    Es wird alles korreckt dokumentiert und verrechnet.
    Ich empfehle euch, die Werte in einer .csv-Datei zu speichern, weil es einfach übersichtlicher ist.
    Hier einmal die Version mit einer .csv Ausgabe und die mit einer .txt-Ausgabe.
    Die .txt-Version kann JEDER benutzten, bei der .csv-Version ist MS-Office erforderlich (oder ein anderes Programm, dass .csv-Dateien öffnen kann).

    #Edit:
    Ich werde die csv-Version öfters mal Updaten.
    Das letzte Update-Datum könnt ihr dann dieser Liste entnehmen:

    #Edit:
    Ich werde nur noch den Quellcode von einem Programm posten, da sich alle sehr ähnlich bei Updates verändern!

    csv.-Version - 1 Zeile (übersichtlicher):

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.8.1
    Programm Version: 1.0.1
    Autor: Domenick L.
    Kontakt: [email='dnick92@web.de'][/email]

    [/autoit] [autoit][/autoit] [autoit]

    Script Funktion:
    Dokumentiert ihre Arbeitzeiten samt Pausen übersichtlich in einer .csv-Datei.
    Die Gesamt Arbeits- und Pausenzeit wird automatisch ausgerechnet.
    Es kann nur ein Pausenstart und ein Pausenende berechnet werden,
    also nur eine Pause!
    Werte die sie doppelt eintragen lassen, werden überschrieben!

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    #NoTrayIcon
    #include <Date.au3>

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Arbeitszeiten", 300, 190)

    [/autoit] [autoit][/autoit] [autoit]

    $Start = GUICtrlCreateButton("Anfang", 10, 105, 90, 35)
    $Stop = GUICtrlCreateButton("Feierabend", 110, 105, 90, 35)
    $Ende = GUICtrlCreateButton("Ende", 220, 105, 70, 35)
    $PauseStart = GUICtrlCreateButton("Pause-Start", 10, 150, 90, 30)
    $PauseEnde = GUICtrlCreateButton("Pause-Ende", 110, 150, 90, 30)
    $Update = GUICtrlCreateButton("Auf neue Updates prüfen", 10, 190, 190, 20)
    $Hilfe = GUICtrlCreateButton("Hilfe", 220, 190, 70, 20)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel ("Dieses Programm dokumentiert deine Arbeitszeiten.", 10, 10)
    GUICtrlCreateLabel ("Beginnst du deinen Arbeitstag, drücke ""Anfang"",", 10, 35)
    GUICtrlCreateLabel ("Beendest du ihn, drücke ""Feierabend"".", 10, 50)
    GUICtrlCreateLabel ("Das Dokument wird Standardmäßig als .csv-Datei", 10, 65)
    GUICtrlCreateLabel ("in dem Ordner C:\Users\User\Arbeits-Info gespeichert.", 10, 80)

    [/autoit] [autoit][/autoit] [autoit]

    Global $Datum = @MDAY & "." & @MON & "." & @YEAR
    Global $kurzDatum = @MON & "." & @YEAR
    Global $Pfad = ("C:\Users\"&@UserName&"\Arbeits-Info")
    Global $csvPfad = ("C:\Users\"&@UserName&"\Arbeits-Info\Arbeitszeiten-"&$kurzDatum&".csv")
    Global $ini = ("C:\Users\"&@UserName&"\Documents\Arbeitszeiten.ini")
    Global $section = ("Arbeitszeiten")
    Global $GesamtHH, $GesamtMM, $GesamtSS, $PauseHH, $PauseMM, $PauseSS

    [/autoit] [autoit][/autoit] [autoit]

    If Not FileExists ($Pfad) Then DirCreate ($Pfad)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $msg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    Select
    Case $msg = $Start
    If Not FileExists ($csvPfad) Then FileWrite ($csvPfad, " Datum ; ; Begonnen ; ; Pause von ; Pause bis ; ; Beendet ; ; Pause ; Gesamt" & @CRLF & @CRLF)
    If FileExists ($ini) Then FileDelete ($ini)
    IniWrite ($ini, $section, "Start", TimerInit())
    FileWrite ($csvPfad, " " & $Datum & "; ;" & @HOUR & ":" & @MIN & ":" & @SEC)
    Case $msg = $PauseStart
    IniWrite ($ini, $section, "PauseStart", TimerInit())
    FileWrite ($csvPfad, "; ;" & @HOUR & ":" & @MIN & ":" & @SEC)
    Sleep (1000)
    MsgBox (0, "Hinweis", "Bitte vergesse nicht, deine Pause auch wieder zu beenden!")
    Case $msg = $PauseEnde
    IniWrite ($ini, $section, "Pause", TimerDiff(IniRead($ini, $section, "PauseStart","0x00")))
    FileWrite ($csvPfad, ";" & @HOUR & ":" & @MIN & ":" & @SEC)
    Case $msg = $Stop
    _GesamtPause ()
    IniWrite ($ini, $section, "Gesamt", TimerDiff(IniRead($ini, $section, "Start","0x00")))
    _Gesamt ()
    FileWrite ($csvPfad, "; ;" & @HOUR & ":" & @MIN & ":" & @SEC)
    FileWrite ($csvPfad, "; ;" & $Pause & ";" & $Gesamt & @CRLF)
    Case $msg = $Hilfe
    ShellExecute ("http://www.autoit.de/index.php?page=Thread&threadID=32976")
    EndSelect
    Until $msg = -3 or $msg = $Ende

    [/autoit] [autoit][/autoit] [autoit]

    Func _Gesamt ()
    Local $Gesamt1 = IniRead ($ini, $section, "Gesamt","0x00") - IniRead ($ini, $section, "Pause", "0x00")
    _TicksToTime($Gesamt1, $GesamtHH, $GesamtMM, $GesamtSS)
    Global $Gesamt = StringFormat ("i:i:i", $GesamtHH, $GesamtMM, $GesamtSS)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _GesamtPause ()
    _TicksToTime(IniRead($ini, $section, "Pause", "0x00"), $PauseHH, $PauseMM, $PauseSS)
    Global $Pause = StringFormat ("i:i:i", $PauseHH, $PauseMM, $PauseSS)
    If Not IniRead ($ini, $section, "PauseStart", "0x00") Then IniWrite ($ini, $section, "PauseStart", "00")
    If Not IniRead ($ini, $section, "Pause", "0x00") Then IniWrite ($ini, $section, "Pause", "00")
    If IniRead ($ini, $section, "PauseStart", "0x00") = 0 Then FileWrite ($csvPfad, "; ;00:00:00")
    If IniRead ($ini, $section, "Pause", "0x00") = 0 Then FileWrite ($csvPfad, ";00:00:00")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Update ()
    $version = "1.0.1"
    HttpSetUserAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.6) Gecko/20091201 Firefox/3.6.10")
    InetGet("http://gabbadome.bplaced.net/Downloads/Version.txt","C:\Users\"&@UserName&"\Downloads\Version.txt", 1, 0)
    $file = FileOpen ("C:\Users\"&@UserName&"\Downloads\Version.txt", 0)
    $line = FileReadLine($file, 1)
    If $line = $version Then
    MsgBox(0, "Update", "Es ist kein Update vorhanden!")
    Else
    If MsgBox (4, "Update","Es ist ein Update verfügbar!"&@CRLF&"Wollen sie es jetzt herunterladen?")= 6 Then
    HttpSetUserAgent ("Firefox")
    InetGet ("http://gabbadome.bplaced.net/Downloads/Arbeitszeiten-Zeilen.exe","C:\Users\"&@UserName&"\Downloads\Arbeitszeiten-Zeilen.exe", 1, 0)
    If MsgBox (4, "Update","Das Update wurde erfolgreich beendet!"&@CRLF&"Wollen sie den Ordner mit der neuen Version öffnen?") = 6 Then
    ShellExecute ("C:\Users\"&@UserName&"\Downloads")
    EndIf
    EndIf
    EndIf
    FileClose ($file)
    FileDelete("C:\Users\"&@UserName&"\Downloads\Version.txt")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit]

    ===============================================================================

    Und hier dann noch mal die "alte", aber auch auskommentierte Version:

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.8.1
    Autor: Domenick L.
    Kontakt: [email='dnick92@web.de'][/email]

    [/autoit] [autoit][/autoit] [autoit]

    Script Funktion:
    Dokumentiert ihre Arbeitzeiten samt Pausen übersichtlich in einer Text-Datei.
    Die Gesamt Arbeits- und Pausenzeit wird automatisch ausgerechnet.
    Es kann nur ein Pausenstart und ein Pausenende berechnet werden,
    also nur eine Pause!
    Werte die sie doppelt eintragen lassen, werden überschrieben!

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    #include <Process.au3> ; erlaubt das Benutzen von _RunDos
    #include <GUIConstantsEx.au3> ; erlaubt das Benutzen von $GUI_EVENT_CLOSE

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Arbeitszeiten", 300, 190) ; erstellt das Fenster mit Name und Größe

    [/autoit] [autoit][/autoit] [autoit]

    $Start
    = GUICtrlCreateButton("Anfang", 10, 105, 90, 35) ; erstellt die
    einzelnen Knöpfe mit Namen und Größen samt Eingabe-Funktionen
    $Stop = GUICtrlCreateButton("Feierabend", 110, 105, 90, 35)
    $Ende = GUICtrlCreateButton("Ende", 230, 150, 60, 30)
    $PauseStart = GUICtrlCreateButton("Pause-Start", 10, 150, 90, 30)
    $PauseEnde = GUICtrlCreateButton("Pause-Ende", 110, 150, 90, 30)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel
    ("Dieses Programm dokumentiert deine Arbeitszeiten.", 10, 10) ;
    erstellt den Angezeigten Text an den vorgegebenen Positionen
    GUICtrlCreateLabel ("Beginnst du deinen Arbeitstag, drücke ""Anfang"",", 10, 35)
    GUICtrlCreateLabel ("Beendest du ihn, drücke ""Feierabend"".", 10, 50)
    GUICtrlCreateLabel ("Das Dokument wird Standardmäßig als .txt-Datei", 10, 65)
    GUICtrlCreateLabel ("in dem Ordner C:\Users\User\Arbeits-Info gespeichert.", 10, 80)

    [/autoit] [autoit][/autoit] [autoit]

    _RunDos
    ("md C:\Users\%USERNAME%\Arbeits-Info") ; erstellt den Ordner
    C:\Users\%USERNAME%\Arbeits-Info, wobei %USERNAME% für die Variable des
    Benutzernamens steht, damit jeder dieses Programm nutzen kann.

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState() ; macht das Fenster sichtbar

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $msg = GUIGetMsg() ; wartet auf Eingabe

    [/autoit] [autoit][/autoit] [autoit]

    Select ; unterscheidet zwischen den verschiedenen Eingabe-Signalen der verschiedenen Knöpfe
    Case $msg = $Start ; drückt man den Knopf mit der Bezeichnung "Start", führt das Programm folgende Befehle aus:

    [/autoit] [autoit][/autoit] [autoit]

    _RunDos ("echo ####NEUER TAG#### - %DATE%
    >>C:\Users\%USERNAME%\Arbeits-Info\Arbeitszeiten-%date:~3%.txt") ;
    Kopfzeile & Datum werden in die Text-Datei geschrieben

    _RunDos ("echo Arbeiszeit von %time:~0,8%
    >>C:\Users\%USERNAME%\Arbeits-Info\Arbeitszeiten-%date:~3%.txt") ;
    Arbeitszeitbeginn wird mit der aktuellen Zeit (sekundengenau) in die
    Text-Datei geschieben
    Case $msg = $PauseStart ; drückt man den Knopf mit der Bezeichnung "PauseStart", führt das Programm folgende Befehle aus:

    [/autoit] [autoit][/autoit] [autoit]

    _RunDos ("echo Pause von %time:~0,8%
    >>C:\Users\%USERNAME%\Arbeits-Info\Arbeitszeiten-%date:~3%.txt") ;
    Pausenbeginn wird mit der aktuellen Zeit (sekundengenau) in die
    Text-Datei geschieben
    Case $msg = $PauseEnde ; drückt man den Knopf mit der Bezeichnung "PauseEnde", führt das Programm folgende Befehle aus:

    [/autoit] [autoit][/autoit] [autoit]

    _RunDos ("echo Pause bis %time:~0,8%
    >>C:\Users\%USERNAME%\Arbeits-Info\Arbeitszeiten-%date:~3%.txt") ;
    Pausenende wird mit der aktuellen Zeit (sekundengenau) in die
    Text-Datei geschieben
    Case $msg = $Stop ; drückt man den Knopf mit der Bezeichnung "Stop", führt das Programm folgende Befehle aus:

    [/autoit] [autoit][/autoit] [autoit]

    _RunDos ("echo Arbeitszeit bis %time:~0,8%
    >>C:\Users\%USERNAME%\Arbeits-Info\Arbeitszeiten-%date:~3%.txt") ;
    Arbeitszeitende wird mit der aktuellen Zeit (sekundengenau) in die
    Text-Datei geschieben
    _RunDos ("echo
    ================================
    >>C:\Users\%USERNAME%\Arbeits-Info\Arbeitszeiten-%date:~3%.txt") ;
    ein Zeichen zur leichteren Unterscheidung der einzelnen Tage wird als
    Schluss in die Text-Datei geschrieben
    EndSelect ;
    Until $msg =
    $GUI_EVENT_CLOSE or $msg = $Ende ; lässt das Programm diese Aktion so
    lange wiederholen, bis man auf "Ende" oder "X" klickt

    [/autoit] [autoit][/autoit] [autoit]

    Exit ; schließt das Programm/Script

    [/autoit]

    18 Mal editiert, zuletzt von Gabbadome (19. September 2012 um 10:03)

  • Warum nimmst du dafür DOS Befehle und nicht die entsprechenden Autoitfunktionen. Sehe keinen Sinn in diesem Script so wie es aktuell ist.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Warum nimmst du dafür DOS Befehle und nicht die entsprechenden Autoitfunktionen. Sehe keinen Sinn in diesem Script so wie es aktuell ist.

    Weil ich noch ein AutoIt Neuling bin, und die dementsprechenden Befehle noch nicht kannte.
    Ich habe das Programm auch nur "mal eben schnell" geschrieben, und seinen Zweck erfüllt es alle mal.
    Es dokumentiert eigentlich nur die Tastendrücke die man macht, in einer Text-Datei.
    Es wird dann für jeden Monat eine neue erstellt und somit kann man nachvollziehen, wie man wann gearbeitet hat.
    Ganz einfach.

    Gruß
    Dome

  • Zitat
    [autoit]

    GUICtrlCreateLabel ("Dieses Programm dokumentiert deine Arbeitszeiten.", 10, 10)
    GUICtrlCreateLabel ("Beginnst du deinen Arbeitstag, drücke ""Anfang"",", 10, 35)
    GUICtrlCreateLabel ("Beendest du ihn, drücke ""Feierabend"".", 10, 50)
    GUICtrlCreateLabel ("Das Dokument wird Standardmäßig als .txt-Datei", 10, 65)
    GUICtrlCreateLabel ("in dem Ordner C:\USers\User\Arbeits-Info gespeichert.", 10, 80)

    [/autoit]

    Du kannst auch in einem Label @CRLF verwenden, wie bei FileWrite. ;)

    lg chess

  • Du kannst auch in einem Label @CRLF verwenden, wie bei FileWrite. ;)

    lg chess

    Gut zu wissen, danke für den Tipp.
    Hier werde ich es aber so beibehalten, der Übersichtlichkeit halber ^^