; Arbeitszeit Mel
#include <GuiConstantsEx.au3>
#include <AVIConstants.au3>
#include <TreeViewConstants.au3>
#include<WindowsConstants.au3>
#include<ListViewConstants.au3>
#include<ButtonConstants.au3>
#include<GUIConstantsEx.au3>
#include<Guilistview.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GuiComboBox.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <Array.au3>
#include <String.au3>
#include <UpdownConstants.au3>

Opt('GUIOnEventMode', 1)

$sDBFile = IniRead("config.ini", "Monat", "1", "")
$iEdit = -1

Global $nGesamt = 0    ;<====================

#Region Hauptfenster
; GUI
$MainGui=GuiCreate("Arbeitszeit Bosch 2011 Version 1.3", 620, 620)
GuiSetIcon(@SystemDir & "\notepad.exe", 0)
GUISetOnEvent($GUI_EVENT_CLOSE, "_END")

; GUI LOGO
GUICtrlCreatePic("logo_de.jpg", 0, 0, 620, 42)

; GUI DATUM
$Date=GUICtrlCreateDate("", 20, 50, 200, 20)

; GUI Auswahl
$combo1=GUICtrlCreateCombo("Art", 230, 50, 150, 20, 0x0003)
GUICtrlSetData($combo1, "Arbeit|Berufsschule Donnerstag|Berufsschule Freitag|Urlaub|Krank|Sonstige")
GUICtrlCreateLabel("Pause:", 50, 84)
GUICtrlSetOnEvent($Combo1,"_Sonstige")
$Radio=GuiCtrlCreateRadio("Ja", 100, 80)
GuiCtrlSetState(-1, $GUI_CHECKED)
GuiCtrlCreateRadio("Nein", 140, 80)
$Eingabe=GUICtrlCreateInput("Wenn Sonstige", 230, 80, 150, 20)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateLabel("Beginn:", 390, 53)
$UpDownB1=GUICtrlCreateInput("7", 440, 50, 40, 20,$UDS_WRAP)
GUICtrlCreateUpdown($UpDownB1)
GUICtrlSetLimit(-1, 20, 7)
$UpDownB2=GUICtrlCreateInput("0", 490, 50, 40, 20,$UDS_WRAP)
GUICtrlCreateUpdown($UpDownB2)
GUICtrlSetLimit(-1, 59, 0)
GUICtrlCreateLabel("Ende:", 390, 83)
$UpDownE1=GUICtrlCreateInput("7", 440, 80, 40, 20,$UDS_WRAP)
GUICtrlCreateUpdown($UpDownE1)
GUICtrlSetLimit(-1, 20, 7)
$UpDownE2=GUICtrlCreateInput("0", 490, 80, 40, 20,$UDS_WRAP)
GUICtrlCreateUpdown($UpDownE2)
GUICtrlSetLimit(-1, 59, 0)

;=====================================================================================================================
$combo2=GUICtrlCreateCombo("Monat...", 20, 520, 150, 20, 0x0003)
GUICtrlSetState($combo2, $GUI_DISABLE)
GUICtrlSetData($combo2, "Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember")
GUICtrlSetOnEvent($combo2, "Arbeitstage")
GUICtrlCreateLabel("Anzahl der Arbeitstage:", 20, 553)
$Arbeitstage=GUICtrlCreateLabel("", 140, 550, 30, 20, 0x1000)
GUICtrlCreateLabel("Arbeitsstunden/Tag:", 185, 523)
$Stunden=GUICtrlCreateInput("", 290, 520, 30, 20)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateLabel("Monatsstunden:", 185, 553)
$MStunden=GUICtrlCreateLabel("", 290, 550, 30, 20, 0x1000)
GUICtrlCreateLabeL("Summe der Arbeitsstunden:", 330, 523)
$Summe=GUICtrlCreateLabel("", 470, 520, 40, 20, 0x1000)
GUICtrlCreateLabel("Anzahl der Überstunden:", 330, 553)
$UEStunden=GUICtrlCreateLabel("", 470, 550, 40, 20, 0x1000)
$button2=GUICtrlCreateButton("Annehmen", 520, 520, 80, 20)
GUICtrlSetOnEvent($button2, "Annehmen")
$button3=GUICtrlCreateButton("Ändern", 520, 550, 80, 20)
GUICtrlSetOnEvent($button3, "_Aendern")
;=====================================================================================================================
;=====================================================================================================================
GUICtrlCreateButton("Markierten Eintrag löschen", 290, 580, 150, 20)
GUICtrlSetOnEvent(-1, "Loeschen")
GUICtrlCreateButton("Alle Einträge löschen", 450, 580, 150, 20)
GUICtrlSetOnEvent(-1, "ALoeschen")
;=====================================================================================================================
;GUI Button
$Button=GUICtrlCreateButton("OK", 540, 80, 60, 20)
GUICtrlSetOnEvent($Button, "_Anwenden")

; GUI Liste
$hListView=GUICtrlCreateListView("Datum|Art|Arbeitsbeginn|Arbeitsende|Stunden", 20, 110, 580, 400)
$hLVHandle=GUICtrlGetHandle($hListView)
_GUICtrlListView_SetColumn($hLVHandle, 0, "Datum", 175, 0)
_GUICtrlListView_SetColumn($hLVHandle, 1, "Art", 130, 0)
_GUICtrlListView_SetColumn($hLVHandle, 2, "Arbeitsbeginn", 90, 0)
_GUICtrlListView_SetColumn($hLVHandle, 3, "Arbeitsende", 90, 0)
_GUICtrlListView_SetColumn($hLVHandle, 4, "Stunden", 60, 0)

#EndRegion Hauptfenster

; GUI MESSAGE LOOP
GuiSetState()

_Sonstige()
If FileExists($sDBFile) Then Load()
If FileExists("config.ini") Then Load2()
While 1
    Sleep(1000)
WEnd



Func _Sonstige()
    If  GUICtrlRead($combo1) = "Sonstige" Then
        GUICtrlSetState($Eingabe, $GUI_ENABLE)
        GUICtrlSetState($Eingabe, $GUI_FOCUS)
    ElseIf GUICtrlRead($combo1) = "Berufsschule Donnerstag" Then
        GUICtrlSetData($UpDownB1, "8")
        GUICtrlSetData($UpDownB2, "00")
        GUICtrlSetData($UpDownE1, "15")
        GUICtrlSetData($UpDownE2, "45")
        GUICtrlSetData($Eingabe, "Wenn Sonstige")
        GUICtrlSetState($Eingabe, $GUI_DISABLE)
    Else
        GUICtrlSetData($Eingabe, "Wenn Sonstige")
        GUICtrlSetState($Eingabe, $GUI_DISABLE)
    EndIf
EndFunc

Func _Anwenden()    ;in dieser Routine werden die Tagesstunden errechnet deshalb die Berechnung in eigene Varaible ausgelagert damit sie später addiert werden kann
    Local $nZeit
    If BitAND(GUICtrlRead($Radio),$GUI_CHECKED) Then    ;<===================== siehe Hilfe zu Gui CtrlRead Bemerkungen
        If GUICtrlRead($combo1) = "Sonstige" Then
            $nZeit = ((GUICtrlRead($UpDownE1)*60 + GUICtrlRead($UpDownE2))-(GUICtrlRead($UpDownB1)*60 + GUICtrlRead($UpDownB2)))/60-0.75
            GUICtrlCreateListViewItem(GUICtrlRead($Date) & "|" & GUICtrlRead($Eingabe) & "|" & GUICtrlRead($UpDownB1) & ":" & GUICtrlRead($UpDownB2) & "|" & GUICtrlRead($UpDownE1) & ":" & GUICtrlRead($UpDownE2) & "|" & $nZeit, $hListView)
        Else
            $nZeit = ((GUICtrlRead($UpDownE1)*60 + GUICtrlRead($UpDownE2))-(GUICtrlRead($UpDownB1)*60 + GUICtrlRead($UpDownB2)))/60-0.75
            GUICtrlCreateListViewItem(GUICtrlRead($Date) & "|" & GUICtrlRead($combo1) & "|" & GUICtrlRead($UpDownB1) & ":" & GUICtrlRead($UpDownB2) & "|" & GUICtrlRead($UpDownE1) & ":" & GUICtrlRead($UpDownE2) & "|" & $nZeit, $hListView)
        EndIf
    Else
        If GUICtrlRead($combo1) = "Sonstige" Then
            $nZeit = ((GUICtrlRead($UpDownE1)*60 + GUICtrlRead($UpDownE2))-(GUICtrlRead($UpDownB1)*60 + GUICtrlRead($UpDownB2)))/60
            GUICtrlCreateListViewItem(GUICtrlRead($Date) & "|" & GUICtrlRead($Eingabe) & "|" & GUICtrlRead($UpDownB1) & ":" & GUICtrlRead($UpDownB2) & "|" & GUICtrlRead($UpDownE1) & ":" & GUICtrlRead($UpDownE2) & "|" & $nZeit, $hListView)
        Else
            $nZeit = ((GUICtrlRead($UpDownE1)*60 + GUICtrlRead($UpDownE2))-(GUICtrlRead($UpDownB1)*60 + GUICtrlRead($UpDownB2)))/60
            GUICtrlCreateListViewItem(GUICtrlRead($Date) & "|" & GUICtrlRead($combo1) & "|" & GUICtrlRead($UpDownB1) & ":" & GUICtrlRead($UpDownB2) & "|" & GUICtrlRead($UpDownE1) & ":" & GUICtrlRead($UpDownE2) & "|" & $nZeit, $hListView)
        EndIf
    EndIf
    $nGesamt += $nZeit                ;<==============
    GUICtrlSetData($Summe,$nGesamt) 	;<==============
	If GUICtrlRead($Summe) - GUICtrlRead($MStunden) <= 0 Then
		GUICtrlSetData($UEStunden, "0")
	Else
		$UES = GUICtrlRead($Summe) - GUICtrlRead($MStunden)
		GUICtrlSetData($UEStunden, $UES)
	EndIf
	IniWrite("config.ini", "Ueberstunden", "1", GUICtrlRead($UEStunden))
EndFunc

Func _End()
    Save()
    GUIDelete($MainGui)
    Exit
EndFunc

Func Load() ; Datenbank-Datei laden
    Local $sItem, $aTmp
    Local $hFile = FileOpen($sDBFile, 0) ; Datei zum lesen öffnen
    $nGesamt = 0
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
        _GUICtrlListView_BeginUpdate($hLVHandle) ; Listview sperren
        While True ; Endlosschleife
            $sItem = FileReadLine($hFile) ; Zeile aus der Datei lesen
            If @error Then ExitLoop ; wenn das Ende der Datei erreicht ist, dann Endlosschleife verlassen
            $aTmp = StringSplit($sItem,"|")    ;<============= 
            ;_ArrayDisplay($aTmp)
            $nGesamt += $aTmp[5]    ;<=========== Tagesarbeitszeit hinzuaddieren
            GUICtrlCreateListViewItem($sItem, $hListView) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
        WEnd
        _GUICtrlListView_EndUpdate($hLVHandle) ; Listview wieder freigeben
        FileClose($hFile) ; Datei schließen
    EndIf
    GUICtrlSetData($Summe,$nGesamt)    ;<=========== Summe anzeigen
EndFunc   ;==>Load

Func Save() ; Datenbank-Datei speichern
    Local $sItem
    Local $iCount = _GUICtrlListView_GetItemCount($hLVHandle) - 1 ; Anzahl der Listview-Einträge holen
    Local $hFile = FileOpen($sDBFile, 2) ; Datei zum speichern (überschreiben) öffnen
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
        For $i = 0 To $iCount ; Schleife, um alle Listview-Einträge durchzugehen
            $sItem = _GUICtrlListView_GetItemTextString($hLVHandle, $i) ; die Werte aus dem Listview-Eintrag holen
            FileWriteLine($hFile, $sItem) ; und in die Datei schreiben
        Next
        FileClose($hFile) ; Datei schließen
    EndIf
EndFunc   ;==>Save

Func _Aendern()
	GUICtrlSetState($combo2, $GUI_ENABLE)
	GUICtrlSetState($Stunden, $GUI_ENABLE)
EndFunc

Func Arbeitstage()
	If GUICtrlRead($combo2) = "September" Then
		GUICtrlSetData($Arbeitstage, "22")
	ElseIf GUICtrlRead($combo2) = "Oktober" Then
		GUICtrlSetData($Arbeitstage, "20")
	ElseIf GUICtrlRead($combo2) = "November" Then
		GUICtrlSetData($Arbeitstage, "22")
	ElseIf GUICtrlRead($combo2) = "Dezember" Then
		GUICtrlSetData($Arbeitstage, "21")
	Else
		GUICtrlSetData($Arbeitstage, "###")
	EndIf
	IniWrite("config.ini", "Monat", "1", GUICtrlRead($combo2))
	IniWrite("config.ini", "Arbeitstage", "1", GUICtrlRead($Arbeitstage))
EndFunc

Func Annehmen()
	$Monatsstunden=GUICtrlRead($Arbeitstage)*GUICtrlRead($Stunden)
	GUICtrlSetData($MStunden, $Monatsstunden)
	IniWrite("config.ini", "Arbeitsstunden", "1", GUICtrlRead($Stunden))
	IniWrite("config.ini", "Monatsstunden", "1", GUICtrlRead($MStunden))
	GUICtrlSetState($combo2, $GUI_DISABLE)
	GUICtrlSetState($Stunden, $GUI_DISABLE)
EndFunc

Func Load2()
	GUICtrlSetData($combo2, IniRead("config.ini", "Monat", "1", ""))
	GUICtrlSetData($Arbeitstage, IniRead("config.ini", "Arbeitstage", "1", ""))
	GUICtrlSetData($Stunden, IniRead("config.ini", "Arbeitsstunden", "1", ""))
	GUICtrlSetData($MStunden, IniRead("config.ini", "Monatsstunden", "1", ""))
	GUICtrlSetData($UEStunden, IniRead("config.ini", "Ueberstunden", "1", ""))
EndFunc

Func Loeschen()
	If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie die markierten Einträge wirklich löschen?") = 6 Then _GUICtrlListView_DeleteItemsSelected($hLVHandle)
EndFunc

Func ALoeschen()
	If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie wirklich alle Einträge löschen?") = 6 Then _GUICtrlListView_DeleteAllItems($hLVHandle)
EndFunc
	