Imports System.Data.SqlClient

Module cATILLA_Speditionsbuch
    Dim SPED As New List(Of cSpeditionsbuch)

    Sub Main()
        LOAD(CDate("01." & Now.Month & "." & Now.Year))
        System.Console.WriteLine(SPED.Count)

        For Each s In SPED
            'INSERT(s)
        Next
        Threading.Thread.Sleep(3000)
    End Sub

    Public Sub LOAD(datum As Date)
        Try
            Using conn As SqlConnection = GetNewOpenConnectionFMZOLL()
                Using cmd As New SqlCommand("SELECT * FROM Speditionsbuch WHERE FilialenNr IN (4801,4802) and SB_Zeitstempel > '" & datum.ToShortDateString & " 00:00:00' and Bar=0 ", conn)

                    Dim dr = cmd.ExecuteReader()
                    While dr.Read
                        Dim s As New cSpeditionsbuch
                        s.FilialenNr = checkNullInteger(dr.Item("FilialenNr"))
                        s.AbfertigungsNr = checkNullInteger(dr.Item("AbfertigungsNr"))
                        s.UnterNr = checkNullInteger(dr.Item("UnterNr"))
                        s.Abfertigungsdatum = checkNullDateNothing(dr.Item("Abfertigungsdatum"))
                        s.Bar = checkNullBool(dr.Item("Bar"))
                        s.Fakturiert = checkNullBool(dr.Item("Fakturiert"))
                        s.BelegNr = checkNullStr(dr.Item("BelegNr"))
                        s.ErfassungsNr = checkNullStr(dr.Item("ErfassungsNr"))
                        s.LKW_Kennzeichen = checkNullStr(dr.Item("LKW Kennzeichen"))
                        ' s.AvisiererKundenNr = checkNullReturnValue(dr.Item("AvisiererKundenNr"), Nothing)
                        ' s.Avisierer = checkNullStr(dr.Item("Avisierer"))
                        s.AbsenderKundenNr = checkNullReturnValue(dr.Item("AbsenderKundenNr"), Nothing)
                        s.Absender = checkNullStr(dr.Item("Absender"))
                        s.AbsenderOffertenNr = checkNullInteger(dr.Item("AbsenderOffertenNr"))
                        s.EmpfängerKundenNr = checkNullReturnValue(dr.Item("EmpfängerKundenNr"), Nothing)
                        s.Empfänger = checkNullStr(dr.Item("Empfänger"))
                        s.EmpfängerOffertenNr = checkNullInteger(dr.Item("EmpfängerOffertenNr"))
                        s.VermittlerKundenNr = checkNullReturnValue(dr.Item("VermittlerKundenNr"), Nothing)
                        s.Vermittler = checkNullStr(dr.Item("Vermittler"))
                        s.VermittlerOffertenNr = checkNullInteger(dr.Item("VermittlerOffertenNr"))
                        s.FrachtführerKundenNr = checkNullReturnValue(dr.Item("FrachtführerKundenNr"), Nothing)
                        s.Frachtführer = checkNullStr(dr.Item("Frachtführer"))
                        s.AnzahlZA = checkNullIntegerZero(dr.Item("AnzahlZA"))
                        s.AnzahlZAFremd = checkNullIntegerZero(dr.Item("AnzahlZAFremd"))
                        s.AnzahlZnV = checkNullIntegerZero(dr.Item("AnzahlZnV"))
                        s.AnzahlZnVFremd = checkNullIntegerZero(dr.Item("AnzahlZnVFremd"))
                        s.AnzahlT1 = checkNullIntegerZero(dr.Item("AnzahlT1"))
                        s.AnzahlT2 = checkNullIntegerZero(dr.Item("AnzahlT2"))
                        s.AnzahlAE = checkNullStr(dr.Item("AnzahlAE"))
                        s.AnzahlCarnetTIR = checkNullIntegerZero(dr.Item("AnzahlCarnetTIR"))
                        s.AnzahlBarvorlagen = checkNullIntegerZero(dr.Item("AnzahlBarvorlagen"))
                        s.AnzahlSonstiges = checkNullIntegerZero(dr.Item("AnzahlSonstiges"))
                        s.AnzahlGrenzgebühren = checkNullIntegerZero(dr.Item("AnzahlGrenzgebühren"))
                        s.AvisUhrzeit = checkNullStr(dr.Item("AvisUhrzeit"))
                        s.Vermerk = checkNullStr(dr.Item("Vermerk"))
                        s.Bemerkungen = checkNullStr(dr.Item("Bemerkungen"))
                        s.Währungsschlüssel = checkNullInteger(dr.Item("Währungsschlüssel"))
                        s.Rechnungsbetrag = checkNulDbl(dr.Item("Rechnungsbetrag"))
                        s.Umrechnungskurs = checkNullInteger(dr.Item("Umrechnungskurs"))
                        s.Packstücke = checkNullStr(dr.Item("Packstücke"))
                        s.Rohmasse = checkNullInteger(dr.Item("Rohmasse"))
                        s.Zahlungsaufschub = checkNullStr(dr.Item("Zahlungsaufschub"))
                        s.Löschen = checkNullDateNothing(dr.Item("Löschen"))
                        s.Abfertigungsart = checkNullInteger(dr.Item("Abfertigungsart"))
                        s.Abfertigungsanzahl = checkNullIntegerZero(dr.Item("Abfertigungsanzahl"))
                        s.Barzahlungsbetrag = checkNulDbl(dr.Item("Barzahlungsbetrag"))
                        s.Sachbearbeiter = checkNullStr(dr.Item("Sachbearbeiter"))
                        s.Personalnummer = checkNullInteger(dr.Item("Personalnummer"))
                        ' s.PersonalnummerQS = checkNullInteger(dr.Item("PersonalnummerQS"))
                        s.AtlasBezNrEZA = checkNullStr(dr.Item("AtlasBezNrEZA"))
                        s.AtlasBezNrNCTS = checkNullStr(dr.Item("AtlasBezNrNCTS"))
                        s.Versendungsland = checkNullStr(dr.Item("Versendungsland"))
                        s.SB_CMR = checkNullBool(dr.Item("SB_CMR"))
                        s.SB_CMRDatum = checkNullDateNothing(dr.Item("SB_CMRDatum"))
                        s.veoerz_basbtg = checkNulDbl(dr.Item("veoerz_basbtg"))
                        s.Zucker_MRN_Nr = checkNullStr(dr.Item("Zucker_MRN_Nr"))
                        s.Zucker_MRN_Datum = checkNullDateNothing(dr.Item("Zucker_MRN_Datum"))
                        s.Zucker_Aufschub = checkNullStr(dr.Item("Zucker_Aufschub"))
                        s.Zollsystem = checkNullStr(dr.Item("Zollsystem"))
                        s.Bestimmungszollstelle = checkNullStr(dr.Item("Bestimmungszollstelle"))
                        s.Bürgschaft = checkNullStr(dr.Item("Bürgschaft"))
                        s.Sicherheitsbetrag = checkNulDbl(dr.Item("Sicherheitsbetrag"))
                        s.SgutKompl = checkNullStr(dr.Item("SgutKompl"))
                        s.Bestimmungsland = checkNullStr(dr.Item("Bestimmungsland"))
                        s.EuFiskalEmpfänger = checkNullStr(dr.Item("EuFiskalEmpfänger"))
                        s.QKN = checkNullStr(dr.Item("QKN"))
                        s.EndempfängerKundenNr = checkNullReturnValue(dr.Item("EndempfängerKundenNr"), Nothing)
                        s.Endempfänger = checkNullStr(dr.Item("Endempfänger"))
                        s.SB_Zeitstempel = checkNullDateNothing(dr.Item("SB_Zeitstempel"))
                        SPED.Add(s)
                    End While
                    dr.Close()
                End Using
            End Using
            'Return Nothing
        Catch ex As Exception
            MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace)
        End Try
        '  Return Nothing
    End Sub
    Public Function GetNewOpenConnectionFMZOLL(Optional pooling As Boolean = True) As SqlConnection
        Dim cn As New SqlConnection()
        cn.ConnectionString = "Data Source=192.168.0.91\SQLFMZOLL;Initial Catalog=VERAG;Integrated Security=false;User ID=sa;Password=BmWr501956;pooling=false"
        cn.Open()
        Return cn
    End Function

    Public Function GetNewOpenConnectionATILLA(Optional pooling As Boolean = True) As SqlConnection
        Dim cn As New SqlConnection()
        cn.ConnectionString = "Data Source=D\SQLFMZOLL;Initial Catalog=VERAG;Integrated Security=false;User ID=sa;Password=BmWr501956;pooling=false"
        cn.Open()
        Return cn
    End Function

    Sub INSERT(s As cSpeditionsbuch)
        Dim list As List(Of cSQLVariable)

        Dim sql = " INSERT INTO [Speditionsbuch]  ([FilialenNr],[AbfertigungsNr],[UnterNr],[Abfertigungsdatum],[Bar],[Fakturiert],[BelegNr],[ErfassungsNr],[LKW Kennzeichen],[AbsenderKundenNr],[Absender],[AbsenderOffertenNr],[EmpfängerKundenNr],[Empfänger],[EmpfängerOffertenNr],[VermittlerKundenNr],[Vermittler],[VermittlerOffertenNr],[FrachtführerKundenNr],[Frachtführer],[AnzahlZA],[AnzahlZAFremd],[AnzahlZnV],[AnzahlZnVFremd],[AnzahlT1],[AnzahlT2],[AnzahlAE],[AnzahlCarnetTIR],[AnzahlBarvorlagen],[AnzahlSonstiges],[AnzahlGrenzgebühren],[AvisUhrzeit],[Vermerk],[Bemerkungen],[Währungsschlüssel],[Rechnungsbetrag],[Umrechnungskurs],[Packstücke],[Rohmasse],[Zahlungsaufschub],[Löschen],[Abfertigungsart],[Abfertigungsanzahl],[Barzahlungsbetrag],[Sachbearbeiter],[Personalnummer],[AtlasBezNrEZA],[AtlasBezNrNCTS],[Versendungsland],[SB_CMR],[SB_CMRDatum],[veoerz_basbtg],[Zucker_MRN_Nr],[Zucker_MRN_Datum],[Zucker_Aufschub],[Zollsystem],[Bestimmungszollstelle],[Bürgschaft],[Sicherheitsbetrag],[SgutKompl]) " &
            " VALUES(@FilialenNr,@AbfertigungsNr,@UnterNr,@Abfertigungsdatum,@Bar,@Fakturiert,@BelegNr,@ErfassungsNr,@LKW Kennzeichen,@AbsenderKundenNr,@Absender,@AbsenderOffertenNr,@EmpfängerKundenNr,@Empfänger,@EmpfängerOffertenNr,@VermittlerKundenNr,@Vermittler,@VermittlerOffertenNr,@FrachtführerKundenNr,@Frachtführer,@AnzahlZA,@AnzahlZAFremd,@AnzahlZnV,@AnzahlZnVFremd,@AnzahlT1,@AnzahlT2,@AnzahlAE,@AnzahlCarnetTIR,@AnzahlBarvorlagen,@AnzahlSonstiges,@AnzahlGrenzgebühren,@AvisUhrzeit,@Vermerk,@Bemerkungen,@Währungsschlüssel,@Rechnungsbetrag,@Umrechnungskurs,@Packstücke,@Rohmasse,@Zahlungsaufschub,@Löschen,@Abfertigungsart,@Abfertigungsanzahl,@Barzahlungsbetrag,@Sachbearbeiter,@Personalnummer,@AtlasBezNrEZA,@AtlasBezNrNCTS,@Versendungsland,@SB_CMR,@SB_CMRDatum,@veoerz_basbtg,@Zucker_MRN_Nr,@Zucker_MRN_Datum,@Zucker_Aufschub,@Zollsystem,@Bestimmungszollstelle,@Bürgschaft,@Sicherheitsbetrag,@SgutKompl)  "

        Try
            Using conn As SqlConnection = GetNewOpenConnectionATILLA()
                Using cmd As New SqlCommand(sql, conn)

                    ' Dim dr = cmd.ExecuteReader()

                    cmd.Parameters.AddWithValue("@FilialenNr", s.FilialenNr)
                    cmd.Parameters.AddWithValue("@AbfertigungsNr", s.AbfertigungsNr)
                    cmd.Parameters.AddWithValue("@UnterNr", s.UnterNr)
                    cmd.Parameters.AddWithValue("@Abfertigungsdatum", s.Abfertigungsdatum)
                    cmd.Parameters.AddWithValue("@Bar", s.Bar)
                    cmd.Parameters.AddWithValue("@Fakturiert", s.Fakturiert)
                    cmd.Parameters.AddWithValue("@BelegNr", s.BelegNr)
                    cmd.Parameters.AddWithValue("@ErfassungsNr", s.ErfassungsNr)
                    cmd.Parameters.AddWithValue("@LKW Kennzeichen", s.LKW_Kennzeichen)
                    cmd.Parameters.AddWithValue("@AbsenderKundenNr", s.AbsenderKundenNr)
                    cmd.Parameters.AddWithValue("@Absender", s.Absender)
                    cmd.Parameters.AddWithValue("@AbsenderOffertenNr", s.AbsenderOffertenNr)
                    cmd.Parameters.AddWithValue("@EmpfängerKundenNr", s.EmpfängerKundenNr)
                    cmd.Parameters.AddWithValue("@Empfänger", s.Empfänger)
                    cmd.Parameters.AddWithValue("@EmpfängerOffertenNr", s.EmpfängerOffertenNr)
                    cmd.Parameters.AddWithValue("@VermittlerKundenNr", s.VermittlerKundenNr)
                    cmd.Parameters.AddWithValue("@Vermittler", s.Vermittler)
                    cmd.Parameters.AddWithValue("@VermittlerOffertenNr", s.VermittlerOffertenNr)
                    cmd.Parameters.AddWithValue("@FrachtführerKundenNr", s.FrachtführerKundenNr)
                    cmd.Parameters.AddWithValue("@Frachtführer", s.Frachtführer)
                    cmd.Parameters.AddWithValue("@AnzahlZA", s.AnzahlZA)
                    cmd.Parameters.AddWithValue("@AnzahlZAFremd", s.AnzahlZAFremd)
                    cmd.Parameters.AddWithValue("@AnzahlZnV", s.AnzahlZnV)
                    cmd.Parameters.AddWithValue("@AnzahlZnVFremd", s.AnzahlZnVFremd)
                    cmd.Parameters.AddWithValue("@AnzahlT1", s.AnzahlT1)
                    cmd.Parameters.AddWithValue("@AnzahlT2", s.AnzahlT2)
                    cmd.Parameters.AddWithValue("@AnzahlAE", s.AnzahlAE)
                    cmd.Parameters.AddWithValue("@AnzahlCarnetTIR", s.AnzahlCarnetTIR)
                    cmd.Parameters.AddWithValue("@AnzahlBarvorlagen", s.AnzahlBarvorlagen)
                    cmd.Parameters.AddWithValue("@AnzahlSonstiges", s.AnzahlSonstiges)
                    cmd.Parameters.AddWithValue("@AnzahlGrenzgebühren", s.AnzahlGrenzgebühren)
                    cmd.Parameters.AddWithValue("@AvisUhrzeit", s.AvisUhrzeit)
                    cmd.Parameters.AddWithValue("@Vermerk", s.Vermerk)
                    cmd.Parameters.AddWithValue("@Bemerkungen", s.Bemerkungen)
                    cmd.Parameters.AddWithValue("@Währungsschlüssel", s.Währungsschlüssel)
                    cmd.Parameters.AddWithValue("@Rechnungsbetrag", s.Rechnungsbetrag)
                    cmd.Parameters.AddWithValue("@Umrechnungskurs", s.Umrechnungskurs)
                    cmd.Parameters.AddWithValue("@Packstücke", s.Packstücke)
                    cmd.Parameters.AddWithValue("@Rohmasse", s.Rohmasse)
                    cmd.Parameters.AddWithValue("@Zahlungsaufschub", s.Zahlungsaufschub)
                    cmd.Parameters.AddWithValue("@Löschen", s.Löschen)
                    cmd.Parameters.AddWithValue("@Abfertigungsart", s.Abfertigungsart)
                    cmd.Parameters.AddWithValue("@Abfertigungsanzahl", s.Abfertigungsanzahl)
                    cmd.Parameters.AddWithValue("@Barzahlungsbetrag", s.Barzahlungsbetrag)
                    cmd.Parameters.AddWithValue("@Sachbearbeiter", s.Sachbearbeiter)
                    cmd.Parameters.AddWithValue("@Personalnummer", s.Personalnummer)
                    cmd.Parameters.AddWithValue("@AtlasBezNrEZA", s.AtlasBezNrEZA)
                    cmd.Parameters.AddWithValue("@AtlasBezNrNCTS", s.AtlasBezNrNCTS)
                    cmd.Parameters.AddWithValue("@Versendungsland", s.Versendungsland)
                    cmd.Parameters.AddWithValue("@SB_CMR", s.SB_CMR)
                    cmd.Parameters.AddWithValue("@SB_CMRDatum", s.SB_CMRDatum)
                    cmd.Parameters.AddWithValue("@veoerz_basbtg", s.veoerz_basbtg)
                    cmd.Parameters.AddWithValue("@Zucker_MRN_Nr", s.Zucker_MRN_Nr)
                    cmd.Parameters.AddWithValue("@Zucker_MRN_Datum", s.Zucker_MRN_Datum)
                    cmd.Parameters.AddWithValue("@Zucker_Aufschub", s.Zucker_Aufschub)
                    cmd.Parameters.AddWithValue("@Zollsystem", s.Zollsystem)
                    cmd.Parameters.AddWithValue("@Bestimmungszollstelle", s.Bestimmungszollstelle)
                    cmd.Parameters.AddWithValue("@Bürgschaft", s.Bürgschaft)
                    cmd.Parameters.AddWithValue("@Sicherheitsbetrag", s.Sicherheitsbetrag)
                    cmd.Parameters.AddWithValue("@SgutKompl", s.SgutKompl)
                    cmd.ExecuteNonQuery()
                End Using
            End Using
            'Return Nothing
        Catch ex As Exception
            MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace)
        End Try
    End Sub

    Public Function checkNullStr(ByVal o As Object) As String
        If o IsNot Nothing And o IsNot DBNull.Value Then Return CStr(o)
        Return ""
    End Function
    Public Function checkNullInteger(ByVal o As Object) As Integer
        If o IsNot Nothing And o IsNot DBNull.Value Then Return CInt(o)
        Return -1
    End Function
    Public Function checkNullReturnValue(ByVal o As Object, ByVal returnValue As Object) As Object
        If o IsNot Nothing And o IsNot DBNull.Value Then Return (o)
        Return returnValue
    End Function

    Public Function checkNullIntegerZero(ByVal o As Object) As Integer
        If o IsNot Nothing And o IsNot DBNull.Value Then Return CInt(o)
        Return 0
    End Function
    Public Function checkNulDbl(ByVal o As Object) As Double
        If o IsNot Nothing And o IsNot DBNull.Value Then Return CDbl(o)
        Return -1
    End Function

    Public Function checkNullBool(ByVal o As Object) As Boolean
        If o Is Nothing Or o Is DBNull.Value Then Return 0
        Try
            Return CBool(o)
        Catch ex As Exception
        End Try
        Return 0
    End Function

    Public Function checkNullDateNothing(ByVal o As Object) As Object
        If o Is DBNull.Value Then
            Return Nothing
        Else
            Return CDate(o)
        End If
    End Function

End Module
