Public Class frmAbschluss
    Dim Mandant As String
    Dim Mandant_ID As Integer
    Private Sub frmAbschluss_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Try
            Me.VWAbschlussTableAdapter.Connection.ConnectionString = My.Settings.ConfigConnectionString
            Me.TBKOMMCOLLI_MANDANTTableAdapter.Connection.ConnectionString = My.Settings.ConfigConnectionString
            Me.TBKOMMCOLLI_PAKET_KOPFTableAdapter.Connection.ConnectionString = My.Settings.ConfigConnectionString
            Me.TBKOMMCOLLI_PAKET_POSTableAdapter.Connection.ConnectionString = My.Settings.ConfigConnectionString
            Me.TBKOMMCOLLI_PAKET_POS_LSTableAdapter.Connection.ConnectionString = My.Settings.ConfigConnectionString

            Me.VKKOPFTableAdapter.Connection.ConnectionString = My.Settings.ConfigConnStringMercator

            Me.TBKOMMCOLLI_MANDANTTableAdapter.Fill(MyDataset.TBKOMMCOLLI_MANDANT)
            LoadProfilesInCombobox()
        Catch ex As Exception
            MsgBox("Fehler bei Load: " & vbNewLine & ex.Message, MsgBoxStyle.Exclamation)
        End Try
    End Sub
    Private Sub LoadProfilesInCombobox()
        Try
            Me.cmbMandant.Items.Clear()
            For Each row As DataRow In MyDataset.TBKOMMCOLLI_MANDANT
                cmbMandant.Items.Add(row.Item("KURZNAME"))
            Next
            If My.Settings.Default_Mandant <> String.Empty Then
                cmbMandant.SelectedIndex = cmbMandant.FindStringExact(My.Settings.Default_Mandant)
            Else
                cmbMandant.SelectedIndex = -1
            End If
        Catch ex As Exception
            MsgBox("Fehler beim Laden der Mandanten in die Auswahlliste" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
        End Try
    End Sub
    Private Function AbschlussPaket(Mandant_ID As Integer, Speicherort As String)
        Try
            'Schreibt Daten aus View_Export in Datei!!!
            Dim Save_Datei As String = Speicherort & "/" & Date.Now.ToShortDateString & "_exp.ar" '"E:\" & Date.Now.ToShortDateString & "_exp.ar" ' 

            Dim Version As Integer = 0
            Do While IO.File.Exists(Save_Datei)
                Version += 1
                Save_Datei = Speicherort & "/" & Date.Now.ToShortDateString & "_exp~" & Version & ".ar"
            Loop
            'Setzt das Code-Format auf ASCII

            Dim streamwriter As New System.IO.StreamWriter(Save_Datei, False, System.Text.Encoding.Default)
            Dim anz As Integer = 0
            Dim PAKET_ID As String
            'Jedes Paket durchlaufen
            For Each dbRow As DataRow In MyDataset.VWKOMMCOLLI_ABSCHLUSS_PAKET.Rows
                If CBool(dbRow.Item("Auswahl")) = True Then
                    PAKET_ID = dbRow.Item("PAKET_ID").ToString
                    If Verarbeite_Paket(streamwriter, dbRow.Item("GUID"), PAKET_ID, dbRow.Item("TERMIN_KZ").ToString, dbRow.Item("ANZ_PACKSTUECK").ToString, dbRow.Item("GESAMTGEWICHT").ToString) = True Then
                        anz += 1
                        VWAbschlussTableAdapter.cmdAbschluss(Save_Datei, dbRow.Item("GUID"))
                    End If
                End If
            Next
            streamwriter.Flush()
            streamwriter.Close()
            MsgBox("Es wurden " & anz.ToString & " Pakete erfolgreich abgeschlossen")
        Catch ex As Exception
            MsgBox("Fehler bei AbschlussPaket: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
        End Try

        '
    End Function
    Function Verarbeite_Paket(sw As System.IO.StreamWriter, PAKET_GUID As Integer, PAKET_ID As String, Terminart As String, AnzPaket As Integer, GewichtGESAMT As String)
        Try
            Dim Paketschluessel As String = PAKET_ID
            Dim LieferscheinString As String
            'Das Gewicht "berechnen", hierzu wird das hitnerlegte Gewicht durch die Anzahl der Paakete geteilt
            GewichtGESAMT = GewichtGESAMT / AnzPaket
            If CDbl(GewichtGESAMT) > 40.0 Then
                MsgBox("Achtung: Das Gewicht des Pakets '" & PAKET_ID & "' überschreitet das Maximalgewicht von 40 kg!" & vbNewLine & "Bitte verständigen Sie Ihren Systembetreuuer", MsgBoxStyle.Critical, "Fehler")
                Return False
            End If
            Me.TBKOMMCOLLI_PAKET_POS_LSTableAdapter.Fill(Me.MyDataset.TBKOMMCOLLI_PAKET_POS_LS, PAKET_GUID)
            'Lieferschein-String laden
            Dim DTLS As DataTable = MyDataset.TBKOMMCOLLI_PAKET_POS_LS
            Dim a As Integer = 0
            Dim tempLS As String = ""
            If DTLS.Rows.Count > 0 Then
                For Each row As DataRow In DTLS.Rows
                    If a = 0 Then
                        tempLS = row.Item(0)
                    Else
                        tempLS = tempLS & "," & row.Item(0)
                    End If
                    a += 1
                Next
            Else
                tempLS = ""
            End If
           
            LieferscheinString = tempLS


            If GewichtGESAMT.Contains(".") Then
                GewichtGESAMT = GewichtGESAMT.Replace(".", ",")
            End If
            If GewichtGESAMT.Contains(",") = False Then
                GewichtGESAMT = GewichtGESAMT & ",0"
            Else
                If GewichtGESAMT.Contains(",00") = True Then
                    GewichtGESAMT = GewichtGESAMT.Replace(",00", ",0")
                End If
            End If

            For i As Integer = 1 To AnzPaket
                PAKET_ID = Paketschluessel & "." & i.ToString
                'Den Builder für die Zeile definieren
                Dim ZeilenBuilder As System.Text.StringBuilder
                Dim DT As DataTable = MyDataset.TBKOMMCOLLI_PAKET_POS
                ZeilenBuilder = New System.Text.StringBuilder
                ZeilenBuilder.Append(PAKET_ID.PadRight(25))
                ZeilenBuilder.Append(";")
                Dim Name1, Name2, Name3, Strasse, PLZ, Ort, LAND As String
                Dim exists As Integer = TBKOMMCOLLI_PAKET_KOPFTableAdapter.cmdAllVerweiseExists(PAKET_GUID)
                'Für die Bestellnummer konnten Zeilen gefunden werden
                If exists > 0 Then
                    Name1 = TBKOMMCOLLI_PAKET_KOPFTableAdapter.cmdAllVerweiseFirma1(PAKET_GUID)
                    Name2 = TBKOMMCOLLI_PAKET_KOPFTableAdapter.cmdAllVerweiseFirma2(PAKET_GUID)
                    Name3 = TBKOMMCOLLI_PAKET_KOPFTableAdapter.cmdAllVerweiseFirma3(PAKET_GUID)
                    Strasse = TBKOMMCOLLI_PAKET_KOPFTableAdapter.cmdAllVerweiseStrasse(PAKET_GUID)
                    PLZ = TBKOMMCOLLI_PAKET_KOPFTableAdapter.cmdAllVerweisePLZ(PAKET_GUID)
                    Ort = TBKOMMCOLLI_PAKET_KOPFTableAdapter.cmdAllVerweiseOrt(PAKET_GUID)
                    LAND = TBKOMMCOLLI_PAKET_KOPFTableAdapter.cmdAllVerweiseLAND(PAKET_GUID)
                    'Gewicht = TBKOMMCOLLI_PAKET_KOPFTableAdapter.cmdAllVerweiseGewicht(PAKET_GUID)
                Else
                    Name1 = TBKOMMCOLLI_PAKET_KOPFTableAdapter.cmdBestellNrFirma1(PAKET_GUID)
                    Name2 = TBKOMMCOLLI_PAKET_KOPFTableAdapter.cmdBestellNrFirma2(PAKET_GUID)
                    Name3 = TBKOMMCOLLI_PAKET_KOPFTableAdapter.cmdBestellNrFirma3(PAKET_GUID)
                    Strasse = TBKOMMCOLLI_PAKET_KOPFTableAdapter.cmdBEstellNrStrasse(PAKET_GUID)
                    PLZ = TBKOMMCOLLI_PAKET_KOPFTableAdapter.cmdBestellNrPLZ(PAKET_GUID)
                    Ort = TBKOMMCOLLI_PAKET_KOPFTableAdapter.cmdBestellNrOrt(PAKET_GUID)
                    LAND = TBKOMMCOLLI_PAKET_KOPFTableAdapter.cmdBestellNrLand(PAKET_GUID)
                    ' Gewicht = TBKOMMCOLLI_PAKET_KOPFTableAdapter.cmdBestellNrGewicht(PAKET_GUID)
                End If
                If Name1 <> String.Empty Then
                    ZeilenBuilder.Append(Name1.PadRight(30))
                    ZeilenBuilder.Append(";")
                    ZeilenBuilder.Append(Name2.PadRight(30))
                    ZeilenBuilder.Append(";")
                    ZeilenBuilder.Append(Name3.PadRight(30))
                    ZeilenBuilder.Append(";")
                    ZeilenBuilder.Append(Strasse.PadRight(30))
                    ZeilenBuilder.Append(";")
                    ZeilenBuilder.Append(PLZ.PadRight(10))
                    ZeilenBuilder.Append(";")
                    ZeilenBuilder.Append(Ort.PadRight(30))
                    ZeilenBuilder.Append(";")
                    ZeilenBuilder.Append(Paketschluessel.PadRight(30))
                    ZeilenBuilder.Append(";")
                    ZeilenBuilder.Append(LAND.PadRight(3))
                    ZeilenBuilder.Append(";")


                    ZeilenBuilder.Append(GewichtGESAMT.PadRight(6))
                    ZeilenBuilder.Append(";")

                Else
                    MsgBox("Fehler beim Abschluss des Pakets '" & PAKET_ID & "'!" & vbNewLine & "Kein eindeutiger Datensatz zu VKOPF_BESTELLNR Und VKOPF_EINGANSNR gefunden." & _
                           vbNewLine & "Bitte verständigen Sie Ihren Systembetreuuer", MsgBoxStyle.Critical, "Fehler")
                    Return False
                End If
                ZeilenBuilder.Append(Terminart.PadRight(3))
                ZeilenBuilder.Append(";")
                ZeilenBuilder.Append(LieferscheinString)
                ZeilenBuilder.Append(";")
                'ZeilenBuilder.Append(AnzPaket.ToString.PadRight(3))
                'ZeilenBuilder.Append(";")
                sw.WriteLine(ZeilenBuilder.ToString)
            Next

            Return True
        Catch ex As Exception
            MsgBox("Fehler bei Verarbeite_Paket: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
        End Try
    End Function
    Private Sub tsbtcheck_all_Click(sender As System.Object, e As System.EventArgs) Handles tsbtcheck_all.Click
        If cmbMandant.Text = "GLS" Then
            Dim DT As DataTable = MyDataset.VWKOMMCOLLI_ABSCHLUSS_PAKET
            For Each DR As DataRow In DT.Rows
                DR.Item("Auswahl") = True
            Next
        Else
            Dim DT As DataTable = MyDataset.VWHUP_REPORT1
            For Each DR As DataRow In DT.Rows
                DR.Item("Selected") = True
            Next
        End If

    End Sub

    Private Sub tsbtde_check_all_Click(sender As System.Object, e As System.EventArgs) Handles tsbtde_check_all.Click
        If cmbMandant.Text = "GLS" Then
            Dim DT As DataTable = MyDataset.VWKOMMCOLLI_ABSCHLUSS_PAKET
            For Each DR As DataRow In DT.Rows
                DR.Item("Auswahl") = False
            Next
        Else
            Dim DT As DataTable = MyDataset.VWHUP_REPORT1
            For Each DR As DataRow In DT.Rows
                DR.Item("Selected") = False
            Next
        End If

    End Sub
    Sub Load_Pakete(vMandant As String)

        Try
                Mandant = vMandant
                Me.VWAbschlussTableAdapter.Fill(Me.MyDataset.VWKOMMCOLLI_ABSCHLUSS_PAKET, Mandant)
            Catch ex As Exception
                MsgBox("Fehler bei Load_Pakete: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
            End Try

    End Sub

    Private Sub btnAbschluss_Click(sender As System.Object, e As System.EventArgs) Handles btnAbschluss.Click
        Me.Validate()
        VWAbschlussBindingSource.EndEdit()
        ' Fragen ob das Profil wirklich gelöscht werden soll
        Dim result As DialogResult = MessageBox.Show("Dies wird die Sendungsdaten exportieren und verschicken." & vbNewLine & vbNewLine & "DIES KANN NICHT RÜCKGÄNGIG GEMACHT WERDEN!" & vbNewLine & vbNewLine & "Sind Sie sicher dass Sie den Tageschluss durchführen wollen?", "Tagesabschluss", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2)

        ' wenn das Profil gelöscht werden soll
        If result = MsgBoxResult.Yes Then

            If cmbMandant.Text = "GLS" Then

                Dim Speicherort As String
                Mandant_ID = 0

                Mandant_ID = TBKOMMCOLLI_MANDANTTableAdapter.cmdGetGUIDbyKurzname(Mandant)
                Speicherort = TBKOMMCOLLI_MANDANTTableAdapter.cmdgetSpeicherort(Mandant_ID)
                If Speicherort IsNot Nothing Then
                    AbschlussPaket(Mandant_ID, Speicherort)
                Else
                    MsgBox("Achtung: Ein Mandant konnte nicht bestimmt werden!", MsgBoxStyle.Exclamation)
                End If
                Load_Pakete(Mandant)

            ElseIf cmbMandant.Text = "HuP" Then

                bw_Tagesabschluss.RunWorkerAsync()

            End If
        End If
    End Sub

    Private Sub btndelete_Click(sender As System.Object, e As System.EventArgs) Handles btndelete.Click
        Me.Validate()

        ' Fragen ob das Profil wirklich gelöscht werden soll
        Dim result As MsgBoxResult = MsgBox("Sind Sie sicher, dass sie die ausgewählten Einheiten löschen wollen?", MsgBoxStyle.YesNo, "Löschen bestätigen")
        ' wenn das Profil gelöscht werden soll
        If result = MsgBoxResult.Yes Then

            If cmbMandant.Text = "GLS" Then
                VWAbschlussBindingSource.EndEdit()
                For Each dbRow As DataRow In MyDataset.VWKOMMCOLLI_ABSCHLUSS_PAKET.Rows
                    If CBool(dbRow.Item("Auswahl")) = True Then
                        'Positionen löschen
                        TBKOMMCOLLI_PAKET_POSTableAdapter.cmdDeletePos(dbRow.Item("GUID"))
                        'Kopf löschen
                        TBKOMMCOLLI_PAKET_KOPFTableAdapter.CmdDeleteGUID(dbRow.Item("GUID"))
                    End If
                Next
                Load_Pakete(Mandant)

            ElseIf cmbMandant.Text = "HuP" Then
                'Sendung löschen bei HuP
                VWHUP_REPORT1BindingSource.EndEdit()
                For Each row As DataRow In MyDataset.VWHUP_REPORT1.Rows
                    If row.Item("Selected") = True Then
                        Dim cmd = String.Format("EXECUTE PRKOMMCOLLI_SDG_LOESCHEN {0}", row.Item("GUID"))
                        ClassDatabase.Execute_non_Query(cmd, True)
                    End If
                Next
                Load_Sendungen()


            End If
        End If
    End Sub
    Sub Refresh_Grid()
        VWAbschlussDataGridView.Visible = False
        VWAbschlussDataGridView.Dock = DockStyle.None
        VWHUP_REPORT1DataGridView.Visible = False
        btndelete.Enabled = False
        If cmbMandant.SelectedIndex <> -1 Then
            Select Case cmbMandant.SelectedIndex
                Case 0
                    Load_Sendungen()
                    VWHUP_REPORT1DataGridView.Dock = DockStyle.Fill
                    VWHUP_REPORT1DataGridView.Visible = True
                    btndelete.Text = "Sendung(en)" & vbNewLine & "löschen"
                    btndelete.Enabled = True
                Case 1
                    VWAbschlussDataGridView.Visible = True
                    VWAbschlussDataGridView.Dock = DockStyle.Fill
                    Load_Pakete(cmbMandant.Text)
                    btndelete.Enabled = True
                    btndelete.Text = "Paket(e)" & vbNewLine & "löschen"
            End Select

            btnAbschluss.Text = "Mandanten '" & cmbMandant.Text & "' abschliessen"

        End If
    End Sub
    Private Sub cmbMandant_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbMandant.SelectedIndexChanged
        Refresh_Grid()

    End Sub

    Private Sub bw_Tagesabschluss_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bw_Tagesabschluss.DoWork
        Dim Result As Boolean = True
        Result = ClassDatabase.Execute_non_Query("EXEC PRKOMMCOLLI_BORDERO_EXPORTIEREN", False)
        e.Result = Result
    End Sub
    Private Sub bw_Tagesabschluss_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bw_Tagesabschluss.RunWorkerCompleted
        If e.Result = True Then
            MsgBox("Abschluss erfolgreich ausgeführt.", MsgBoxStyle.Information, "Tagesabschluss")
            Load_Sendungen()
        Else
            MsgBox("Fehler bei Abschluss, bitte Log prüfen.")
        End If
    End Sub

    Private Sub Load_Sendungen()
        Try
            Me.VWHUP_REPORT1TableAdapter.Connection.ConnectionString = My.Settings.ConfigConnectionString
            Me.VWHUP_REPORT1TableAdapter.Fill(Me.MyDataset.VWHUP_REPORT1, True, False)
        Catch ex As System.Exception
            MsgBox("Fehler bei Load_Sendungen: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
        End Try

    End Sub

    Private Sub frmAbschluss_Shown(sender As Object, e As EventArgs) Handles Me.Shown
        Refresh_Grid()
    End Sub
End Class