Imports System.IO
Imports System.Globalization
Imports System.Xml
Imports Renci.SshNet
Imports System.Net
Imports System.Text

Public Class frmMDMNachrichtenVerarbeitung
    Dim cntDatenEingelesen As Integer = 0
    Dim dsNichtErkannt As Integer = 0
    Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
    Dim allowClose = False
    '  Dim DY_PFAD = "C:\Users\DEVELOPER1\Desktop\test\TEST\"

    Dim TELOTEC_PFAD = "" '"C:\Users\DEVELOPER1\Desktop\test\TEST\Nachrichtendaten_Einarbeitung\"
    Dim VERARBEITUNGS_PFAD = "" '"C:\Users\DEVELOPER1\Desktop\test\TEST\Nachrichtendaten_Einarbeitung\"
    Dim ZIEL_PFAD = "" '"C:\Users\DEVELOPER1\Desktop\test\TEST\Nachrichtendaten_Ablage\"
    Dim ERROR_PFAD = "" '"C:\Users\DEVELOPER1\Desktop\test\TEST\Nachrichtendaten_ERROR\"
    ' Dim BOX_VERSION = "8.8"

    Dim Dateiname = ""

    Sub New()

        ' Dieser Aufruf ist für den Designer erforderlich.
        InitializeComponent()

        ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.

    End Sub
    Sub New(allowClose) 'autostart

        ' Dieser Aufruf ist für den Designer erforderlich.
        InitializeComponent()
        Me.allowClose = allowClose
        ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.

    End Sub

    Sub initPfade()
        Me.TELOTEC_PFAD = MDM_Worker.cMDM_Paramter.GET_PARAM_ByName("PLOSE_PFAD", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM)
        Me.VERARBEITUNGS_PFAD = MDM_Worker.cMDM_Paramter.GET_PARAM_ByName("VERARBEITUNGS_PFAD", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM)
        'VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getRootDir() & "DAKOSY\TESTSYSTEM\Nachrichtendaten_Einarbeitung\"
        Me.ZIEL_PFAD = MDM_Worker.cMDM_Paramter.GET_PARAM_ByName("ZIEL_PFAD", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM)
        'VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getRootDir() & "DAKOSY\TESTSYSTEM\Nachrichtendaten_Ablage\"
        Me.ERROR_PFAD = MDM_Worker.cMDM_Paramter.GET_PARAM_ByName("ERROR_PFAD", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM)
        'VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getRootDir() & "DAKOSY\TESTSYSTEM\Nachrichtendaten_ERROR\"
        If Not IO.Directory.Exists(VERARBEITUNGS_PFAD) Then IO.Directory.CreateDirectory(VERARBEITUNGS_PFAD)
        If Not IO.Directory.Exists(ZIEL_PFAD) Then IO.Directory.CreateDirectory(ZIEL_PFAD)
        If Not IO.Directory.Exists(ERROR_PFAD) Then IO.Directory.CreateDirectory(ERROR_PFAD)

        'Me.BOX_VERSION = MDM_Worker.cDY_Paramter.GET_PARAM_ByName("BOX_VERSION", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM)

    End Sub


    Private Sub frmDYNachrichtenVerarbeitung_Load(sender As Object, e As EventArgs) Handles Me.Load
        initPfade()
        For Each d In System.IO.Directory.GetFiles(VERARBEITUNGS_PFAD)
            ListBox3.Items.Add(frmStartOptions.cut_file(d))
            Me.Refresh()
        Next
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Me.Enabled = False
        Try
            Label9.Visible = True
            Dim cnt = getNachrichtenDatenFromMDMServices() ' If(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, getNachrichtenDatenFromMDMServicesTEST(), getNachrichtenDatenFromMDMServices())
            Label9.Text = cnt & " Datensätze empfangen."

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try
        Me.Enabled = True

    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.Enabled = False
        Try
            Label5.Visible = True
            DatenEinlesen()
            If dsNichtErkannt > 0 Then

                Label6.Text = dsNichtErkannt & " Datensätze nicht " & vbNewLine & "erkannt."
                Label6.Visible = True
            End If
        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try
        Me.Enabled = True
        Label5.Text = cntDatenEingelesen & " Datensätze verarbeitet."

    End Sub


    Function getNachrichtenDatenFromMDMServices() As Integer
        Dim cnt = 0
        Try

            Dim MDM_server = ""
            Dim MDM_name = ""
            Dim MDM_pwd = ""
            Dim MDM_port = ""
            Dim MDM_PFAD_out = ""

            MDM_Worker.cMDMFunctions.getSFTPLoginData(MDM_server, MDM_name, MDM_pwd, MDM_port, "", MDM_PFAD_out)

            DownloadFtpDirectory(MDM_server & "/"c & MDM_PFAD_out, New NetworkCredential(MDM_name, MDM_pwd), "", cnt, True)
            ' DownloadFtpDirectory("ftp://80.16.102.180" & "/"c & MDM_PFAD_out, New NetworkCredential(MDM_name, MDM_pwd), "", cnt, True)

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try

        Return cnt
    End Function


    Sub DownloadFtpDirectory(url As String, credentials As NetworkCredential, localPath As String, ByRef cnt As Integer, deleteAfterDownload As Boolean)
        Dim listRequest As FtpWebRequest = WebRequest.Create(url)
        listRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails
        listRequest.Credentials = credentials


        Dim lines As List(Of String) = New List(Of String)

        Using listResponse As FtpWebResponse = listRequest.GetResponse(),
          listStream As Stream = listResponse.GetResponseStream(),
          listReader As StreamReader = New StreamReader(listStream)
            While Not listReader.EndOfStream
                lines.Add(listReader.ReadLine())
            End While
        End Using

        For Each line As String In lines
            Dim tokens As String() =
            line.Split(New Char() {" "}, 9, StringSplitOptions.RemoveEmptyEntries)
            Dim name As String = tokens(8)
            Dim permissions As String = tokens(0)

            Dim localFilePath As String = Path.Combine(localPath, name)
            Dim fileUrl As String = url + name

            If permissions(0) = "d" Then 'Ordner
                If Not Directory.Exists(localFilePath) Then
                    Directory.CreateDirectory(localFilePath)
                End If
                DownloadFtpDirectory(fileUrl + "/", credentials, localFilePath, cnt, deleteAfterDownload)

            Else

                If True Then
                    '  Temp.DownloadPfad

                    Dim downloadRequest As FtpWebRequest = WebRequest.Create(fileUrl)
                    downloadRequest.Method = WebRequestMethods.Ftp.DownloadFile
                    downloadRequest.Credentials = credentials

                    Dim fileDateTmp As Date = ServerDateFile(credentials, fileUrl)

                    'Dim destFilenameTMP = VERARBEITUNGS_PFAD & "." & If(IO.File.Exists(VERARBEITUNGS_PFAD & "." & name), name.Replace(".csv", "_") & " RGDAT_" & fileDateTmp.ToShortDateString & "_" & Now.ToString("yyMMdd_HHmmss.fff") & ".csv", name)
                    ' Dim FimeNameTmp = If(IO.File.Exists(VERARBEITUNGS_PFAD & "." & name), name.Replace(".csv", "_") & " RGDAT_" & fileDateTmp.ToShortDateString & "_" & Now.ToString("yyMMdd_HHmmss.fff") & ".csv", name)
                    name = name.Replace(".csv", "_RGDAT_" & fileDateTmp.ToShortDateString & ".csv")

                    Dim destFilenameTMP = VERARBEITUNGS_PFAD & "." & If(IO.File.Exists(VERARBEITUNGS_PFAD & "." & name), name.Replace(".csv", "_") & Now.ToString("yyMMdd_HHmmss.fff") & ".csv", name)

                    Using downloadResponse As FtpWebResponse = downloadRequest.GetResponse(),
                      sourceStream As Stream = downloadResponse.GetResponseStream(),
                      targetStream As Stream = File.OpenWrite(destFilenameTMP)
                        Dim buffer As Byte() = New Byte(10240 - 1) {}
                        Dim read As Integer
                        Do
                            read = sourceStream.Read(buffer, 0, buffer.Length)
                            If read > 0 Then
                                targetStream.Write(buffer, 0, read)
                            End If
                        Loop While read > 0

                        sourceStream.Dispose()
                        targetStream.Dispose()
                        downloadResponse.Dispose()

                        Dim destFilename = VERARBEITUNGS_PFAD & If(IO.File.Exists(VERARBEITUNGS_PFAD & name), name.Replace(".csv", "_") & Now.ToString("yyMMdd_HHmmss.fff") & ".csv", name)

                        IO.File.Move(destFilenameTMP, destFilename) 'Datei umbenennen


                        Dim fi As FileInfo = New FileInfo(destFilename)
                        ListBox3.Items.Add(frmStartOptions.cut_file(fi.Name)) 'zur Liste hinzufügen
                        cnt += 1


                        'Datei nach download löschen
                        If deleteAfterDownload Then
                            Dim ftpReq As FtpWebRequest = WebRequest.Create(fileUrl)
                            ftpReq.Method = WebRequestMethods.Ftp.DeleteFile
                            ftpReq.Credentials = credentials
                            Dim ftpResp As FtpWebResponse = ftpReq.GetResponse
                            ftpResp.Close()
                        End If

                    End Using
                End If
            End If
        Next
    End Sub



    Private Function ServerDateFile(credentials As NetworkCredential, fileUrl As String) As Date
        Dim ServerDate As DateTime
        Try
            Dim request As FtpWebRequest = WebRequest.Create(fileUrl)
            request.Method = WebRequestMethods.Ftp.GetDateTimestamp
            request.Credentials = credentials

            Using response = CType(request.GetResponse(), Net.FtpWebResponse)
                ServerDate = response.LastModified.ToShortDateString
            End Using

            Return ServerDate
        Catch ex As WebException
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "PLOSE GET DATE FILE: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try

        Return ServerDate
    End Function



    Function getNachrichtenDatenFromMDMServices_ALTERNATIV() As Integer
        Dim cnt = 0
        Try
            For Each f In IO.Directory.GetFiles(TELOTEC_PFAD)
                Dim FI As New FileInfo(f)
                If Not FI.Name.StartsWith(".") Then
                    'Temp. DownloadPfad
                    Dim destFilenameTMP = VERARBEITUNGS_PFAD + "." & If(IO.File.Exists(VERARBEITUNGS_PFAD & "." & FI.Name), Now.ToString("yyMMdd_HHmmss.fff_"), "") & FI.Name

                    'Datei herunterladen
                    IO.File.Copy(f, destFilenameTMP)
                    If IO.File.Exists(destFilenameTMP) Then IO.File.Delete(f) 'Datei nach erfolgreichem Herunterladen vom Server löschen

                    'Gültiger Filename
                    Dim destFilename = VERARBEITUNGS_PFAD & If(IO.File.Exists(VERARBEITUNGS_PFAD & FI.Name), Now.ToString("yyMMdd_HHmmss.fff_"), "") & FI.Name
                    IO.File.Move(destFilenameTMP, destFilename) 'Datei umbenennen

                    Dim fi_dest As FileInfo = New FileInfo(destFilename)
                    ListBox3.Items.Add(frmStartOptions.cut_file(fi_dest.Name)) 'zur Liste hinzufügen
                    cnt += 1
                    lblDatenCnt.Text = cnt
                    Me.Refresh()
                End If
            Next
        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try

        Return cnt

        'Dim cnt = 0
        'Try
        '    Dim DY_server = ""
        '    Dim DY_name = ""
        '    Dim DY_pwd = ""
        '    Dim DY_port = ""
        '    Dim DY_PFAD_out = ""

        '    DAKOSY_Worker.cDakosyFunftions.getSFTPLoginData(DY_server, DY_name, DY_pwd, DY_port, "", DY_PFAD_out)


        '    Dim ConnectionInfo As New ConnectionInfo(DY_server, DY_port, DY_name, New PasswordAuthenticationMethod(DY_name, DY_pwd))
        '    Using client = New SftpClient(ConnectionInfo)
        '        client.Connect()

        '        For Each f In client.ListDirectory(DY_PFAD_out)
        '            '   MsgBox(f.Name)
        '            If Not f.Name.StartsWith(".") Then
        '                'Temp. DownloadPfad
        '                Dim destFilenameTMP = VERARBEITUNGS_PFAD + "." & If(IO.File.Exists(VERARBEITUNGS_PFAD & "." & f.Name), Now.ToString("yyMMdd_HHmmss.fff_"), "") & f.Name

        '                'Datei herunterladen
        '                Dim downloadFileStream As Stream = File.OpenWrite(destFilenameTMP)
        '                client.DownloadFile(f.FullName, downloadFileStream)
        '                If IO.File.Exists(destFilenameTMP) Then client.DeleteFile(f.FullName) 'Datei nach erfolgreichem Herunterladen vom Server löschen
        '                downloadFileStream.Dispose()

        '                'Gültiger Filename
        '                Dim destFilename = VERARBEITUNGS_PFAD & If(IO.File.Exists(VERARBEITUNGS_PFAD & f.Name), Now.ToString("yyMMdd_HHmmss.fff_"), "") & f.Name
        '                IO.File.Move(destFilenameTMP, destFilename) 'Datei umbenennen

        '                Dim fi As FileInfo = New FileInfo(destFilename)
        '                ListBox3.Items.Add(frmStartOptions.cut_file(fi.Name)) 'zur Liste hinzufügen
        '                cnt += 1
        '            End If
        '        Next
        '        client.Disconnect()
        '    End Using
        'Catch ex As Exception
        '    VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        'End Try

        'Return cnt
    End Function





    ' Dim toEncodeAsBytes() As Byte = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode)
    '  string returnValue            = System.Convert.ToBase64String(toEncodeAsBytes)
    Public Function stripNonValidXMLCharacters(ByVal textIn As String) As String
        Dim textOut As System.Text.StringBuilder = New System.Text.StringBuilder()
        Dim current As Char
        If textIn Is Nothing OrElse textIn = String.Empty Then Return String.Empty
        For i As Integer = 0 To textIn.Length - 1
            current = textIn(i)
            If (current = "9" OrElse current = "10" OrElse current = "13") OrElse ((current >= "32") AndAlso (current <= "55295")) OrElse ((current >= "57344") AndAlso (current <= "65533")) OrElse ((current >= "65536") AndAlso (current <= "1114111")) Then
                textOut.Append(current)
            End If
        Next

        Return textOut.ToString()
    End Function

    Public Function SanitizeXmlString(ByVal xml As String) As String
        If xml Is Nothing Then
            Throw New ArgumentNullException("xml")
        End If

        Dim buffer As System.Text.StringBuilder = New System.Text.StringBuilder(xml.Length)
        For Each c As Char In xml
            If IsLegalXmlChar(Asc(c)) Then
                buffer.Append(c)
            End If
        Next

        Return buffer.ToString()
    End Function

    Public Function IsLegalXmlChar(ByVal character As Integer) As Boolean
        Return (character = 9 OrElse character = 10 OrElse character = 13 OrElse (character >= 32 AndAlso character <= 55295) OrElse (character >= 57344 AndAlso character <= 65533) OrElse (character >= 65536 AndAlso character <= 1114111))
    End Function



    Sub DatenEinlesen()

        VERAG_PROG_ALLGEMEIN.cAllgemein.ERR_OP_GLOBAL = VERAG_PROG_ALLGEMEIN.ERROR_OP.MAIL

        If ListBox3.Items.Count = 0 Then
            Label6.Text = "Keine Daten zum Einlesen vorhanden."
            Label6.Visible = True
            Exit Sub
        End If

        For i = 1 To 5

            For Each d In System.IO.Directory.GetFiles(VERARBEITUNGS_PFAD)
                Try
                    Dateiname = d
                    cWorker_NCTS.Dateiname = d
                    If IO.File.Exists(d) Then
                        Dim found = False
                        Dim fi As FileInfo = New FileInfo(d)

                        '   EDIFACT
                        ' If fi.Extension = ".edi" Then
                        Dim alreadyMoved = False

                        '------------------------------------------------------------------------------------------------------------------------------
                        '                                                                  PLOSE
                        '------------------------------------------------------------------------------------------------------------------------------




                        Select Case i
                            Case 1
                                '------------------------------------------
                                '------------------ DETAIL ------------------
                                '------------------------------------------
                                If fi.Extension.ToLower = ".csv" Then

                                    If Not found And cGetMsgType.isPLOSE_Detail(d) Then
                                        If readPLOSE_Detail(d) <> "" Then found = True
                                        ' If bezugsNr <> "" Then addDGVEinarbeitung("NCTS: Versandbestätigung", bezugsNr) : found = True
                                    End If
                                    If found Then cntDatenEingelesen += 1
                                End If
                            Case 2
                                '------------------------------------------
                                '------------------ HEADER ------------------
                                '------------------------------------------
                                If fi.Extension.ToLower = ".csv" Then


                                    If Not found And cGetMsgType.isPLOSE_Header(d) Then
                                        If readPLOSE_Header(d) <> "" Then found = True
                                        ' If bezugsNr <> "" Then addDGVEinarbeitung("NCTS: Versandbestätigung", bezugsNr) : found = True
                                    End If
                                    If found Then cntDatenEingelesen += 1
                                End If
                            Case 3
                                '------------------------------------------
                                '------------------ PLOSE_INVData: neues CSV --> Rechnungen + PDF-Link ------------------
                                '------------------------------------------

                                If fi.Extension.ToLower = ".csv" Then
                                    If Not found And cGetMsgType.isPLOSE_INVData(d) Then
                                        If readPLOSE_INVData(d) <> "" Then found = True
                                        '    ' If bezugsNr <> "" Then addDGVEinarbeitung("NCTS: Versandbestätigung", bezugsNr) : found = True
                                    End If
                                    If found Then cntDatenEingelesen += 1
                                End If
                            Case 4
                                '------------------------------------------
                                '------------------ PDF ------------------
                                '------------------------------------------
                                If fi.Extension.ToLower = ".pdf" Then
                                    found = False

                                    If Not IO.Directory.Exists(ZIEL_PFAD & "Invoice_PDF\" & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\") Then IO.Directory.CreateDirectory(ZIEL_PFAD & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\")

                                    'File in Datenarchiv sichern:
                                    Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("MDM", "MDM_DATEN", "PLOSE", Now.Year, Now.ToString("yyyyMMdd"), frmStartOptions.getFileName(d))
                                    DS.uploadDataToDATENSERVER(d)
                                    'DatenArchiv-Id in tblPLOSE_Inv_Data Tabelle eintragen (über PDF-Name) :
                                    SQL.doSQL("Update [tblPLOSE_Inv_Data] SET [plInv_daId]='" & DS.da_id & "'   where [plInv_PdfFileName] = '" & DS.da_name & "' and [plInv_Einlesedatum] > DATEADD(DAY,-4,getdate())  ", "FMZOLL")

                                    frmStartOptions.moveFile_DateBack(d, ZIEL_PFAD & "Invoice_PDF\" & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\")
                                    'frmStartOptions.copyFile_DateBack(d, ZIEL_PFAD & "Invoice_PDF\" & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\")
                                    addDGVEinarbeitung("PDF", DS.da_name)
                                    dgvEinarbeitung.Refresh()

                                    'Eintrag 
                                End If
                            Case 5
                                frmStartOptions.moveFile_DateBack(d, ERROR_PFAD)
                                    dsNichtErkannt += 1
                            End Select





                            If True Then
                            If Not alreadyMoved Then
                                If found Then
                                    If Not IO.Directory.Exists(ZIEL_PFAD & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\") Then IO.Directory.CreateDirectory(ZIEL_PFAD & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\")
                                    frmStartOptions.moveFile_DateBack(d, ZIEL_PFAD & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\")
                                End If
                            End If
                        End If

                        Me.Refresh()

                    End If
                Catch ex As Exception
                    VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
                End Try
            Next
        Next
    End Sub



    Function getString(doc As XmlDocument) As Boolean
        If doc.HasChildNodes Then
            '  If doc.GetElementsByTagName("DakosyMessageInternal").Count > 0 Then
            Dim sw = New StringWriter()
            Dim xw = New XmlTextWriter(sw)
            doc.WriteTo(xw)
            Dim XmlString = sw.ToString()
            MsgBox(XmlString)
        End If
        Return False
    End Function



    Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
        Me.Close()
    End Sub

    Private Sub btn_Click(sender As Object, e As EventArgs) Handles btn.Click
        Me.Close()
    End Sub



    Sub addDGVEinarbeitung(art, BezugsNr)
        dgvEinarbeitung.Rows.Add(art, BezugsNr)
        Try
            dgvEinarbeitung.FirstDisplayedScrollingRowIndex = dgvEinarbeitung.RowCount - 1
        Catch ex As Exception
        End Try
    End Sub






    Function readPLOSE_Detail(d As String) As String
        Try
            readPLOSE_Detail = ""
            Dim KdnR = ""

            Dim plose_RechnungsJahr = ""
            Dim plose_RechnungsLieferantCode = ""
            Dim plose_RechnungsNr = ""

            Dim plose_RechnungsDat = Nothing
            Dim plose_Lieferant = Nothing

            Dim fi As FileInfo = New FileInfo(d)
            If fi.Name.Length > 8 Then
                'Dim plose_RechnungsNr = fi.Name.Substring(0, 8)

                plose_RechnungsJahr = fi.Name.Substring(0, 2)
                plose_RechnungsLieferantCode = fi.Name.Substring(2, 1)
                ' plose_RechnungsNr = fi.Name.Substring(3, 5)


                '--------> auslesen [tblPLOSE_Lieferant]
                Select Case plose_RechnungsLieferantCode
                    Case "0" : plose_Lieferant = "PLOSE Sistem Service"
                    Case "7" : plose_Lieferant = "Consortio PLOSE"
                    Case "1" : plose_Lieferant = "Plose Union"
                    Case "9" : plose_Lieferant = "PLOSE UNION SOCIETA COOPERATIVA"
                End Select

                'FALSCHE WERTE!!!
                'If fi.FullName.Contains("_RGDAT_") Then
                '    Try
                '        plose_RechnungsDat = CDate(fi.FullName.Substring(fi.FullName.IndexOf("_RGDAT_") + 7, 10))
                '    Catch ex As Exception
                '        VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "PLOSE RG DATUM, FILE: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
                '    End Try
                'End If
            End If

            Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(d, Encoding.UTF8)
                MyReader.TextFieldType = FileIO.FieldType.Delimited
                MyReader.SetDelimiters(";")
                Dim currentRow As String()

                Dim cnt = 0
                If True Then



                    While Not MyReader.EndOfData
                        Try


                            currentRow = MyReader.ReadFields()


                            If True Then 'fi.Name.Length > 8 Then



                                Select Case currentRow(0)
                                    Case "TR1"
                                        'RECHNUGNSDATUM
                                        If currentRow.Length > 1 AndAlso currentRow(1).ToString.Length = 8 Then
                                            Dim datumParse = DateTime.ParseExact(currentRow(1), "yyyyMMdd", Nothing)
                                            plose_RechnungsDat = datumParse 'Rechnungsdatum aus TR1 Datensatz, überschreibt den Wert aus der Dateierstellung
                                        End If
                                        'RECHNUGNSNR
                                        If currentRow.Length > 2 Then 'AndAlso currentRow(1).ToString.Length = 8 Then
                                            plose_RechnungsNr = SQL.isleernothing(currentRow(2)) 'Rechnungsdatum aus TR1 Datensatz, überschreibt den Wert aus der Dateierstellung
                                        End If

                                    Case "TR5"
                                        If currentRow.Length > 24 AndAlso currentRow(12) <> "839160" Then 'KDNR <> VERAG --> Die Kosten bleiben uns
                                            Dim PLOSE As New MDM_Worker.cPLOSE

                                            PLOSE.plose_Dateiname = fi.Name
                                            PLOSE.plose_RechnungsNr = plose_RechnungsNr
                                            PLOSE.plose_Lieferant = plose_Lieferant
                                            PLOSE.plose_LieferantCode = plose_RechnungsLieferantCode
                                            PLOSE.plose_RechnungsJahr = plose_RechnungsJahr
                                            If plose_RechnungsDat IsNot Nothing Then PLOSE.plose_RechnungsDatum = plose_RechnungsDat
                                            PLOSE.plose_Datensatztyp = SQL.isleernothing(currentRow(0))
                                            PLOSE.plose_KodexMautTankstelle = SQL.isleernothing(currentRow(1))
                                            PLOSE.plose_BeschreibungMautTankstelle = SQL.isleernothing(currentRow(2))
                                            PLOSE.plose_KodexEinfahrt = SQL.isleernothing(currentRow(3))
                                            PLOSE.plose_BeschreibungEinfahrt = SQL.isleernothing(currentRow(4))
                                            PLOSE.plose_KodexAusfahrt = SQL.isleernothing(currentRow(5))
                                            PLOSE.plose_BeschreibungAusfahrt = SQL.isleernothing(currentRow(6))
                                            PLOSE.plose_Kartenkodex = SQL.isleernothing(currentRow(7))
                                            PLOSE.plose_Kontonummer = SQL.isleernothing(currentRow(8))
                                            PLOSE.plose_NummerKarteGeraet = SQL.isleernothing(currentRow(9))
                                            PLOSE.plose_Kennzeichen = SQL.isleernothing(currentRow(10))
                                            PLOSE.plose_InterneNrFahrzeug = SQL.isleernothing(currentRow(11))
                                            PLOSE.plose_POLSEKundennummer = SQL.isleernothing(currentRow(12))
                                            PLOSE.plose_Firmenname = SQL.isleernothing(currentRow(13))
                                            PLOSE.plose_DatumTransaktion = SQL.isleernothingDateFormatstring(currentRow(14))
                                            PLOSE.plose_Produktbeschreibung = SQL.isleernothing(currentRow(15))
                                            PLOSE.plose_Menge = SQL.isNullNothingDbl(currentRow(16))
                                            PLOSE.plose_Preis = SQL.isNullNothingDbl(currentRow(17))
                                            PLOSE.Einheitsrabatt = SQL.isleernothing(currentRow(18))
                                            PLOSE.plose_NettobetragTransaktion = SQL.isNullNothingDbl(currentRow(19))
                                            PLOSE.plose_MWSTBetrag = SQL.isNullNothingDbl(currentRow(20))
                                            PLOSE.plose_BruttobetragTransaktion = SQL.isNullNothingDbl(currentRow(21))
                                            PLOSE.plose_NettobetragWaehrungAbbuchung = SQL.isNullNothingDbl(currentRow(22))
                                            PLOSE.plose_MWSTBetragWaehrungAbbuchung = SQL.isNullNothingDbl(currentRow(23))
                                            PLOSE.plose_BruttobetragWaehrungAbbuchung = SQL.isNullNothingDbl(currentRow(24))
                                            PLOSE.plose_WaehrungLandDiesntleistung = SQL.isleernothing(currentRow(25))
                                            PLOSE.plose_WaehrungAbbuchung = SQL.isleernothing(currentRow(26))
                                            PLOSE.plose_DokumentNrQuittungUhrzeit = SQL.isleernothing(currentRow(27))
                                            PLOSE.plose_ArtTransaktion = SQL.isleernothing(currentRow(28))
                                            PLOSE.plose_Fahrzeugklasse = SQL.isleernothing(currentRow(29))
                                            PLOSE.plose_KlassenidentifikationEURO = SQL.isleernothing(currentRow(30))
                                            PLOSE.plose_ProduktbeschreibungShort = SQL.isleernothing(currentRow(31))
                                            PLOSE.plose_DokumentNrQuittungUhrzeit = SQL.isleernothing(currentRow(32))
                                            PLOSE.plose_Geraetetyp = SQL.isleernothing(currentRow(33))
                                            PLOSE.plose_ProduktCode = SQL.isleernothing(currentRow(34))
                                            PLOSE.plose_ReferenzenBuchungMaut = SQL.isleernothing(currentRow(35))

                                            If currentRow.Length > 36 Then PLOSE.plose_SupplierRechnungsNr = SQL.isleernothing(currentRow(36))
                                            If currentRow.Length > 37 AndAlso currentRow(37).ToString.Length = 8 Then
                                                Dim datumParse = DateTime.ParseExact(currentRow(37), "yyyyMMdd", Nothing)
                                                PLOSE.plose_SupplierRechnungsDatum = datumParse
                                            End If

                                            If If(PLOSE.plose_SupplierRechnungsNr, "").contains("-SFC-") Then ' SOFICO
                                                PLOSE.plose_LieferantCode = "90"
                                                PLOSE.plose_Lieferant = SQL.DLookup("pl_Bezeichnung", "tblPLOSE_Lieferant", " [pl_LieferantCode]='" & PLOSE.plose_LieferantCode & "' ", "FMZOLL", "")
                                            End If

                                            ''''''''''''
                                            If PLOSE.SAVE() Then

                                                End If

                                            End If
                                End Select

                                cnt += 1
                            End If


                            'For Each currentField In currentRow
                            'Next
                        Catch ex As Exception
                            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
                        End Try
                    End While


                    'Label30.Text = (cnt + 1) & " / " & LineCount
                    'Label31.Visible = True
                    readPLOSE_Detail = "Zeilen: " & cnt
                Else
                    MsgBox("FEHLER beim Löschen der vorhandenen OP-Liste.")
                End If
            End Using




            Try
                '  System.IO.File.Delete(p)
            Catch ex As Exception
                VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
            End Try

            addDGVEinarbeitung("PLOSE: Detail" & KdnR, readPLOSE_Detail)

            '    End Using

            'End If

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
            MsgBox(ex.StackTrace & ex.Message)
            readPLOSE_Detail = ""
        End Try
    End Function


    Function readPLOSE_Header(d As String) As String
        Try
            Return "" ' Keine Übernahme der Daten (RgDatum) --> Falsches Format!!!




            readPLOSE_Header = ""
            Dim KdnR = ""

            Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(d, Encoding.UTF8)
                MyReader.TextFieldType = FileIO.FieldType.Delimited
                MyReader.SetDelimiters(";")
                Dim currentRow As String()

                Dim cnt = 0
                If True Then

                    While Not MyReader.EndOfData
                        Try
                            currentRow = MyReader.ReadFields()

                            Dim fi As FileInfo = New FileInfo(d)
                            If fi.Name.Length > 8 Then
                                Dim plose_RechnungsNr = fi.Name.Substring(0, 8)
                                If IsNumeric(plose_RechnungsNr) AndAlso IsNumeric(currentRow(12)) Then
                                    If currentRow.Length > 24 AndAlso currentRow(12) <> "839160" Then 'KDNR <> VERAG --> Die Kosten bleiben uns
                                        Dim plose_RechnungsDatum = SQL.isleernothingDateFormatstring(currentRow(14))

                                        If plose_RechnungsDatum IsNot Nothing AndAlso IsDate(plose_RechnungsDatum) Then
                                            MDM_Worker.cPLOSE.UPDATE_RGDatum(plose_RechnungsDatum, plose_RechnungsNr, currentRow(12))
                                            cnt += 1
                                        End If
                                    End If
                                End If
                            End If



                        Catch ex As Exception
                            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
                        End Try
                    End While


                    'Label30.Text = (cnt + 1) & " / " & LineCount
                    'Label31.Visible = True
                    readPLOSE_Header = "Zeilen: " & cnt
                Else
                    MsgBox("FEHLER beim Löschen der vorhandenen OP-Liste.")
                End If
            End Using




            Try
                '  System.IO.File.Delete(p)
            Catch ex As Exception
                VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
            End Try

            addDGVEinarbeitung("PLOSE: Header" & KdnR, readPLOSE_Header)

            '    End Using

            'End If

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
            MsgBox(ex.StackTrace & ex.Message)
            readPLOSE_Header = ""
        End Try
    End Function



    Function readPLOSE_INVData(d As String) As String
        Try
            Dim cnt = 0
            readPLOSE_INVData = ""


            Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(d, Encoding.UTF8)
                MyReader.TextFieldType = FileIO.FieldType.Delimited
                MyReader.SetDelimiters(";")
                Dim currentRow As String()


                Dim fi As FileInfo = New FileInfo(d)

                While Not MyReader.EndOfData
                    Try
                        currentRow = MyReader.ReadFields()

                        If currentRow(0) <> "PloseCode" Then ' Header
                            If currentRow.Length >= 15 Then
                                Dim PLOSE_INV As New MDM_Worker.cPLOSE_Inv_Data
                                '  MsgBox(SQL.isleernothingDateFormatstring(currentRow(7)))
                                '  MsgBox(currentRow(7))
                                PLOSE_INV.plInv_SupplierRechnungsDatum = SQL.isleernothingDateFormatstring(currentRow(7))
                                '   MsgBox(PLOSE_INV.plInv_SupplierRechnungsDatum)
                                PLOSE_INV.plInv_SupplierRechnungsNr = SQL.isleernothing(currentRow(8))
                                PLOSE_INV.plInv_SupplierCountry = SQL.isleernothing(currentRow(6))
                                PLOSE_INV.plInv_Lieferant = SQL.isleernothing(currentRow(4))
                                PLOSE_INV.plInv_LieferantCode = SQL.isleernothing(currentRow(3))
                                PLOSE_INV.plInv_LieferantUID = SQL.isleernothing(currentRow(5))
                                'PLOSE_INV.plInv_RechnungsJahr = SQL.isleernothing(currentRow(7)) --> JAHR
                                PLOSE_INV.plInv_PdfFileName = SQL.isleernothing(currentRow(14))
                                If If(PLOSE_INV.plInv_PdfFileName, "") <> "" Then
                                    If Not PLOSE_INV.plInv_PdfFileName.ToString.ToLower.EndsWith(".pdf") Then PLOSE_INV.plInv_PdfFileName += ".pdf" ' Falls Endung nciht .pdf --> anfügen
                                End If
                                PLOSE_INV.plInv_Einlesedatum = Now.ToShortDateString
                                PLOSE_INV.plInv_Datensatztyp = "PDF"
                                PLOSE_INV.plInv_PLOSEKundennummer = SQL.isleernothing(currentRow(0))
                                PLOSE_INV.plInv_Firmenname = SQL.isleernothing(currentRow(1))
                                '                                    PLOSE_INV.plInv_DatumTransaktion = SQL.isleernothing(currentRow(0))
                                '                                   PLOSE_INV.plInv_Produktbeschreibung = SQL.isleernothing(currentRow(0))
                                PLOSE_INV.plInv_Services = SQL.isleernothing(currentRow(13))

                                PLOSE_INV.plInv_Nettobetrag = CDbl(CDbl(SQL.isNullReturnValue(currentRow(9), 0).replace(".", ",")) + CDbl(SQL.isNullReturnValue(currentRow(11), 0).replace(".", ",")))
                                PLOSE_INV.plInv_MWSTBetrag = CDbl(SQL.isNullReturnValue(currentRow(10), 0).replace(".", ","))
                                PLOSE_INV.plInv_Bruttobetrag = CDbl(SQL.isNullReturnValue(currentRow(12), 0).replace(".", ","))

                                ' [plInv_daId]  

                                'If If(PLOSE_INV.plInv_PdfFileName, "") <> "" Then 'And PLOSE_INV.plInv_daId Is Nothing Then
                                '    PLOSE_INV.plInv_daId = SQL.getValueTxtBySql("SELECT TOP (1) [da_id]  FROM [tblDatenarchiv]  where da_kategorie = 'MDM' AND da_ordner='MDM_DATEN' and da_name='" & PLOSE_INV.plInv_PdfFileName & "' order by da_id desc", "FMZOLL",,, Nothing)
                                'End If


                                PLOSE_INV.plInv_Dateiname = fi.Name

                                ''''''''''''
                                If PLOSE_INV.SAVE() Then

                                    ' UPDATE tblPLOSE_Details:
                                    SQL.doSQL("UPDATE [tblPLOSE_Details] SET [plose_plInvId] ='" & PLOSE_INV.plInv_Id & "'  where plose_SupplierRechnungsNr='" & PLOSE_INV.plInv_SupplierRechnungsNr & "' AND plose_SupplierRechnungsDatum='" & PLOSE_INV.plInv_SupplierRechnungsDatum & "'", "FMZOLL")
                                End If

                            End If
                        End If

                        cnt += 1

                    Catch ex As Exception
                        VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
                    End Try
                End While


                readPLOSE_INVData = "Zeilen: " & cnt

            End Using




            Try
                '  System.IO.File.Delete(p)
            Catch ex As Exception
                VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
            End Try

            addDGVEinarbeitung("PLOSE: INV_DATA (" & cnt & ")", readPLOSE_INVData)

            '    End Using

            'End If

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
            MsgBox(ex.StackTrace & ex.Message)
            readPLOSE_INVData = ""
        End Try
    End Function


    Private Sub dgvEinarbeitung_SelectionChanged(sender As Object, e As EventArgs) Handles dgvEinarbeitung.SelectionChanged
        dgvEinarbeitung.ClearSelection()

    End Sub






    Private Sub frmTCNachrichtenVerarbeitung_Shown(sender As Object, e As EventArgs) Handles Me.Shown
        If allowClose Then
            Me.Refresh()

            Button2.PerformClick()
            Button1.PerformClick()

            System.Threading.Thread.Sleep(2000)

            Me.Close()
        End If
    End Sub

    Private Sub pnl_Paint(sender As Object, e As PaintEventArgs) Handles pnl.Paint

    End Sub
End Class

