
;~ #include <Array.au3>
;~ #include <Debug.au3>

; COM-Fehler anzeigen
Global $oMyError = ObjEvent("AutoIt.Error", "_ComErrFunc")
Global $g_iReqCounter = 0 ; Zähler für 01.header.txt, 01.response.txt, ...
Global $sUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:146.0) Gecko/20100101 Firefox/146.0"
Global $sEVHOST = "https://evergabe.telekom.de"
Global $sPfadIni = @ScriptDir & "\daten\conf.ini"

;~ $sUsername = "fkramer_kpt"    ;IniRead($sPfadIni, "EVergabe", "Benutzer", "xxx")
;~ $sPasswort = "Kpfk99LixCkpt!"    ;IniRead($sPfadIni, "EVergabe", "Passwort", "xxx")

;~ $sRetrunLogin = _EV_Lobin_obj($sUsername, $sPasswort)
;~ If $sRetrunLogin = "True" Then
;~ 		ConsoleWrite("Login Erfolgreich" & @CRLF)
;~ 	_Write_to_Console("Login Erfolgreich")
;~ 	$sSMnr = "211293040"
;~
;~ 	$aSMDeatails = _EV_Search_SM_obj($oHttp, $sSMnr)
;~ 	_DebugArrayDisplay($aSMDeatails)
;~ 		_Write_to_Console($sHTML)
;~ Else
;~ 	_Write_to_Console("Login Fehler!!!")
;~
;~ EndIf

;test SM 208878700

Func _EV_Lobin_obj($sUsername, $sPasswort)
	Global $oHttp = _HttpCreate()
	Local $sHtml = _HttpGet($oHttp, $sEVHOST & "/public/login")
	
	Local $sCsrfField = ""
	Local $sCsrfValue = _ExtractCsrf($sHtml, $sCsrfField)
	
	; 3. Cookies zu Debugzwecken
	Local $sSetCookie = $oHttp.GetResponseHeader("Set-Cookie")
	ConsoleWrite("+ Set-Cookie: " & $sSetCookie & @CRLF)
	
	Local $sBody = _
			"LoginForm[username]=" & _UrlEncode_obj($sUsername) & _
			"&LoginForm[password]=" & _UrlEncode_obj($sPasswort) & _
			"&" & $sCsrfField & "=" & _UrlEncode_obj($sCsrfValue)
	
	_Write_to_Console($sBody)
	
;~ 	MsgBox(64, "", "")
	
	$oHttp = _HttpPost($oHttp, $sEVHOST & "/public/login", $sBody)

	Local $iStatus = $oHttp.Status
	Local $sResp = $oHttp.ResponseText

	If $iStatus <> 302 And StringInStr($sResp, "Logout") = 0 Then
		ConsoleWrite("! Login fehlgeschlagen, HTTP " & $iStatus & @CRLF)
		Return "False"
	Else
		Return "True"
	EndIf
	
	
EndFunc   ;==>_EV_Lobin_obj

Func _EV_Search_SM_obj($oHttp, $sSMnr)
	If Not IsObj($oHttp) Then
		MsgBox(16, "Fehler", "_EV_Search_SM: HTTP-Objekt ist ungültig.")
		Return ""
	EndIf

	; hier wird DEINE _HttpGet()-Funktion genutzt
	Local $sHtml = _HttpGet($oHttp, $sEVHOST & "/framework-agreement-call?OrderRecallSearch%5Bhead_line%5D=" & $sSMnr & "&OrderRecallSearch%5Bdocument_no%5D=&OrderRecallSearch%5Bincoming_date%5D=&OrderRecallSearch%5Border_date%5D=&OrderRecallSearch%5Bgeneral_agreement_id%5D=&OrderRecallSearch%5Bdocument_state%5D=-1", "https://www.evergabe.telekom.de/framework-agreement-call")
	_Write_to_Console("Suche SM-Nr: | " & $sSMnr)

	; optional: kurze Ausgabe, ob Nummer in der Seite vorkommt
	If StringInStr($sHtml, $sSMnr) > 0 Then
		_Write_to_Console("+ _EV_Search_SM: Treffer für " & $sSMnr & " gefunden." & @CRLF)
		$aTitle = _EV_Abrufliste_GET_Title_obj($sHtml)
		$aBedarfnr = _EV_Abrufliste_GET_Bedarfnr_obj($sHtml) ;SMnr
		$aBelegEinDatum = _EV_Abrufliste_GET_Belegeingang_obj($sHtml) ;Eingang E-Vergabe
		$aBelegnr = _EV_Abrufliste_GET_Belegnr_obj($sHtml) ;42Nr
		$aAusfuehrungsfrist = _EV_Abrufliste_GET_Ausfuehrungsfrist_obj($sHtml) ;Ausführungsfrist
		$aDetailID = _EV_Abrufliste_GET_DetailsID_obj($sHtml) ;DetailsID intern für E-Vergabe
		$aRV = _EV_Abrufliste_GET_RV_obj($sHtml) ;Rahmenvertrag
		$aStatus = _EV_Abrufliste_GET_Status_obj($sHtml) ;Status Angenommen Abgelehnt usw.
		Dim $aReturn[UBound($aTitle)][8]
;~ 	_DebugArrayDisplay($aReturn)

		For $i = 0 To UBound($aTitle) - 1
			$aReturn[$i][0] = $aTitle[$i]
			$aReturn[$i][1] = $aBedarfnr[$i]
			$aReturn[$i][2] = $aBelegnr[$i]
			$aReturn[$i][3] = $aDetailID[$i]
			$aReturn[$i][4] = $aRV[$i]
			$aReturn[$i][5] = $aBelegEinDatum[$i]
			$aReturn[$i][6] = $aAusfuehrungsfrist[$i]
			$aReturn[$i][7] = $aStatus[$i]

		Next
;~ 	_DebugArrayDisplay($aReturn)
		Return $aReturn
	Else
		_Write_to_Console("! _EV_Search_SM: Kein Treffer für " & $sSMnr & " gefunden." & @CRLF)
	EndIf
EndFunc   ;==>_EV_Search_SM_obj

Func _EV_Hole_Kopfdaten_obj()
	$sUsername = IniRead(@ScriptDir & "\daten\conf.ini", "EVergabe", "Benutzer", "xxx")
	$sPasswort = IniRead(@ScriptDir & "\daten\conf.ini", "EVergabe", "Passwort", "xxx")
	
	$sRetrunLogin = _EV_Lobin_obj($sUsername, $sPasswort)
	If $sRetrunLogin = "True" Then
;~ 		ConsoleWrite("Login Erfolgreich" & @CRLF)
		_Write_to_Console("Login Erfolgreich")
		$sSMnr = GUICtrlRead($kopf_tab_txt_smnr)
		If $sSMnr = "" Then
			_Write_to_Console("keine SMnr im Feld Kopfdaten")
		Else
			$aSMDeatails = _EV_Search_SM_obj($oHttp, $sSMnr)
;~ 			_DebugArrayDisplay($aSMDeatails)
;~ 			Row|Col 0|Col 1|Col 2|Col 3|Col 4|Col 5|Col 6|Col 7
;~ Row 0|Bahnhofstr. 16-18 78224 Singen   SM 209173009|209173009|4213308114|19487501|4650014601|30.01.2025|17.05.2025|Angenommen

			If UBound($aSMDeatails) > 1 Then
				
;~ 			ConsoleWrite(UBound($aArrayList) & @CRLF)
				$sDetailsID = _create_Gui_Ausw($aSMDeatails)
;~ 				MsgBox(64, "123124", $sDetailsID)
				
				$aAspadetails = _EV_Aspa_obj($sDetailsID)
;~ 				_DebugArrayDisplay($aAspadetails)
				GUICtrlSetData($kopf_TAB_txt_aspa, $aAspadetails[0])
				GUICtrlSetData($kopf_TAB_txt_telnr, $aAspadetails[2])
				GUICtrlSetData($kopf_TAB_txt_detailsID, $sDetailsID)
				_Write_to_Console("hole Kopfdaten erledigt.")
			Else
				$aAspadetails = _EV_Aspa_obj($aSMDeatails[0][3])
;~ 				_DebugArrayDisplay($aAspadetails)
				GUICtrlSetData($kopf_TAB_txt_aspa, $aAspadetails[0])
				GUICtrlSetData($kopf_TAB_txt_abrufnr, $aSMDeatails[0][2])
				GUICtrlSetData($kopf_TAB_datum_start, $aSMDeatails[0][5])
				GUICtrlSetData($kopf_TAB_txt_datum_ende, $aSMDeatails[0][6])
				GUICtrlSetData($kopf_TAB_txt_detailsID, $aSMDeatails[0][3])
				GUICtrlSetData($kopf_TAB_txt_telnr, $aAspadetails[2])
				_Write_to_Console("hole Kopfdaten erledigt.")


			EndIf
		EndIf

	Else
		_Write_to_Console("Login Fehler!!!")
		
	EndIf



;~ 	_EV_Logout()
EndFunc   ;==>_EV_Hole_Kopfdaten_obj

Func _EV_Pos_eintragen_obj($aInhalt)
	
	$sDatum = GUICtrlRead($kopf_tab_txt_datum)
	$sBaustelle = GUICtrlRead($kopf_tab_txt_baustelle)
	$sBauabschnitt = GUICtrlRead($kopf_tab_txt_bauabschnitt)
	$sAbrufNR = GUICtrlRead($kopf_tab_txt_abrufnr)
	$sSMnr = GUICtrlRead($kopf_tab_txt_smnr)
	$sVertrag = GUICtrlRead($kopf_tab_chb_vertrag)
	$sStartDatum = GUICtrlRead($kopf_tab_datum_start)
	$sEndDatum = GUICtrlRead($kopf_tab_txt_datum_ende)

	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Datum", $sDatum)
	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Baustelle", $sBaustelle)
	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Bauabschnitt", $sBauabschnitt)
	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "AbrufNr", $sAbrufNR)
	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "SMNr", $sSMnr)
	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Vertrag", $sVertrag)
	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "StartZ", $sStartDatum)
	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "EndZ", $sEndDatum)
	
	$sUsername = IniRead(@ScriptDir & "\daten\conf.ini", "EVergabe", "Benutzer", "xxx")
	$sPasswort = IniRead(@ScriptDir & "\daten\conf.ini", "EVergabe", "Passwort", "xxx")
	
	$sRetrunLogin = _EV_Lobin_obj($sUsername, $sPasswort)
	If $sRetrunLogin = "True" Then
;~ 		ConsoleWrite("Login Erfolgreich" & @CRLF)
		_Write_to_Console("Login Erfolgreich")
		
		Global $sDetailsID
		$sSMnr = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "SMNr", "")
		
		If IsArray($aInhalt) Then
			_Write_to_Console("Suche SM-Nr: | " & $sSMnr)
			$aArrayList = _EV_Search_SM_obj($oHttp, $sSMnr)
;~ 		_DebugArrayDisplay($aArrayList)
			If UBound($aArrayList) > 1 Then
				$sDetailsID = _create_Gui_Ausw($aArrayList)
			Else
				$sDetailsID = $aArrayList[0][3]
			EndIf
			_Write_to_Console("DetailsID: " & $sDetailsID)
			_Write_to_Console("Öffne DetailsID : | " & StringReplace($sDetailsID, "&c=1", ""))
;~ 			$sHtml = _send_WinhttpS_GET($aHosts[1][1], "/framework-agreement-call/details?id=" & $sDetailsID & "&c=1", "https://www.evergabe.telekom.de/")
			Local $sHtml = _HttpGet($oHttp, $sEVHOST & "/framework-agreement-call/details?id=" & $sDetailsID & "&c=1", "https://www.evergabe.telekom.de/framework-agreement-call")
			
			If Not StringInStr($sHtml, 'LERF nicht möglich') Then
				;LEB anlegen
;~ 				$sHtml = _send_WinhttpS_GET($aHosts[1][1], "/sheet/index?c=1&importId=" & $sDetailsID, "https://www.evergabe.telekom.de/" & "/framework-agreement-call/details?id=" & $sDetailsID & "&c=1")
				$sHtml = _HttpGet($oHttp, $sEVHOST & "/sheet/index?c=1&importId=" & $sDetailsID, "https://www.evergabe.telekom.de/" & "/framework-agreement-call/details?id=" & $sDetailsID & "&c=1")
;~ 				$sHtml = _send_WinhttpS_GET($aHosts[1][1], "/sheet/create-sheet?c=1&id=" & $sDetailsID, "https://www.evergabe.telekom.de/" & "/sheet/index?c=1&importId=" & $sDetailsID) ;evtl nicht direkt eingabe
				$sHtml = _HttpGet($oHttp, $sEVHOST & "/sheet/create-sheet?c=1&id=" & $sDetailsID, "https://www.evergabe.telekom.de/" & "/sheet/index?c=1&importId=" & $sDetailsID) ;evtl nicht direkt eingabe
;~ 				$sCSRF = _EV_GET_CSRF($sHtml)
				
;~ 				Local $sCSRF = "False"
				Local $sCsrfField = ""
				Local $sCsrfValue = _ExtractCsrf($sHtml, $sCsrfField)
				
				$sLeist_zeitv = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "StartZ", "")
				$sLeist_zeitb = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "EndZ", "")
				; mit UrlEncode
				$sLeistungsort1 = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Baustelle", "")
				If StringLen($sLeistungsort1) >= 25 Then
					$sLeistungsortso = $sLeistungsort1
					$sLeistungsort1 = StringMid($sLeistungsort1, 1, 25)
				Else
					$sLeistungsortso = $sLeistungsort1
				EndIf
				$sLeistungsort = _URIEncode($sLeistungsort1)     ; max 25 Zeichen
				$sSachbearbeiter = IniRead(@ScriptDir & "\daten\conf.ini", "EVergabe", "Name", "xxx")
				If StringLen($sSachbearbeiter) >= 12 Then
					$sSachbearbeiter_temp = $sSachbearbeiter
					$sSachbearbeiter = StringMid($sSachbearbeiter_temp, 1, 12)
;~ 					$sSachbearbeiter =  $sSachbearbeiter_temp
				EndIf
				$sBauabschnitt = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Bauabschnitt", "")

				If StringLen($sBauabschnitt) >= 40 Then
					$sBauabschnitt = StringMid($sBauabschnitt, 1, 39)
				EndIf
				$sBauabschnitt = _URIEncode($sBauabschnitt)

				$sKurztext = "SM "     ; max 40 Zeichen
				$sKurztext = StringReplace($sKurztext, "SM ", "SM " & $sSMnr)
				If StringLen($sKurztext) >= 40 Then
					$sKurztext = StringMid($sKurztext, 1, 39)
				EndIf
				$sKurztext = _URIEncode($sKurztext)
				; mit UrlEncode
				$s_SMnrINi = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "SMNr", $sSMnr)
				$sLangtext = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Baustelle", "") & " " & IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Bauabschnitt", "") & " " & "SM " & $s_SMnrINi & @CRLF & GUICtrlRead($tab_plan_ed_SListe)
;~ 				$sLangtext = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Baustelle", "") & " " & IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Bauabschnitt", "") & " " & "SM " & $sSMnr; alt
				$sLangtext = _URIEncode($sLangtext)

				Sleep(1000)
;~ 				MsgBox(64, "Langtext",  $sLangtext)
				$sHeader = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8" & @CRLF & "Accept-Language: de,en-US;q=0.7,en;q=0.3" & @CRLF & "Accept-Encoding: gzip, deflate, br" & @CRLF & "Content-Type: application/x-www-form-urlencoded" & @CRLF & "Origin: https://www.evergabe.telekom.de" & @CRLF & "Upgrade-Insecure-Requests: 1" & @CRLF & "Sec-Fetch-Dest: document" & @CRLF & "Sec-Fetch-Mode: navigate" & @CRLF & "Sec-Fetch-Site: same-origin" & @CRLF & "Sec-Fetch-User: ?1" & @CRLF

				If GUICtrlRead($kopf_TAB_rd_teilauf) = $GUI_CHECKED Then
					$sPost = "_csrf=" & $sCsrfValue & "%3D%3D&BapiEssr%5Bfinal%5D=&BapiEssr%5Bfinal%5D=&BapiEssr%5Blzvon%5D=" & $sLeist_zeitv & "&BapiEssr%5Blzbis%5D=" & $sLeist_zeitb & "&BapiEssr%5Bdlort%5D=" & $sLeistungsort & "&BapiEssr%5Bsbnaman%5D=" & $sSachbearbeiter & "&BapiEssr%5Btxz01%5D=" & $sBauabschnitt & "&BapiEssr%5Bdescription%5D=" & $sLangtext & "&save+sheets="
				EndIf

				If GUICtrlRead($kopf_TAB_rd_schluss) = $GUI_CHECKED Then
					$sPost = "_csrf=" & $sCsrfValue & "%3D%3D&BapiEssr%5Bfinal%5D=&BapiEssr%5Bfinal%5D=X&BapiEssr%5Blzvon%5D=" & $sLeist_zeitv & "&BapiEssr%5Blzbis%5D=" & $sLeist_zeitb & "&BapiEssr%5Bdlort%5D=" & $sLeistungsort & "&BapiEssr%5Bsbnaman%5D=" & $sSachbearbeiter & "&BapiEssr%5Btxz01%5D=" & $sBauabschnitt & "&BapiEssr%5Bdescription%5D=" & $sLangtext & "&save+sheets="
				Else
					$sPost = "_csrf=" & $sCsrfValue & "%3D%3D&BapiEssr%5Bfinal%5D=&BapiEssr%5Bfinal%5D=&BapiEssr%5Blzvon%5D=" & $sLeist_zeitv & "&BapiEssr%5Blzbis%5D=" & $sLeist_zeitb & "&BapiEssr%5Bdlort%5D=" & $sLeistungsort & "&BapiEssr%5Bsbnaman%5D=" & $sSachbearbeiter & "&BapiEssr%5Btxz01%5D=" & $sBauabschnitt & "&BapiEssr%5Bdescription%5D=" & $sLangtext & "&save+sheets="
				EndIf
				;weiter bei EVergabe.au3 in Zeile 386
;~ 					$aHTML = _WinHttpSimpleSSLRequest($aHosts[1][1], "POST", "/sheet/create-sheet?c=1&iid=" & $sDetailsID, "https://www.evergabe.telekom.de/sheet/create-sheet?c=1&iid=" & $sDetailsID, $sPost, $sHeader, True)
				$sHtml = _HttpPost($oHttp, $sEVHOST & "/sheet/create-sheet?c=1&iid=" & $sDetailsID, $sPost, "https://www.evergabe.telekom.de/sheet/create-sheet?c=1&iid=" & $sDetailsID)
				$sRespBody = $oHttp.ResponseText
;~ 				ClipPut($sHtml)
;~ 				MsgBox(64, "stop", "stop")
				$aSheetID = StringRegExp($sRespBody, 'sheetId=(.*)">Kopfdaten', 3)
;~ 				_DebugArrayDisplay($aSheetID)
				If IsArray($aSheetID) Then
					Global $iSheetID = $aSheetID[0]
					For $i = 0 To UBound($aInhalt) - 1
						$sHtml = _HttpGet($oHttp, $sEVHOST & "/sheet-position/index?c=1&sheetId=" & $aSheetID[0], "https://www.evergabe.telekom.de/" & "/sheet/index?c=1&importId=" & $sDetailsID) ;evtl nicht direkt eingabe
						$sPositionNr = $aInhalt[$i][1]
						Local $sCsrfField = ""
						Local $sCsrfValue = _ExtractCsrf($sHtml, $sCsrfField)
						$sPost = "_csrf=" & $sCsrfValue & "%3D%3D&ServicePosition%5Bnumber%5D=" & $sPositionNr & "&insertPosition=0"
;~ 						$aHTML = _WinHttpSimpleSSLRequest($aHosts[1][1], "POST", "/sheet-position/index?c=1&sheetId=" & $aSheetID[0], "https://www.evergabe.telekom.de/sheet-position/index?c=1&sheetId=" & $aSheetID[0], $sPost, "", True)
						$sHtml = _HttpPost($oHttp, $sEVHOST & "/sheet-position/index?c=1&sheetId=" & $aSheetID[0], $sPost, "https://www.evergabe.telekom.de/sheet-position/index?c=1&sheetId=" & $aSheetID[0])
						$sHtml = $oHttp.ResponseText
;~ 						ClipPut($sHtml)
;~ 						MsgBox(64, "stop", "stop")
						$aPosID = StringRegExp($sHtml, 'positionId=([^&]+)', 3)
						If IsArray($aPosID) Then
							$iSheetID = $aSheetID[0]
;~ 							$sHTML = _send_WinhttpS_GET($aHosts[1][1], "/sheet-position/create?insertPosition=0&positionId=" & $aPosID[0] & "&c=1&sheetId=" & $iSheetID, "")
							$sHtml = _HttpGet($oHttp, $sEVHOST & "/sheet-position/create?insertPosition=0&positionId=" & $aPosID[0] & "&c=1&sheetId=" & $iSheetID, "https://www.evergabe.telekom.de/" & "/sheet/index?c=1&importId=" & $sDetailsID) ;evtl nicht direkt eingabe
							Local $sCsrfField = ""
							Local $sCsrfValue = _ExtractCsrf($sHtml, $sCsrfField)
							Local $sCSRF = $sCsrfValue
							Select
								Case $aInhalt[$i][7] = "ST"
									;bei Stück
									_EV_ADD_ST_insert_obj($i, $aInhalt[$i][0], $aInhalt[$i][9], $aInhalt[$i][10], $aPosID[0], $iSheetID, $sCSRF, $aInhalt[$i][1] & "|" & $aInhalt[$i][8])
;~ 									_EV_ADD_ST_insert($aInhalt[$i][0], $aInhalt[$i][9], $aInhalt[$i][10], $aPosID[0], $iSheetID, $sCSRF)
;~ 									GUICtrlSetData($lbl_status,"Position: "&$aInhalt[$i][1] & " "& $aInhalt[$i][0] " hinzugefügt!")
								Case $aInhalt[$i][7] = "M"
									; bei Meter
									_EV_ADD_M_insert_obj($i, $aInhalt[$i][0], $aInhalt[$i][9], $aInhalt[$i][2], $aInhalt[$i][3], $aPosID[0], $iSheetID, $sCSRF, $aInhalt[$i][1] & "|" & $aInhalt[$i][8])                         ; alt
;~ 															_EV_ADD_M_insert($aInhalt[$i][0], $aInhalt[$i][9], $aInhalt[$i][2], $aInhalt[$i][3], $aPosID[0], $iSheetID, $sCSRF, $aInhalt[$i][1] & "|" & $aInhalt[$i][8])
;~ 														GUICtrlSetData($lbl_status,"Position: "&$aInhalt[$i][1] & " "& $aInhalt[$i][0] " hinzugefügt!")
								Case $aInhalt[$i][7] = "M2"
									; bei m2
									_EV_ADD_M2_insert_obj($i, $aInhalt[$i][0], $aInhalt[$i][9], $aInhalt[$i][2], $aInhalt[$i][3], $aInhalt[$i][4], $aPosID[0], $iSheetID, $sCSRF, $aInhalt[$i][1] & "|" & $aInhalt[$i][8])
;~ 														GUICtrlSetData($lbl_status,"Position: "&$aInhalt[$i][1] & " "& $aInhalt[$i][0] " hinzugefügt!")
								Case $aInhalt[$i][7] = "M3"
									;m3
									_EV_ADD_M3_insert_obj($i, $aInhalt[$i][0], $aInhalt[$i][9], $aInhalt[$i][2], $aInhalt[$i][3], $aInhalt[$i][4], $aInhalt[$i][5], $aPosID[0], $iSheetID, $sCSRF, $aInhalt[$i][1] & "|" & $aInhalt[$i][8])
;~ 														GUICtrlSetData($lbl_status,"Position: "&$aInhalt[$i][1] & " "& $aInhalt[$i][0] " hinzugefügt!")
								Case $aInhalt[$i][7] = "STD"
									; STD
									_EV_ADD_STD_insert_obj($i, $aInhalt[$i][0], $aInhalt[$i][9], $aInhalt[$i][10], $aPosID[0], $iSheetID, $sCSRF, $aInhalt[$i][1] & "|" & $aInhalt[$i][8])
;~ 														GUICtrlSetData($lbl_status,"Position: "&$aInhalt[$i][1] & " "& $aInhalt[$i][0] " hinzugefügt!")
								Case $aInhalt[$i][7] = "LE"
									; LE
									_EV_ADD_LE_insert_obj($i, $aInhalt[$i][0], $aInhalt[$i][9], $aInhalt[$i][10], $aPosID[0], $iSheetID, $sCSRF, $aInhalt[$i][1] & "|" & $aInhalt[$i][8])
;~ 														GUICtrlSetData($lbl_status,"Position: "&$aInhalt[$i][1] & " "& $aInhalt[$i][0] " hinzugefügt!")
							EndSelect
						EndIf
					Next
				Else
					_Write_to_Console("sheetID link=> " & $sHtml & " Pattern: " & "sheetId=(.*)")
				EndIf

			EndIf
			
		Else
			_Write_to_Console("kein Aufmaß gefunden!")
		EndIf
	Else
		_Write_to_Console("Login Fehler!!!")
		
	EndIf
EndFunc   ;==>_EV_Pos_eintragen_obj

Func _EV_ADD_LE_insert_obj($iZeile, $sAbschnitt, $sLangtext, $iLE, $iPosNrID, $iSheetID, $sCSRF, $sPosNrKurztext)
	If StringLen($sAbschnitt) >= 25 Then
		$sAbschnitt = StringMid($sAbschnitt, 1, 25)
	EndIf
	$sAbschnitt = _UrlEncode_obj($sAbschnitt)
	$sLongText = _UrlEncode_obj($sLangtext) ; max 40
	$iLE = StringReplace($iLE, ",", "%2C")
	$sPost = "_csrf=" & $sCSRF & "%3D%3D&ServicePosition%5B0%5D%5BsectionText%5D=" & $sAbschnitt & "&ServicePosition%5B0%5D%5Bquantity%5D=" & $iLE & "&ServicePosition%5B0%5D%5BlongText%5D=" & $sLongText & "&ServicePosition%5B0%5D%5Bid%5D=" & $iPosNrID & "&clientId=1&sheetId=" & $iSheetID & "&insertPosition=" & $iZeile & "&save="
;~ 	                                    &ServicePosition%5B0%5D%5BsectionText%5D=VAO                &ServicePosition%5B0%5D%5Bquantity%5D=100         &ServicePosition%5B0%5D%5BlongText%5D=VAO               &ServicePosition%5B0%5D%5Bid%5D=43945349         &clientId=1&sheetId=0006425482&insertPosition=0&save=
;~ 	$sHeader = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" & @CRLF & "Accept-Language: de,en-US;q=0.7,en;q=0.3" & @CRLF & "Accept-Encoding: gzip, deflate, br" & @CRLF & "Content-Type: application/x-www-form-urlencoded" & @CRLF
;~ 	$aHTML = _WinHttpSimpleSSLRequest($aHosts[1][1], "POST", "/sheet-position/create?insertPosition=" & $iZeile & "&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID, "https://www.evergabe.telekom.de//sheet-position/create?insertPosition=0&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID, $sPost, $sHeader, True)
	$sHtml = _HttpPost($oHttp, $sEVHOST & "/sheet-position/create?insertPosition=" & $iZeile & "&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID, $sPost, "https://www.evergabe.telekom.de//sheet-position/create?insertPosition=0&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID)
	$sHtml = $oHttp.ResponseText
;~ 	ClipPut($sHtml)
;~ 	MsgBox(64, "stop", "stop")
	If StringInStr($sHtml, "erfolgreich gespeichert") Then
		_Write_to_Console($sPosNrKurztext & "|" & "... eingetragen!")
	Else
		_Write_to_Console($sPosNrKurztext & "|" & "... Fehlgeschlagen")
	EndIf
EndFunc   ;==>_EV_ADD_LE_insert_obj

Func _EV_ADD_STD_insert_obj($iZeile, $sAbschnitt, $sLangtext, $iStueck, $iPosNrID, $iSheetID, $sCSRF, $sPosNrKurztext)
	If StringLen($sAbschnitt) >= 25 Then
		$sAbschnitt = StringMid($sAbschnitt, 1, 25)
	EndIf
	$sAbschnitt = _UrlEncode_obj($sAbschnitt)
	$sLongText = _UrlEncode_obj($sLangtext) ; max 40
	$iStueck = StringReplace($iStueck, ",", "%2C")
;~ 	$sHeader = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" & @CRLF & "Accept-Language: de,en-US;q=0.7,en;q=0.3" & @CRLF & "Accept-Encoding: gzip, deflate, br" & @CRLF & "Content-Type: application/x-www-form-urlencoded" & @CRLF

	$sPost = "_csrf=" & $sCSRF & "%3D%3D&ServicePosition%5B0%5D%5BsectionText%5D=" & $sAbschnitt & "&ServicePosition%5B0%5D%5Bquantity%5D=" & $iStueck & "&ServicePosition%5B0%5D%5BlongText%5D=" & $sLongText & "&ServicePosition%5B0%5D%5Bid%5D=" & $iPosNrID & "&clientId=1&sheetId=" & $iSheetID & "&insertPosition=" & $iZeile & "&save="
;~ 	$aHTML = _WinHttpSimpleSSLRequest($aHosts[1][1], "POST", "/sheet-position/create?insertPosition=" & $iZeile & "&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID, "https://www.evergabe.telekom.de/sheet-position/create?insertPosition=0&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID, $sPost, $sHeader, True)
	
	$sHtml = _HttpPost($oHttp, $sEVHOST & "/sheet-position/create?insertPosition=" & $iZeile & "&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID, $sPost, "https://www.evergabe.telekom.de//sheet-position/create?insertPosition=0&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID)
	$sHtml = $oHttp.ResponseText
;~ 	ClipPut($sHtml)
;~ 	MsgBox(64, "stop", "stop")
	If StringInStr($sHtml, "erfolgreich gespeichert") Then
		_Write_to_Console($sPosNrKurztext & "|" & "... eingetragen!")
	Else
		_Write_to_Console($sPosNrKurztext & "|" & "... Fehlgeschlagen")
	EndIf
EndFunc   ;==>_EV_ADD_STD_insert_obj

Func _EV_ADD_M3_insert_obj($iZeile, $sAbschnitt, $sLangtext, $sFaktor, $iLang, $iBreit, $iTief, $iPosNrID, $iSheetID, $sCSRF, $sPosNrKurztext)
	If StringLen($sAbschnitt) >= 25 Then
		$sAbschnitt = StringMid($sAbschnitt, 1, 25)
	EndIf
	$sAbschnitt = _UrlEncode_obj($sAbschnitt)
	$sFaktor = StringReplace($sFaktor, ",", "%2C")
	$sLongText = _UrlEncode_obj($sLangtext) ; max 40
	$iLang = StringReplace($iLang, ",", "%2C")
	$iBreit = StringReplace($iBreit, ",", "%2C")
	$iTief = StringReplace($iTief, ",", "%2C")
	$sPost = "_csrf=" & $sCSRF & "%3D%3D&ServicePosition%5B0%5D%5BsectionText%5D=" & $sAbschnitt & "&ServicePosition%5B0%5D%5BformulaSymbol%5D=MV&ServicePosition%5B0%5D%5BformulaValueMultiplier%5D=" & $sFaktor & "&ServicePosition%5B0%5D%5BformulaValueLength%5D=" & $iLang & "&ServicePosition%5B0%5D%5BformulaValueWidth%5D=" & $iBreit & "&ServicePosition%5B0%5D%5BformulaValueDepth%5D=" & $iTief & "&ServicePosition%5B0%5D%5BlongText%5D=" & $sLongText & "&ServicePosition%5B0%5D%5Bid%5D=" & $iPosNrID & "&clientId=1&sheetId=" & $iSheetID & "&insertPosition=" & $iZeile & "&save="
;~ 	$sHeader = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" & @CRLF & "Accept-Language: de,en-US;q=0.7,en;q=0.3" & @CRLF & "Accept-Encoding: gzip, deflate, br" & @CRLF & "Content-Type: application/x-www-form-urlencoded" & @CRLF

;~ 	$aHTML = _WinHttpSimpleSSLRequest($aHosts[1][1], "POST", "/sheet-position/create?insertPosition=" & $iZeile & "&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID, "https://www.evergabe.telekom.de/sheet-position/create?insertPosition=0&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID, $sPost, $sHeader, True)
;~ 	_DebugArrayDisplay($aHTML)

	$sHtml = _HttpPost($oHttp, $sEVHOST & "/sheet-position/create?insertPosition=" & $iZeile & "&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID, $sPost, "https://www.evergabe.telekom.de//sheet-position/create?insertPosition=0&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID)
	$sHtml = $oHttp.ResponseText
	If StringInStr($sHtml, "erfolgreich gespeichert") Then
		_Write_to_Console($sPosNrKurztext & "|" & "... eingetragen!")
	Else
		_Write_to_Console($sPosNrKurztext & "|" & "... Fehlgeschlagen")
	EndIf
EndFunc   ;==>_EV_ADD_M3_insert_obj

Func _EV_ADD_M2_insert_obj($iZeile, $sAbschnitt, $sLangtext, $sFaktor, $iLang, $iBreit, $iPosNrID, $iSheetID, $sCSRF, $sPosNrKurztext)
	If StringLen($sAbschnitt) >= 25 Then
		$sAbschnitt = StringMid($sAbschnitt, 1, 25)
	EndIf
	$sAbschnitt = _UrlEncode_obj($sAbschnitt)
;~ 	$sFaktor = StringReplace($sFaktor, ",", ".")
;~ 	If $sFaktor =  "1.0" Then
;~ 		$sFaktor =  "1"
;~ 	EndIf
;~ 	If $sFaktor =  "1,0" Then
;~ 		$sFaktor =  "1"
;~ 	EndIf
	$sFaktor = StringReplace($sFaktor, ",", "%2C")
	$sLongText = _UrlEncode_obj($sLangtext) ; max 40
	$iLang = StringReplace($iLang, ",", "%2C")
	$iBreit = StringReplace($iBreit, ",", "%2C")
;~ 	$sHeader = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" & @CRLF & "Accept-Language: de,en-US;q=0.7,en;q=0.3" & @CRLF & "Accept-Encoding: gzip, deflate, br" & @CRLF & "Content-Type: application/x-www-form-urlencoded" & @CRLF

	$sPost = "_csrf=" & $sCSRF & "%3D%3D&ServicePosition%5B0%5D%5BsectionText%5D=" & $sAbschnitt & "&ServicePosition%5B0%5D%5BformulaSymbol%5D=MF&ServicePosition%5B0%5D%5BformulaValueMultiplier%5D=" & $sFaktor & "&ServicePosition%5B0%5D%5BformulaValueLength%5D=" & $iLang & "&ServicePosition%5B0%5D%5BformulaValueWidth%5D=" & $iBreit & "&ServicePosition%5B0%5D%5BlongText%5D=" & $sLongText & "&ServicePosition%5B0%5D%5Bid%5D=" & $iPosNrID & "&clientId=1&sheetId=" & $iSheetID & "&insertPosition=" & $iZeile & "&save="
;~ 	$aHTML = _WinHttpSimpleSSLRequest($aHosts[1][1], "POST", "/sheet-position/create?insertPosition=" & $iZeile & "&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID, "https://www.evergabe.telekom.de/sheet-position/create?insertPosition=0&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID, $sPost, $sHeader, True)
;~ 	_DebugArrayDisplay($aHTML)
	$sHtml = _HttpPost($oHttp, $sEVHOST & "/sheet-position/create?insertPosition=" & $iZeile & "&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID, $sPost, "https://www.evergabe.telekom.de//sheet-position/create?insertPosition=0&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID)
	$sHtml = $oHttp.ResponseText
;~ 	ClipPut($sHtml)
;~ 	MsgBox(64, "stop", "stop")
	If StringInStr($sHtml, "erfolgreich gespeichert") Then
		_Write_to_Console($sPosNrKurztext & "|" & "... eingetragen!")
	Else
		_Write_to_Console($sPosNrKurztext & "|" & "... Fehlgeschlagen")
	EndIf
EndFunc   ;==>_EV_ADD_M2_insert_obj

Func _EV_ADD_ST_insert_obj($iZeile, $sAbschnitt, $sLangtext, $iStueck, $iPosNrID, $iSheetID, $sCSRF, $sPosNrKurztext)
	If StringLen($sAbschnitt) >= 25 Then
		$sAbschnitt = StringMid($sAbschnitt, 1, 25)
	EndIf
	$sAbschnitt = _UrlEncode_obj($sAbschnitt)
	$sLongText = _UrlEncode_obj($sLangtext) ; max 40
	$iStueck = StringReplace($iStueck, ",", "%2C")
;~ 	$sHeader = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" & @CRLF & "Accept-Language: de,en-US;q=0.7,en;q=0.3" & @CRLF & "Accept-Encoding: gzip, deflate, br" & @CRLF & "Content-Type: application/x-www-form-urlencoded" & @CRLF

	$sPost = "_csrf=" & $sCSRF & "%3D%3D&ServicePosition%5B0%5D%5BsectionText%5D=" & $sAbschnitt & "&ServicePosition%5B0%5D%5Bquantity%5D=" & $iStueck & "&ServicePosition%5B0%5D%5BlongText%5D=" & $sLongText & "&ServicePosition%5B0%5D%5Bid%5D=" & $iPosNrID & "&clientId=1&sheetId=" & $iSheetID & "&insertPosition=" & $iZeile & "&save="
;~ 	$aHTML = _WinHttpSimpleSSLRequest($aHosts[1][1], "POST", "/sheet-position/create?insertPosition=" & $iZeile & "&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID, "https://www.evergabe.telekom.de/sheet-position/create?insertPosition=0&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID, $sPost, $sHeader, True)
;~ 	_DebugArrayDisplay($aHTML)
	$sHtml = _HttpPost($oHttp, $sEVHOST & "/sheet-position/create?insertPosition=" & $iZeile & "&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID, $sPost, "https://www.evergabe.telekom.de//sheet-position/create?insertPosition=0&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID)
	$sHtml = $oHttp.ResponseText
;~ 	ClipPut($sHtml)
;~ 	MsgBox(64, "stop", "stop")
	If StringInStr($sHtml, "erfolgreich gespeichert") Then
		_Write_to_Console($sPosNrKurztext & "|" & "... eingetragen!")
	Else
		_Write_to_Console($sPosNrKurztext & "|" & "... Fehlgeschlagen")
	EndIf
EndFunc   ;==>_EV_ADD_ST_insert_obj

Func _EV_ADD_M_insert_obj($iZeile, $sAbschnitt, $sLangtext, $sFaktor, $sMeter, $iPosNrID, $iSheetID, $sCSRF, $sPosNrKurztext)
	If StringLen($sAbschnitt) >= 25 Then
		$sAbschnitt = StringMid($sAbschnitt, 1, 25)
	EndIf
	$sAbschnitt = _UrlEncode_obj($sAbschnitt)
	$sFaktor = StringReplace($sFaktor, ",", "%2C")
	$sMeter = StringReplace($sMeter, ",", "%2C")
	$sLongText = _UrlEncode_obj($sLangtext) ; max 40
;~ 	$sHeader = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" & @CRLF & "Accept-Language: de,en-US;q=0.7,en;q=0.3" & @CRLF & "Accept-Encoding: gzip, deflate, br" & @CRLF & "Content-Type: application/x-www-form-urlencoded" & @CRLF & "Origin: https://www.evergabe.telekom.de" & @CRLF

	$sPost = "_csrf=" & $sCSRF & "%3D%3D&ServicePosition%5B0%5D%5BsectionText%5D=" & $sAbschnitt & "&ServicePosition%5B0%5D%5BformulaSymbol%5D=ME&ServicePosition%5B0%5D%5BformulaValueMultiplier%5D=" & $sFaktor & "&ServicePosition%5B0%5D%5BformulaValueLength%5D=" & $sMeter & "&ServicePosition%5B0%5D%5BlongText%5D=" & $sLongText & "&ServicePosition%5B0%5D%5Bid%5D=" & $iPosNrID & "&clientId=1&sheetId=" & $iSheetID & "&insertPosition=" & $iZeile & "&save="
;~ 	;&ServicePosition[0][sectionText]=Abschnitt&ServicePosition[0][formulaSymbol]=ME&ServicePosition[0][formulaValueMultiplier]=1&ServicePosition[0][formulaValueLength]=95&ServicePosition[0][longText]=Langtext&ServicePosition[0][id]=82627311&clientId=1&sheetId=0008943838&insertPosition=&save=
;~ 	ConsoleWrite($sPost & @crlf)
;~ 	MsgBox(64, "", "")

;~ 	$aHTML = _WinHttpSimpleSSLRequest($aHosts[1][1], "POST", "/sheet-position/create?insertPosition=" & $iZeile & "&positionId=" & $iPosNrID & "&c=1&per-page=20&sheetId=" & $iSheetID, "https://www.evergabe.telekom.de/sheet-position/create?insertPosition=0&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID, $sPost, $sHeader, True)
;~ 	_DebugArrayDisplay($aHTML)
	$sHtml = _HttpPost($oHttp, $sEVHOST & "/sheet-position/create?insertPosition=" & $iZeile & "&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID, $sPost, "https://www.evergabe.telekom.de//sheet-position/create?insertPosition=0&positionId=" & $iPosNrID & "&c=1&sheetId=" & $iSheetID)
	$sHtml = $oHttp.ResponseText
;~ 	ClipPut($sHtml)
;~ 	MsgBox(64, "stop", "stop")
	If StringInStr($sHtml, "erfolgreich gespeichert") Then
		_Write_to_Console($sPosNrKurztext & "|" & "... eingetragen!")
	Else
		_Write_to_Console($sPosNrKurztext & "|" & "... Fehlgeschlagen")
	EndIf
EndFunc   ;==>_EV_ADD_M_insert_obj

Func _EV_Aspa_obj($sDetailsID)
	$sUrl = "https://evergabe.telekom.de/framework-agreement-call/details?id=" & $sDetailsID & "&c=1"
	$sRefer = "https://evergabe.telekom.de/framework-agreement-call/"
	$sHtml = _HttpGet($oHttp, $sUrl, $sRefer = "")
	Dim $aAspa[3]
;~ 	ClipPut($sHtml)
;~ 	MsgBox(64, "Read Aspa", "")

	$aAspaName = StringRegExp($sHtml, "Name</th><td>([^<]+)</td>", 3)
	$aAspaMail = StringRegExp($sHtml, 'mailto:([^"]+)', 3)
	$aAspaTel = StringRegExp($sHtml, 'th>Telefon</th><td>([^<]+)', 3)
	If IsArray($aAspaTel) Then
		$aAspa[2] = $aAspaTel[0]
	Else
		$aAspa[2] = ""
	EndIf
	If IsArray($aAspaName) Then
		$aAspa[0] = $aAspaName[0]
	Else
		$aAspa[0] = ""
	EndIf
	If IsArray($aAspaMail) Then
		$aAspa[1] = $aAspaMail[1]
	Else
		$aAspa[1] = ""
	EndIf
	
;~ 	_DebugArrayDisplay($aAspa)
	Return $aAspa
EndFunc   ;==>_EV_Aspa_obj

Func _EV_Abrufliste_GET_Title_obj($sQuellcode)
	;Rückgabe Array sonst $error string
;~ 	local $aTitle = StringRegExp($sQuellcode, 'no-wrap" title="([^"]+)', 3)
	Local $aTitle = StringRegExp($sQuellcode, '(?m)no-wrap" title="([^"]+)', 3)
;~ 	_DebugArrayDisplay($aTitle)
	If IsArray($aTitle) Then
		For $i = 0 To UBound($aTitle) - 1
			$aTitle[$i] = StringReplace($aTitle[$i], "SM Auftragsnummer: 000", " SM ")
			$aTitle[$i] = StringReplace($aTitle[$i], @CR, " ") ;CR out
			$aTitle[$i] = StringReplace($aTitle[$i], @LF, " ") ;LF out
		Next
		Return $aTitle
	Else
		Return "Error"
	EndIf
EndFunc   ;==>_EV_Abrufliste_GET_Title_obj

Func _EV_Abrufliste_GET_Bedarfnr_obj($sQuellcode)
	;SMNr
	;Rückgabe Array sonst $error string
	Local $aBedarfnr = StringRegExp($sQuellcode, 'Bedarfsnr.: 0([^<]+)<', 3)
;~ 	ConsoleWrite($sQuellcode & @CRLF)
;~ 	_DebugArrayDisplay($aBedarfnr)
;~ 	MsgBox(64, "", "")
	If IsArray($aBedarfnr) Then
		Return $aBedarfnr
	Else
		Return "Error"
	EndIf
EndFunc   ;==>_EV_Abrufliste_GET_Bedarfnr_obj

Func _EV_Abrufliste_GET_Belegeingang_obj($sQuellcode)
	;42Nr
	;Rückgabe Array sonst $error string
;~ 	Local $aBelegeingang = StringRegExp($sQuellcode, 'Bedarfsnr.: [^<]+</td><td>[^<]+</td><td>([^<]+)', 3)
	Local $aBelegeingang = StringRegExp($sQuellcode, '(\d\d\.\d\d\.\d\d\d\d)', 3)

	If IsArray($aBelegeingang) Then
		Return $aBelegeingang
	Else
		Return "Error"
	EndIf
EndFunc   ;==>_EV_Abrufliste_GET_Belegeingang_obj

Func _EV_Abrufliste_GET_Belegnr_obj($sQuellcode)
	;42Nr
	;Rückgabe Array sonst $error string
	Local $aBelegnr = StringRegExp($sQuellcode, '(42[^\/]+)\/0001', 3)
	If IsArray($aBelegnr) Then
		Return $aBelegnr
	Else
		Return "Error"
	EndIf
EndFunc   ;==>_EV_Abrufliste_GET_Belegnr_obj

Func _EV_Abrufliste_GET_Ausfuehrungsfrist_obj($sQuellcode)
	;Ausführungsfrist
	;Rückgabe Array sonst $error string
	Local $aAusfuehrungsfrist = StringRegExp($sQuellcode, '(\d\d\.\d\d\.\d\d\d\d)</td><td><a href', 3)
	If IsArray($aAusfuehrungsfrist) Then
		Return $aAusfuehrungsfrist
	Else
		Return "Error"
	EndIf
EndFunc   ;==>_EV_Abrufliste_GET_Ausfuehrungsfrist_obj

Func _EV_Abrufliste_GET_DetailsID_obj($sQuellcode)
	;DetailsID intern für E-Vergabe
	;Rückgabe Array sonst $error string
	Local $aDetailsID = StringRegExp($sQuellcode, 'call/details.id=([^&]+)&c=1', 3)
	If IsArray($aDetailsID) Then
		Return $aDetailsID
	Else
		Return "Error"
	EndIf
EndFunc   ;==>_EV_Abrufliste_GET_DetailsID_obj

Func _EV_Abrufliste_GET_RV_obj($sQuellcode)
	;Rahmenvertrag
	;Rückgabe Array sonst $error string
	Local $aRV = StringRegExp($sQuellcode, '/framework-agreement/details.id=[^"]+">([^/]+)', 3)
	If IsArray($aRV) Then
		Return $aRV
	Else
		Return "Error"
	EndIf
EndFunc   ;==>_EV_Abrufliste_GET_RV_obj

Func _EV_Abrufliste_GET_Status_obj($sQuellcode)
	;Stauts
	;Rückgabe Array sonst $error string
	Local $aStatus = StringRegExp($sQuellcode, '/framework-agreement/details.id=[^"]+">[^"]+"[^>]+>([^<]+)', 3)
	If IsArray($aStatus) Then
		Return $aStatus
	Else
		Return "Error"
	EndIf
EndFunc   ;==>_EV_Abrufliste_GET_Status_obj

Func _ComErrFunc()
	Local $sMsg = "COM-Fehler!" & @CRLF & _
			"Beschreibung: " & @error & @CRLF & _
			"Zusatzzahl: " & @extended & @CRLF
	ConsoleWrite("! " & $sMsg & @CRLF)
	MsgBox(16, "COM-Fehler", $sMsg)
EndFunc   ;==>_ComErrFunc

Func _HttpCreate()
	Global $oHttp = ObjCreate("WinHttp.WinHttpRequest.5.1")
	If Not IsObj($oHttp) Then
		MsgBox(16, "Fehler", "WinHttp-Objekt konnte nicht erzeugt werden.")
		Exit
	EndIf

	; Cookie Handling aktivieren
	$oHttp.Option(6) = True ; WinHttpRequestOption_EnableCookie
	Return $oHttp
EndFunc   ;==>_HttpCreate

Func _HttpGet($oHttp, $sUrl, $sRefer = "")
	If Not IsObj($oHttp) Then
		MsgBox(16, "Fehler", "HTTP-Objekt ist ungültig vor GET.")
		Exit
	EndIf

	Local $sMethod = "GET"
	Local $sReqHeaders = ""
	Local $sReqBody = ""

;~ 	ConsoleWrite("+ GET " & $sUrl & @CRLF)

	$oHttp.Open($sMethod, $sUrl, False)
	$oHttp.SetRequestHeader("User-Agent", $sUserAgent)
	$oHttp.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
	If $sRefer = "" Then
		;kein Refer angeben
	Else
		;refer übergeben
		$oHttp.SetRequestHeader("Referer", $sRefer)
	EndIf

	; Für Logging: Request-Header rekonstruieren (was wir selbst gesetzt haben)
	$sReqHeaders &= "User-Agent: " & $sUserAgent & @CRLF
	$sReqHeaders &= "Content-Type: application/x-www-form-urlencoded" & @CRLF
	
	If $sRefer = "" Then
		;kein Refer angeben
		$sReqHeaders &= "User-Agent: " & $sUserAgent & @CRLF
	Else
		;refer übergeben
		$sReqHeaders &= "User-Agent: " & $sUserAgent & @CRLF
		$sReqHeaders &= "Referer: " & $sRefer & @CRLF
	EndIf
	
	$oHttp.Send()

	Local $iStatus = $oHttp.Status
	; Response-Header holen
	Local $sAllRespHeaders = $oHttp.GetAllResponseHeaders()
	Local $sRespBody = $oHttp.ResponseText
	
	$sRespBody = StringReplace($sRespBody, "amp;", "")
	
	_Write_to_Console("öffne link: " & $sUrl)
	If $iDebug = "True" Then
		_LogRequestResponse($sMethod, $sUrl, $sReqHeaders, $sReqBody, $iStatus, $sAllRespHeaders, $sRespBody)
	EndIf
	Return $sRespBody
EndFunc   ;==>_HttpGet

Func _HttpPost($oHttp, $sUrl, $sBody, $sRefer = "")
	If Not IsObj($oHttp) Then
		MsgBox(16, "Fehler", "HTTP-Objekt ist ungültig vor POST.")
		Exit
	EndIf

	Local $sMethod = "POST"
	Local $sReqHeaders = ""
	Local $sReqBody = $sBody

;~ 	ConsoleWrite("+ POST " & $sUrl & @CRLF)

	$oHttp.Open($sMethod, $sUrl, False)
	$oHttp.SetRequestHeader("User-Agent", $sUserAgent)
	$oHttp.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
	If $sRefer = "" Then
		;kein Refer angeben
	Else
		;refer übergeben
		$oHttp.SetRequestHeader("Referer", $sRefer)
	EndIf


	; Request-Header fürs Logging
;~ 	$sReqHeaders &= "User-Agent: " & $sUserAgent & @CRLF
;~ 	$sReqHeaders &= "Content-Type: application/x-www-form-urlencoded" & @CRLF
;~ 	$sReqHeaders &= "Referer: " & $sRefer & @CRLF

	$oHttp.Send($sBody)

	Local $iStatus = $oHttp.Status
	Local $sAllRespHeaders = $oHttp.GetAllResponseHeaders()
	Local $sRespBody = $oHttp.ResponseText
	$sRespBody = StringReplace($sRespBody, "amp;", "")
	$oHttp.ResponseText = StringReplace($oHttp.ResponseText, "amp;", "")
	
	_Write_to_Console("öffne link: " & $sUrl)
	If $iDebug = "True" Then
		_LogRequestResponse($sMethod, $sUrl, $sReqHeaders, $sReqBody, $iStatus, $sAllRespHeaders, $sRespBody)
	EndIf
	
	Return $oHttp
EndFunc   ;==>_HttpPost


; =================== Hilfsfunktionen ============================
Func _ExtractCsrf($sHtml, ByRef $sFieldName)
	; Meta-Tag
	Local $aMeta = StringRegExp($sHtml, '(?i)<meta[^>]+name="csrf-token"[^>]+content="([^"]+)"', 3)
	If Not @error And UBound($aMeta) >= 1 Then
		$sFieldName = "_csrf"
		ConsoleWrite("+ CSRF (meta): " & $aMeta[0] & @CRLF)
		Return $aMeta[0]
	EndIf

	; Hidden input
	Local $a = StringRegExp($sHtml, '(?i)name="([^"]*csrf[^"]*)"[^>]*value="([^"]+)"', 3)
	If @error Or UBound($a) < 2 Then
		ConsoleWrite("! CSRF-Token nicht gefunden" & @CRLF)
		FileWrite("debug_login_page.html", $sHtml)
		Exit
	EndIf
	$sFieldName = $a[0]
	ConsoleWrite("+ CSRF Feld: " & $a[0] & " = " & $a[1] & @CRLF)
	Return $a[1]
EndFunc   ;==>_ExtractCsrf

Func _UrlEncode_obj($s)
	Local $i, $ch, $sOut = ""
	For $i = 1 To StringLen($s)
		$ch = StringMid($s, $i, 1)
		Local $asc = Asc($ch)
		If ($asc >= 48 And $asc <= 57) Or _
				($asc >= 65 And $asc <= 90) Or _
				($asc >= 97 And $asc <= 122) Or _
				$ch = "-" Or $ch = "_" Or $ch = "." Or $ch = "~" Then
			$sOut &= $ch
		Else
			$sOut &= "%" & Hex($asc, 2)
		EndIf
	Next
	Return $sOut
EndFunc   ;==>_UrlEncode_obj

Func _Pad2($i)
	If $i < 10 Then
		Return "0" & $i
	EndIf
	Return $i
EndFunc   ;==>_Pad2

; Speichert Request- und Response-Daten als NN.header.txt / NN.response.txt
Func _LogRequestResponse($sMethod, $sUrl, $sReqHeaders, $sReqBody, _
		$iStatus, $sRespHeaders, $sRespBody)
	$g_iReqCounter += 1
	Local $sIdx = _Pad2($g_iReqCounter)

	; ----- Header-Datei -----
	Local $sHeaderFile = $sIdx & ".header.txt"
	Local $sHeaderContent = ""
	$sHeaderContent &= "=== REQUEST " & $sIdx & " ===" & @CRLF
	$sHeaderContent &= "Method: " & $sMethod & @CRLF
	$sHeaderContent &= "URL: " & $sUrl & @CRLF & @CRLF
	$sHeaderContent &= "[Request Headers]" & @CRLF & $sReqHeaders & @CRLF & @CRLF
	$sHeaderContent &= "[Request Body]" & @CRLF & $sReqBody & @CRLF

	FileWrite($sHeaderFile, $sHeaderContent)

	; ----- Response-Datei -----
	Local $sRespFile = $sIdx & ".response.txt"
	Local $sRespContent = ""
	$sRespContent &= "=== RESPONSE " & $sIdx & " ===" & @CRLF
	$sRespContent &= "Status: " & $iStatus & @CRLF & @CRLF
	$sRespContent &= "[Response Headers]" & @CRLF & $sRespHeaders & @CRLF & @CRLF
	$sRespContent &= "[Response Body]" & @CRLF & $sRespBody & @CRLF

	FileWrite($sRespFile, $sRespContent)

	; ----- Konsolen-Ausgabe -----
	ConsoleWrite("+ ==== REQUEST " & $sIdx & " " & $sMethod & " " & $sUrl & " ====" & @CRLF)
	ConsoleWrite($sReqHeaders & @CRLF)
	If $sReqBody <> "" Then
		ConsoleWrite("Body:" & @CRLF & $sReqBody & @CRLF)
	EndIf
	ConsoleWrite("+ ==== RESPONSE " & $sIdx & " (HTTP " & $iStatus & ") ====" & @CRLF)
	ConsoleWrite($sRespHeaders & @CRLF)
	ConsoleWrite("Body :" & @CRLF & $sRespBody & @CRLF)
	
	_Write_to_Console("+ ==== REQUEST " & $sIdx & " " & $sMethod & " " & $sUrl & " ====")
	_Write_to_Console($sReqHeaders)
	If $sReqBody <> "" Then
		_Write_to_Console("Body:" & @CRLF & $sReqBody)
	EndIf
	_Write_to_Console("+ ==== RESPONSE " & $sIdx & " (HTTP " & $iStatus & ") ====")
	_Write_to_Console($sRespHeaders)
	_Write_to_Console("Body :" & @CRLF & $sRespBody)
	
EndFunc   ;==>_LogRequestResponse
