Imports DAKOSY_Worker
Imports Tamir
Imports Tamir.SharpSsh
Imports VERAG_PROG_ALLGEMEIN

Public Class usrCntlATLAS_AES

    Property ALLG As usrCntlATLAS_AES_Allg
    Property ADRESSEN As usrCntlATLAS_AES_Adressen
    Property POSITIONEN As usrCntlATLAS_AES_Positionen

    Property PASS_VEREDELUNG As usrCntlATLAS_AES_PassiveVeredelung


    Property Jahr2Stellig As Integer
    Property zusatz As String
    Property BezugsNr As String = ""

    Dim sentToDakosy = False

    Property AVISO As VERAG_PROG_ALLGEMEIN.cAviso
    Property SENDUNG As VERAG_PROG_ALLGEMEIN.cSendungen


    Dim cDy_ART As String = "EX"

    Dim AES As cDakosyAES = Nothing
    Dim DY_ANM As cDakosy_Zollanmeldungen = Nothing

    Dim FIRMA_DY = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA

    Property isSTAMMREF As Boolean = False
    Property STAMMREF As String = ""

    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 = "", Optional FIRMA_DY As String = "")
        ' Dieser Aufruf ist für den Designer erforderlich.
        InitializeComponent()

        '    Me.cDy_ART = If(ART = "NCTS", "T2", ART)

        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.AES = DAKOSY_Worker.cDakosyAES.LOADByAnmIDFull(DY_ANM.dy_Id, True)
        End If

        If FIRMA_DY <> "" Then Me.FIRMA_DY = FIRMA_DY

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



    Sub New(AES As cDakosyAES, Optional isSTAMMREF As Boolean = False, Optional STAMMREF As String = "")
        InitializeComponent()
        Me.AES = AES
        DY_ANM = New cDakosy_Zollanmeldungen(AES.aes_dyaAnmID)

        Me.isSTAMMREF = isSTAMMREF
        Me.STAMMREF = STAMMREF

        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(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 <> "", ART, "EX")

        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.isSTAMMREF = isSTAMMREF
        Me.STAMMREF = STAMMREF

        Me.Jahr2Stellig = Jahr2Stellig
        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 <> "", ART, "EX")
        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


    Function getBezugsnr(ByRef BezugsNr)
        BezugsNr = SENDUNG.FilialenNr & "/" & SENDUNG.AbfertigungsNr '& If(zusatz <> "", "/" & zusatz, "") 'zusatz ' & "/" & Jahr2Stellig
        zusatz = "A"
        'Soloagne bis die Bezugsnummer noch nicht existiert
        While DAKOSY_Worker.cDakosy_Zollanmeldungen.ExistsBezugsNr(BezugsNr) 'IsNot Nothing
            BezugsNr = SENDUNG.FilialenNr & "/" & SENDUNG.AbfertigungsNr & "/" & 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
        lblBezugsnummer.Text = BezugsNr
        Return BezugsNr
    End Function


    Private Sub usrCntlATLAS_Load(sender As Object, e As EventArgs) Handles Me.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)

        ADRESSEN = New usrCntlATLAS_AES_Adressen(AES) ')
        ALLG = New usrCntlATLAS_AES_Allg(AES)
        POSITIONEN = New usrCntlATLAS_AES_Positionen(AES)
        PASS_VEREDELUNG = New usrCntlATLAS_AES_PassiveVeredelung(AES)

        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 "AMBAR" : txtDyMandant.Text = "ATIL" : txtDyNiederlassung.Text = "AMBWO"
            Case "ATILLA" : txtDyMandant.Text = "ATIL" : txtDyNiederlassung.Text = "SUW"
            Case "UNISPED" : txtDyMandant.Text = "UNAT" : txtDyNiederlassung.Text = "ATSPED"
            Case "IMEX" : txtDyMandant.Text = "IMEX" : txtDyNiederlassung.Text = "IME"
        End Select

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


        If isSTAMMREF Then
            Me.BezugsNr = "STAMMREFERENZ"
            If AES Is Nothing Then AES = New cDakosyAES
            AES.aes_ObjectName = BezugsNr
            Button1.Enabled = False
            cboDakosyAction.Enabled = False
        Else
            If AES Is Nothing Then ' NEUE ZOLLANMELDUNG

                Dim kdnr As Object = Nothing
                If SENDUNG IsNot Nothing AndAlso SENDUNG.tblSnd_EmpfaengerKdNr > 0 Then
                    kdnr = SENDUNG.tblSnd_EmpfaengerKdNr
                End If
                Dim f As New frmDakosyStammreferenz("DE", "AES", False, kdnr,, FIRMA_DY)
                Dim Stammreferenz = Nothing
                If f.ShowDialog(Me) Then
                    Stammreferenz = f.STAMMREF
                    sentToDakosy = f.sentToDakosy
                End If

                Try

                    BezugsNr = getBezugsnr(BezugsNr)

                Catch ex As Exception
                    MsgBox(ex.StackTrace)
                End Try


                'Wenn bei der Stammref eine andere NL ausgewählt wurde, wird dies hier korrigiert (zb. IMEX / GLOBAL!):
                If f.nl <> txtDyNiederlassung.Text Then
                    txtDyNiederlassung.Text = f.nl
                    cboStammreferenz.fillWithSQL("SELECT [dySr_Stammreferenz],[dySr_Bezeichnung] FROM [tblDakosy_Stammreferenzen] WHERE dySr_Land='DE' AND dySr_Verfahren='AES'  and dySr_dy_Mandant='" & txtDyMandant.Text & "'  and dySr_dy_Niederlassung='" & txtDyNiederlassung.Text & "'  and dySr_visible=1", False, "FMZOLL", True)
                End If


                AES = cDakosyAES.LOADByBezugsNr(BezugsNr, True)
                If AES Is Nothing Then
                    'Falls zur BezugsNr schon ein Eintrag in der DB vorhanden ist
                    AES = New cDakosyAES()
                    loaddataFromAVISO(AES)
                End If
                cboStammreferenz.changeItem(Stammreferenz)

            Else
                ' AES is  ot nothing
                Me.BezugsNr = AES.aes_ObjectName
                'MsgBox(AES.ncts_Hauptverpflichteter_Name)

            End If
        End If



        If If(AES.aes_firma, "") = "" Then If FIRMA_DY <> "" Then AES.aes_firma = FIRMA_DY
        '  If AES.ncts_ArtAnmeldung Is Nothing Or AES.ncts_ArtAnmeldung = "" Then
        'AES.ncts_ArtAnmeldung = "T2"
        'End If


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

        ' MsgBox(AES.ncts_Hauptverpflichteter_Name)
        'Werte setzen:
        ADRESSEN.setValues(AES)
        ALLG.setValues(AES)
        POSITIONEN.setValues(AES)
        PASS_VEREDELUNG.setValues(AES)

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



        'If ALLG.txtRechnungspreis.Text = "" Then ALLG.txtRechnungspreis.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

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




        ALLG.Dock = DockStyle.Fill
        ADRESSEN.Dock = DockStyle.Fill
        POSITIONEN.Dock = DockStyle.Fill
        PASS_VEREDELUNG.Dock = DockStyle.Fill
        '   
        '
        AddHandler POSITIONEN.RohmasseChanged, Sub(rohmasse)
                                                   Label5.Text = rohmasse.ToString("N2") & " kg"
                                               End Sub
        AddHandler POSITIONEN.PosAnzChanged, Sub(anz)
                                                 Label3.Text = anz
                                             End Sub

        If sentToDakosy Then
            Try
                Me.Button1.PerformClick()
                Me.FindForm.Close()
            Catch
            End Try

        End If
    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 btnPositionen Then
            SplitContainer.Panel2.Controls.Add(POSITIONEN)
        ElseIf btn Is btnAktiveVeredelung Then
            SplitContainer.Panel2.Controls.Add(PASS_VEREDELUNG)
        End If
    End Sub


    Sub loaddataFromAVISO(ByRef cdy As cDakosyAES)
        Try

            '==> VORBLENDUNG:

            '   Dim cdy As New cDakosyAES
            cdy.aes_ObjectName = BezugsNr
            '    cdy.aes_AbgangsDienststellennummer = "DE004102"
            '  cdy.aes_VersendungsLandCode = "DE"
            cdy.aes_dyaArt = cDy_ART
            If AVISO IsNot Nothing Then
                '     cdy.aes_Befoerderungsmittel_KennzeichenAbgang = AVISO.LKW_Nr
                '  cdy.aes_Befoerderungsmittel_KennzeichenGrenzueberschreitend = "X"

            End If



            Dim AD As New VERAG_PROG_ALLGEMEIN.cAdressen(712255) ' VERAG Neuhaus
            Dim KD As New VERAG_PROG_ALLGEMEIN.cKunde(712255) ' VERAG Neuhaus


            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

            Else
                ' cdy.aes_SumA_Befoerderer_Name = If(AVISO.Frächter, "")
            End If

            If False Then

                If SENDUNG IsNot Nothing Then
                    Dim p As New DAKOSY_Worker.cDakosy_AES_Warenposition
                    p.aesWP_Warenbezeichnung = SENDUNG.tblSnd_Warenbezeichnung
                    If SENDUNG.tblSnd_Colli IsNot Nothing AndAlso IsNumeric(SENDUNG.tblSnd_Colli) Then
                        Dim pk As New DAKOSY_Worker.cDakosy_AES_WarenpositionPackstuecke
                        pk.aesWpPk_PackstueckeAnzahl = SENDUNG.tblSnd_Colli
                        pk.aesWpPk_Verpackungsart = "PK"
                        p.aesWP_PACKSTUECKE.Add(pk)
                    End If
                    p.aesWP_Rohmasse = SENDUNG.tblSnd_Gewicht
                    p.aesWP_Warenbezeichnung = SENDUNG.tblSnd_Warenbezeichnung
                    cdy.aes_WARENPOS.Add(p)
                End If

            End If

            cdy.aes_BefoerderungsmittelAbgangKennzeichen = AVISO.LKW_Nr
            cdy.aes_BefoerderungsmittelAbgangStaatCode = AVISO.LKW_Nationalitaet
            cdy.aes_Ausfuhrland = "DE"

            cdy.aes_VerkehrszweigGrenze = "3"
            cdy.aes_VerkehrszweigInland = "3"
            cdy.aes_BefoerderungsmittelAbgangArtCode = "33"
            cdy.aes_BefoerderungsmittelGrenzeArtCode = "33"
            cdy.aes_BefoerderungsmittelGrenzeKennzeichen = AVISO.LKW_Nr
            cdy.aes_BefoerderungsmittelGrenzeStaatCode = AVISO.LKW_Nationalitaet

            cdy.aes_Rechnungwaehrung = "EUR"

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


    Sub setValue(AES)
        BezugsNr = AES.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(AES.aes_dyaAnmID)
        End If
        DY_ANM.dy_ART = ALLG.AES_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()

        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 AES IsNot Nothing Then
                'Dim cDY As New cDakosyAES(cDyAnm.dy_Id, cDyAnm.dy_Erstellung_SB)
                AES.aes_dyaAnmID = DY_ANM.dy_Id
                AES.aes_Erstellung_SB = DY_ANM.dy_Erstellung_SB
                AES.aes_LetzteBearbeitung = Now
                AES.aes_LetzteBearbeitung_SB = DY_ANM.dy_LetzteBearbeitung_SB
                DAKOSY_Interface_SEND.loadInClass_VersandanmeldungAES(AES, Me, DY_ANM)

                Select Case FIRMA_DY
                    Case "AMBAR"
                        AES.aes_BezugsnummerVorblendung = "AA_EXPORT_AMBAR_"
                End Select

                If Not AES.SAVE_ALL() Then Exit Sub

                Dim saveFile = ""
                If DAKOSY_Interface_SEND.generateVersandanmeldungAES(AES, saveFile, cboDakosyAction._value) Then
                    If saveFile <> "" Then
                        If Not cDakosyFunftions.send_Data_To_Dakosy_FTP(saveFile, BezugsNr, DY_ANM.dy_Id, FIRMA_DY) Then
                            MsgBox("Sendefehler!")
                        Else
                            If SENDUNG IsNot Nothing Then SENDUNG.SET_VGMA() ' MA Vorgeschrieben in Sendung setzen.
                        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
    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 AES IsNot Nothing Then
            'Dim cDY As New cDakosyAES(cDyAnm.dy_Id, cDyAnm.dy_Erstellung_SB)
            AES.aes_dyaAnmID = DY_ANM.dy_Id
            AES.aes_Erstellung_SB = DY_ANM.dy_Erstellung_SB
            AES.aes_LetzteBearbeitung = Now
            AES.aes_LetzteBearbeitung_SB = DY_ANM.dy_LetzteBearbeitung_SB
            DAKOSY_Interface_SEND.loadInClass_VersandanmeldungAES(AES, Me, DY_ANM)

            If Not AES.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(BezugsNr)
    End Sub

End Class

