Imports System.IO.Pipes
Imports DAKOSY_Worker
Imports javax.management
Imports Tamir
Imports Tamir.SharpSsh
Imports VERAG_PROG_ALLGEMEIN

Public Class usrCntlATLAS_NCTS004

    Property ALLG As usrCntlATLAS_NCTS004_Allg
    Property ADRESSEN As usrCntlATLAS_NCTS004_Adressen
    Property SICHERHEIT As usrCntlATLAS_NCTS004_Sicherheit
    Property POSITIONEN As usrCntlATLAS_NCTS004_Positionen
    'Property VERSCHLUESSE As usrCntlATLAS_NCTS_Verschluesse
    'Property FilialeNr As Integer
    ' Property AbfertigungsNr As Integer
    Property Jahr2Stellig As Integer
    Property zusatz As String
    Property BezugsNr As String = ""
    ' Property AvisoId As Integer
    'Property SENDUNGS_ID As Integer
    Property AVISO As VERAG_PROG_ALLGEMEIN.cAviso
    Property SENDUNG As VERAG_PROG_ALLGEMEIN.cSendungen
    Dim sentToDakosy = False

    Property isSTAMMREF As Boolean = False ' Wenn das Formular als Stammreferenz bearbeitet wird
    Property STAMMREF As String = "" ' Wenn eine Stammrefereenz als Grundlage dient

    Dim FIRMA_DY = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA

    Dim cDy_ART As String = If(FIRMA_DY = "ATILLA", "T2", "T1")

    Dim ncts_OUT As cDakosyNCTSOut004 = Nothing
    Dim DY_ANM As cDakosy_Zollanmeldungen = Nothing

    Sub New(ncts_OUT As cDakosyNCTSOut004, Optional isSTAMMREF As Boolean = False, Optional STAMMREF As String = "")
        InitializeComponent()
        Me.isSTAMMREF = isSTAMMREF
        Me.STAMMREF = STAMMREF
        Me.ncts_OUT = ncts_OUT
        DY_ANM = New cDakosy_Zollanmeldungen(ncts_OUT.ncts_dyaAnmID)

        If DY_ANM.dy_AvisoId > 0 Then
            Dim AV As New VERAG_PROG_ALLGEMEIN.cAvisoDAL
            AVISO = AV.LesenAviso(DY_ANM.dy_AvisoId, "")
        End If
        If DY_ANM.dy_SendungsId > 0 Then
            SENDUNG = New VERAG_PROG_ALLGEMEIN.cSendungen(DY_ANM.dy_SendungsId)
        End If
    End Sub

    Sub New(DY_ANM As cDakosy_Zollanmeldungen, AVISO As VERAG_PROG_ALLGEMEIN.cAviso, SENDUNG As VERAG_PROG_ALLGEMEIN.cSendungen, Jahr2Stellig As Integer, Optional zusatz As String = "", Optional isSTAMMREF As Boolean = False, Optional STAMMREF As String = "")
        ' Dieser Aufruf ist für den Designer erforderlich.
        InitializeComponent()


        Me.Jahr2Stellig = Jahr2Stellig
        Me.zusatz = zusatz

        Me.AVISO = AVISO
        Me.SENDUNG = SENDUNG
        Me.DY_ANM = DY_ANM
        Me.isSTAMMREF = isSTAMMREF
        Me.STAMMREF = STAMMREF


        If DY_ANM IsNot Nothing Then
            Me.ncts_OUT = DAKOSY_Worker.cDakosyNCTSOut004.LOADByAnmIDFull(DY_ANM.dy_Id, True)
            Me.cDy_ART = If(DY_ANM.dy_ART, "")
            If Me.cDy_ART = "" And Me.ncts_OUT IsNot Nothing Then Me.cDy_ART = If(Me.ncts_OUT.ncts_Declarationtype, "")
            If Me.cDy_ART = "" Then Me.cDy_ART = "T1"
            If ncts_OUT IsNot Nothing Then
                Me.FIRMA_DY = If(Me.ncts_OUT.ncts_firma, "")
            End If

        End If
        'DY_ANM = New cDakosy_Zollanmeldungen(ncts_OUT.ncts_dyaAnmID)



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

    Sub New(ART As String, AvisoId As Integer, SENDUNGS_ID As Integer, Jahr2Stellig As Integer, Optional zusatz As String = "", Optional isSTAMMREF As Boolean = False, Optional STAMMREF As String = "")
        ' Dieser Aufruf ist für den Designer erforderlich.
        InitializeComponent()

        Me.cDy_ART = If(ART = "NCTS", "T1", ART)

        If AvisoId > 0 Then
            Dim AV As New VERAG_PROG_ALLGEMEIN.cAvisoDAL
            AVISO = AV.LesenAviso(AvisoId, "")
        End If
        If SENDUNGS_ID > 0 Then
            SENDUNG = New VERAG_PROG_ALLGEMEIN.cSendungen(SENDUNGS_ID)
        End If

        Me.Jahr2Stellig = Jahr2Stellig
        Me.isSTAMMREF = isSTAMMREF
        Me.STAMMREF = STAMMREF
        Me.zusatz = zusatz

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

    Sub New(ART As String, Aviso As VERAG_PROG_ALLGEMEIN.cAviso, SENDUNG As VERAG_PROG_ALLGEMEIN.cSendungen, Jahr2Stellig As Integer, Optional zusatz As String = "", Optional isSTAMMREF As Boolean = False, Optional STAMMREF As String = "", Optional FIRMA_DY As String = "")
        ' Dieser Aufruf ist für den Designer erforderlich.
        InitializeComponent()

        Me.cDy_ART = If(ART = "NCTS", "T1", ART)

        Me.AVISO = Aviso
        Me.SENDUNG = SENDUNG
        Me.isSTAMMREF = isSTAMMREF
        Me.STAMMREF = STAMMREF

        Me.Jahr2Stellig = Jahr2Stellig
        Me.zusatz = zusatz
        If FIRMA_DY <> "" Then Me.FIRMA_DY = FIRMA_DY
        ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
    End Sub

    Shared Function getBezugsnr(FIRMA_DY As String, SENDUNG As cSendungen, ByRef BezugsNr As String, ByRef zusatz As String)
        Dim BezugsNrTmp = ""
        Select Case FIRMA_DY
                Case "UNISPED"
                    If If(SENDUNG.tblSnd_DakosyRef, "") <> "" Then
                        BezugsNrTmp = SENDUNG.tblSnd_DakosyRef
                    Else
                        BezugsNrTmp = SENDUNG.FilialenNr & "/" & SENDUNG.AbfertigungsNr
                    End If
                Case Else
                    BezugsNrTmp = SENDUNG.FilialenNr & "/" & SENDUNG.AbfertigungsNr '& If(zusatz <> "", "/" & zusatz, "") 'zusatz ' & "/" & Jahr2Stellig
            End Select
            BezugsNr = BezugsNrTmp
        zusatz = "A"
        'Soloagne bis die Bezugsnummer noch nicht existiert
        While DAKOSY_Worker.cDakosy_Zollanmeldungen.ExistsBezugsNr(BezugsNr) 'IsNot Nothing
            BezugsNr = BezugsNrTmp & "/" & zusatz

            If zusatz.Length = 1 Then
                zusatz = Chr(Asc(zusatz.ToString) + 1)
            Else
                zusatz = zusatz.Substring(0, 1) & Chr(Asc(zusatz.Substring(0, 2).ToString) + 1)
            End If

            If zusatz = "Z" Then zusatz = "AA"
        End While

        Return BezugsNr
    End Function

    Private Sub usrCntlATLAS_Load(sender As Object, e As EventArgs) Handles Me.Load
        'MsgBox("LOAD")

        cboDakosyAction.Items.Clear()
        cboDakosyAction.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Neuen Datensatz erstellen", DY_ObjektAktion.OBJ_CREATE))
        cboDakosyAction.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Vohr. DS ändern", DY_ObjektAktion.OBJ_CHANGE))
        cboDakosyAction.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Vorh. DS stornieren", DY_ObjektAktion.OBJ_CANCEL))
        cboDakosyAction.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Datensatz an ZOLL senden", DY_ObjektAktion.OBJ_SEND))
        cboDakosyAction.changeItem(DY_ObjektAktion.OBJ_CREATE)

        AusGestllungToolStripMenuItem.Visible = True

        'Select Case FIRMA_DY
        '    Case "VERAG" : txtDyMandant.Text = "VERG"
        '        txtDyNiederlassung.Text = VERAG_PROG_ALLGEMEIN.cAllgemein.NIEDERLASSUNG
        '        '  Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.NIEDERLASSUNG
        '        'Case "SUB" : txtDyNiederlassung.Text = "VERG"
        '        'Case "SUW" : txtDyNiederlassung.Text = "ATIL"
        '        ''Case "SBG" : txtDyNiederlassung.Text = "IMEX"
        '        'Case "NEU" : txtDyNiederlassung.Text = "IMEX"
        '        'Case "NKD" : txtDyNiederlassung.Text = "IMEX"
        '        'End Select 
        '    Case "ATILLA" : txtDyMandant.Text = "ATIL" : txtDyNiederlassung.Text = "SUW"
        '    Case "UNISPED" : txtDyMandant.Text = "UNAT" : txtDyNiederlassung.Text = "ATSPED"
        '    Case "IMEX" : txtDyMandant.Text = "IMEX" : txtDyNiederlassung.Text = "IME"
        '    Case "AMBAR" : txtDyMandant.Text = "ATIL" : txtDyNiederlassung.Text = "AMBWO"
        'End Select
        If SENDUNG IsNot Nothing Then
            FIRMA_DY = cDakosyFunftions.getFirma_DY(SENDUNG.FilialenNr.ToString, Me.FindForm, "NCTS")
            'MsgBox(SENDUNG.FilialenNr)
        End If

        ' MsgBox(FIRMA_DY) 
        txtDyMandant.Text = cDakosyFunftions.getIOPartner(FIRMA_DY, "NCTS")
        txtDyNiederlassung.Text = cDakosyFunftions.getDivision(FIRMA_DY, "NCTS")

        cboStammreferenz.fillWithSQL("SELECT [dySr_Stammreferenz],[dySr_Bezeichnung] FROM [tblDakosy_Stammreferenzen] WHERE dySr_Land='DE' AND dySr_Verfahren='NCTS'  and dySr_dy_Mandant='" & txtDyMandant.Text & "'  and dySr_dy_Niederlassung IN ('','" & txtDyNiederlassung.Text.Replace("DTB", "SUB") & "')  and dySr_visible=1", False, "FMZOLL", True)
        cboStammreferenz.changeItem("")

        SICHERHEIT = New usrCntlATLAS_NCTS004_Sicherheit(ncts_OUT, FIRMA_DY)
        'VERSCHLUESSE = New usrCntlATLAS_NCTS_Verschluesse() 'ncts_OUT)
        ADRESSEN = New usrCntlATLAS_NCTS004_Adressen(ncts_OUT, FIRMA_DY) ')
        ALLG = New usrCntlATLAS_NCTS004_Allg(ncts_OUT)
        POSITIONEN = New usrCntlATLAS_NCTS004_Positionen(ncts_OUT)


        If isSTAMMREF Then
            Me.BezugsNr = "STAMMREFERENZ"
            If ncts_OUT Is Nothing Then ncts_OUT = New cDakosyNCTSOut004
            ncts_OUT.ncts_ObjectName = BezugsNr
        Else
            If ncts_OUT Is Nothing Then ' NEUE ZOLLANMELDUNG
                Dim f As New frmDakosyStammreferenz("DE", "NCTS", False,,, FIRMA_DY)
                Dim Stammreferenz = Nothing
                If f.ShowDialog(Me) Then
                    Stammreferenz = f.STAMMREF
                    sentToDakosy = f.sentToDakosy
                End If
                Try

                    BezugsNr = getBezugsnr(FIRMA_DY, SENDUNG, BezugsNr, zusatz)
                    lblBezugsnummer.Text = BezugsNr
                Catch ex As Exception
                    MsgBox(ex.Message & ex.StackTrace)
                End Try
                ncts_OUT = cDakosyNCTSOut004.LOADByBezugsNr(BezugsNr, True)
                If ncts_OUT Is Nothing Then
                    'Falls zur BezugsNr schon ein Eintrag in der DB vorhanden ist
                    ncts_OUT = cDakosyNCTSOut004.LOADByAnmIDFull(f.STAMMREF_DYID, True) ' DyID --> Falls bei der Stammreferenz eine Vorlage hinterlegt ist!


                    If ncts_OUT IsNot Nothing Then
                        'Stmmreferenz - Werte zurücksetzen, damit nicht falsch übergeben
                        ncts_OUT.ncts_dyaAnmID = -1
                        ncts_OUT.ncts_Id = -1
                    Else
                        ncts_OUT = New cDakosyNCTSOut004
                    End If


                    loaddataFromAVISO(AVISO, SENDUNG, cDy_ART, BezugsNr, ncts_OUT, FIRMA_DY)
                    cboStammreferenz.changeItem(Stammreferenz)


                End If
                'ncts_OUT

            Else
                ' ncts_OUT is  ot nothing
                Me.BezugsNr = ncts_OUT.ncts_ObjectName
                'MsgBox(ncts_OUT.ncts_Hauptverpflichteter_Name)

            End If
        End If
        If If(ncts_OUT.ncts_firma, "") = "" Then If FIRMA_DY <> "" Then ncts_OUT.ncts_firma = FIRMA_DY

        If If(Me.cDy_ART, "") <> "" Then
            'Muss noch überschrieben werdne, da sonst Art von Stammref hergenommen wird...
            ncts_OUT.ncts_Declarationtype = Me.cDy_ART
        Else
            'Wenn keine Art --> T1
            If ncts_OUT.ncts_Declarationtype Is Nothing Or ncts_OUT.ncts_Declarationtype = "" Then
                ncts_OUT.ncts_Declarationtype = "T1"
            End If
        End If


        'hinzufügen, damit alle Controls richtig geladen und initialisiert werden:s
        Me.SplitContainer.Panel2.Controls.Add(SICHERHEIT)
        'Me.SplitContainer.Panel2.Controls.Add(VERSCHLUESSE)
        Me.SplitContainer.Panel2.Controls.Add(ALLG)
        Me.SplitContainer.Panel2.Controls.Add(POSITIONEN)
        Me.SplitContainer.Panel2.Controls.Add(ADRESSEN)

        ' MsgBox(ncts_OUT.ncts_Hauptverpflichteter_Name)
        'Werte setzen:
        SICHERHEIT.setValues(ncts_OUT.ncts_GUARANTEE)
        ' VERSCHLUESSE.setValues(ncts_OUT)
        ADRESSEN.setValues(ncts_OUT)
        ALLG.setValues(ncts_OUT)
        POSITIONEN.setValues(ncts_OUT)

        If If(ncts_OUT.ncts_Stammreferenz, "") <> "" Then cboStammreferenz.changeItem(ncts_OUT.ncts_Stammreferenz)

        'Controls wieder entfernen:
        Me.SplitContainer.Panel2.Controls.Clear()


        '    If ALLG.txtKennnummer.Text = "" Then ALLG.txtKennnummer.Text = BezugsNr



        ' ADRESSEN.CreateControl()
        For Each c In MyFlowLayoutPanel1.Controls
            If c.GetType.ToString = GetType(System.Windows.Forms.Button).ToString Then
                AddHandler DirectCast(c, System.Windows.Forms.Button).Click, AddressOf buttonClick
            End If
        Next

        AddHandler ADRESSEN.Button1.Click, Sub()
                                               Dim origin = ""
                                               Dim destination = ""

                                               'Dim usrCntlVers = ADRESSEN.usrCntlVersender
                                               'origin &= usrCntlVers.txtStrasse.Text & " "
                                               'origin &= usrCntlVers.sbLand._value & " "
                                               'origin &= usrCntlVers.txtPlz.Text & " "
                                               'origin &= usrCntlVers.txtOrt.Text & " "

                                               If ALLG.sbAbgangZollstelle._value <> "" Then
                                                   origin = ALLG.sbAbgangZollstelle._value.Substring(0, 2) & " " & ALLG.sbAbgangZollstelle.Text
                                               End If


                                               Dim usrCntlEmpf = ADRESSEN.usrCntlEmpfaenger
                                               destination &= usrCntlEmpf.txtStrasse.Text & " "
                                               destination &= usrCntlEmpf.sbLand._value & " "
                                               destination &= usrCntlEmpf.txtPlz.Text & " "
                                               destination &= usrCntlEmpf.txtOrt.Text & " "


                                               Dim duration = ""
                                               Dim distance = ""
                                               VERAG_PROG_ALLGEMEIN.cGoogleAPI.GoogleDistance(origin, destination, duration, "", distance)

                                               ADRESSEN.lblWegstreckeVonNach.Text = "von: " & origin & vbNewLine
                                               ADRESSEN.lblWegstreckeVonNach.Text &= "nach: " & destination

                                               ADRESSEN.lblWegstrecke.Text = distance
                                               ADRESSEN.lblWegZeit.Text = duration
                                           End Sub


        SplitContainer.Panel2.Controls.Add(ALLG)
        lblBezugsnummer.Text = BezugsNr




        ALLG.Dock = DockStyle.Fill
        ADRESSEN.Dock = DockStyle.Fill
        POSITIONEN.Dock = DockStyle.Fill
        SICHERHEIT.Dock = DockStyle.Fill
        'VERSCHLUESSE.Dock = DockStyle.Fill

        '   
        '
        AddHandler POSITIONEN.RohmasseChanged, Sub(rohmasse, packstuecke)
                                                   Label5.Text = packstuecke.ToString("N0") & " Pk"
                                                   Label7.Text = rohmasse.ToString("N2") & " kg"

                                               End Sub
        AddHandler POSITIONEN.PosAnzChanged, Sub(anz)
                                                 Label3.Text = anz
                                             End Sub

        If isSTAMMREF Then
            Button1.Visible = False
            cboDakosyAction.Visible = False
            lblBezugsnummer.Text = "STAMMREFERENZ"
            lblBezugsnummer.ForeColor = Color.Red
        End If


        If sentToDakosy Then

            Try
                Me.Button1.PerformClick()
                Me.FindForm.Close()
            Catch
            End Try
        End If
        Try
            If Not VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ZOLL_DakosyZA_AVISO_Edit", "AVISO") Then
                Me.FindForm.Close()
            End If
        Catch
        End Try
    End Sub

    Sub buttonClick(sender As Object, e As EventArgs) 'HANDLED
        Dim btn As System.Windows.Forms.Button = DirectCast(sender, System.Windows.Forms.Button)

        For Each c In MyFlowLayoutPanel1.Controls
            If c.GetType.ToString = GetType(System.Windows.Forms.Button).ToString Then
                DirectCast(c, System.Windows.Forms.Button).BackColor = Drawing.Color.White
                DirectCast(c, System.Windows.Forms.Button).ForeColor = Drawing.Color.Black
            End If
        Next

        btn.BackColor = Drawing.Color.SteelBlue 'Drawing.Color.FromArgb(0, 54, 128)
        btn.ForeColor = Drawing.Color.White


        SplitContainer.Panel2.Controls.Clear()

        If btn Is btnAllgemein Then
            SplitContainer.Panel2.Controls.Add(ALLG)
        ElseIf btn Is btnAdressen Then
            SplitContainer.Panel2.Controls.Add(ADRESSEN)
        ElseIf btn Is btnSicherheit Then
            SplitContainer.Panel2.Controls.Add(SICHERHEIT)
            'ElseIf btn Is btnVerschlüsse Then
            ' SplitContainer.Panel2.Controls.Add(VERSCHLUESSE)
        ElseIf btn Is btnPositionen Then
            SplitContainer.Panel2.Controls.Add(POSITIONEN)
        End If
    End Sub




    Shared Sub loaddataFromAVISO(AVISO As cAviso, SENDUNG As cSendungen, cDy_ART As String, BezugsNr As String, ByRef cdy As cDakosyNCTSOut004, FIRMA_DY As String)
        Try

            '==> VORBLENDUNG:

            '   Dim cdy As New cDakosyNCTSOut
            cdy.ncts_ObjectName = BezugsNr
            cdy.ncts_CustomsOfficeOfDeparture = "" '"DE007701" ' Neuhaus (öSTERR:)
            frmZollanmeldung.setZollstelle(cdy.ncts_CustomsOfficeOfDeparture, AVISO)

            cdy.ncts_dyaArt = cDy_ART
            If AVISO IsNot Nothing Then
                cdy.ncts_DepartureTransportMeans_1_IdentificationNumber = AVISO.LKW_Nr
                Select Case AVISO.Transportmittelart
                    Case "LKW", "SPRINTER"
                        cdy.ncts_DepartureTransportMeans_1_TypeOfIdentification = 30
                        If FIRMA_DY <> "AMBAR" Then
                            cdy.ncts_InlandModeOfTransport = "3"
                            cdy.ncts_ModeOfTransportAtTheBorder = "3"
                        End If
                End Select

                cdy.ncts_DepartureTransportMeans_1_Nationality = AVISO.LKW_Nationalitaet
                If VERAG_PROG_ALLGEMEIN.cAllgemein.NIEDERLASSUNG = "ATILLA" Then
                    'cdy.transportm = "X"
                Else
                    'cdy.ncts_Befoerderungsmittel_KennzeichenGrenzueberschreitend = AVISO.LKW_Nr
                    ' cdy.ncts_Befoerderungsmittel_StaatszugehoerigkeitGrenzueberschreitendCode = AVISO.LKW_Nationalitaet
                End If

            End If

            'cdy.ncts_Befoerderungsmittel_ArtGrenzueberschreitung = "35"



            If VERAG_PROG_ALLGEMEIN.cAllgemein.NIEDERLASSUNG = "ATILLA" Or (VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "AMBAR" And AVISO.ImEx = "EXPORT") Then
                cdy.ncts_Security = True
                cdy.ncts_SpecificCircomstanceIndicator = "C"
                cdy.ncts_TransportCharges = "D"
                cdy.ncts_PlaceOfLoading_Country = "DE"
                'cdy.ncts_SumA_KennnummerSendung = "OHNE"

                If AVISO.Frächter_KdNr IsNot Nothing AndAlso IsNumeric(AVISO.Frächter_KdNr) AndAlso AVISO.Frächter_KdNr > 0 Then
                    Dim AD_Befoerderer As New VERAG_PROG_ALLGEMEIN.cAdressen(AVISO.Frächter_KdNr) ' Befoerderer
                    Dim KD_Befoerderer As New VERAG_PROG_ALLGEMEIN.cKunde(AVISO.Frächter_KdNr) ' Befoerderer
                    cdy.ncts_Carrier_IdentificationNumber = KD_Befoerderer.EORITIN
                    If KD_Befoerderer.EORITIN IsNot Nothing Then cdy.ncts_Carrier_SubsidiaryNumber = KD_Befoerderer.EORITIN_NL
                    'cdy.ncts_Carrier_name = (If(AD_Befoerderer.Name_1, "") & " " & If(AD_Befoerderer.Name_2, "")).trim
                    'cdy.ncts_Carrier_st = AD_Befoerderer.Straße
                    'cdy.ncts_SumA_Befoerderer_PLZ = AD_Befoerderer.PLZ
                    'cdy.ncts_SumA_Befoerderer_Ort = AD_Befoerderer.Ordnungsbegriff
                    'cdy.ncts_SumA_Befoerderer_Land = cProgramFunctions.getISO2Land(AD_Befoerderer.LandKz)
                Else
                    'cdy.ncts_SumA_Befoerderer_Name = If(AVISO.Frächter, "")
                End If
            End If



            If SENDUNG IsNot Nothing Then

                Dim HC As DAKOSY_Worker.cDakosy_NCTSOut004_HouseConsignment = Nothing
                If cdy.ncts_HOUSE_CONSIGNMENT.Count > 0 Then
                    HC = cdy.ncts_HOUSE_CONSIGNMENT(0)
                Else
                    HC = New DAKOSY_Worker.cDakosy_NCTSOut004_HouseConsignment
                    cdy.ncts_HOUSE_CONSIGNMENT.Add(HC) ' schon wieder...'nciht mehr anfügen
                End If


                Dim p As DAKOSY_Worker.cDakosy_NCTSOut004_HouseConsignment_ConsignmentItem = Nothing
                If HC.nctsWP_CONSIGNMENT_ITEM.Count > 0 Then
                    p = HC.nctsWP_CONSIGNMENT_ITEM(0)
                Else
                    p = New DAKOSY_Worker.cDakosy_NCTSOut004_HouseConsignment_ConsignmentItem
                    HC.nctsWP_CONSIGNMENT_ITEM.Add(p) ' schon wieder...'nciht mehr anfügen
                End If

                p.nctsHCCI_DescriptionOfGoods = SENDUNG.tblSnd_Warenbezeichnung
                If SENDUNG.tblSnd_Colli IsNot Nothing AndAlso IsNumeric(SENDUNG.tblSnd_Colli) Then
                    Dim pk As New DAKOSY_Worker.cDakosy_NCTSOut004_HouseConsignment_ConsignmentItem_Packaging
                    pk.nctsHCCIPK_NumberOfPackages = SENDUNG.tblSnd_Colli
                    pk.nctsHCCIPK_TypeOfPackages = "PK"
                    'pk.nctsHCCIPK_GoodsItemNumber = "OHNE" -->BEIPACK Verweis auf andere Pos-
                    p.nctsHCCI_PACKAGING.Add(pk)
                End If
                p.nctsHCCI_GrossMass = SENDUNG.tblSnd_Gewicht
                p.nctsHCCI_GoodsValue = SENDUNG.tblSnd_Warenwert
                p.nctsHCCI_CurrencyOfGoodsValue = SENDUNG.tblSnd_WarenwertWaehrung
                ' p.nctsWP_Warenbezeichnung = SENDUNG.tblSnd_Warenbezeichnung
                'If If(p.nctsWP_VorpapierTyp, "") = "" Then p.nctsWP_VorpapierTyp = "OHNE"

                If VERAG_PROG_ALLGEMEIN.cAllgemein.NIEDERLASSUNG = "ATILLA" Then
                    ' p.nctsWP_BesondereVermeke_Export = True
                End If
                'cdy.ncts_WARENPOS.Add(p)

                Select Case cdy.ncts_CustomsOfficeOfDeparture
                    Case "DE007458" 'Bad Reichenhall --> Empfänger muss tat. Empf. sein; Gest.Adresse nicht akzeptiert!!

                        If SENDUNG.tblSnd_EmpfaengerKdNr > 0 Then
                            Dim adEMPF As New VERAG_PROG_ALLGEMEIN.cAdressen(SENDUNG.tblSnd_EmpfaengerKdNr)
                            Dim kdEMPF As New VERAG_PROG_ALLGEMEIN.cKunde(SENDUNG.tblSnd_EmpfaengerKdNr)
                            cdy.ncts_Consignee_IdentificationNumber = kdEMPF.EORITIN
                            cdy.ncts_Consignee_SubsidiaryNumber = kdEMPF.EORITIN_NL
                            cdy.ncts_Consignee_Name = If(adEMPF.Name_1, "") & If(adEMPF.Name_2, "")
                            cdy.ncts_Consignee_StreetNumber = adEMPF.Straße
                            cdy.ncts_Consignee_Postcode = adEMPF.PLZ
                            cdy.ncts_Consignee_City = adEMPF.Ort
                            If adEMPF.LandKz IsNot Nothing Then cdy.ncts_Consignee_Country = cProgramFunctions.getISO2Land(adEMPF.LandKz)
                            cdy.ncts_CustomsOfficeOfDestinationDeclared = cProgramFunctions.isLeerNothing(SENDUNG.NCTS_Bestimmungszollstelle)

                        End If

                    Case Else
                        cdy.ncts_Consignee_IdentificationNumber = cProgramFunctions.isLeerNothing(SENDUNG.NCTS_Verzollungsadresse_EORI)
                        cdy.ncts_Consignee_SubsidiaryNumber = cProgramFunctions.isLeerNothing(SENDUNG.NCTS_Verzollungsadresse_EORI_NL)
                        cdy.ncts_Consignee_Name = cProgramFunctions.isLeerNothing(SENDUNG.tblSnd_NCTSVerzollungsadresse)
                        cdy.ncts_Consignee_StreetNumber = cProgramFunctions.isLeerNothing(SENDUNG.NCTS_Verzollungsadresse_Strasse)
                        cdy.ncts_Consignee_Postcode = cProgramFunctions.isLeerNothing(SENDUNG.NCTS_Verzollungsadresse_PLZ)
                        cdy.ncts_Consignee_City = cProgramFunctions.isLeerNothing(SENDUNG.NCTS_Verzollungsadresse_Ort)
                        cdy.ncts_Consignee_Country = cProgramFunctions.isLeerNothing(SENDUNG.NCTS_Verzollungsadresse_Land)
                        cdy.ncts_CustomsOfficeOfDestinationDeclared = cProgramFunctions.isLeerNothing(SENDUNG.NCTS_Bestimmungszollstelle)

                End Select


                If SENDUNG.tblSnd_AbsenderKdNr > 0 Then
                    Dim adVERSENDER As New VERAG_PROG_ALLGEMEIN.cAdressen(SENDUNG.tblSnd_AbsenderKdNr)
                    Dim kdVERSENDER As New VERAG_PROG_ALLGEMEIN.cKunde(SENDUNG.tblSnd_AbsenderKdNr)
                    cdy.ncts_Consignor_IdentificationNumber = kdVERSENDER.EORITIN
                    cdy.ncts_Consignor_SubsidiaryNumber = kdVERSENDER.EORITIN_NL
                    cdy.ncts_Consignor_Name = If(adVERSENDER.Name_1, "") & If(adVERSENDER.Name_2, "")
                    cdy.ncts_Consignor_StreetNumber = adVERSENDER.Straße
                    cdy.ncts_Consignor_Postcode = adVERSENDER.PLZ
                    cdy.ncts_Consignor_City = adVERSENDER.Ort
                    If adVERSENDER.LandKz IsNot Nothing Then cdy.ncts_Consignor_Country = cProgramFunctions.getISO2Land(adVERSENDER.LandKz)
                    '   cdy.ncts_BestimmungsstelleDienststellennummer = cProgramFunctions.isLeerNothing(SENDUNG.NCTS_Bestimmungszollstelle)

                End If

            End If


            ' NCTS= cdy
        Catch ex As Exception
            MsgBox(ex.StackTrace)
        End Try
    End Sub


    Sub setValue(ncts_OUT)
        BezugsNr = ncts_OUT.ncts_ObjectName

    End Sub


    Private Sub pnl_Paint(sender As Object, e As PaintEventArgs)

    End Sub

    Sub loadDYZollanmeldungen(Optional Status As String = "") ' + Speichern
        If DY_ANM Is Nothing Then
            DY_ANM = New cDakosy_Zollanmeldungen(ncts_OUT.ncts_dyaAnmID)
        End If
        DY_ANM.dy_ART = ALLG.NCTS_ART 'cDy_ART
        DY_ANM.dy_BezugsNr = BezugsNr
        DY_ANM.dy_AvisoId = If(AVISO Is Nothing, Nothing, AVISO.AvisoID)
        DY_ANM.dy_SendungsId = If(SENDUNG Is Nothing, Nothing, SENDUNG.tblSnd_SendungID)
        'Status?
        DY_ANM.SAVE() 'Speichern, ID wird erzeugt  

    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Me.Refresh()
        Me.Cursor = Cursors.WaitCursor
        If sentToDakosy OrElse vbYes = MsgBox("Sollen die Daten abgeschickt werden?" & vbNewLine & "Eine Änderung ist nur noch in der Dakosy Software möglich.", vbYesNoCancel) Then
            '  Dim cDyAnm As New cDakosy_Zollanmeldungen(cDy_ART, BezugsNr, AVISO.AvisoID, SENDUNG.tblSnd_SendungID)
            loadDYZollanmeldungen()

            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 = Me.FIRMA_DY
                DAKOSY_Interface_SEND.loadInClass_VersandanmeldungNCTSDE_004(ncts_OUT, Me, DY_ANM, Me.FIRMA_DY)

                If Not ncts_OUT.SAVE_ALL() Then Exit Sub

                Dim saveFile = ""
                If cDakosyNCTSOut004.generateVersandanmeldungNCTSDE_004(ncts_OUT, saveFile, cboDakosyAction._value, Application.StartupPath) Then
                    If saveFile <> "" Then
                        If cDakosyFunftions.send_Data_To_Dakosy_FTP(saveFile, BezugsNr, DY_ANM.dy_Id, Me.FIRMA_DY) 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

            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)

            Me.FindForm.Close()
        End If
        Me.Cursor = Cursors.Default
    End Sub



    Private Sub SpeichernToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SpeichernToolStripMenuItem.Click

        Me.Refresh()

        ' Dim cDyAnm As New cDakosy_Zollanmeldungen(cDy_ART, BezugsNr, If(AVISO Is Nothing, Nothing, AVISO.AvisoID), If(SENDUNG Is Nothing, Nothing, SENDUNG.tblSnd_SendungID))
        loadDYZollanmeldungen()

        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
            DAKOSY_Interface_SEND.loadInClass_VersandanmeldungNCTSDE_004(ncts_OUT, Me, DY_ANM, FIRMA_DY)


            If Not ncts_OUT.SAVE_ALL() Then
                'gespeichert
            End If


        End If
        DY_ANM.UPDATE_DATA()

    End Sub

    Private Sub NeueBezugsnummerVergebenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NeueBezugsnummerVergebenToolStripMenuItem.Click
        BezugsNr = getBezugsnr(FIRMA_DY, SENDUNG, BezugsNr, zusatz)
        lblBezugsnummer.Text = BezugsNr
    End Sub

    Private Sub AusGestllungToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AusGestllungToolStripMenuItem.Click
        Dim EXG_LRN = InputBox("Geben Sie die Gestellungs-LRN ein (ohne aufsteigende Zahlen):")
        If EXG_LRN.Length < 13 Then MsgBox("LRN zu kurz!") : Exit Sub


        Dim dt = (New VERAG_PROG_ALLGEMEIN.SQL).loadDgvBySql("SELECT TOP (500) [exg_Id]  FROM [tblDakosy_EXG]  where exg_ObjectName	 LIKE '" & EXG_LRN & "%'   order by exg_ObjectName desc", "FMZOLL")
        If dt IsNot Nothing Then
            Dim BezugsNr = ""
            Dim NCTS_OUT = usrCntlATLAS_NCTS004.genNCTSfromStammref(Me, FIRMA_DY, AVISO, SENDUNG, BezugsNr)
            NCTS_OUT.ncts_HOUSE_CONSIGNMENT.Clear()
            NCTS_OUT.DELETE_HouseConsignment()

            For Each row In dt.Rows
                Dim EXG As New cDakosyEXG(row("exg_Id"))
                If EXG IsNot Nothing Then
                    DAKOSY_Worker.cDakosyNCTSOut004.fillNCTS_WithEXG(NCTS_OUT, EXG)
                End If
            Next
            If NCTS_OUT.SAVE_ALL() Then

                '--------------------------------------------------------------------------------
                '----SENDEN----------------------------------------------------------------------
                '--------------------------------------------------------------------------------

                Dim EXG_TMP As New cDakosyEXG(dt(0)("exg_Id"))

                Dim DY_ANM = New cDakosy_Zollanmeldungen(NCTS_OUT.ncts_dyaAnmID)
                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_TMP.exg_firma
                    NCTS_OUT.ncts_niederlassung = EXG_TMP.exg_niederlassung
                    '  DAKOSY_Interface_SEND.loadInClass_VersandanmeldungNCTSDE_004(NCTS_OUT, Me, DY_ANM, Me.FIRMA_DY)
                    DAKOSY_Interface_SEND.loadInClass_VersandanmeldungNCTSDE_004(NCTS_OUT, Me, DY_ANM, Me.FIRMA_DY)


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

                        If vbYes = MsgBox("Erfolgreich erstellt! Soll(en) die Ausfuhr-Gestellung(en) abgeschickt werden?", vbYesNoCancel) Then

                            Dim saveFile = ""
                            If cDakosyNCTSOut004.generateVersandanmeldungNCTSDE_004(NCTS_OUT, saveFile, cboDakosyAction._value, Application.StartupPath) Then
                                If saveFile <> "" Then
                                    If cDakosyFunftions.send_Data_To_Dakosy_FTP(saveFile, BezugsNr, DY_ANM.dy_Id, Me.FIRMA_DY) 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



                            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
                '--------------------------------------------------------------------------------
                '--------------------------------------------------------------------------------

            End If
        End If


        'ncts_OUT.DELETE_HouseConsignment()



        'Dim cDakosyEXG As List(Of cDakosyEXG)
        'For Each POS In cDakosyEXG

        'Next
        'ncts_OUT.ncts_HOUSE_CONSIGNMENT.Add()

    End Sub


    Shared Function genNCTSfromStammref(CONTROL As Control, FIRMA_DY As String, AVISO As cAviso, SENDUNG As cSendungen, ByRef BezugsNr As String) As DAKOSY_Worker.cDakosyNCTSOut004



        Dim NCTS_OUT As New DAKOSY_Worker.cDakosyNCTSOut004

        Dim f As New frmDakosyStammreferenz("DE", "NCTS", False,,, FIRMA_DY)
        Dim Stammreferenz = Nothing
        f.selectForEXG = True
        If f.ShowDialog(CONTROL.FindForm) Then
            Stammreferenz = f.STAMMREF
            '  sentToDakosy = f.sentToDakosy
        End If
        Try

            If BezugsNr = "" Then BezugsNr = usrCntlATLAS_NCTS004.getBezugsnr(FIRMA_DY, SENDUNG, BezugsNr, "")

        Catch ex As Exception
            MsgBox(ex.Message & ex.StackTrace)
        End Try
        NCTS_OUT = cDakosyNCTSOut004.LOADByBezugsNr(BezugsNr, True)
        If True Then 'NCTS_OUT Is Nothing Then

            Dim cDy_ART = "T2"
            Select Case (SENDUNG.tblSnd_Abfertigungsart_ID)
                Case 5 : cDy_ART = "T1"
                Case Else : cDy_ART = "T2"
            End Select


            Dim DY_ANM As New cDakosy_Zollanmeldungen
            'If DY_ANM Is Nothing Then
            '    DY_ANM = New cDakosy_Zollanmeldungen(NCTS_OUT.ncts_dyaAnmID)
            'End If
            DY_ANM.dy_ART = cDy_ART 'cDy_ART
            DY_ANM.dy_BezugsNr = BezugsNr
            DY_ANM.dy_AvisoId = If(AVISO Is Nothing, Nothing, AVISO.AvisoID)
            DY_ANM.dy_SendungsId = If(SENDUNG Is Nothing, Nothing, SENDUNG.tblSnd_SendungID)
            'Status?
            If DY_ANM.SAVE() Then 'Speichern, ID wird erzeugt  


                'Falls zur BezugsNr schon ein Eintrag in der DB vorhanden ist
                NCTS_OUT = cDakosyNCTSOut004.LOADByAnmIDFull(f.STAMMREF_DYID, True) ' DyID --> Falls bei der Stammreferenz eine Vorlage hinterlegt ist!
                If NCTS_OUT Is Nothing Then
                    NCTS_OUT = New cDakosyNCTSOut004
                End If

                NCTS_OUT.ncts_Id = -1
                NCTS_OUT.ncts_dyaAnmID = DY_ANM.dy_Id

                usrCntlATLAS_NCTS004.loaddataFromAVISO(AVISO, SENDUNG, cDy_ART, BezugsNr, NCTS_OUT, FIRMA_DY)
                'cboStammreferenz.changeItem(Stammreferenz)

                If NCTS_OUT.SAVE() Then


                    Return NCTS_OUT
                End If


            End If


        End If
        Return Nothing
    End Function
End Class

