Stempelzeiten-Übersicht mit MySQL & GUI

  • Hi all,

    habe mich mal dran gewagt, unsere Stempelzeiten-Übersicht ein ganzes Stück zu modifizieren.

    Bisher läuft alles über eine MS Access Datenbank, in der es immer ein riesiger Prozess ist dort die entsprechenden Daten einzufügen. Vorher musste man die Excellisten immer erst durch ein Tool jagen, um die Spalten korrekt zu formatieren, Usernamen anzupassen und Spalten zu löschen, etc, danach in MS Access importieren und über Abfragen anfügen bzw aktualisieren. Für den Laien viel zu komplex!

    Eigentlich wollte ich das Teil als Projektarbeit hernehmen, aber Cheffchen wollte mal wieder was sehr viel komplizierteres haben, somit hatte ichs verworfen und kürzlich wieder aufgegriffen (weil mich der Import-Prozess langsam ankotzt! :D).

    Jedenfalls funktioniert das Importieren jetzt mit einem Klick (den ich unserer Buchhaltung grade noch so zutraue) und die Benutzeroberfläche ist quasi deppensicher (MS Access hatte bei manchen Benutzern seltsame und unauffindbare Bugs).

    Kurze Beschreibung:

    Admin-GUI:
    - Listen werden per Drag&Drop eingefügt und per Klick auf den jeweiligen Button in MySQL importiert (Zeitaufwand ca 10 Sekunden (Bisher mit MS Access 10-15 Minuten!))

    User-GUI:
    - Hier gibts die Möglichkeit ein Passwort einzugeben, was die Admin-Liste mit allen Usern freischaltet und jeder auswählbar ist, somit werden alle Zeiten/Stunden des jeweils Ausgewählten angezeigt. Bei 3x falscher Eingabe des Passworts, sowie korrektem Login bekommt der Admin (in dem Fall ich) eine Email (3x falsch eingeben = gesperrt - hab ich aber mal deaktiviert, denn das zu managen trau ich der Buchhaltung nicht mehr zu :whistling: )
    - Der Exportieren-Button exportiert die aktuell angezeigte Liste in Excel
    - Passwort ist änderbar, nachdem man das richtige eingegeben hat.
    - Im Code hinterlegte Teamleiter oder Führungskräfte benötigen kein Passwort (da gibts dann auch keine Info-Mail an mich)!

    Hier der Code zu den beiden GUIs:

    Admin-GUI:

    Spoiler anzeigen
    [autoit]

    ;Zeiterfassung - GUI - ADMIN

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

    #include <misc.au3>
    #include <file.au3>
    #include <array.au3>
    #include <excel.au3>
    #include <mysql.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Dim $ary, $inp1 = False, $inp2 = False

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

    $GUI = GUICreate("Zeiterfassung Admin", 634, 173, 192, 114, -1, BitOR($WS_EX_ACCEPTFILES, $WS_EX_WINDOWEDGE))
    $times = GUICtrlCreateInput("", 16, 32, 513, 21)
    GUICtrlSetState(-1, $GUI_ACCEPTFILES)
    $add_times = GUICtrlCreateButton("Add Zeiten", 544, 32, 75, 25, $WS_GROUP)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Label1 = GUICtrlCreateLabel("Stempelzeiten:", 16, 8, 73, 17)
    $Label2 = GUICtrlCreateLabel("Stunden:", 16, 88, 47, 17)
    $hours = GUICtrlCreateInput("", 16, 112, 513, 21)
    GUICtrlSetState(-1, $GUI_ACCEPTFILES)
    $add_hours = GUICtrlCreateButton("Add Stunden", 544, 112, 75, 25, $WS_GROUP)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $add_times
    sqlfill()
    Case $add_hours
    sqlhours()
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    If $inp1 = False And GUICtrlRead($times) <> "" Then
    GUICtrlSetState($add_times, $GUI_ENABLE)
    $inp1 = True
    EndIf
    If $inp2 = False And GUICtrlRead($hours) <> "" Then
    GUICtrlSetState($add_hours, $GUI_ENABLE)
    $inp2 = True
    EndIf
    WEnd

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

    Func sqlfill()
    Local $datei = GUICtrlRead($times)

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

    Local $sqluser = "root"
    Local $sqlpass = ""
    Local $sqldb = "zeit"
    Local $sqlserv = "192.168.10.2"

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

    Local $sqlcon = _MySQLConnect($sqluser, $sqlpass, $sqldb, $sqlserv)

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

    xls2csv($datei)
    $datei = StringTrimRight($datei, 3) & "csv"

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

    _FileReadToArray($datei, $ary)

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

    ;1;2;3;4;5;6;7;8;9;;;0

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

    Local $test

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

    For $c = 1 To $ary[0]
    $test = StringReplace($ary[$c], ";", "")

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

    If @extended < 29 Then
    For $z = 1 To @extended
    $ary[$c] &= ";"
    Next
    EndIf
    Next

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

    ;~ $sqlcon.execute("TRUNCATE Stempelzeiten")

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

    For $i = 2 To $ary[0]
    $str = StringSplit($ary[$i], ";")

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

    If $str[18] = "" Then $str[18] = " "
    If $str[21] = "" Then $str[21] = " "
    If $str[27] = "" Then $str[27] = " "

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

    ;2,4,5,6,8,18,21,27

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

    _Query($sqlcon, "INSERT INTO Stempelzeiten (user_index, datum, rein, raus, stunden, urlaub, krank, feiertag) VALUES ('" & _
    $str[2] & "', '" & _
    $str[4] & "', '" & _
    $str[5] & "', '" & _
    $str[6] & "', '" & _
    $str[8] & "', '" & _
    $str[18] & "', '" & _
    $str[21] & "', '" & _
    $str[27] & "');")
    Next

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

    _mysqlend($sqlcon)
    FileDelete($datei)

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

    MsgBox(64, "Import Stempelzeiten", "Import erfolgreich!")
    EndFunc ;==>sqlfill

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

    Func sqlhours()
    Local $datei = GUICtrlRead($hours)

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

    Local $sqluser = "root"
    Local $sqlpass = ""
    Local $sqldb = "zeit"
    Local $sqlserv = "192.168.10.2"

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

    Local $sqlcon = _MySQLConnect($sqluser, $sqlpass, $sqldb, $sqlserv)

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

    xls2csv($datei)
    $datei = StringTrimRight($datei, 3) & "csv"

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

    _FileReadToArray($datei, $ary)

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

    $sqlcon.execute("TRUNCATE stunden")

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

    For $i = 2 To $ary[0]
    $str = StringSplit($ary[$i], ";")
    $sqlcon.execute("INSERT INTO stunden (ID, Stunden) VALUES ('" & $str[1] & "', '" & $str[5] & "')")
    Next

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

    _mysqlend($sqlcon)
    FileDelete($datei)

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

    MsgBox(64, "Import Stempelzeiten", "Import erfolgreich!")
    EndFunc ;==>sqlhours

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

    Func xls2csv($file)
    $oExcel = _ExcelBookOpen($file, 0)
    $format = ".csv"
    $npath = StringTrimRight($file, 4)
    _ExcelSaveAsEX($oExcel, $format, $npath)
    EndFunc ;==>xls2csv

    [/autoit]

    User-GUI:

    Spoiler anzeigen
    [autoit]

    ;Zeiterfassung - GUI - SQL

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

    #include <misc.au3>
    #include <date.au3>
    #include <mysql.au3>
    #include <array.au3>
    #include <File.au3>
    #include <String.au3>
    #include <excel.au3>
    #include <ButtonConstants.au3>
    #include <GUIComboBoxEx.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <GUIListView.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <ListViewConstants.au3>

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

    Global $login = @UserName
    Global $pwcnt, $users, $zeit, $out, $pw

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

    $GUI = GUICreate("Zeitübersicht", 629, 856, 192, 114)
    $adminlist = GUICtrlCreateCombo("---", 24, 24, 353, 25)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetState(-1, $GUI_HIDE)
    $Label1 = GUICtrlCreateLabel("Admin:", 24, 8, 36, 15)
    GUICtrlSetState(-1, $GUI_HIDE)
    $adminpw = GUICtrlCreateInput("", 392, 24, 193, 21, $ES_PASSWORD)
    $adminbutton = GUICtrlCreateButton("->", 600, 24, 20, 21)
    $Label2 = GUICtrlCreateLabel("Passwort:", 392, 8, 50, 15)
    $timelist = GUICtrlCreateList("Datum|Zeit|Stunden|Urlaub|Krank|Feiertag", 24, 85, 565, 721, BitOR($WS_BORDER, $LBS_MULTIPLESEL))
    $Label3 = GUICtrlCreateLabel("+/- Stunden:", 24, 64, 64, 17)
    $stunden = GUICtrlCreateInput("", 88, 56, 121, 21)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $xit = GUICtrlCreateButton("Beenden", 512, 824, 75, 17, $WS_GROUP)
    $export = GUICtrlCreateButton("Export", 24, 824, 75, 17, $WS_GROUP)
    $pwgen = GUICtrlCreateButton("PW Neu", 244, 824, 75, 17, $WS_GROUP)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetState(-1, $GUI_HIDE)
    GUISetState(@SW_SHOW)

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

    WinMove("Zeitübersicht", "", @DesktopWidth / 2 - 300, @DesktopHeight / 2 - 450)

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

    If $login = "admin_1" Or $login = "admin_2" Or $login = "admin_3" Then
    GUICtrlSetState($adminlist, $GUI_ENABLE)
    GUICtrlSetState($adminpw, $GUI_DISABLE)
    GUICtrlSetState($adminbutton, $GUI_DISABLE)
    GUICtrlSetState($pwgen, $GUI_ENABLE)
    GUICtrlSetState($pwgen, $GUI_SHOW)
    GUICtrlSetState($Label1, $GUI_SHOW)
    GUICtrlSetState($adminlist, $GUI_SHOW)
    filllist()
    EndIf

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

    ;User blockieren Teil 1
    ;~ If IniRead("user.ini", "block", $login, "") = 1 Then
    ;~ MsgBox(16, "Blockiert", "Du hast keinen Zugriff," & @CRLF & "wende dich an den Admin!")
    ;~ Exit
    ;~ EndIf

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

    fill($login)
    plusstunden($login)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $pwgen
    newpw()
    Case $adminlist
    If GUICtrlRead($adminlist) <> "---" Then
    fill(GUICtrlRead($adminlist))
    plusstunden(GUICtrlRead($adminlist))
    EndIf
    Case $adminbutton
    dopw()
    Case $export
    If GUICtrlRead($adminlist) <> "---" Then export(GUICtrlRead($adminlist))
    If GUICtrlRead($adminlist) = "---" Then export($login)
    Case $GUI_EVENT_CLOSE, $xit
    Exit
    EndSwitch
    WEnd

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

    Func dopw() ;PW = test
    Local $pw = GUICtrlRead($adminpw)
    If _StringEncrypt(1, $pw, "sqlprojekt2013", 2) = IniRead("user.ini", "pass", "pw", "") Or $pw == "<resetpasswort>" And $pw <> "" Then
    GUICtrlSetState($adminlist, $GUI_ENABLE)
    GUICtrlSetState($adminpw, $GUI_DISABLE)
    GUICtrlSetState($adminbutton, $GUI_DISABLE)
    GUICtrlSetState($pwgen, $GUI_ENABLE)
    GUICtrlSetState($pwgen, $GUI_SHOW)
    GUICtrlSetState($Label1, $GUI_SHOW)
    GUICtrlSetState($adminlist, $GUI_SHOW)
    ;Keine Mail bei meinem Login
    If $login <> "ich_nachname" Then adminmail($login, "login")
    filllist()
    Else
    $pwcnt += 1
    If $pwcnt < 3 Then MsgBox(64, "Fehler", "Passwort falsch! (" & $pwcnt & ")")
    If $pwcnt >= 3 Then
    adminmail($login, "bad")
    ;User blockieren Teil 2
    ;~ IniWrite("user.ini", "block", $login, "1")
    MsgBox(64, "Fehler", "Passwort 3x falsch." & @CRLF & "Meldung an den Admin!")
    Exit
    EndIf
    EndIf
    EndFunc ;==>dopw

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

    Func filllist()
    Local $err = IniReadSection(@ScriptDir & "\user.ini", "users")
    Local $users[$err[0][0] + 1]

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

    $users[0] = $err[0][0]

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

    For $i = 1 To $err[0][0]
    $users[$i] = $err[$i][0] & " / " & $err[$i][1]
    Next

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

    _ArraySort($users)

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

    For $i = 1 To $users[0]
    GUICtrlSetData($adminlist, $users[$i], "---")
    Next
    EndFunc ;==>filllist

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

    Func fill($user)

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

    Global $ganzeliste = ""

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

    If StringInStr($user, " / ") Then
    $user = StringSplit($user, " / ")
    $userid = $user[2]
    $user = $user[1]
    EndIf

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

    WinSetTitle($GUI, "", "Zeitübersicht - " & $user)

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

    $userid = IniRead("user.ini", "users", $user, "")

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

    GUICtrlDelete($timelist)
    $timelist = GUICtrlCreateListView("User_Index |Datum |Kommen |Gehen |Stunden |Urlaub |Krank |Feiertag ", 24, 85, 565, 721)

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

    Local $sqluser = "root"
    Local $sqlpass = ""
    Local $sqldb = "zeit"
    Local $sqlserv = "192.168.10.2"
    Local $sqlcon = _MySQLConnect($sqluser, $sqlpass, $sqldb, $sqlserv)
    Local $read = _Query($sqlcon, "SELECT * FROM Stempelzeiten where user_index = " & $userid & " order by datum desc")

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

    Local $i = 1

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

    With $read
    While Not .eof
    $out = ""
    $out &= .fields("user_index" ).value & "|" & _
    StringReplace(.fields("datum" ).value, "2013", "13") & "|" & _
    _Iif(StringLen(.fields("rein" ).value) > 7, StringTrimRight(StringRight(.fields("rein" ).value, 8), 3), .fields("rein" ).value) & "|" & _
    _Iif(StringLen(.fields("raus" ).value) > 7, StringTrimRight(StringRight(.fields("raus" ).value, 8), 3), .fields("raus" ).value) & "|" & _
    .fields("stunden" ).value & "|" & _
    .fields("urlaub" ).value & "|" & _
    .fields("krank" ).value & "|" & _
    .fields("feiertag" ).value & @CRLF

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

    GUICtrlCreateListViewItem($out, $timelist)
    $ganzeliste &= StringReplace($out, @CRLF, "†")
    .movenext
    WEnd
    EndWith

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

    _mysqlend($sqlcon)
    EndFunc ;==>fill

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

    Func plusstunden($user)

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

    If StringInStr($user, " / ") Then
    $user = StringSplit($user, " / ")
    $userid = $user[2]
    $user = $user[1]
    EndIf

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

    $userid = IniRead("user.ini", "users", $user, "")

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

    Local $sqluser = "root"
    Local $sqlpass = ""
    Local $sqldb = "zeit"
    Local $sqlserv = "192.168.10.2"

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

    Local $sqlcon = _MySQLConnect($sqluser, $sqlpass, $sqldb, $sqlserv)

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

    Local $read = _Query($sqlcon, "SELECT * FROM stunden where id = " & $userid)

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

    With $read
    While Not .eof

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

    $out = .fields("Stunden" ).value & @CRLF

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

    .movenext
    WEnd
    EndWith

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

    If StringLen($out) > 10 Then $out = 0

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

    GUICtrlSetData($stunden, $out)

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

    _mysqlend($sqlcon)
    EndFunc ;==>plusstunden

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

    Func adminmail($badguy, $opt)
    $mail = ObjCreate("CDO.Message")
    With $mail

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

    $mail.From = "Zeiterfassung@blubb.com"
    $mail.To = "admin@blubb.com"

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

    If $opt = "bad" Then $mail.Subject = "Zeiterfassung - Passwort falsch"
    If $opt = "login" Then $mail.Subject = "Zeiterfassung - Admin Login"

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

    $mail.HTMLBody = _Now() & ": " & $badguy

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

    $mail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $mail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.10.232"
    $mail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    $mail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 0

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

    $mail.Configuration.Fields.Update
    $mail.Send
    EndWith
    EndFunc ;==>adminmail

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

    Func export($user)

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

    If StringInStr($user, " / ") Then
    $user = StringSplit($user, " / ")
    $userid = $user[2]
    $user = $user[1]
    EndIf

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

    Local $blubb
    Local $xls = _ExcelBookNew(0)
    Local $xfle = @DesktopDir & "" & $user & "_" & @HOUR & @MIN & @SEC & ".xls"

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

    _ExcelFontSetProperties($xls, 1, 1, 1, 8, True)
    _ExcelWriteCell($xls, "Index", 1, 1)
    _ExcelWriteCell($xls, "Datum", 1, 2)
    _ExcelWriteCell($xls, "Kommen", 1, 3)
    _ExcelWriteCell($xls, "Gehen", 1, 4)
    _ExcelWriteCell($xls, "Stunden", 1, 5)
    _ExcelWriteCell($xls, "Urlaub", 1, 6)
    _ExcelWriteCell($xls, "Krank", 1, 7)
    _ExcelWriteCell($xls, "Feiertag", 1, 8)

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

    If FileExists($xfle) Then FileDelete($xfle)

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

    $ganzeliste = StringSplit($ganzeliste, "†")

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

    For $i = 1 To $ganzeliste[0] Step 1
    $blubb = StringSplit($ganzeliste[$i], "|")

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

    For $x = 1 To $blubb[0]
    If StringLen($blubb[$x]) >= 1 Then _ExcelWriteCell($xls, $blubb[$x], $i + 1, $x)
    If StringLen($blubb[$x]) = 0 Then _ExcelWriteCell($xls, "' ", $i + 1, $x)
    Next
    Next

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

    $var = FileSaveDialog("Speichern unter:", $xfle, "Exceldatei (*.xls)", -1, $xfle)

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

    If @error Then
    MsgBox(4096, "Speichern abgebrochen", "Datei nicht gespeichert!")
    Else
    _ExcelBookSaveAs($xls, $var)
    MsgBox(64, "Speichern erfolgreich", "Gespeichert unter: " & $var)
    EndIf

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

    _ExcelBookClose($xls)
    EndFunc ;==>export

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

    Func newpw()
    Local $oldpw = InputBox("Passwort ändern", "Altes Passwort eingeben:", "", "*")
    Local $newpw1 = InputBox("Passwort ändern", "Neues Passwort eingeben:", "", "*")
    Local $newpw2 = InputBox("Passwort ändern", "Neues Passwort erneut eingeben:", "", "*")

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

    If $newpw1 <> $newpw2 Or _StringEncrypt(1, $oldpw, "sqlprojekt2013", 2) <> IniRead("user.ini", "pass", "pw", "") Or $newpw1 = "" Or $newpw2 = "" Then
    MsgBox(0, "Passwort ändern", "Passwort nicht geändert!", 5)
    Else
    IniWrite("user.ini", "pass", "pw", _StringEncrypt(1, $newpw1, "sqlprojekt2013", 2))
    MsgBox(0, "Passwort ändern", "Passwort erfolgreich geändert!", 3)
    EndIf
    EndFunc ;==>newpw

    [/autoit]

    Habe zusätzlich noch 2 Screenshots der beiden GUIs angehängt.

    Hier die Struktur der beiden MySQL-Tabellen:

    Spoiler anzeigen

    Tabelle "stempelzeiten":
    | ID | int(11) | NO | PRI | NULL | auto_increment|
    | user_index | varchar(30) | YES | | NULL | |
    | datum | varchar(30) | YES | | NULL | |
    | rein | varchar(30) | YES | | NULL | |
    | raus | varchar(30) | YES | | NULL | |
    | stunden | varchar(4) | YES | | NULL | |
    | urlaub | varchar(10) | YES | | NULL | |
    | feiertag | varchar(10) | YES | | NULL | |
    | krank | varchar(10) | YES | | NULL | |

    Tabelle "Stunden":
    | ID | int(11) | YES | | NULL | |
    | Stunden | varchar(32) | YES | | NULL | |

    ...und der Inhalt der Excellisten:

    Spoiler anzeigen

    Format Excelliste "Stempelzeiten":
    Name Index Personal-Nr. Datum Beginn Ende Dauer Dauer Projekt Tätigkeit Summe Summe Soll Soll Saldo Saldo Bemerkung Urlaub Urlaub (Std.) Urlaub (Std.) krank krank (Std.) krank (Std.) extra frei extra frei (Std.) extra frei (Std.) Feiertage Feiertage (Std.) Feiertage (Std.)
    Nachname Vorname 1273 396 01.08.13 8:00 16:00 8:00 8,00 00000000 00000000 8:00 8,00 8:00 8,00 0:00 0,00
    Nachname Vorname 1273 396 02.08.13 8:00 12:02 4:02 4,03 00000000 00000000
    Nachname Vorname 1273 396 02.08.13 12:42 15:44 3:02 3,03 00000000 00000000 7:04 7,07 8:00 8,00 -0:56 -0,93
    Nachname Vorname 1273 396 05.08.13 8:00 12:02 4:02 4,03 00000000 00000000

    Format Excelliste "Stunden":
    August 2013 Name Personal-Nr. alter Übertrag neuer Übertrag
    1273 Nachname Vorname 214 -2,80 4,78
    1323 Nachname Vorname 452 2,80 -1,63
    1342 Nachname Vorname 501 -4,10 3,00

    ...uuuund Aufbau & Inhalt der "user.ini":

    Spoiler anzeigen

    Inhalt "user.ini":
    [users]
    vorname_nachname1=1273
    vorname_nachname2=1141

    [block]
    vormane_nachname=1

    [pass]
    pw=<verschlüsselt>

    So, das wärs erstmal.

    Vielleicht kann das jemand als Denkanstoß gebrauchen, glaube aber nicht, dass wer den Code 1:1 übernehmen kann :)

    P.S.: Durchkommentiert hab ich den Code mal nicht, dürfte aber ziemlich selbsterklärend sein (ausser für die Buchhaltung! :thumbup: )

    PP.S.: Getestete, Cheffchen vorgeführt und für "extrem geil" befunden :D

    Grüße,
    x0r

  • "Cheffchen" klingt irgendwie nach Respektsperson :rolleyes:

  • Nö, alles klar :D