Hallo liebe AutoIt-Community,
ich habe ein Anliegen und zwar würde ich gerne eine Mitarbeiterdisposition erstellen.
Leider fehlt mir der Ansatz. Die Oberfläche sollte kein Problem darstellen, leider habe ich aber noch nie wirklich mit einem Kalender gearbeitet.
Ich stelle mir das in etwa so vor, dass 3 Monate angezeigt werden, bspw 2 Monate Aktuell + Nächster.
Darunter eine Listview, "Objekt", "Mitarbeiteranzahl", "Treffpunkt", "Uhrzeit", "Beginn", "Ende", "Stonstiges1", "Sonstiges2", "Sonstiges3")
darunter wiederum eine Listview - mit Mitarbeitern aus einer .ini oder wie auch immer.
Bis dahin werde ich wahrscheinlich kommen, ABER die Übergabe, die schaffe ich nicht. Bspw. ich will einen Mitarbeiter einplanen.
Ich markiere den Auftrag, wählen den Mitarbeiter und sage bspw. "disponieren", der Mitarbeiter soll dann im Auftrag auftauchen, und für den Zeitraum aus der Buchung entfernt werden. Ich denke das geht mit Arrays - leider beherrsche ich Listviews nicht und auch die Hilfe, hilft mir nicht wirklich.
Ich hoffe die Fragestellung ist nicht allzu unverschämt, ich versuche mich mal am Code und hoffe ich kriege etwas zustande. Den Übertrag zwischen den Listviews, sowie dessen Speicherung von Aufträgen und Mitarbeitern über Inputs, kann ich mir nicht logisch zusammenreimen. =(
EDIT:
Hier der Code, den ich bis jetzt habe, kann ich die Mitarbeiter per Drag&Drop dem Auftrag zuweisen? Den Auftrag mit zB. Doppelklick öffnen und die zugewiesenen MAs sehen?
Spoiler anzeigen
#include <GUIConstants.au3>
#include <GuiListView.au3>
#include <Array.au3>
$gui1 = GUICreate("Disposition", 800, 400)
$cal = GUICtrlCreateMonthCal("Kalender", 0,0,340,160)
$neuer_Auftrag = GUICtrlCreateButton("neuer Auftrag", 10, 165, 100, 20)
$speichern_Auftrag = GUICtrlCreateButton("speichern", 120, 165, 100, 20)
$laden_Auftrag = GUICtrlCreateButton("laden", 230, 165, 100, 20)
GUICtrlSetState($laden_Auftrag, $GUI_DISABLE)
$loeschen_Auftrag = GUICtrlCreateButton("löschen", 350, 165, 100, 20)
$loeschen_alles = GUICtrlCreateButton("alles löschen", 455, 165, 100, 20)
$recover = GUICtrlCreateButton("Backup einspielen", 560, 165, 100, 20)
If FileExists("Files\Plan.txt") Then GUICtrlSetState($recover, $GUI_DISABLE)
If FileExists("Files\Plan.txt") Then GUICtrlSetState($laden_Auftrag, $GUI_ENABLE)
$Listview_Auftrag = GUICtrlCreateListView("Auftrag|Adresse|MA|Treffpunkt|Uhrzeit|Beginn|Ende|Sonstiges1|Sonstiges2|Sonstiges3|Gebucht", 0, 190, 800, 200)
$hListView = GUICtrlGetHandle($Listview_Auftrag)
_AuftragLaden()
$Listview_Mitarbeiter = GUICtrlCreateListView("PersNr.|Name|Vorname|SPK|FS|43a", 345, 0, 455, 140)
$hListView2 = GUICtrlGetHandle($Listview_Mitarbeiter)
_MitarbeiterLaden()
GUICtrlCreateButton("buchen", 350, 143, 100, 20)
GUISetState(@SW_SHOW)
$gui2 = GUICreate("Neuer Auftrag", 300, 255)
GUICtrlCreateLabel("Auftrag", 10, 10, 50)
$gui2_Auftrag = GUICtrlCreateInput("", 70, 10, 220, 17)
GUICtrlCreateLabel("Adresse", 10, 30, 50)
$gui2_Adresse = GUICtrlCreateInput("", 70, 30, 220, 17)
GUICtrlCreateLabel("Mitbeiter", 10, 50, 50)
$gui2_Mitarbeiter = GUICtrlCreateInput("", 70, 50, 220, 17)
GUICtrlCreateLabel("Treffpunkt", 10, 70, 50)
$gui2_Treffpunkt = GUICtrlCreateInput("", 70, 70, 220, 17)
GUICtrlCreateLabel("Uhrzeit", 10, 90, 50)
$gui2_Uhrzeit = GUICtrlCreateInput("", 70, 90, 220, 17)
GUICtrlCreateLabel("Beginn", 10, 110, 50)
$gui2_Beginn = GUICtrlCreateInput("", 70, 110, 220, 17)
GUICtrlCreateLabel("Ende", 10, 130, 50)
$gui2_Ende = GUICtrlCreateInput("", 70, 130, 220, 17)
GUICtrlCreateLabel("Sonstiges", 10, 150, 50)
$gui2_Sonstiges1 = GUICtrlCreateInput("", 70, 150, 220, 17)
GUICtrlCreateLabel("Sonstiges", 10, 170, 50)
$gui2_Sonstiges2 = GUICtrlCreateInput("", 70, 170, 220, 17)
GUICtrlCreateLabel("Sonstiges", 10, 190, 50)
$gui2_Sonstiges3 = GUICtrlCreateInput("", 70, 190, 220, 17)
GUICtrlCreateLabel("Datum", 10, 210, 50)
$gui2_Datum = GUICtrlCreateInput(GUICtrlRead($cal), 70, 210, 170, 17)
$gui2_Datum_set = GUICtrlCreateButton("Heute", 245, 210, 50, 17)
$speichern_Auftrag_gui2 = GUICtrlCreateButton("speichern", 10, 230, 280, 20)
$gui2_Schliessen = GUICtrlCreateCheckbox("nach Speichern schließen", 10, 250)
GUICtrlSetState($gui2_Schliessen, $GUI_CHECKED)
GUISetState(@SW_HIDE)
Func _ListViewToArray()
Local $iCnt = _GUICtrlListView_GetItemCount($hListView)
If $iCnt < 1 Then Return SetError(1)
Dim $aRet[$iCnt][4]
For $i = 0 To $iCnt - 1
$aRet[$i][0] = _GUICtrlListView_GetItemText($hListView, $i, 0)
$aRet[$i][1] = _GUICtrlListView_GetItemText($hListView, $i, 1)
$aRet[$i][2] = _GUICtrlListView_GetItemText($hListView, $i, 2)
$aRet[$i][3] = _GUICtrlListView_GetItemText($hListView, $i, 3)
Next
Return $aRet
EndFunc
Func _FileWriteFromArray2D($FILEPATH, $ARRAY, $iROWstart = 0, $iROWend = 0, $iCOLstart = 0, $iCOLend = 0, $DELIM = '|')
If Not IsArray($ARRAY) Then
SetError(1)
Return 0
EndIf
Local $Ubound = UBound($ARRAY)
If $iROWend = 0 Then $iROWend = $Ubound - 1
Local $fh = FileOpen($FILEPATH, 2)
If $fh = -1 Then
SetError(2)
Return 0
EndIf
Select
Case $iROWstart < 0 Or $iROWstart > $Ubound - 1
$iROWstart = 0
ContinueCase
Case $iROWend < 0 Or $iROWend > $Ubound - 1
$iROWend = $Ubound - 1
ContinueCase
Case $iROWstart > $iROWend
$tmp = $iROWstart
$iROWstart = $iROWend
$iROWend = $tmp
EndSelect
Local $Ubound2nd = UBound($ARRAY, 2)
If @error = 2 Then
For $i = $iROWstart To $iROWend
FileWriteLine($fh, $ARRAY[$i])
Next
Else
If $iCOLend = 0 Then $iCOLend = $Ubound2nd - 1
Select
Case $iCOLstart < 0 Or $iCOLstart > $Ubound2nd - 1
$iCOLstart = 0
ContinueCase
Case $iCOLend < 0 Or $iCOLend > $Ubound2nd - 1
$iCOLend = $Ubound2nd - 1
ContinueCase
Case $iCOLstart > $iCOLend
$tmp = $iCOLstart
$iCOLstart = $iCOLend
$iCOLend = $tmp
EndSelect
For $i = $iROWstart To $iROWend
$tmp = ''
For $k = $iCOLstart To $iCOLend
If $k < $iCOLend Then
$tmp &= $ARRAY[$i][$k] & $DELIM
Else
$tmp &= $ARRAY[$i][$k]
EndIf
Next
FileWriteLine($fh, $tmp)
Next
EndIf
FileClose($fh)
Return -1
EndFunc
Func _FileReadToArray2D($FILEPATH, ByRef $ARRAY, $DELIM = -1)
Local $fh = FileOpen($FILEPATH, 0), $line, $var, $n = 1
If $fh = -1 Then
SetError(2)
Return 0
EndIf
If $DELIM <> -1 Then
$line = FileReadLine($fh, 1)
$var = StringSplit($line, $DELIM)
If IsArray($var) Then
$Ubound2nd = $var[0]
Local $AR[1][$Ubound2nd]
$AR[0][0] = 0
Else
SetError(1)
Return 0
EndIf
While 1
$line = FileReadLine($fh, $n)
If @error = -1 Then ExitLoop
$var = StringSplit($line, $DELIM)
If IsArray($var) Then
ReDim $AR[UBound($AR) + 1][$Ubound2nd]
For $i = 0 To $Ubound2nd - 1
$AR[UBound($AR) - 1][$i] = $var[$i + 1]
Next
$AR[0][0] += 1
Else
SetError(1)
Return 0
EndIf
$n += 1
WEnd
Else
Local $AR[1]
$AR[0] = 0
While 1
$line = FileReadLine($fh, $n)
If @error = -1 Then ExitLoop
ReDim $AR[UBound($AR) + 1]
$AR[UBound($AR) - 1] = $line
$AR[0] += 1
$n += 1
WEnd
EndIf
FileClose($fh)
$ARRAY = $AR
Return -1
EndFunc
Func _AuftragLaden()
$PathLoad = "Files/Plan.txt"
Local $ARRAY
_FileReadToArray2D($PathLoad, $ARRAY, "|")
_ArrayDelete($ARRAY, 0)
_GUICtrlListView_AddArray($hListView, $ARRAY)
EndFunc
Func _MitarbeiterLaden()
$PathLoad = "Files/Mitarbeiter.txt"
Local $ARRAY
_FileReadToArray2D($PathLoad, $ARRAY, "|")
_ArrayDelete($ARRAY, 0)
_GUICtrlListView_AddArray($hListView2, $ARRAY)
EndFunc
Func _AuftragSpeichern()
$PathSave = "Files\Plan"
If StringRight($PathSave, 4) <> ".txt" Then $PathSave &= ".txt"
$aArrayListView = _ListViewToArray()
_FileWriteFromArray2D($PathSave, $aArrayListView)
EndFunc
Func _Recover()
$PathLoad = FileOpenDialog("Datei öffnen", "Files\Backup", "Textdateien (*.txt)")
Local $ARRAY
_FileReadToArray2D($PathLoad, $ARRAY, "|")
_ArrayDelete($ARRAY, 0)
_GUICtrlListView_AddArray($hListView, $ARRAY)
GUICtrlSetState($recover, $GUI_DISABLE)
GUICtrlSetState($laden_Auftrag, $GUI_ENABLE)
_AuftragSpeichern()
EndFunc
While 1
$msg = GUIGetMsg(1)
Switch $msg[1]
Case $gui1
Switch $msg[0] ; Event
Case $GUI_EVENT_CLOSE
_AuftragSpeichern()
Exit
Case $neuer_Auftrag
GUISetState(@SW_SHOW, $gui2)
case $speichern_Auftrag
$PathSave = "Files\Plan"
If StringRight($PathSave, 4) <> ".txt" Then $PathSave &= ".txt"
$aArrayListView = _ListViewToArray()
_FileWriteFromArray2D($PathSave, $aArrayListView)
case $laden_Auftrag
$PathLoad = "Files/Plan.txt"
Local $ARRAY
_FileReadToArray2D($PathLoad, $ARRAY, "|")
_ArrayDelete($ARRAY, 0)
_GUICtrlListView_AddArray($hListView, $ARRAY)
case $loeschen_Auftrag
_GUICtrlListView_DeleteItemsSelected($hListView)
_AuftragSpeichern()
case $loeschen_alles
$SafeMsg1 = MsgBox(64+4,"Bestätigen", "Sind Sie sicher, dass Sie alles löschen wollen?" & @CRLF & @CRLF & "Es werden alle Daten restlos gelöscht!")
If $SafeMsg1 = 6 Then $SafeMsg2 = MsgBox(48+4,"Bestätigen", "WIRKLICH SICHER?!")
If $SafeMsg2 = 6 Then
_GUICtrlListView_DeleteAllItems($hListView)
DirCreate("Files\Backup" & @YEAR & @MON & @MDAY & @HOUR & @MIN)
FileCopy("Files\Plan.txt", "Files\Backup" & @YEAR & @MON & @MDAY & @HOUR & @MIN & "\Plan.txt")
FileDelete("Files\Plan.txt")
_AuftragSpeichern()
EndIf
case $recover
_Recover()
EndSwitch
Case $gui2
Switch $msg[0]
Case $GUI_EVENT_CLOSE
GUISetState(@SW_SHOW, $gui1)
GUISetState(@SW_HIDE, $gui2)
Case $speichern_Auftrag_gui2
GUICtrlCreateListViewItem(GUICtrlRead($gui2_Auftrag) & "|" & GUICtrlRead($gui2_Adresse) & "|" & GUICtrlRead($gui2_Mitarbeiter) & " (" & GUICtrlRead($gui2_Mitarbeiter) & ")" & "|" & GUICtrlRead($gui2_Treffpunkt) & "|" & GUICtrlRead($gui2_Uhrzeit) & "|" & GUICtrlRead($gui2_Beginn) & "|" & GUICtrlRead($gui2_Ende) & "|" & GUICtrlRead($gui2_Sonstiges1) & "|" & GUICtrlRead($gui2_Sonstiges2) & "|" & GUICtrlRead($gui2_Sonstiges3) & "|" & "", $Listview_Auftrag)
If GUICtrlRead($gui2_Schliessen) = "1" Then GUISetState(@SW_HIDE, $gui2)
GUICtrlSetData($gui2_Auftrag, "")
GUICtrlSetData($gui2_Adresse, "")
GUICtrlSetData($gui2_Mitarbeiter, "")
GUICtrlSetData($gui2_Treffpunkt, "")
GUICtrlSetData($gui2_Uhrzeit, "")
GUICtrlSetData($gui2_Beginn, "")
GUICtrlSetData($gui2_Ende, "")
GUICtrlSetData($gui2_Sonstiges1, "")
GUICtrlSetData($gui2_Sonstiges2, "")
GUICtrlSetData($gui2_Sonstiges3, "")
_AuftragSpeichern()
EndSwitch
EndSwitch
WEnd