Imports com.sun.org.apache.bcel.internal.generic
Imports DAKOSY_Worker
Imports DocumentFormat.OpenXml.Wordprocessing
Imports java.nio.channels
Imports javax.management
Imports Spire.Pdf
Imports VERAG_PROG_ALLGEMEIN

Public Class cWorker_AES_EXG
    Public Shared Dateiname = ""

    Shared SQL As New VERAG_PROG_ALLGEMEIN.SQL



    Shared Function readEZA_DatenZumAusgang_DataEXITDE_005(FORM As frmDYNachrichtenVerarbeitung, d As String, saveVerwahrung As Boolean) As String
        Try

            Dim VWI As DAKOSY_Worker.DataEXITDE.DatenZumAusgangXDTyp = DAKOSY_Worker.DataEXITDE.DatenZumAusgangXDTyp.LoadFromFile(d)
            Dim MRN = ""
            Dim RegistriernummerATLAS = ""
            Dim ankungsdatum As Object = Nothing
            Dim zp As Object = Nothing

            readEZA_DatenZumAusgang_DataEXITDE_005 = ""
            If VWI IsNot Nothing Then
                If VWI.ResponseData IsNot Nothing AndAlso VWI.ResponseData.Count > 0 Then
                    For Each RESP In VWI.ResponseData

                        If RESP.ObjektIdentifizierung IsNot Nothing Then
                            If RESP.ObjektIdentifizierung.ObjektName IsNot Nothing Then
                                readEZA_DatenZumAusgang_DataEXITDE_005 = RESP.ObjektIdentifizierung.ObjektName 'Nur ObjektAntragsart VV (SumA Vorgang) /NE (NCTS-Vorgang )

                                If RESP.HeaderData IsNot Nothing Then
                                    If RESP.HeaderData.MRN IsNot Nothing Then
                                        MRN = RESP.HeaderData.MRN

                                    End If
                                End If

                                If RESP.ObjektIdentifizierung.ZeitpunktEingang > "01.01.2000" Then
                                    zp = RESP.ObjektIdentifizierung.ZeitpunktEingang
                                End If

                                '----------------------------------------------------------------------
                                'EXZ SAVE!
                                '----------------------------------------------------------------------

                                Dim EXG = DAKOSY_Worker.cDakosyEXG.LOADByBezugsNr(readEZA_DatenZumAusgang_DataEXITDE_005, True)
                                If EXG Is Nothing Then EXG = New cDakosyEXG

                                'EXG.consignee
                                EXG.exg_ObjectName = readEZA_DatenZumAusgang_DataEXITDE_005
                                EXG.exg_Partnersystem = "DAKOSY"
                                EXG.exg_Erstellung = zp
                                ' EXG.exg_firma = RESP.HeaderData.
                                EXG.exg_Declarationtype = RESP.HeaderData.DeclarationType
                                EXG.exg_Security = RESP.HeaderData.Security
                                EXG.exg_MRN = RESP.HeaderData.MRN
                                EXG.exg_ContainerIndicator = RESP.HeaderData.ContainerIndicator
                                EXG.exg_GrossMass = RESP.HeaderData.GrossMass
                                EXG.exg_CountryOfDestination = RESP.HeaderData.CountryOfDestination
                                EXG.exg_ReferenceNumberUCR = RESP.HeaderData.ReferenceNumberUCR

                                frmDYNachrichtenVerarbeitung.setFirmaNL(VWI.Transaktion.IOPartner, VWI.Transaktion.IODivision3, EXG.exg_firma, EXG.exg_niederlassung)

                                If RESP.HeaderData.Consignee IsNot Nothing Then
                                    EXG.exg_Consignee_Name = RESP.HeaderData.Consignee.Name

                                    EXG.exg_Consignee_StreetNumber = RESP.HeaderData.Consignee.StreetAndNumber
                                    EXG.exg_Consignee_City = RESP.HeaderData.Consignee.City
                                    EXG.exg_Consignee_Postcode = RESP.HeaderData.Consignee.Postcode
                                    EXG.exg_Consignee_Country = RESP.HeaderData.Consignee.Country

                                    EXG.exg_Consignee_IdentificationNumber = RESP.HeaderData.Consignee.IdentificationNumber
                                    EXG.exg_Consignee_SubsidiaryNumber = RESP.HeaderData.Consignee.SubsidiaryNumber
                                End If

                                If RESP.HeaderData.Exporter IsNot Nothing Then
                                    EXG.exg_Consignor_Name = RESP.HeaderData.Exporter.Name

                                    EXG.exg_Consignor_StreetNumber = RESP.HeaderData.Exporter.StreetAndNumber
                                    EXG.exg_Consignor_City = RESP.HeaderData.Exporter.City
                                    EXG.exg_Consignor_Postcode = RESP.HeaderData.Exporter.Postcode
                                    EXG.exg_Consignor_Country = RESP.HeaderData.Exporter.Country

                                    EXG.exg_Consignor_IdentificationNumber = RESP.HeaderData.Exporter.IdentificationNumber
                                    EXG.exg_Consignor_SubsidiaryNumber = RESP.HeaderData.Exporter.SubsidiaryNumber
                                End If


                                If RESP.GoodsItem IsNot Nothing Then
                                    For Each ITEM In RESP.GoodsItem
                                        Dim EXG_ITEM As New cDakosy_EXG_Position

                                        EXG_ITEM.exgPos_GoodsItemNumber = ITEM.GoodsItemNumber
                                        EXG_ITEM.exgPos_CommodityCode = ITEM.HarmonizedSystemSubHeadingCode & ITEM.CombinedNomenclatureCode
                                        EXG_ITEM.exgPos_DescriptionOfGoods = ITEM.DescriptionOfGoods
                                        EXG_ITEM.exgPos_NetMass = ITEM.NetMass
                                        EXG_ITEM.exgPos_GrossMass = ITEM.GrossMass


                                        If ITEM.Procedure IsNot Nothing Then

                                            EXG_ITEM.exgPos_PreviousProcedure = ITEM.Procedure.PreviousProcedure
                                            EXG_ITEM.exgPos_RequestedProcedure = ITEM.Procedure.RequestedProcedure

                                        End If
                                        If ITEM.Packaging IsNot Nothing Then
                                            For Each ITEM_PK In ITEM.Packaging
                                                Dim EXG_ITEM_PK As New cDakosy_EXG_Position_Packaging

                                                EXG_ITEM_PK.exgPosPk_NumberOfPackages = ITEM_PK.NumberOfPackages
                                                EXG_ITEM_PK.exgPosPk_TypeOfPackages = ITEM_PK.TypeOfPackages
                                                EXG_ITEM_PK.exgPosPk_ShippingMarks = ITEM_PK.ShippingMarks


                                                EXG_ITEM.exgPos_PACKAGING.Add(EXG_ITEM_PK)
                                            Next
                                        End If
                                        EXG.exg_POSITION.Add(EXG_ITEM)
                                    Next
                                End If

                                If EXG.SAVE_ALL Then 'BEZUGSNR vorhanden
                                    Dim STATUS As DAKOSY_Worker.cDakosy_Statusmeldungen = FORM.getStatusCheckTransID(VWI.Transaktion.IOReferenz, VWI.Transaktion.IODatumZeit)
                                    STATUS.dySt_BezugsNr = readEZA_DatenZumAusgang_DataEXITDE_005
                                    STATUS.dySt_artMitteilung = "EXG_DATA"
                                    STATUS.dySt_dyArt = "EXG"

                                    STATUS.dySt_status = DAKOSY_Worker.cDY_Statusliste.S_00
                                    STATUS.dySt_ergCode = "EXG_DATA"
                                    STATUS.dySt_ergMitteilung = ""
                                    If zp IsNot Nothing Then STATUS.dySt_ergZeitpunkt = zp

                                    STATUS.SAVE()



                                    '----------------------------------------------------------------------
                                    'NCTS AKtualisieren!
                                    '----------------------------------------------------------------------

                                    '----------------------------------------------------------------------
                                    'Wenn markiert wurde, dass die NCTS Daten ergänzt werden sollten
                                    '----------------------------------------------------------------------
                                    Dim testDY = True
                                    If testDY Or (EXG.exg_AutoFill_DyId IsNot Nothing AndAlso EXG.exg_AutoFill_DyId >= 0) Then
                                        Console.WriteLine("EXG: NCTS Verarbeitung starten...")
                                        '----------------------------------------------------------------------
                                        'NCTS BEFÜLLEN!
                                        '----------------------------------------------------------------------
                                        Dim NCTS_OUT = fillNCTS_WithEXG_AutoFill(EXG, "TEEEEEEESTTT")
                                        '----------------------------------------------------------------------
                                        '----------------------------------------------------------------------
                                        testDY = True

                                        'Prüfen ob alle EXG Daten gekommen sind --> NCTS Senden!
                                        If testDY Or (cDakosyEXG.isFillNCTS_ID_ALLCompleted(EXG.exg_AutoFill_DyId)) Then


                                            Dim DY_ANM = New cDakosy_Zollanmeldungen(EXG.exg_AutoFill_DyId)
                                            If NCTS_OUT IsNot Nothing Then


                                                'Dim cDY As New cDakosyNCTSOut(cDyAnm.dy_Id, cDyAnm.dy_Erstellung_SB)
                                                NCTS_OUT.ncts_dyaAnmID = DY_ANM.dy_Id
                                                NCTS_OUT.ncts_Erstellung_SB = DY_ANM.dy_Erstellung_SB
                                                NCTS_OUT.ncts_LetzteBearbeitung = Now
                                                NCTS_OUT.ncts_LetzteBearbeitung_SB = DY_ANM.dy_LetzteBearbeitung_SB
                                                NCTS_OUT.ncts_firma = EXG.exg_firma
                                                NCTS_OUT.ncts_niederlassung = EXG.exg_niederlassung
                                                '  DAKOSY_Interface_SEND.loadInClass_VersandanmeldungNCTSDE_004(NCTS_OUT, Me, DY_ANM, Me.FIRMA_DY)

                                                'VON HIER löschnen ohne test 
                                                If testDY OrElse NCTS_OUT.SAVE_ALL() Then


                                                    If If(EXG.exg_AutoFill_DyId, -1) > 0 Then 'Nur speichern wenn bei  test exg_AutoFill_DyId befüllt ist
                                                        NCTS_OUT.SAVE_ALL()
                                                    End If
                                                    Dim saveFile = ""

                                                    If cDakosyNCTSOut004.generateVersandanmeldungNCTSDE_004(NCTS_OUT, saveFile, "CREATE", Application.StartupPath, "NCTS") Then

                                                        If saveFile <> "" Then

                                                            frmStartOptions.copyFile(saveFile, "\\datenarchiv\Datenarchiv\DAKOSY\ECHTSYSTEM\EXG\upl\NCTS\")

                                                        End If
                                                    End If

                                                Else
                                                    'BIS HIER löschnen ohne test 

                                                    If NCTS_OUT.SAVE_ALL() Then

                                                        Dim saveFile = ""
                                                        If cDakosyNCTSOut004.generateVersandanmeldungNCTSDE_004(NCTS_OUT, saveFile, "CREATE", Application.StartupPath, "NCTS") Then
                                                            If saveFile <> "" Then

                                                                If cDakosyFunftions.send_Data_To_Dakosy_FTP(saveFile, NCTS_OUT.ncts_ObjectName, DY_ANM.dy_Id, NCTS_OUT.ncts_firma) Then
                                                                    DAKOSY_Worker.cDakosy_Statusmeldungen.InsertStatusMeldung(DY_ANM, DAKOSY_Worker.cDY_Statusliste.S_03)
                                                                    'If SENDUNG IsNot Nothing Then SENDUNG.SET_VGMA() ' MA Vorgeschrieben in Sendung setzen.
                                                                Else
                                                                    DAKOSY_Worker.cDakosy_Statusmeldungen.InsertStatusMeldung(DY_ANM, DAKOSY_Worker.cDY_Statusliste.S_09)
                                                                    MsgBox("Sendefehler!")
                                                                End If

                                                            End If
                                                        End If
                                                    End If
                                                End If

                                            End If

                                            If Not testDY Or If(EXG.exg_AutoFill_DyId, -1) > 0 Then 'Kann ganz weg kenn kein test

                                                DY_ANM.UPDATE_DATA()

                                                'Beim Senden soll die Sendung überhnommen + tblSnd_VG_MA gesetzt werden --> damit gleich gesehen wird, dass der Akt in Bearbeitung ist.
                                                DY_ANM.UPDATE_AVISO_SND(DY_ANM.dy_SendungsId)

                                            End If


                                        End If
                                    End If


                                    '----------------------------------------------------------------------
                                    'QULAIFIZIERUNG!
                                    '----------------------------------------------------------------------

                                    '----------------------------------------------------------------------
                                    'Es wird bei Daten zum AUsgang und "_EXG"  automaitsch die Qualifizierung aufgerufen...
                                    Dim test = False


                                    '----------------------------------------------------------------------
                                    '----------------------------------------------------------------------
                                    If False Then '--------------QUALIFIZIERUNG NOCH NCIHT SENDEN!     ------------------
                                        '----------------------------------------------------------------------
                                        '----------------------------------------------------------------------


                                        If readEZA_DatenZumAusgang_DataEXITDE_005.Contains("_EXG") Or test Then
                                            Dim IOPARTNER = VWI.Transaktion.IOPartner
                                            Dim DIVISION3 = VWI.Transaktion.IODivision3
                                            Dim DAKOSY_SB = "ANDREAS"
                                            Dim DY_ACTIONS As New List(Of String)

                                            If IOPARTNER = "UNAT" Then
                                                DAKOSY_SB = "luxbauer"
                                            End If

                                            Dim saveFile = ""

                                            DY_ACTIONS.Add("CHANGE")
                                            DY_ACTIONS.Add("SEND")

                                            If generateInformationenZumAusgang003(EXG, readEZA_DatenZumAusgang_DataEXITDE_005, saveFile, DY_ACTIONS, IOPARTNER, DIVISION3, DAKOSY_SB) Then
                                                If saveFile <> "" Then
                                                    If test Then
                                                        frmStartOptions.copyFile(saveFile, "\\datenarchiv\Datenarchiv\DAKOSY\ECHTSYSTEM\EXG\upl\")
                                                    Else
                                                        If cDakosyFunftions.send_Data_To_Dakosy_FTP(saveFile, readEZA_DatenZumAusgang_DataEXITDE_005, -1, IOPARTNER) Then
                                                            'DAKOSY_Worker.cDakosy_Statusmeldungen.InsertStatusMeldung(DY_ANM, DAKOSY_Worker.cDY_Statusliste.S_03)
                                                            Return True
                                                        Else
                                                            'DAKOSY_Worker.cDakosy_Statusmeldungen.InsertStatusMeldung(DY_ANM, DAKOSY_Worker.cDY_Statusliste.S_09)
                                                            Return False
                                                        End If
                                                    End If
                                                End If
                                            End If
                                        End If
                                    End If
                                    '----------------------------------------------------------------------


                                    FORM.addDGVEinarbeitung("AES: ExportGest.-DatenZumAusgang", STATUS.dySt_BezugsNr)
                                End If
                                '----------------------------------------------------------------------
                                '----------------------------------------------------------------------



                            End If
                            End If

                Next

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

    Shared Function fillNCTS_WithEXG_AutoFill(EXG As cDakosyEXG, ObjectName As String) As cDakosyNCTSOut004

        If (EXG.exg_AutoFill_DyId IsNot Nothing AndAlso EXG.exg_AutoFill_DyId >= 0) Then
            Dim NCTS_OUT = DAKOSY_Worker.cDakosyNCTSOut004.LOADByAnmIDFull(EXG.exg_AutoFill_DyId, True)

            If NCTS_OUT Is Nothing Then
                NCTS_OUT = New DAKOSY_Worker.cDakosyNCTSOut004
                NCTS_OUT.ncts_ObjectName = ObjectName
            End If

            Console.WriteLine("EXG: NCTS befüllen...")
            DAKOSY_Worker.cDakosyNCTSOut004.fillNCTS_WithEXG(NCTS_OUT, EXG, ObjectName)
            Console.WriteLine("EXG: NCTS updaten...")
            cDakosyEXG.UPDATE_FillNCTS_ID_Completed(EXG.exg_Id) 'Eintrag, dass AutoFill durchgelaufen ist

            Return NCTS_OUT
        End If
        Return Nothing

    End Function



    Shared Function generateInformationenZumAusgang003(EXG As cDakosyEXG, ByVal Bezugsnummer As String, ByRef saveFile As String, DY_ACTIONS As List(Of String), IOPartner As String, IODivision3 As String, DAKOSY_SB As String) As Boolean
        Dim Interface_VERSION = "003"
        ' Dim ObjectAktion = DY_ACTION
        ' Dim BezugsnummerVorblendung = "AA_NCTS_DE_ZE_WO_MITTICH"

        Dim XML As New DAKOSY_Worker.InformationEXITDE.InformationenZumAusgangXITyp

        'Bezugsnummer = Bezugsnummer.Replace("_EXG_", "_QZ_") ' ??????????????????

        If Bezugsnummer.Length > 35 Then
            Bezugsnummer = Bezugsnummer.Substring(0, 35)
        End If
        'Transaktion:
        XML.Transaktion = New DAKOSY_Worker.InformationEXITDE.TransaktionExportTyp
        XML.Transaktion.IOPartner = IOPartner
        XML.Transaktion.IODatumZeit = Now
        XML.Transaktion.IOReferenz = Bezugsnummer & "_" & Now.ToString("ddMMyyHHmmSS")
        If Not VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then XML.Transaktion.IODivision3 = IODivision3
        XML.Transaktion.Version = Interface_VERSION
        ' XML.Transaktion.IODivision3 = "DUR"

        Dim XML_EG = New InformationEXITDE.EinzelInformationenZumAusgangTyp
        'ObjektIdentifizierung:
        XML_EG.ObjektIdentifizierung.ObjektName = Bezugsnummer

        'If Bezugsnummer IsNot Nothing Then XML_EG.ObjektIdentifizierung.ObjektAliasname = Bezugsnummer
        XML_EG.ObjektIdentifizierung.ObjektAktion = DY_ACTIONS
        XML_EG.ObjektIdentifizierung.Bearbeiter = DAKOSY_SB

        '      If BezugsnummerVorblendung IsNot Nothing AndAlso BezugsnummerVorblendung <> "" Then XML_EG.ObjektIdentifizierung.BezugsnummerVorblendung = BezugsnummerVorblendung

        'TransitOperation:
        XML_EG.HeaderData.InformationType = "NV"
        'XML_EG.HeaderData.ActiveBorderTransportMeans.DepartureDateAndTime = Now '_Nicht, sonst fehler
        XML_EG.HeaderData.Finalization = 1
        XML_EG.HeaderData.ModeOfTransportAtTheBorder = 3

        'XML_EG.HeaderData.MRN = MRN
        'If cDY.ncts_CountryOfDispatch IsNot Nothing Then XML.EinzelEingangsanzeige.TransitOperation.CustomsOfficeOfDestinationActual = cDY.ncts_CountryOfDispatch
        'If SND.tblSnd_ATB_T1 IsNot Nothing Then XML.EinzelEingangsanzeige.TransitOperation.MRN = SND.tblSnd_ATB_T1
        'XML.EinzelEingangsanzeige.TransitOperation.ArrivalNotificationDateAndTime = Now

        'XML.EinzelEingangsanzeige.TransitOperation.IncidentFlag = "N"

        XML.DeclarationData.Add(XML_EG)


        Dim saveDir = Application.StartupPath & "\Dakosy_SEND\"
        If Not System.IO.Directory.Exists(saveDir) Then
            System.IO.Directory.CreateDirectory(saveDir)
        End If

        saveFile = saveDir & "DY_EXG_" & Now.ToString("yyMMdd_HHmmss_fff") & ".xml"

        XML.SaveToFile(saveFile)

        '-------------------------------------------
        Dim STATUS As New DAKOSY_Worker.cDakosy_Statusmeldungen
        STATUS.dySt_BezugsNr = Bezugsnummer
        STATUS.dySt_artMitteilung = "EXG_INFO"
        STATUS.dySt_dyArt = "EXG"
        STATUS.dySt_status = DAKOSY_Worker.cDY_Statusliste.S_00
        STATUS.dySt_ergCode = "EXG_INFO"
        STATUS.dySt_ergMitteilung = "MRN:" & EXG.exg_MRN
        STATUS.dySt_ergZeitpunkt = Now
        STATUS.SAVE()
        '-------------------------------------------

        DAKOSY_Worker.cDakosyFunftions.replaceNullDateXML(saveFile)


        Return True
    End Function




End Class
