Imports VERAG_PROG_ALLGEMEIN

Public Class cWorker_Verwahrung
    Public Shared Dateiname = ""

    Shared SQL As New VERAG_PROG_ALLGEMEIN.SQL

    Public Class DAKOSY_STATUS
        Public Const HEADER As String = "DAKOSY-DUMMY"
        Public Const SEND As String = "DAKOSY-WAITING"
        Public Const IMPORTED As String = "DAKOSY-IMPORTED"
        Public Const USER As String = "DAKOSY-AUTO"
        Public Const NOTCOMPLETED As String = "DAKOSY-NOT-COMPLETED"
    End Class



    Shared Function readVW_SumAVerwahrungsinfo(FORM As frmDYNachrichtenVerarbeitung, d As String, saveVerwahrung As Boolean, sendMail As Boolean, testlauf As Boolean) As String
        Try

            Dim VWI As DAKOSY_Worker.SumAVerwahrungsinfo_009.SumAVerwahrungsinfoSVTyp = DAKOSY_Worker.SumAVerwahrungsinfo_009.SumAVerwahrungsinfoSVTyp.LoadFromFile(d)
            Dim Vorpapiernummer = ""
            Dim MRN_SUMA = ""
            Dim MRN_SUMA_veraltet = ""
            Dim ankungsdatum As Object = Nothing
            Dim gestellungsdatum As Object = Nothing
            Dim posGestellung As New DataTable
            readVW_SumAVerwahrungsinfo = ""
            If VWI IsNot Nothing Then
                If VWI.EinzelSumAVerwahrungsinfo IsNot Nothing Then
                    If VWI.EinzelSumAVerwahrungsinfo.ObjektIdentifizierung IsNot Nothing Then
                        If VWI.EinzelSumAVerwahrungsinfo.ObjektIdentifizierung.ObjektName IsNot Nothing Then
                            readVW_SumAVerwahrungsinfo = VWI.EinzelSumAVerwahrungsinfo.ObjektIdentifizierung.ObjektName 'Nur ObjektAntragsart VV (SumA Vorgang) /NE (NCTS-Vorgang )
                        End If
                    End If
                    If VWI.EinzelSumAVerwahrungsinfo.KopfDaten IsNot Nothing Then
                        If VWI.EinzelSumAVerwahrungsinfo.KopfDaten.Vorpapiernummer IsNot Nothing Then
                            Vorpapiernummer = VWI.EinzelSumAVerwahrungsinfo.KopfDaten.Vorpapiernummer
                        End If

                        If VWI.EinzelSumAVerwahrungsinfo.KopfDaten.RegistriernummerATLAS IsNot Nothing Then
                            MRN_SUMA = VWI.EinzelSumAVerwahrungsinfo.KopfDaten.RegistriernummerATLAS 'MRN (SumA)
                        End If
                        If VWI.EinzelSumAVerwahrungsinfo.KopfDaten.VeralteteWeitereRegistriernummer IsNot Nothing Then
                            MRN_SUMA_veraltet = VWI.EinzelSumAVerwahrungsinfo.KopfDaten.VeralteteWeitereRegistriernummer
                        End If

                        If VWI.EinzelSumAVerwahrungsinfo.KopfDaten.GestellungDatum > "01.01.2000" Then
                            gestellungsdatum = VWI.EinzelSumAVerwahrungsinfo.KopfDaten.GestellungDatum 'Datum der Anmeldung zur vorübergehenden Verwahrung
                        End If
                        If VWI.EinzelSumAVerwahrungsinfo.KopfDaten.Ankunftsdatum > "01.01.2000" Then
                            ankungsdatum = VWI.EinzelSumAVerwahrungsinfo.KopfDaten.Ankunftsdatum '(erwartetes) Ankunftsdatum des Beförderungsmittels
                        End If

                        If VWI.EinzelSumAVerwahrungsinfo.Position IsNot Nothing Then
                            For Each POS In VWI.EinzelSumAVerwahrungsinfo.Position
                                If POS.Positionsnummer IsNot Nothing AndAlso posGestellung IsNot Nothing Then
                                    If Not posGestellung.Columns.Contains("AnzPackst") Then
                                        posGestellung.Columns.Add("PosNr", GetType(Integer))
                                        posGestellung.Columns.Add("AnzPackst", GetType(Integer))
                                        posGestellung.Columns.Add("PackstArt", GetType(String))
                                        posGestellung.Columns.Add("Anmeldefrist", GetType(String)) 'Datum des Verwahrungsfristendes
                                        posGestellung.Columns.Add("Rohmasse", GetType(Double)) 'Gewicht in kg
                                        posGestellung.Columns.Add("Warenbeschreibung", GetType(String))
                                        posGestellung.Columns.Add("VerwahrerFirma", GetType(String))
                                        posGestellung.Columns.Add("VerwahrerOrt", GetType(String))
                                        posGestellung.Columns.Add("VerwahrerEORI", GetType(String))
                                        posGestellung.Columns.Add("SpezifischerOrdnungsbegriffDaten", GetType(String))
                                    End If

                                    Dim ro As DataRow = posGestellung.NewRow
                                    ro("PosNr") = POS.Positionsnummer
                                    ro("Anmeldefrist") = POS.Anmeldefrist
                                    ro("AnzPackst") = POS.PackstueckAnzahl
                                    ro("PackstArt") = POS.PackstueckArt
                                    ro("Rohmasse") = POS.Rohmasse
                                    ro("Warenbeschreibung") = POS.Warenbeschreibung
                                    ro("VerwahrerFirma") = POS.Verwahrer.NameFirma
                                    ro("VerwahrerOrt") = POS.Verwahrer.Ortsteil
                                    ro("VerwahrerEORI") = POS.Verwahrer.TeilnehmerEORI
                                    ro("SpezifischerOrdnungsbegriffDaten") = POS.SpezifischerOrdnungsbegriffDaten
                                    posGestellung.Rows.Add(ro)


                                End If



                            Next
                        End If
                    End If

                End If
            End If


            If readVW_SumAVerwahrungsinfo <> "" And Vorpapiernummer <> "" Then 'BEZUGSNR vorhanden
                Dim STATUS As DAKOSY_Worker.cDakosy_Statusmeldungen = FORM.getStatusCheckTransID(VWI.Transaktion.IOReferenz, VWI.Transaktion.IODatumZeit)
                STATUS.dySt_BezugsNr = readVW_SumAVerwahrungsinfo
                STATUS.dySt_artMitteilung = "VW_INFO"
                STATUS.dySt_dyArt = "VW"

                STATUS.dySt_status = DAKOSY_Worker.cDY_Statusliste.V_50
                STATUS.dySt_ergCode = "GSTDATUM"
                STATUS.dySt_ergMitteilung = ""
                If gestellungsdatum IsNot Nothing Then STATUS.dySt_ergZeitpunkt = gestellungsdatum

                STATUS.SAVE()


                'LINKE SEITE BEI GESAMTSICHERHEITEN!!!!!!!!!!!!!

                If saveVerwahrung Then saveVerwahrungseingang(readVW_SumAVerwahrungsinfo, VWI, MRN_SUMA, posGestellung, Vorpapiernummer, MRN_SUMA_veraltet, sendMail, testlauf)


Anzeige:

                FORM.addDGVEinarbeitung("VW: Eingang", STATUS.dySt_BezugsNr)

            End If


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


    Shared Function readVW_SumAErledigungsinformation(FORM As frmDYNachrichtenVerarbeitung, d As String, saveAbschreibung As Boolean, sendMail As Boolean, testlauf As Boolean) As String
        Try

            Dim VWI As DAKOSY_Worker.SumAErledigungsinformation_005.SumAErledigungsinformationSISUMTyp = DAKOSY_Worker.SumAErledigungsinformation_005.SumAErledigungsinformationSISUMTyp.LoadFromFile(d)


            Dim MRN_SUMA = ""
            Dim MRN_SUMA_veraltet = ""

            Dim MRN_Eledigungsvorgang = ""
            Dim MRN_Eledigungsvorgang_veraltet = ""
            Dim MRN_Sonstige_Nr = ""
            Dim ArtErledigung = ""

            Dim zp As Object = Nothing
            Dim posErledigung As New DataTable

            readVW_SumAErledigungsinformation = ""
            If VWI IsNot Nothing Then
                If VWI.EinzelSumAErledigungsinformation IsNot Nothing Then
                    If VWI.EinzelSumAErledigungsinformation.ObjektIdentifizierung IsNot Nothing Then

                        zp = VWI.EinzelSumAErledigungsinformation.ObjektIdentifizierung.ZeitpunktNachrichteneingang

                        If VWI.EinzelSumAErledigungsinformation.ObjektIdentifizierung.ObjektName IsNot Nothing Then
                            readVW_SumAErledigungsinformation = VWI.EinzelSumAErledigungsinformation.ObjektIdentifizierung.ObjektName 'Nur ObjektAntragsart VV (SumA Vorgang) /NE (NCTS-Vorgang )
                        End If
                    End If
                    If VWI.EinzelSumAErledigungsinformation.KopfDaten IsNot Nothing Then

                        If VWI.EinzelSumAErledigungsinformation.KopfDaten.RegNrATLAS IsNot Nothing Then
                            MRN_SUMA = VWI.EinzelSumAErledigungsinformation.KopfDaten.RegNrATLAS 'MRN (SumA)
                        End If

                        If VWI.EinzelSumAErledigungsinformation.KopfDaten.VeralteteWeitereRegistriernummer IsNot Nothing Then
                            MRN_SUMA_veraltet = VWI.EinzelSumAErledigungsinformation.KopfDaten.VeralteteWeitereRegistriernummer 'Veraltete weitere Registriernummer -> läuft aus!!
                        End If


                        If VWI.EinzelSumAErledigungsinformation.KopfDaten.RegNrATLASWeitereNachweise IsNot Nothing Then
                            MRN_Eledigungsvorgang = VWI.EinzelSumAErledigungsinformation.KopfDaten.RegNrATLASWeitereNachweise 'MRN des Erledigungsvorgangs 
                        End If

                        If VWI.EinzelSumAErledigungsinformation.KopfDaten.VeralteteWeitereNachweise IsNot Nothing Then
                            MRN_Eledigungsvorgang_veraltet = VWI.EinzelSumAErledigungsinformation.KopfDaten.VeralteteWeitereNachweise
                        End If

                        If VWI.EinzelSumAErledigungsinformation.KopfDaten.SonstigeNummer IsNot Nothing Then
                            MRN_Sonstige_Nr = VWI.EinzelSumAErledigungsinformation.KopfDaten.SonstigeNummer
                        End If



                        If VWI.EinzelSumAErledigungsinformation.KopfDaten.ArtErledigung IsNot Nothing Then
                            ArtErledigung = VWI.EinzelSumAErledigungsinformation.KopfDaten.ArtErledigung
                        End If


                        If MRN_Eledigungsvorgang = "" AndAlso MRN_Sonstige_Nr <> "" Then
                            MRN_Eledigungsvorgang = MRN_Sonstige_Nr
                        End If


                        If VWI.EinzelSumAErledigungsinformation.Position IsNot Nothing Then
                            For Each POS In VWI.EinzelSumAErledigungsinformation.Position
                                If POS.Positionsnummer IsNot Nothing AndAlso posErledigung IsNot Nothing Then
                                    If Not posErledigung.Columns.Contains("LaufendeNummer") Then
                                        posErledigung.Columns.Add("LaufendeNummer", GetType(String))
                                        posErledigung.Columns.Add("IDRegNrSumA", GetType(String))
                                        posErledigung.Columns.Add("IDRegNrSumAPos", GetType(String))
                                        posErledigung.Columns.Add("StornierungKz", GetType(String))
                                        posErledigung.Columns.Add("StueckzahlErledigte", GetType(String))
                                    End If

                                    Dim ro As DataRow = posErledigung.NewRow
                                    ro("LaufendeNummer") = POS.Positionsnummer
                                    ro("IDRegNrSumA") = MRN_SUMA 'MRN (SumA) Zugehörige ATLAS - Registrierung.
                                    ro("IDRegNrSumAPos") = POS.Positionsnummer 'Positionsnummer in der Summarischen Anmeldung
                                    ro("StornierungKz") = POS.StornierungKz
                                    ro("StueckzahlErledigte") = POS.StueckzahlErledigte
                                    posErledigung.Rows.Add(ro)
                                End If

                            Next


                        End If

                    End If

                End If
            End If


            If readVW_SumAErledigungsinformation <> "" And MRN_SUMA <> "" Then 'BEZUGSNR vorhanden
                Dim STATUS As DAKOSY_Worker.cDakosy_Statusmeldungen = FORM.getStatusCheckTransID(VWI.Transaktion.IOReferenz, VWI.Transaktion.IODatumZeit)
                STATUS.dySt_BezugsNr = readVW_SumAErledigungsinformation
                STATUS.dySt_artMitteilung = "SUMA_Erledigung"
                STATUS.dySt_dyArt = "VW"

                STATUS.dySt_status = DAKOSY_Worker.cDY_Statusliste.V_50
                STATUS.dySt_ergCode = "GSTDATUM"
                STATUS.dySt_ergMitteilung = ""
                If zp IsNot Nothing Then STATUS.dySt_ergZeitpunkt = zp

                STATUS.SAVE()

                'rechte SEITE BEI GESAMTSICHERHEITEN!!!!!!!!!!!!!

                If saveAbschreibung Then
                    saveVerwahrungsAusgang(MRN_Eledigungsvorgang, posErledigung, MRN_Eledigungsvorgang_veraltet, zp, sendMail, testlauf,, "SumAErledigung", MRN_Sonstige_Nr)

Anzeige:

                    FORM.addDGVEinarbeitung("VW: Ausgang", STATUS.dySt_BezugsNr)

                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)
            readVW_SumAErledigungsinformation = ""
        End Try
    End Function








    Shared Function readEZA_SumAErledigungsinformationVorpapier_005(FORM As frmDYNachrichtenVerarbeitung, d As String, saveAbschreibung As Boolean, sendMail As Boolean, testlauf As Boolean) As String
        Try

            Dim EZA As DAKOSY_Worker.SumAErledigungsinformationVorpapier_005.SumAErledigungsinformationVorpapierSIVRPTyp = DAKOSY_Worker.SumAErledigungsinformationVorpapier_005.SumAErledigungsinformationVorpapierSIVRPTyp.LoadFromFile(d)

            Dim ART = ""
            Dim posErledigung As New DataTable
            Dim zp As Object = Nothing

            Dim division = ""
            Dim MRN_Eledigungsvorgang = ""
            Dim MRN_Eledigungsvorgang_veraltet = ""

            readEZA_SumAErledigungsinformationVorpapier_005 = ""
            If EZA IsNot Nothing Then

                If EZA.Transaktion IsNot Nothing Then
                    If EZA.Transaktion.IODivision3 IsNot Nothing Then
                        division = EZA.Transaktion.IODivision3
                    ElseIf EZA.Transaktion.IODivision1 IsNot Nothing Then
                        division = EZA.Transaktion.IODivision1
                    End If
                End If

                If EZA.EinzelSumAErledigungsinformation IsNot Nothing Then
                    If EZA.EinzelSumAErledigungsinformation.ObjektIdentifizierung IsNot Nothing Then
                        If EZA.EinzelSumAErledigungsinformation.ObjektIdentifizierung.ObjektName IsNot Nothing Then
                            readEZA_SumAErledigungsinformationVorpapier_005 = EZA.EinzelSumAErledigungsinformation.ObjektIdentifizierung.ObjektName
                        End If
                        zp = EZA.EinzelSumAErledigungsinformation.ObjektIdentifizierung.ZeitpunktNachrichteneingang
                    End If
                    If EZA.EinzelSumAErledigungsinformation.KopfDaten IsNot Nothing Then
                        If EZA.EinzelSumAErledigungsinformation.KopfDaten.ArtErledigung IsNot Nothing Then
                            ART = EZA.EinzelSumAErledigungsinformation.KopfDaten.ArtErledigung
                        End If
                        If EZA.EinzelSumAErledigungsinformation.KopfDaten.RegNrATLASWeitereNachweise IsNot Nothing Then
                            MRN_Eledigungsvorgang = EZA.EinzelSumAErledigungsinformation.KopfDaten.RegNrATLASWeitereNachweise 'MRN des Erledigungsvorgangs 
                        End If
                        If EZA.EinzelSumAErledigungsinformation.KopfDaten.VeralteteWeitereNachweise IsNot Nothing Then
                            MRN_Eledigungsvorgang_veraltet = EZA.EinzelSumAErledigungsinformation.KopfDaten.VeralteteWeitereNachweise 'Registriernummer des Erledigungsvorgangs -> läuft aus!!
                        End If

                    End If

                    If EZA.EinzelSumAErledigungsinformation.Position IsNot Nothing Then

                        For Each POS In EZA.EinzelSumAErledigungsinformation.Position
                            If POS.LaufendeNummer IsNot Nothing AndAlso posErledigung IsNot Nothing Then
                                If Not posErledigung.Columns.Contains("LaufendeNummer") Then
                                    posErledigung.Columns.Add("LaufendeNummer", GetType(String))
                                    posErledigung.Columns.Add("IDRegNrSumA", GetType(String))
                                    posErledigung.Columns.Add("IDRegNrSumAPos", GetType(String))
                                    posErledigung.Columns.Add("StornierungKz", GetType(String))
                                    posErledigung.Columns.Add("StueckzahlErledigte", GetType(String))
                                End If

                                Dim ro As DataRow = posErledigung.NewRow
                                ro("LaufendeNummer") = POS.LaufendeNummer 'Laufende Nummer der Erledigungsinformation
                                ro("IDRegNrSumA") = POS.IDRegNrSumA 'MRN (SumA) Zugehörige ATLAS - Registrierung.
                                ro("IDRegNrSumAPos") = POS.IDRegNrSumAPos 'Positionsnummer in der Summarischen Anmeldung
                                ro("StornierungKz") = POS.StornierungKz 'Kennzeichnung, dass eine Erledigung durch den Benutzer storniert wurde. 
                                ro("StueckzahlErledigte") = POS.StueckzahlErledigte 'Anzahl der erledigten Packstücke
                                posErledigung.Rows.Add(ro)
                            End If

                        Next

                    End If

                End If
            End If

            If readEZA_SumAErledigungsinformationVorpapier_005 <> "" Then 'BEZUGSNR vorhanden
                Dim STATUS As DAKOSY_Worker.cDakosy_Statusmeldungen = FORM.getStatusCheckTransID(EZA.Transaktion.IOReferenz, EZA.Transaktion.IODatumZeit)
                STATUS.dySt_BezugsNr = readEZA_SumAErledigungsinformationVorpapier_005
                STATUS.dySt_artMitteilung = "VW_EVP"
                STATUS.dySt_dyArt = "VW" '"EZA" 'T1/T2

                STATUS.dySt_status = DAKOSY_Worker.cDY_Statusliste.V_60
                STATUS.dySt_ergZeitpunkt = zp

                Dim DY_TMP As DAKOSY_Worker.cDakosy_Zollanmeldungen = FORM.saveDY_ZA(STATUS, EZA.Transaktion.IOReferenz, If(zp, EZA.Transaktion.IODatumZeit), "EZA")

                If DY_TMP IsNot Nothing Then STATUS.dySt_dyId = DY_TMP.dy_Id
                STATUS.SAVE()

                '----------------------------------------------------------------

                'Verwahrung ABSCHREIBUNG - rechte Seite bei Gesamtsicherheiten

                If saveAbschreibung AndAlso ART <> "NCTS" Then 'bei NCTS wird der Ausgang über ein UeberlassungsmeldungNCTSDE aufgelöst!!!!!!
                    saveVerwahrungsAusgang(MRN_Eledigungsvorgang, posErledigung, MRN_Eledigungsvorgang_veraltet, zp, sendMail, testlauf,, "SumAErledigung-VP")

Anzeige:

                    FORM.addDGVEinarbeitung("VW: Ausgang", STATUS.dySt_BezugsNr)
                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)
            readEZA_SumAErledigungsinformationVorpapier_005 = ""
        End Try
    End Function

    Shared Function readEZA_SumAErledigungsinformationCDXWare007(FORM As frmDYNachrichtenVerarbeitung, d As String, saveAbschreibung As Boolean) As String
        Try

            Dim EZA As DAKOSY_Worker.SumAErledigungsinformationCDXWare_007.SumAErledigungsinformationCDXWareSCTyp = DAKOSY_Worker.SumAErledigungsinformationCDXWare_007.SumAErledigungsinformationCDXWareSCTyp.LoadFromFile(d)
            Dim ART = ""
            '   Dim details = ""

            Dim zp As Object = Nothing
            Dim regNR = ""
            Dim division = ""

            readEZA_SumAErledigungsinformationCDXWare007 = ""
            If EZA IsNot Nothing Then

                If EZA.Transaktion IsNot Nothing Then
                    If EZA.Transaktion.IODivision3 IsNot Nothing Then
                        division = EZA.Transaktion.IODivision3
                    ElseIf EZA.Transaktion.IODivision1 IsNot Nothing Then
                        division = EZA.Transaktion.IODivision1
                    End If
                End If

                If EZA.EinzelSumAErledigungsinformationCDXWare IsNot Nothing Then
                    If EZA.EinzelSumAErledigungsinformationCDXWare.ObjektIdentifizierung IsNot Nothing Then
                        If EZA.EinzelSumAErledigungsinformationCDXWare.ObjektIdentifizierung.ObjektName IsNot Nothing Then
                            readEZA_SumAErledigungsinformationCDXWare007 = EZA.EinzelSumAErledigungsinformationCDXWare.ObjektIdentifizierung.ObjektName
                        End If
                        zp = EZA.EinzelSumAErledigungsinformationCDXWare.ObjektIdentifizierung.ZeitpunktNachrichteneingang
                    End If
                    If EZA.EinzelSumAErledigungsinformationCDXWare.KopfDaten IsNot Nothing Then

                        If EZA.EinzelSumAErledigungsinformationCDXWare.KopfDaten.RegNrATLAS IsNot Nothing Then
                            regNR = EZA.EinzelSumAErledigungsinformationCDXWare.KopfDaten.RegNrATLAS
                        End If
                    End If
                End If
            End If
            ' EZA.LOADByBezugsNr(bezugsNr, False) ' Falls schon ein DS mit dieser Bezugsnummer vorhanden ist.

            If readEZA_SumAErledigungsinformationCDXWare007 <> "" Then 'BEZUGSNR vorhanden
                Dim STATUS As DAKOSY_Worker.cDakosy_Statusmeldungen = FORM.getStatusCheckTransID(EZA.Transaktion.IOReferenz, EZA.Transaktion.IODatumZeit)
                STATUS.dySt_BezugsNr = readEZA_SumAErledigungsinformationCDXWare007
                STATUS.dySt_artMitteilung = "VW_EVP_CDX"
                STATUS.dySt_dyArt = "VW" '"EZA" 'T1/T2

                STATUS.dySt_status = DAKOSY_Worker.cDY_Statusliste.V_60 '???
                STATUS.dySt_ergZeitpunkt = zp


                ' STATUS.dySt_ergDetails = details
                'EINTRAG IN tblDakosy_Zollanmeldungen
                Dim DY_TMP As DAKOSY_Worker.cDakosy_Zollanmeldungen = FORM.saveDY_ZA(STATUS, EZA.Transaktion.IOReferenz, If(zp, EZA.Transaktion.IODatumZeit), "EZA")

                If DY_TMP IsNot Nothing Then STATUS.dySt_dyId = DY_TMP.dy_Id
                STATUS.SAVE()

                '----------------------------------------------------------------


                If saveAbschreibung Then

                    Try



                    Catch ex As Exception

                        '                        VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = False
                    End Try


                End If


                '----------------------------------------------------------------

                FORM.addDGVEinarbeitung("VW: Erledigungsinformation-Vorpapier CDX", STATUS.dySt_BezugsNr)
            End If
        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
            readEZA_SumAErledigungsinformationCDXWare007 = ""
        End Try
    End Function


    Shared Function readNCTS_SumAMassnahmenbekanntgabe(FORM As frmDYNachrichtenVerarbeitung, d As String, saveAbschreibung As Boolean) As String
        Try

            Dim NCTS As DAKOSY_Worker.SumABekanntgabeMassnahme_005.SumABekanntgabeMassnahmeSBTyp = DAKOSY_Worker.SumABekanntgabeMassnahme_005.SumABekanntgabeMassnahmeSBTyp.LoadFromFile(d)

            Dim zp As Object = Nothing
            Dim regNR = ""
            Dim division = ""

            Dim posMassnahmen As New DataTable

            readNCTS_SumAMassnahmenbekanntgabe = ""
            If NCTS IsNot Nothing Then

                If NCTS.Transaktion IsNot Nothing Then
                    If NCTS.Transaktion.IODivision3 IsNot Nothing Then
                        division = NCTS.Transaktion.IODivision3
                    ElseIf NCTS.Transaktion.IODivision1 IsNot Nothing Then
                        division = NCTS.Transaktion.IODivision1
                    End If
                End If

                If NCTS.EinzelSumABekanntgabeMassnahme IsNot Nothing Then
                    If NCTS.EinzelSumABekanntgabeMassnahme.ObjektIdentifizierung IsNot Nothing Then
                        If NCTS.EinzelSumABekanntgabeMassnahme.ObjektIdentifizierung.ObjektName IsNot Nothing Then
                            readNCTS_SumAMassnahmenbekanntgabe = NCTS.EinzelSumABekanntgabeMassnahme.ObjektIdentifizierung.ObjektName
                        End If
                        zp = NCTS.EinzelSumABekanntgabeMassnahme.ObjektIdentifizierung.ZeitpunktNachrichteneingang
                    End If
                    If NCTS.EinzelSumABekanntgabeMassnahme.KopfDaten IsNot Nothing Then

                        If NCTS.EinzelSumABekanntgabeMassnahme.KopfDaten.RegistriernummerATLAS IsNot Nothing Then
                            regNR = NCTS.EinzelSumABekanntgabeMassnahme.KopfDaten.RegistriernummerATLAS
                        End If
                    End If

                End If


                If NCTS.EinzelSumABekanntgabeMassnahme.Position IsNot Nothing Then

                    For Each POS In NCTS.EinzelSumABekanntgabeMassnahme.Position
                        If POS.MassnahmeCode IsNot Nothing AndAlso posMassnahmen IsNot Nothing Then
                            If Not posMassnahmen.Columns.Contains("MassnahmeText") Then
                                posMassnahmen.Columns.Add("MassnahmeCode", GetType(Integer))
                                posMassnahmen.Columns.Add("MassnahmeText", GetType(String))
                                posMassnahmen.Columns.Add("MassnahmeNichtzustellbarKz", GetType(String))
                                posMassnahmen.Columns.Add("PackstueckArt", GetType(String))
                                posMassnahmen.Columns.Add("PackstueckAnzahl", GetType(Integer))
                            End If

                            Dim ro As DataRow = posMassnahmen.NewRow
                            ro("MassnahmeText") = POS.MassnahmeText
                            ro("MassnahmeCode") = POS.MassnahmeCode
                            ro("MassnahmeNichtzustellbarKz") = POS.MassnahmeNichtzustellbarKz
                            ro("PackstueckAnzahl") = POS.PackstueckAnzahl
                            ro("PackstueckArt") = POS.PackstueckArt
                            posMassnahmen.Rows.Add(ro)
                        End If



                    Next


                End If


            End If


            If readNCTS_SumAMassnahmenbekanntgabe <> "" Then 'BEZUGSNR vorhanden
                Dim STATUS As DAKOSY_Worker.cDakosy_Statusmeldungen = FORM.getStatusCheckTransID(NCTS.Transaktion.IOReferenz, NCTS.Transaktion.IODatumZeit)

                '-----------------------EMAIL-NOTIFYCATION----------------------------------------

                If posMassnahmen.Rows.Count > 0 Then

                    Dim Mailext = createInfoMail(regNR, posMassnahmen, "MASSNAHME-DAKOSY")
                    Dim empfaenger = cMitarbeiter.GetEMailRecipientForEmailNotification("DAKOSY-MASSNAHME")
                    If empfaenger <> "" Then VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail(empfaenger, IIf(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, "TEST-", "") & "Massnahme DAKOSY - " & Now().ToShortDateString, Mailext, "NoReply@verag.ag")

                End If

                '----------------------------------------------------------------

                FORM.addDGVEinarbeitung("VW: Bekanntgabe Massnahme", regNR)
            End If
        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
            readNCTS_SumAMassnahmenbekanntgabe = ""
        End Try
    End Function



    Shared Function saveVerwahrungseingang(readVW_SumAVerwahrungsinfo As String, VWI As DAKOSY_Worker.SumAVerwahrungsinfo_009.SumAVerwahrungsinfoSVTyp, MRN_SUMA As String, posGestellung As DataTable, VorpapiernummerInput As String, MRN_SUMA_veraltet As String, sendInfoMail As Boolean, testlauf As Boolean)

        Dim BezugsNr = readVW_SumAVerwahrungsinfo

        VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = testlauf

        Try

            'If MRN_SUMA_veraltet = "" Then Return False 'warum nochmals, kann das weg???

            Dim filiale As String = ""
            Dim abfertigungsnummer = ""
            Dim Standort As String = ""
            Dim Vorpapiernummer = ""
            Dim laufnummer As Integer = -1

            Dim parts() As String = VorpapiernummerInput.Split("-"c)

            If parts.Length = 2 Then
                Vorpapiernummer = parts(0)
                Integer.TryParse(parts(1), laufnummer)
            End If


            If BezugsNr.Length > 4 AndAlso IsNumeric(BezugsNr.Substring(0, 4)) Then
                If BezugsNr.Length > 4 Then
                    filiale = BezugsNr.Substring(0, 4)
                End If
                If BezugsNr.Length >= 14 Then
                    abfertigungsnummer = BezugsNr.Substring(5, 8)
                End If
            End If

            If Vorpapiernummer <> "" Then
                If Vorpapiernummer.Length > 18 Then
                    Vorpapiernummer = Vorpapiernummer.ToString.Substring(0, 18)
                End If
                Dim dtSendungsInfo As New DataTable
                dtSendungsInfo = SQL.loadDgvBySql("SELECT [FilialenNr],[AbfertigungsNr],[UnterNr] FROM [dbo].[tblSendungen] where tblSnd_ATB_T1 = '" & Vorpapiernummer & "' and tblSnd_Abfertigungsart_ID = 44", "AVISO")

                If dtSendungsInfo.Rows.Count > 0 Then
                    filiale = dtSendungsInfo.Rows(0).Item("FilialenNr")
                    abfertigungsnummer = dtSendungsInfo.Rows(0).Item("AbfertigungsNr")
                End If


                Select Case filiale
                    Case "4803", "4809"
                        Standort = Sicherheiten_Standort.VERAG_AG
                    Case "5601"
                        Standort = Sicherheiten_Standort.UNISPED
                    Case "5701"
                        Standort = Sicherheiten_Standort.AMBAR
                    Case "4810", "5103", "5901"
                        Standort = Sicherheiten_Standort.VERAG_GMBH
                    Case "5501"
                        Standort = Sicherheiten_Standort.IMEX
                    Case Else
                        Return False
                End Select

                Dim dy_SendungsId = VWI.Transaktion.IOReferenz

                If filiale <> "" AndAlso abfertigungsnummer <> "" AndAlso IsNumeric(filiale) AndAlso IsNumeric(abfertigungsnummer) Then

                    Dim SND = VERAG_PROG_ALLGEMEIN.cSendungen.LOADByFilialenNrAbfertigungsNr(filiale, abfertigungsnummer)

                    If SND IsNot Nothing AndAlso SND.tblSnd_Abfertigungsart_ID = 44 Then

                        If isZollern(SND) Then
                            Standort = Sicherheiten_Standort.ZOLLERN
                        End If


                        Dim existingEntries As DataTable
                        existingEntries = (New SQL).loadDgvBySql("Select gs_gsnr, gs_gsId, gs_posNr,gs_DK_laufnr, gs_freitext,gs_systemuser,gs_VeralteteWeitereRegistriernummer,gs_MRNNr, gs_ATBNr, gs_dakoyimport from [tblGesamtsicherheit] where [gs_ATBNr] = '" & Vorpapiernummer & "' order by gs_datum desc", "AVISO")
                        If existingEntries.Rows.Count = 0 Then
                            'existingEntries = (New SQL).loadDgvBySql("Select gs_gsnr, gs_gsId, gs_posNr,gs_freitext,gs_systemuser,gs_VeralteteWeitereRegistriernummer from [tblGesamtsicherheit] where ([gs_filialenNr] = '" & SND.FilialenNr & "' and [gs_abfertigungsNr] = " & SND.AbfertigungsNr & " ) or (gs_avisoId = " & SND.tblSnd_AvisoID & ") order by gs_datum desc", "AVISO")
                            existingEntries = (New SQL).loadDgvBySql("Select gs_gsnr, gs_gsId, gs_posNr,gs_DK_laufnr,gs_freitext,gs_systemuser,gs_VeralteteWeitereRegistriernummer,gs_MRNNr, gs_ATBNr, gs_dakoyimport from [tblGesamtsicherheit] where ([gs_filialenNr] = '" & SND.FilialenNr & "' and [gs_abfertigungsNr] = " & SND.AbfertigungsNr & " ) order by gs_datum desc", "AVISO")
                        End If

                        If existingEntries.Rows.Count > 0 Then

                            Dim zubehandelndeGSPOS As Boolean = existingEntries.AsEnumerable().
                                                            Any(Function(r)
                                                                    If r.IsNull("gs_DK_laufnr") OrElse r.Field(Of Integer)("gs_DK_laufnr") <> laufnummer Then
                                                                        Return False
                                                                    End If

                                                                    Dim alt = If(r.IsNull("gs_VeralteteWeitereRegistriernummer"), "", r.Field(Of String)("gs_VeralteteWeitereRegistriernummer"))
                                                                    Dim mrn = If(r.IsNull("gs_MRNNr"), "", r.Field(Of String)("gs_MRNNr"))

                                                                    Return alt = MRN_SUMA_veraltet OrElse mrn = MRN_SUMA
                                                                End Function)

                            If zubehandelndeGSPOS Then
                                Return True 'bereits behandelt ->
                            End If


                            Dim DUMMYSicherheit As cSicherheiten
                            Dim rows = existingEntries.Select("gs_dakoyimport = true AND [gs_ATBNr] = '" & Vorpapiernummer & "' AND gs_freitext = '" & DAKOSY_STATUS.HEADER & "'")

                            If rows.Length > 0 Then
                                Dim row = rows(0)
                                DUMMYSicherheit = New cSicherheiten(row("gs_gsId"), row("gs_posNr"))
                            Else
                                Return False 'kein Dummy-Eintrag
                            End If

                            Dim newSicherheit As New cSicherheiten()

                            If Not DUMMYSicherheit.hasEntry Then
                                Return False
                            End If

                            Dim GesSichRef = New VERAG_PROG_ALLGEMEIN.cAufschubKonten(DUMMYSicherheit.gs_standort)
                            Dim saldo = GesSichRef.CalcSaldo()

                            If SND.FilialenNr > 0 Then filiale = SND.FilialenNr
                            If SND.AbfertigungsNr > 0 Then abfertigungsnummer = SND.AbfertigungsNr

                            'Verwahrung ANSCHREIBUNG 

                            newSicherheit.gs_systemuser = DAKOSY_STATUS.USER
                            newSicherheit.gs_VeralteteWeitereRegistriernummer = MRN_SUMA_veraltet 'wichtig für Zuweisung DAKOSY
                            newSicherheit.gs_MRNNr = MRN_SUMA 'wichtig für Zuweisung DAKOSY
                            newSicherheit.gs_gsNr = DUMMYSicherheit.gs_gsNr
                            newSicherheit.gs_ATBNr = DUMMYSicherheit.gs_ATBNr

                            Dim FreitextInfo As String = ""

                            If posGestellung.Rows.Count > 0 Then
                                If IsNumeric(posGestellung.Rows(0).Item("AnzPackst")) Then
                                    newSicherheit.gs_EH_Anzahl = CInt(posGestellung.Rows(0).Item("AnzPackst"))
                                End If

                                If IsNumeric(posGestellung.Rows(0).Item("Rohmasse")) Then
                                    newSicherheit.gs_gewicht = CDbl(posGestellung.Rows(0).Item("Rohmasse"))
                                End If

                                FreitextInfo = posGestellung.Rows(0).Item("PackstArt")
                            Else
                                FreitextInfo = DAKOSY_STATUS.SEND
                            End If

                            newSicherheit.gs_standort = DUMMYSicherheit.gs_standort
                            newSicherheit.gs_datum = DUMMYSicherheit.gs_datum 'VWI.EinzelSumAVerwahrungsinfo.ObjektIdentifizierung.ZeitpunktNachrichteneingang
                            newSicherheit.gs_erstellungsdatum = Now()
                            newSicherheit.gs_posNr = newSicherheit.getLatestPosNr(DUMMYSicherheit.gs_gsNr, DUMMYSicherheit.gs_ATBNr) + 1
                            newSicherheit.gs_DK_laufnr = laufnummer
                            newSicherheit.gs_freitext = FreitextInfo
                            newSicherheit.gs_abfertigungsnr = abfertigungsnummer
                            newSicherheit.gs_filialenNr = filiale
                            newSicherheit.gs_posSubNr = 1
                            newSicherheit.gs_LKWKZ = DUMMYSicherheit.gs_LKWKZ
                            newSicherheit.gs_zollsatz = DUMMYSicherheit.gs_zollsatz

                            If laufnummer = 1 Then
                                newSicherheit.gs_warenwert = DUMMYSicherheit.gs_warenwert
                                newSicherheit.gs_sicherheitsbetrag = DUMMYSicherheit.gs_sicherheitsbetrag
                            Else
                                newSicherheit.gs_warenwert = 0
                                newSicherheit.gs_sicherheitsbetrag = 0

                            End If

                            newSicherheit.gs_art = "OPEN"
                            newSicherheit.gs_saldo = saldo
                            newSicherheit.gs_avisoId = DUMMYSicherheit.gs_avisoId
                            newSicherheit.gs_warenort = DUMMYSicherheit.gs_warenort
                            newSicherheit.gs_dakoyimport = True


                            Dim gsid = newSicherheit.SAVEOBJECT()

                            If gsid > 0 AndAlso laufnummer = 1 Then
                                'wechsel des Sicherheitsbetrags und Warenwert von Dummypos auf erste Produkivposition
                                DUMMYSicherheit.gs_warenwert = 0
                                DUMMYSicherheit.gs_sicherheitsbetrag = 0
                                DUMMYSicherheit.SAVE()
                            End If

                            Dim CLOSED_DUMMY = New cGesamtsicherheitsPositionen(gsid, newSicherheit.gs_posNr)


                            With CLOSED_DUMMY
                                .gsp_gsNr = newSicherheit.gs_gsNr
                                .gsp_warenwert = 0 ' = 0 wichtig 
                                .gsp_sicherheitsbetrag = 0 ' = 0 wichtig 
                                .gsp_filialenNr = filiale
                                .gsp_art = "CLOSE"
                                .gsp_abfertigungsNr = abfertigungsnummer
                                .gsp_erstellungsdatum = DateTime.Now
                                .gsp_ust = ""
                                .gsp_freitext = DAKOSY_STATUS.SEND
                                .gsp_avisoId = DUMMYSicherheit.gs_avisoId
                                .gsp_systemuser = DAKOSY_STATUS.USER
                            End With

                            CLOSED_DUMMY.SAVE()

                            If posGestellung.Rows.Count > 1 Then
                                If True Then
                                    For i As Integer = 2 To posGestellung.Rows.Count
                                        Dim OPEN_DUMMY_SUBPOS As New cSicherheiten()
                                        With OPEN_DUMMY_SUBPOS
                                            .gs_systemuser = DAKOSY_STATUS.USER
                                            .gs_VeralteteWeitereRegistriernummer = MRN_SUMA_veraltet 'wichtig für Zuweisung DAKOSY
                                            .gs_gsNr = DUMMYSicherheit.gs_gsNr
                                            .gs_ATBNr = DUMMYSicherheit.gs_ATBNr
                                            If IsNumeric(posGestellung.Rows(i - 1).Item("AnzPackst")) Then
                                                .gs_EH_Anzahl = posGestellung.Rows(i - 1).Item("AnzPackst")
                                            End If

                                            If IsNumeric(posGestellung.Rows(i - 1).Item("Rohmasse")) Then
                                                .gs_gewicht = posGestellung.Rows(i - 1).Item("Rohmasse")
                                            End If
                                            .gs_freitext = posGestellung.Rows(i - 1).Item("PackstArt")
                                            .gs_MRNNr = MRN_SUMA
                                            .gs_standort = DUMMYSicherheit.gs_standort
                                            .gs_datum = DUMMYSicherheit.gs_datum 'VWI.EinzelSumAVerwahrungsinfo.ObjektIdentifizierung.ZeitpunktNachrichteneingang
                                            .gs_erstellungsdatum = Now()
                                            .gs_abfertigungsnr = abfertigungsnummer
                                            .gs_filialenNr = filiale
                                            .gs_LKWKZ = DUMMYSicherheit.gs_LKWKZ
                                            .gs_zollsatz = DUMMYSicherheit.gs_zollsatz
                                            .gs_warenwert = 0
                                            .gs_sicherheitsbetrag = 0
                                            .gs_art = "OPEN"
                                            .gs_saldo = saldo
                                            .gs_avisoId = DUMMYSicherheit.gs_avisoId
                                            .gs_warenort = DUMMYSicherheit.gs_warenort
                                            .gs_posNr = newSicherheit.gs_posNr + i - 1
                                            .gs_posSubNr = i
                                            .gs_dakoyimport = True
                                            .gs_DK_laufnr = laufnummer

                                        End With

                                        Dim gsid_SupPos = OPEN_DUMMY_SUBPOS.SAVEOBJECT()

                                        Dim CLOSED_DUMMY_SUBPOS = New cGesamtsicherheitsPositionen()

                                        With CLOSED_DUMMY_SUBPOS
                                            .gsp_gspPosId = OPEN_DUMMY_SUBPOS.gs_posNr
                                            .gsp_gsId = gsid_SupPos
                                            .gsp_gsNr = DUMMYSicherheit.gs_gsNr
                                            .gsp_warenwert = 0 ' = 0 wichtig 
                                            .gsp_sicherheitsbetrag = 0 ' = 0 wichtig 
                                            .gsp_filialenNr = filiale
                                            .gsp_art = "CLOSE"
                                            .gsp_abfertigungsNr = abfertigungsnummer
                                            .gsp_erstellungsdatum = DateTime.Now
                                            .gsp_ust = ""
                                            .gsp_freitext = DAKOSY_STATUS.SEND
                                            .gsp_avisoId = DUMMYSicherheit.gs_avisoId
                                            .gsp_gsNr = DUMMYSicherheit.gs_gsNr
                                            .gsp_systemuser = DAKOSY_STATUS.USER
                                        End With

                                        CLOSED_DUMMY_SUBPOS.SAVE()

                                    Next
                                End If

                            End If

                            newSicherheit.rearangePosNrByDakosyLaufNr(newSicherheit.gs_gsNr, newSicherheit.gs_ATBNr)

                            If sendInfoMail Then
                                Dim InfoText As String = createInfoMail(MRN_SUMA, posGestellung, "VW-EINGANG", newSicherheit)
                                Dim empfaenger = cMitarbeiter.GetEMailRecipientForEmailNotification("DAKOSY-VWE", GesSichRef.brgakto_firmaID)
                                If empfaenger <> "" Then VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail(empfaenger, GesSichRef.brgakto_gs_standort & IIf(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, " TEST-", " ") & "Verwahrungseingang aus DAKOSY - " & Now().ToShortDateString, InfoText, "NoReply@verag.ag")
                            End If

                            Return True

                        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)
        Finally
            VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = testlauf
        End Try




    End Function

    Shared Sub saveVerwahrungsAusgang(MRN_Erledigung As String, posErledigung As DataTable, MRN_Erledigung_veraltet As String, nachrichtenDatum As Date, sendInfoMail As Boolean, testlauf As Boolean, Optional isNCTS As Boolean = False, Optional zusätzlicheInfo As String = "", Optional sonstigeMRNNr As String = "")

        Dim originalTestSetting As Boolean = VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM

        Try

            VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = testlauf

            If posErledigung IsNot Nothing AndAlso posErledigung.Rows.Count > 0 Then

                For Each POS As DataRow In posErledigung.Rows
                    Dim vermerkFremdweahrung As String = ""
                    Dim isCompletelyFinished As Boolean = True
                    Dim MRN_SUMA As String = ""
                    Dim existingEntryID As Integer = 0

                    If Not IsDBNull(POS("IDRegNrSumA")) AndAlso POS("IDRegNrSumA").ToString <> "" Then 'MRN (SumA) Zugehörige ATLAS - Registrierung.

                        Dim SUMA_POSNr As Integer = If(IsDBNull(POS("IDRegNrSumAPos")), 0, CInt(POS("IDRegNrSumAPos"))) 'Positionsnummer in der Summarischen Anmeldung

                        If MRN_SUMA <> POS.Item("IDRegNrSumA") Then
                            MRN_SUMA = POS.Item("IDRegNrSumA")
                            Dim sqlString = ""
                            If isNCTS Then
                                sqlString = "Select * From [tblGesamtsicherheit] as gs left join tblGesamtsicherheitsPositionen as pos on pos.gsp_gsId = gs.gs_gsId where [gs_MRNNr] = '" & MRN_SUMA & "' and [gs_dakoyimport] = 1  order by gsp_gspPosId" 'dieser wird bei NCTS explizit angegeben!
                            Else

                                Dim StringSub As String = ""
                                If MRN_Erledigung <> "" Then
                                    StringSub = " or [gs_VeralteteWeitereRegistriernummer] = '" & MRN_Erledigung & "'"
                                Else

                                End If
                                sqlString = "Select * From [tblGesamtsicherheit] as gs left join tblGesamtsicherheitsPositionen as pos on pos.gsp_gsId = gs.gs_gsId  where ([gs_MRNNr] = '" & MRN_SUMA & "' or [gs_VeralteteWeitereRegistriernummer] = '" & MRN_SUMA & "'" & StringSub & ") and [gs_dakoyimport] = 1  order by gsp_gspPosId, gsp_MRNNr"

                            End If

                            Dim dtGesamtsicherheit = SQL.loadDgvBySql(sqlString, "AVISO")

                            If dtGesamtsicherheit.Rows.Count > 0 Then

                                Dim gs_row As Array = Nothing

                                gs_row = dtGesamtsicherheit.Select("gs_posSubNr = " & SUMA_POSNr & "  AND isnull(gsp_MRNNr,'') = ''")

                                If gs_row.Length = 0 Then
                                    Continue For
                                End If

                                Dim gsrightRow As DataRow = gs_row(0) 'es gibt dann immer nur 1 Eintrag!

                                Dim GesSichRef = New VERAG_PROG_ALLGEMEIN.cAufschubKonten(gsrightRow("gs_standort").ToString)
                                Dim saldo As Double = GesSichRef.CalcSaldo()


                                Dim WarenwertEUR As Double = 0
                                Dim Warenwert_temp As Double = 0
                                Dim Sicherheitsbetrag As Double = 0

                                'Berechnung Warenwert und Sicherheitsbetrag aus Sendung -> immer aus den Produktivdaten!
                                VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = False
                                Dim dtVorpapiere As DataTable = SQL.loadDgvBySql("SELECT tblSnd_Warenwert,tblSnd_WarenwertWaehrung,replace(tblSnd_Vorpapier_Pos,'+',',') as tblSnd_Vorpapier_Pos,replace(tblSnd_Vorpapier2_Pos,'+',',') as tblSnd_Vorpapier2_Pos, replace(tblSnd_Vorpapier3_Pos,'+',',') as tblSnd_Vorpapier3_Pos from tblSendungen where (tblSnd_Vorpapier = '" & gsrightRow("gs_ATBNr") & "' Or tblSnd_Vorpapier2 = '" & gsrightRow("gs_ATBNr") & "' OR tblSnd_Vorpapier3 = '" & gsrightRow("gs_ATBNr") & "') and tblSnd_Vorpapier_Pos <> '?'", "AVISO")

                                VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = testlauf

                                Dim posNr_temp As String = gsrightRow.Item("gs_posNr")


                                If dtVorpapiere.Rows.Count > 0 Then

                                    Dim rowsVorp = dtVorpapiere.AsEnumerable().Where(Function(r) Not IsDBNull(r("tblSnd_Warenwert")) AndAlso ((
                                     r("tblSnd_Vorpapier_Pos").ToString() & "," &
                                     r("tblSnd_Vorpapier2_Pos").ToString() & "," &
                                     r("tblSnd_Vorpapier3_Pos").ToString()).Split(","c).Select(Function(x) x.Trim()).Where(Function(x) x <> "").Select(Function(x) CInt(x)).DefaultIfEmpty(Integer.MaxValue).Min() = CInt(posNr_temp))).ToArray()

                                    If rowsVorp.Length > 0 Then
                                        Dim row = rowsVorp(0)
                                        Warenwert_temp = CDbl(row("tblSnd_Warenwert"))
                                        'wenn nicht eingetragen, dann Annahme Währung = EUR - >L.Hartwagner am 17.04.2026
                                        Dim Waehrung = IIf(IsDBNull(row("tblSnd_WarenwertWaehrung")), "EUR", row("tblSnd_WarenwertWaehrung"))

                                        If Waehrung <> "EUR" Then
                                            Dim kurs As New cFremdwaehrungskurse(Waehrung)
                                            If kurs.hasEntry Then
                                                WarenwertEUR = Math.Round(kurs.EXCHANGE_CURTOEUR(Warenwert_temp, Waehrung, Today()), 2)
                                            Else
                                                WarenwertEUR = Warenwert_temp 'wenn kein Eintrag, dann urspr. FW-Betrag inkl. Vermerk!
                                                vermerkFremdweahrung = "FW-Kurs fehlt"
                                            End If
                                        Else
                                            WarenwertEUR = Warenwert_temp

                                        End If
                                        Sicherheitsbetrag = Math.Round(WarenwertEUR * (GesSichRef.brgakto_gs_zollsatz / 100), 2)
                                    End If
                                    End If


                                Dim anzahlPackstuecke As Integer = -1
                                Dim AnzahlStückErledigt As Integer = If(IsDBNull(POS("StueckzahlErledigte")), 0, CInt(POS("StueckzahlErledigte")))
                                Dim StornierungKz As String = ""

                                If Not isNCTS Then
                                    StornierungKz = IIf(IsDBNull(POS("StornierungKz")), "", POS("StornierungKz"))
                                End If

                                If Not IsDBNull(gsrightRow.Item("gs_EH_Anzahl")) AndAlso IsNumeric(gsrightRow.Item("gs_EH_Anzahl")) Then
                                    Try
                                        anzahlPackstuecke = CInt(gsrightRow.Item("gs_EH_Anzahl"))
                                    Catch ex As Exception
                                        anzahlPackstuecke = -1
                                    End Try



                                    If anzahlPackstuecke > 0 AndAlso anzahlPackstuecke <> AnzahlStückErledigt Then 'Hinweismeldung, wenn nicht alle erledigt wurden!
                                        Dim dt As New DataTable
                                        isCompletelyFinished = False
                                        If Not dt.Columns.Contains("anzahlPackstuecke") Then
                                            dt.Columns.Add("MRN", GetType(String))
                                            dt.Columns.Add("LKW_ID", GetType(String))
                                            dt.Columns.Add("anzahlPackstuecke", GetType(Integer))
                                            If Not isNCTS Then dt.Columns.Add("StornierungKZ", GetType(String))
                                            dt.Columns.Add("AnzahlStückErledigt", GetType(Integer))
                                        End If

                                        Dim ro As DataRow = dt.NewRow
                                        ro("MRN") = gsrightRow.Item("gs_MRNNr")
                                        ro("LKW_ID") = gsrightRow.Item("gs_avisoId")
                                        ro("anzahlPackstuecke") = anzahlPackstuecke
                                        ro("AnzahlStückErledigt") = AnzahlStückErledigt
                                        If Not isNCTS Then ro("StornierungKZ") = StornierungKz
                                        dt.Rows.Add(ro)


                                        Dim InfoText As String = createInfoMail(MRN_SUMA, dt, "")
                                        Dim empfaenger = cMitarbeiter.GetEMailRecipientForEmailNotification("DAKOSY-VWA-fehlende Positionen", GesSichRef.brgakto_firmaID)
                                        If empfaenger <> "" Then VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail(empfaenger, GesSichRef.brgakto_gs_standort & IIf(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, " TEST-", " ") & "Erledigungsmeldung-DAKOSY fehlende Positionen - " & Now().ToShortDateString, InfoText, "NoReply@verag.ag")
                                    End If

                                End If


                                Dim SicherheitsPos As New cGesamtsicherheitsPositionen(gsrightRow("gs_gsId"), gsrightRow.Item("gs_posNr"))
                                    With SicherheitsPos
                                        '.gsp_gsId = gsrightRow("gs_gsId")
                                        '.gsp_gspPosId = gsrightRow.Item("gs_posNr")
                                        .gsp_filialenNr = gsrightRow("gs_filialenNr")
                                        .gsp_art = "CLOSE"
                                        .gsp_gsNr = gsrightRow("gs_gsnr")
                                        .gsp_abfertigungsNr = gsrightRow("gs_abfertigungsnr")
                                        .gsp_datum = nachrichtenDatum
                                        .gsp_erstellungsdatum = DateTime.Now
                                        .gsp_ust = gsrightRow("gs_ust")
                                        .gsp_EH_Anzahl += AnzahlStückErledigt

                                    If Not IsDBNull(gsrightRow.Item("gs_EH_Anzahl")) Then
                                        If .gsp_EH_Anzahl = CInt(gsrightRow.Item("gs_EH_Anzahl")) Then isCompletelyFinished = True 'wenn alle Teile da sind, dann komplett!
                                    Else
                                        isCompletelyFinished = True
                                    End If


                                    .gsp_freitext = IIf(isCompletelyFinished, DAKOSY_STATUS.IMPORTED, DAKOSY_STATUS.NOTCOMPLETED) & vermerkFremdweahrung
                                        .gsp_warenwert = IIf(isCompletelyFinished, WarenwertEUR, 0)
                                        .gsp_sicherheitsbetrag = IIf(isCompletelyFinished, Sicherheitsbetrag, 0)
                                        If isCompletelyFinished Then
                                            If Not isNCTS Then
                                                .gsp_ATCNr = IIf(MRN_Erledigung_veraltet = "", MRN_SUMA, MRN_Erledigung_veraltet)
                                                .gsp_MRNNr = IIf(MRN_Erledigung = "", MRN_SUMA, MRN_Erledigung)
                                            Else
                                                .gsp_ATCNr = ""
                                                .gsp_MRNNr = IIf(MRN_Erledigung = "", MRN_SUMA.Trim(), MRN_Erledigung.Trim())
                                            End If
                                        End If
                                        .gsp_avisoId = gsrightRow("gs_avisoID")
                                        .gsp_systemuser = "DAKOSY-AUTO"
                                    End With


                                SicherheitsPos.SAVE()
                                GesSichRef.CalcSaldo()

                                Dim differenz As Double = cSicherheiten.getDifferenz(gsrightRow("gs_gsnr"))

                                If Math.Abs(differenz) <= 0.02 AndAlso Math.Abs(differenz) > 0 Then

                                    Dim OPEN_RUNDIF As New cSicherheiten()

                                    With OPEN_RUNDIF
                                        .gs_gsNr = gsrightRow("gs_gsnr")
                                        .gs_ATBNr = "Korrekt. Rundungsdiff. " & gsrightRow("gs_gsnr")
                                        .gs_MRNNr = ""
                                        .gs_posNr = OPEN_RUNDIF.getLatestPosNr(OPEN_RUNDIF.gs_gsNr, OPEN_RUNDIF.gs_ATBNr) + 1
                                        .gs_posSubNr = Nothing
                                        .gs_datum = DateTime.Now
                                        .gs_warenwert = 0
                                        .gs_sicherheitsbetrag = IIf(differenz < 0, Math.Abs(differenz), 0)
                                        .gs_standort = gsrightRow("gs_standort")
                                        .gs_art = "OPEN"
                                        .gs_erstellungsdatum = DateTime.Now
                                        .gs_freitext = ""
                                        .gs_saldo = saldo
                                        .gs_zollsatz = gsrightRow("gs_zollsatz")
                                        .gs_avisoId = gsrightRow("gs_avisoID")
                                        .gs_isRundungsdiff = True
                                        .gs_dakoyimport = 1
                                        .gs_systemuser = DAKOSY_STATUS.USER
                                    End With

                                    Dim gs_gsId = OPEN_RUNDIF.SAVEOBJECT()

                                    Dim CLOSED_RUNDIF As New cGesamtsicherheitsPositionen()
                                    With CLOSED_RUNDIF
                                        .gsp_gsId = gs_gsId
                                        .gsp_gspPosId = OPEN_RUNDIF.gs_posNr
                                        .gsp_warenwert = 0
                                        .gsp_sicherheitsbetrag = IIf(differenz > 0, Math.Abs(differenz), 0)
                                        .gsp_freitext = ""
                                        .gsp_filialenNr = gsrightRow("gs_filialenNr")
                                        .gsp_art = "CLOSE"
                                        .gsp_gsNr = gsrightRow("gs_gsnr")
                                        .gsp_abfertigungsNr = gsrightRow("gs_abfertigungsNr")
                                        .gsp_datum = DateTime.Now
                                        .gsp_erstellungsdatum = DateTime.Now
                                        .gsp_MRNNr = "Korrekt. Rundungsdiff. " & gsrightRow("gs_gsnr")
                                        .gsp_isPosRundungsdiff = True
                                        .gsp_avisoId = gsrightRow("gs_avisoID")
                                        .gsp_systemuser = DAKOSY_STATUS.USER
                                    End With

                                    CLOSED_RUNDIF.SAVE()

                                End If


                                If sendInfoMail Then
                                    Dim InfoText2 As String = createInfoMail(gsrightRow.Item("gs_MRNNr"), Nothing, "VW-AUSGANG",, SicherheitsPos, isNCTS, sonstigeMRNNr, gsrightRow)
                                    Dim empfaenger = cMitarbeiter.GetEMailRecipientForEmailNotification("DAKOSY-VWA", GesSichRef.brgakto_firmaID)
                                    If empfaenger <> "" Then VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail(empfaenger, GesSichRef.brgakto_gs_standort & IIf(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, " TEST-", " ") & "Verwahrungsausgang aus DAKOSY " & zusätzlicheInfo & " - " & Now().ToShortDateString, InfoText2, "NoReply@verag.ag")
                                End If

                            End If

                        End If

                    End If

                Next

            End If

            'End If

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

    End Sub

    Public Shared Function AddNewGesamtSichNr() As Integer
        Dim sqlq As String = "select MAX([gs_gsNr]) as MaxGesSich from tblGesamtsicherheit"
        Dim dt As New DataTable
        dt = SQL.loadDgvBySql(sqlq, "AVISO", 100, True)
        Dim LetzteGesSichNum As Integer = -1
        If (dt.Rows(0).Item(0) IsNot DBNull.Value) Then

            LetzteGesSichNum = dt.Rows(0).Item(0)
            Return LetzteGesSichNum + 1

        End If

        Return 0
    End Function

    Public Shared Function createInfoMail(regNR As String, dt As DataTable, typ As String, Optional GS As cSicherheiten = Nothing, Optional GSPOS As cGesamtsicherheitsPositionen = Nothing, Optional isNCTS As Boolean = False, Optional sonstigeMRNNR As String = "", Optional gs_row As DataRow = Nothing) As String

        Dim TextHTMLtable As String

        Select Case typ
            Case "MASSNAHME-DAKOSY"
                TextHTMLtable &= "Bei " & regNR & " wurden eine Zoll-Maßnahme ausgelöst." & vbNewLine & vbNewLine & vbNewLine

                TextHTMLtable &= "<table border=1>"
                TextHTMLtable &= "<tr><td>Code</td><td>Text</td><td>NichtzustellbarKz</td><td>PackstueckAnzahl</td><td>PackstueckArt</td></tr>"

                For Each r As DataRow In dt.Rows

                    TextHTMLtable &= "<tr>"
                    TextHTMLtable &= "<td><b>" & r.Item("MassnahmeCode") & "</b></td>"
                    TextHTMLtable &= "<td><b>" & r.Item("MassnahmeText") & "</b></td>"
                    TextHTMLtable &= "<td><b>" & r.Item("MassnahmeNichtzustellbarKz") & "</b></td>"
                    TextHTMLtable &= "<td><b>" & r.Item("PackstueckAnzahl") & "</b></td>"
                    TextHTMLtable &= "<td><b>" & r.Item("PackstueckArt") & "</b></td>"
                    TextHTMLtable &= "</tr>"

                Next

                TextHTMLtable &= "</table>"

                TextHTMLtable &= vbNewLine & vbNewLine & vbNewLine & "*Automatic generated e-mail*"
                Return TextHTMLtable


            Case "VW-EINGANG"

                TextHTMLtable &= typ & " wurde aus DAKOSY generiert!" & vbNewLine & vbNewLine & vbNewLine

                TextHTMLtable &= "<table border=1>"
                TextHTMLtable &= "<tr><td>PosNr</td><td>Vorpapier</td><td>MRN</td><td>AVISOID</td><td>LKW-KZ</td></tr>"

                If GS IsNot Nothing Then
                    TextHTMLtable &= "<tr>"
                    TextHTMLtable &= "<td><b>" & GS.gs_posNr & "</b></td>"
                    TextHTMLtable &= "<td><b>" & GS.gs_ATBNr & "</b></td>"
                    TextHTMLtable &= "<td><b>" & GS.gs_MRNNr & "</b></td>"
                    TextHTMLtable &= "<td><b>" & GS.gs_avisoId & "</b></td>"
                    TextHTMLtable &= "<td><b>" & GS.gs_LKWKZ & "</b></td>"
                    TextHTMLtable &= "</tr>"

                End If


                TextHTMLtable &= "</table>"

                TextHTMLtable &= vbNewLine & vbNewLine & vbNewLine & "*Automatic generated e-mail*"
                Return TextHTMLtable

            Case "VW-AUSGANG"

                TextHTMLtable &= typ & " wurde aus DAKOSY generiert!" & vbNewLine & vbNewLine & vbNewLine

                TextHTMLtable &= "<table border=1>"
                TextHTMLtable &= "<tr><td>PosNr</td><td>MRN</td><td>ATC</td>" & IIf(sonstigeMRNNR <> "", "<td>sonstige MRN</td>", "") & "<td>AVISOID</td><td>LKW-KZ</td><td>Packstücke</td><td>Gewicht in KG</td></tr>"

                If GSPOS IsNot Nothing Then
                    TextHTMLtable &= "<tr>"
                    TextHTMLtable &= "<td><b>" & GSPOS.gsp_gspPosId & "</b></td>"
                    TextHTMLtable &= "<td><b>" & GSPOS.gsp_MRNNr & "</b></td>"
                    TextHTMLtable &= "<td><b>" & GSPOS.gsp_ATCNr & "</b></td>"
                    If sonstigeMRNNR <> "" Then TextHTMLtable &= "<td><b>" & sonstigeMRNNR & "</b></td>"
                    TextHTMLtable &= "<td><b>" & GSPOS.gsp_avisoId & "</b></td>"

                    If gs_row IsNot Nothing AndAlso Not IsDBNull(gs_row("gs_LKWKZ")) AndAlso gs_row("gs_LKWKZ") <> "" Then
                        TextHTMLtable &= "<td><b>" & gs_row("gs_LKWKZ").ToString & "</b></td>"
                    Else
                        TextHTMLtable &= "<td><b> - </b></td>"
                    End If

                    If GSPOS.gsp_EH_Anzahl IsNot Nothing AndAlso IsNumeric(GSPOS.gsp_EH_Anzahl) Then
                        TextHTMLtable &= "<td><b>" & GSPOS.gsp_EH_Anzahl & "</b></td>"
                    Else
                        TextHTMLtable &= "<td><b> - </b></td>"
                    End If




                    If gs_row IsNot Nothing AndAlso Not IsDBNull(gs_row("gs_gewicht")) Then
                        TextHTMLtable &= "<td><b>" & gs_row("gs_gewicht").ToString & "</b></td>"
                    Else
                        TextHTMLtable &= "<td><b> - </b></td>"
                    End If


                    TextHTMLtable &= "</tr>"
                End If

                TextHTMLtable &= "</table>"

                TextHTMLtable &= vbNewLine & vbNewLine & vbNewLine & "*Automatic generated e-mail*"
                Return TextHTMLtable


            Case Else

                TextHTMLtable &= regNR & " wurde nicht vollständig aufgelöst." & vbNewLine & vbNewLine & vbNewLine

                TextHTMLtable &= "<table border=1>"
                TextHTMLtable &= "<tr><td>MRN-Nr</td><td>LKW-ID</td><td>Packstücke gesamt</td><td>Packstücke erledigt</td><td>Stornierung KZ</td></tr>"

                For Each r As DataRow In dt.Rows

                    TextHTMLtable &= "<tr>"
                    TextHTMLtable &= "<td><b>" & r.Item("MRN") & "</b></td>"
                    TextHTMLtable &= "<td><b>" & r.Item("LKW_ID") & "</b></td>"
                    TextHTMLtable &= "<td><b>" & r.Item("anzahlPackstuecke") & "</b></td>"
                    TextHTMLtable &= "<td><b>" & r.Item("AnzahlStückErledigt") & "</b></td>"
                    If Not isNCTS AndAlso dt.Columns.Contains("StornierungK") Then TextHTMLtable &= "<td><b>" & r.Item("StornierungKZ") & "</b></td>"
                    TextHTMLtable &= "</tr>"

                Next

                TextHTMLtable &= "</table>"

                TextHTMLtable &= vbNewLine & vbNewLine & vbNewLine & "*Automatic generated e-mail*"
                Return TextHTMLtable

        End Select


    End Function

    Private Shared Function isZollern(SND As cSendungen)

        Dim zollernKdnr = {772383, 712203}

        If zollernKdnr.Contains(SND.tblSnd_AbsenderKdNr) OrElse
            zollernKdnr.Contains(SND.tblSnd_AuftraggeberKdNr) OrElse
            (SND.tblSnd_AvisiererKdNr IsNot Nothing AndAlso zollernKdnr.Contains(SND.tblSnd_AvisiererKdNr)) OrElse
            zollernKdnr.Contains(SND.tblSnd_EmpfaengerKdNr) OrElse
            (SND.tblSnd_FrachtfuehrerKdNr IsNot Nothing AndAlso zollernKdnr.Contains(SND.tblSnd_FrachtfuehrerKdNr)) Then
            Return True
        Else
            Return False
        End If


    End Function
End Class
