
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel
Public Class usrCntlOfferte

    Dim FUNC As New cProgramFunctions
    Public kdNr As Integer = -1
    Dim SQL As New SQL
    Public KD_ERW As VERAG_PROG_ALLGEMEIN.cKundenErweitert
    Public Event OfferteChanged()


    Dim OFFERTEBind As cEasyBinding
    Dim table
    Public BIND_DB = "FMZOLL"
    Dim tmpDataTable As New System.Data.DataTable
    Dim currentOffert As VERAG_PROG_ALLGEMEIN.cOfferte
    Dim currentOffertArchiv As VERAG_PROG_ALLGEMEIN.cOfferteArchiv
    Dim edit As Boolean
    Dim DGVHasChaged = False
    Dim isStandard
    Dim loaded = False
    Dim isNew = False
    Dim addLeistung = False
    Dim ofID As Integer
    Dim isVerag360 As Boolean = False

    Sub New()
        InitializeComponent()
    End Sub

    Sub New(kdNr)
        InitializeComponent()
        Me.kdNr = kdNr
    End Sub


    Public Sub init(kdNr As Integer, Optional _isVerag360 As Boolean = False)
        Me.kdNr = kdNr
        initDGVOfferte()
        edit = False
        handleEditMode(edit)
        KD_ERW = New VERAG_PROG_ALLGEMEIN.cKundenErweitert(kdNr)
        cbxAutoFakturierung.Checked = KD_ERW.AutoFakturierung
        isVerag360 = _isVerag360

    End Sub
    Sub initDGVOfferte()
        dgvOfferteDetails.Columns.Clear()

        Dim where As String = ""
        If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("VERIMEX", "AVISO") Then
            where = "  AND Offerten.OffertenNr IN (5,6,18,24,32,33,34,37,40,7,8,9,12,13) "
        End If


        With dgvOfferteNew
            .DataSource = SQL.loadDgvBySql("SELECT Offerten.OffertenNr, cast(Offerten.OffertenNr as varchar(3)) + ' - ' + Offertenstamm.OffertenBez as OffertenBez ,Offerten.Besonderheiten FROM Offerten inner join Offertenstamm on [Offerten].OffertenNr=Offertenstamm.OffertenNr WHERE Offerten.KundenNr='" & kdNr & "'  " & where & " ORDER BY Offerten.OffertenNr ", "FMZOLL")
            .Columns("OffertenNr").Visible = False
            .Columns("Besonderheiten").Visible = False
            ' .Columns("OffertenNr").HeaderText = "Nr"
            .Columns("OffertenBez").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
            .Columns("OffertenBez").HeaderText = "Bezeichnung"
        End With

    End Sub


    Sub initDGVOfferteDetails(OffertenNr)
        loaded = False
        Try

            With dgvOfferteDetails
                '.Columns.Clear()
                Dim SQLAddFields As String = ""
                Dim addedFields As Boolean = addFieldsOffert(OffertenNr, SQLAddFields)

                Try
                    OFFERTEBind = New cEasyBinding(BIND_DB)
                    OFFERTEBind.initBinding(" SELECT   [LeistungsNr],[LeistungsBez],[BerechnungsartNr],[Preis],[Anzahl],[BGebLeistungsNr],[BGebProzent],[BGebMinBetrag],BerechnungsartPosInkludiert,[Eingegeben am],[Geändert am],[Sachbearbeiter],[PreisänderungProzent],[PreisAlt],[Preisänderung],KundenNr,OffertenNr" & SQLAddFields &
                                                  " FROM [Offertenpositionen] " &
                                                 " WHERE KundenNr='" & kdNr & "' and OffertenNr='" & OffertenNr & "' ORDER BY LeistungsNr, Preis DESC", "Offertenpositionen")
                    For Each c As DataColumn In OFFERTEBind.bindingdataTable.Columns
                        If c.ColumnName = "SSMA_TimeStamp" Then
                            OFFERTEBind.bindingdataTable.Columns.Remove(c)
                            Exit For
                        End If
                    Next
                    ' KASSENBind.initBinding("SELECT *  FROM " & table & "", table)

                    .DataSource = OFFERTEBind.bindingdataTable
                    ' DataGridView.AutoSize = True
                    '  OFFERTEBind.bindingdataTable.PrimaryKey = {OFFERTEBind.bindingdataTable.Columns("KundenNr"), OFFERTEBind.bindingdataTable.Columns("LeistungsNr"), OFFERTEBind.bindingdataTable.Columns("LeistungsNr"), OFFERTEBind.bindingdataTable.Columns("LeistungsBez")}

                Catch ex As Exception
                    VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
                End Try


                '.DataSource = SQL.loadDgvBySql(" SELECT [LeistungsNr],[LeistungsBez],[BerechnungsartNr],[Preis],[Anzahl],[BGebLeistungsNr],[BGebProzent],[BGebMinBetrag],[Eingegeben am],[Geändert am],[Sachbearbeiter],[PreisänderungProzent],[PreisAlt],[Preisänderung] " &
                '                                  " FROM [Offertenpositionen] " &
                '                               " WHERE KundenNr='" & kdNr & "' and OffertenNr='" & OffertenNr & "' ORDER BY LeistungsNr ", "FMZOLL")

                FUNC.dgvCellToCbo(dgvOfferteDetails, 2, "Berechnungsart", "BerechnungsartNr", " SELECT [BerechnungsartNr], CAST(BerechnungsartNr as varchar(3))  + ' - ' + [BerechnungsartBez] as [BerechnungsartBez]  FROM [Berechnungsart] ORDER BY BerechnungsartNr ", "FMZOLL", 150)
                FUNC.dgvCellToCbo(dgvOfferteDetails, 5, "BGebLeist.", "BGebLeistungsNr", " SELECT [LeistungsNr], CAST(LeistungsNr as varchar(3)) + ' - ' + [LeistungsBez] as LeistungsBez FROM [Leistungen] ORDER BY [LeistungsNr] ", "FMZOLL", 250)

                checkPerimissionsDGVDetails()

                .Columns("OffertenNr").Visible = False
                .Columns("KundenNr").Visible = False
                .Columns("LeistungsNr").Width = 30
                .Columns("LeistungsNr").HeaderText = "Nr"
                .Columns("LeistungsBez").MinimumWidth = 200
                .Columns("LeistungsBez").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
                .Columns("LeistungsBez").HeaderText = "Leistung"
                .Columns("BerechnungsartNr").MinimumWidth = 150
                .Columns("Preis").Width = 60
                .Columns("Preis").DefaultCellStyle.Format = "N2"
                .Columns("Preis").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
                .Columns("Anzahl").Width = 50
                .Columns("Anzahl").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter

                .Columns("BerechnungsartPosInkludiert").HeaderText = "Pos.inkl."
                .Columns("BerechnungsartPosInkludiert").Width = 45

                .Columns("BGebLeistungsNr").Width = 60
                .Columns("BGebProzent").Width = 55
                .Columns("BGebProzent").HeaderText = "BGeb %"
                .Columns("BGebProzent").DefaultCellStyle.Format = "P"
                .Columns("BGebProzent").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
                .Columns("BGebMinBetrag").Width = 60
                .Columns("BGebMinBetrag").HeaderText = "BGebMinBetr."
                .Columns("BGebMinBetrag").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
                .Columns("Eingegeben am").Visible = VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("OFFERTE_DATIEREN", "SDL")
                ' .Columns("Sachbearbeiter").Visible = False
                '  .Columns("Geändert am").Visible = False
                .Columns("PreisänderungProzent").Width = 70
                .Columns("PreisänderungProzent").HeaderText = "Preisänd. %"
                .Columns("PreisänderungProzent").DefaultCellStyle.Format = "p"
                .Columns("PreisänderungProzent").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
                .Columns("PreisAlt").Width = 60
                .Columns("PreisAlt").DefaultCellStyle.Format = "N2"
                .Columns("PreisAlt").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
                .Columns("Preisänderung").Width = 60
                .Columns("Preisänderung").HeaderText = "PreisNeu"
                .Columns("Preisänderung").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
                '  .Columns("OffertenBez").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
                '  .Columns("OffertenBez").HeaderText = "Bezeichnung"

                .Columns("PreisänderungProzent").Visible = False
                .Columns("PreisAlt").Visible = False
                .Columns("Preisänderung").Visible = False


                If addedFields AndAlso .Columns.Contains("Land") Then
                    .Columns("Land").Width = 70
                    .Columns("Land").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter
                    .Columns("VZ").Width = 40
                    .Columns("VZ").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter
                    .Columns("RMC").Width = 40
                    .Columns("RMC").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter
                    .Columns("Fremd").Width = 40
                    .Columns("Fremd").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter
                    .Columns("Staffelpreis").Width = 80
                    .Columns("Staffelpreis").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter
                End If

                loaded = True
            End With

            DGVHasChaged = False
        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try

    End Sub



    Private Sub dgvOfferteDetails_SelectionChanged(sender As Object, e As EventArgs) Handles dgvOfferteNew.SelectionChanged
        Try


            cbxArchivierteOffertenAnzeigen.Checked = False
            cbxArchivierteOfferten.Items.Clear()
            checkPermissions()
            If dgvOfferteNew.RowCount > 0 Then
                If dgvOfferteNew.SelectedRows.Count > 0 Then
                    rtbBesonderheiten.Text = cSqlDb.checkNullStr(dgvOfferteNew.SelectedRows(0).Cells("Besonderheiten").Value)
                Else
                    rtbBesonderheiten.Text = cSqlDb.checkNullStr(dgvOfferteNew.Rows(0).Cells("Besonderheiten").Value)
                End If
            Else
                btnStandardLaden.Visible = False
                cbxArchivierteOfferten.Enabled = False
                rtbBesonderheiten.Text = ""
            End If

            btnSaveBes.Visible = False

            If dgvOfferteNew.SelectedRows.Count > 0 Then
                initDGVOfferteDetails(dgvOfferteNew.SelectedRows(0).Cells("OffertenNr").Value)
            End If
        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try
    End Sub




    Private Sub usrCntlOfferte_Load(sender As Object, e As EventArgs) Handles Me.Load
        init(kdNr, isVerag360)

        '    sbLeistungAdd.initSearchBox(Me.FindForm, " [Code] ,[LeistungsNr],[LeistungsBez]  FROM [Leistungen]", {"LeistungsNr", "LeistungsBez"}, "  ", "LeistungsNr", "LeistungsNr",  , "FMZOLL", , 400, 200)
        cboLeistungenAdd.fillWithSQL("SELECT [LeistungsNr],Replace([LeistungsBez],'P.P./', '')  FROM [Leistungen] ORDER BY LeistungsNr", , "FMZOLL", True)

        checkPermissions()


        'AddHandler OFFERTEBind.bindingdataTable.ColumnChanged, Sub(ev As EventArgs, change As DataColumnChangeEventArgs)
        '                                                           '   If change.Column.ColumnName=""
        '                                                           'Dim r_index = dgvOfferteDetails.Rows.IndexOf(change.Row)
        '                                                           'Dim c_index = dgvOfferteDetails.Columns.IndexOf(change.Column.ColumnName)
        '                                                           'dgvOfferteDetails.Rows(change.Row)

        '                                                       End Sub

    End Sub

    Private Sub btnCreateOffert_Click(sender As Object, e As EventArgs) Handles btnCreateOffert.Click
        Dim f As New frmOffertenBearbeiten(kdNr)
        If f.ShowDialog() = DialogResult.OK Then
            init(kdNr, isVerag360) '    initDGVOfferte()
            RaiseEvent OfferteChanged()
            dgvOfferteNew.Enabled = True
            isNew = True
            isStandard = False
            DGVHasChaged = True
        End If
    End Sub

    Private Sub btnAddLeistung_Click(sender As Object, e As EventArgs) Handles btnAddLeistung.Click

        Try

            Dim SQLsrt = " SELECT (select case when COUNT(*)>0 then 1 else 0 end FROM Offertenpositionen where  KundenNr=" & kdNr & " and  [Offertenpositionen].[OffertenNr]=[Offertenstamm].[OffertenNr]) as vorhanden," &
                    " [Offertenstamm].[OffertenNr],[OffertenBez] FROM Offertenstamm  "

            For Each r As DataRow In SQL.loadDgvBySql(SQLsrt, "FMZOLL").Rows
                If Not CBool(r("vorhanden")) Then
                    Dim i As New ToolStripMenuItem
                    i.Text = r("OffertenNr") & " - " & r("OffertenBez")
                    i.Name = "tsmiOffertNr_" & r("OffertenNr")
                    i.Tag = r("OffertenNr")
                    cntxtAddSdl.Items.Add(i)
                    '     If s.Sperre <> 0 Then i.Enabled = False : i.Text = i.Text & " (gesperrt)"
                    AddHandler i.Click, AddressOf AddOffert_Click
                End If
            Next



            btnAddLeistung.ContextMenuStrip = cntxtAddSdl
            ' cntxtAddSdl
            Dim ptLowerLeft As New System.Drawing.Point(sender.width, sender.Height)
            ptLowerLeft = sender.PointToScreen(ptLowerLeft)
            ptLowerLeft.X -= sender.width
            cntxtAddSdl.Show(ptLowerLeft)

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try
    End Sub

    Private Sub AddOffert_Click(sender As Object, e As EventArgs) Handles DToolStripMenuItem.Click
        If sender.name.contains("tsmiOffertNr_") Then
            ' MsgBox(sender.name.ToString.Replace("tsmiSDLNr_", ""))
            Dim OffertenNr As String = sender.tag


        End If

    End Sub


    Private Sub btnHinzufuegen_Click_1(sender As Object, e As EventArgs) Handles btnHinzufuegen.Click

        Try


            If edit = False Then
                MsgBox("Bitte vorher in den Editiermodus wechseln")
                Exit Sub
            End If
            lblLeistunAddErr.Visible = False
            lblLeistunAddErr2.Visible = False
            Label3.Visible = False

            If dgvOfferteNew.SelectedRows.Count <> 1 Then
                Label3.Visible = True
            End If
            'Fehlerprüfung:
            '-------
            If cboLeistungenAdd._value = "" Then lblLeistunAddErr.Visible = True : Exit Sub
            If LeistungsBezexists(cboLeistungenAdd._value, MyTextBox1.Text, dgvOfferteNew.SelectedRows(0).Cells("OffertenNr").Value) Then lblLeistunAddErr2.Visible = True : Exit Sub
            '-------

            Dim l As New VERAG_PROG_ALLGEMEIN.cLeistungen(cboLeistungenAdd._value)
            Dim o As New VERAG_PROG_ALLGEMEIN.cOffertPosition
            o.KundenNr = kdNr
            o.LeistungsNr = l.LeistungsNr
            o.LeistungsBez = MyTextBox1.Text
            o.OffertenNr = dgvOfferteNew.SelectedRows(0).Cells("OffertenNr").Value
            'o.Preis=l.preis
            o.BerechnungsartNr = l.BerechnungsartNr
            'o.Anzahl = l.m
            'o.BGebLeistungsNr = l.BGebUStV
            'o.BGebProzent = l.XXXXXXXXXX
            'o.BGebMinBetrag = l.XXXXXXXXXX
            o.Eingegeben_am = Now
            'o.Geändert_am = l.XXXXXXXXXX
            o.Sachbearbeiter = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME
            'o.Preisänderung = l.Preissperre
            'o.PreisänderungProzent = l.XXXXXXXXXX
            'o.PreisAlt = l.XXXXXXXXXX
            If o.INSERT() Then
                cboLeistungenAdd.changeItem("")
                initDGVOfferteDetails(o.OffertenNr)
                addLeistung = True
            End If

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try
    End Sub

    Function LeistungsBezexists(LeistungsNr, LeistungsBez, OffertenNr)
        Return (SQL.getValueTxtBySql("SELECT COUNT(*) From Offertenpositionen WHERE LeistungsNr='" & LeistungsNr & "' AND LeistungsBez='" & LeistungsBez & "' AND OffertenNr='" & OffertenNr & "' AND KundenNr='" & kdNr & "'", "FMZOLL") > 0)
    End Function

    Private Sub cboLeistungenAdd_KeyDown(sender As Object, e As KeyEventArgs) Handles cboLeistungenAdd.KeyDown, MyTextBox1.KeyDown
        If e.KeyCode = Keys.Return Then
            btnHinzufuegen.PerformClick()
        End If
    End Sub

    Private Sub cboLeistungenAdd_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboLeistungenAdd.SelectedIndexChanged
        If cboLeistungenAdd._value <> "" Then
            MyTextBox1.Text = cboLeistungenAdd.Text.ToString.Replace(cboLeistungenAdd._value & " - ", "").Trim()
        Else
            MyTextBox1.Text = ""
        End If

    End Sub

    Private Sub dgvOfferteDetails_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles dgvOfferteDetails.CellValueChanged
        Try

            If loaded = True Then
                dgvOfferteDetails.Rows(e.RowIndex).Cells("Sachbearbeiter").Value = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME
                dgvOfferteDetails.Rows(e.RowIndex).Cells("Geändert am").Value = Now
                DGVHasChaged = True
                'saveCurrentOffert()
                If isNew Then
                    currentOffert.Art = "Neuanlage"
                Else
                    currentOffert.Art = "Geändert"
                End If
                currentOffert.SAVE()

            End If
        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try

    End Sub

    Private Sub btnDeleteOfferte_Click(sender As Object, e As EventArgs) Handles btnDeleteOfferte.Click
        Try

            If dgvOfferteNew.SelectedRows.Count = 1 Then
                If vbYes = MsgBox("Möchten Sie das Offert '" & dgvOfferteNew.SelectedRows(0).Cells("OffertenBez").Value & "' wirklich löschen", vbYesNoCancel) Then
                    saveCurrentOffert()
                    currentOffert.Art = "Offert gelöscht"
                    currentOffert.SAVE()
                    OfferteArchivieren()
                    If SQL.doSQL("DELETE FROM Offerten where [KundenNr]='" & kdNr & "' AND [OffertenNr]='" & dgvOfferteNew.SelectedRows(0).Cells("OffertenNr").Value & "' ", "FMZOLL") Then
                        initDGVOfferte()
                        RaiseEvent OfferteChanged()
                    End If
                End If
            End If

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try
    End Sub

    Private Sub btnOfferteSpeichern_Click(sender As Object, e As EventArgs) Handles btnOfferteSpeichern.Click
        Try

            KD_ERW.AutoFakturierung = cbxAutoFakturierung.Checked
            KD_ERW.SAVE()

            checkPerimissionsDGVDetails()
            edit = False
            handleEditMode(edit)
            saveToArchive()

            OFFERTEBind.updateBinding()
            RaiseEvent OfferteChanged()
            DGVHasChaged = False

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try

    End Sub

    Private Sub btnOffertbearbeiten_Click(sender As Object, e As EventArgs) Handles btnOffertbearbeiten.Click

        edit = True
        handleEditMode(edit)
        checkPerimissionsDGVDetails()
        saveCurrentOffert()

    End Sub

    Private Sub OfferteArchivieren(Optional Art As String = "")

        Try

            currentOffertArchiv = New VERAG_PROG_ALLGEMEIN.cOfferteArchiv()
            currentOffertArchiv.KundenNr = currentOffert.KundenNr
            currentOffertArchiv.FilialenNr = currentOffert.FilialenNr
            currentOffertArchiv.OffertenNr = currentOffert.OffertenNr
            currentOffertArchiv.Standardofferte = currentOffert.Standardofferte
            currentOffertArchiv.Besonderheiten = currentOffert.Besonderheiten
            currentOffertArchiv.Eingegeben_am = currentOffert.Eingegeben_am
            currentOffertArchiv.Geändert_am = currentOffert.Geändert_am
            currentOffertArchiv.Sachbearbeiter = currentOffert.Sachbearbeiter
            currentOffertArchiv.SSMA_TimeStamp = currentOffert.SSMA_TimeStamp
            currentOffertArchiv.Gesperrt = currentOffert.Gesperrt
            currentOffertArchiv.Gesperrt_Datum = currentOffert.Gesperrt_Datum
            currentOffertArchiv.Gesperrt_Grund = currentOffert.Gesperrt_Grund
            currentOffertArchiv.Art = currentOffert.Art
            ofID = currentOffertArchiv.SAVERETURNID()

            If ofID > 0 Then
                For Each row As DataRow In tmpDataTable.Rows
                    If tmpDataTable.Rows.Count = 0 Then Exit Sub
                    Dim oP As New VERAG_PROG_ALLGEMEIN.cOffertPositionArchiv
                    oP.OfID = ofID
                    oP.KundenNr = currentOffertArchiv.KundenNr
                    oP.LeistungsNr = row("LeistungsNr")
                    oP.LeistungsBez = row("LeistungsBez")
                    oP.OffertenNr = currentOffertArchiv.OffertenNr
                    oP.BerechnungsartNr = row("BerechnungsartNr")
                    oP.Preis = row("Preis")
                    oP.Anzahl = row("Anzahl")
                    oP.BGebLeistungsNr = row("BGebLeistungsNr")
                    oP.BGebProzent = row("BGebProzent")
                    oP.BGebMinBetrag = row("BGebMinBetrag")
                    oP.Eingegeben_am = row("Eingegeben am")
                    oP.Geändert_am = row("Geändert am")
                    oP.Sachbearbeiter = row("Sachbearbeiter")
                    oP.Preisänderung = row("Preisänderung")
                    oP.PreisänderungProzent = row("PreisänderungProzent")
                    oP.PreisAlt = row("PreisAlt")
                    oP.BerechnungsartPosInkludiert = row("BerechnungsartPosInkludiert")
                    oP.INSERT()
                Next

            End If

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try
    End Sub

    Private Sub btnStandardLaden_Click(sender As Object, e As EventArgs) Handles btnStandardLaden.Click

        Try


            Dim KUNDE As New VERAG_PROG_ALLGEMEIN.cKunde(kdNr)
            Dim KUNDE_ERW As New VERAG_PROG_ALLGEMEIN.cKundenErweitert(kdNr)
            Dim FIRMA_TMP = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(KUNDE.FilialenNr)

            If Not vbYes = MsgBox("Möchten Sie die Standardofferte für den Kunden " & KUNDE.KundenNr & " laden?" & vbNewLine & "Aktuelle Offerteneinstellungen werden gelöscht.", vbYesNo) Then Exit Sub

            Dim SPRACHE As String = "DE"

            If FIRMA_TMP = "VERAG" Then
                If KUNDE_ERW IsNot Nothing AndAlso KUNDE_ERW.kde_Fakturierung_Sprache IsNot Nothing AndAlso KUNDE_ERW.kde_Fakturierung_Sprache <> "" AndAlso KUNDE.FilialenNr = 8001 AndAlso (KUNDE.KundenNrZentrale <> 140000 And KUNDE.KundenNrZentrale <> 150000 And KUNDE.KundenNrZentrale <> 180000) Then
                    If vbYes = MsgBox("Möchten Sie die Standardofferte in der Fakturierungssprache des Kunden (" & KUNDE_ERW.kde_Fakturierung_Sprache & ") einfügen ", vbYesNo) Then
                        SPRACHE = KUNDE_ERW.kde_Fakturierung_Sprache
                    End If
                End If
            End If


            edit = True
            handleEditMode(edit)
            saveCurrentOffert()

            If SQL.doSQL("DELETE FROM Offerten where [KundenNr]='" & kdNr & "' AND [OffertenNr]='" & dgvOfferteNew.SelectedRows(0).Cells("OffertenNr").Value & "' ", "FMZOLL") Then
                isStandard = True
                isNew = True
                currentOffert.Art = "Neuer Standard erstellt"
                currentOffert.SAVE()
                currentOffert.LOAD_POSITIONEN()
                If currentOffert.POSITIONEN.Count = 0 Then '
                    currentOffert.RESET_STANDARTOFFERTEN_FIRMA(VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME, FIRMA_TMP, SPRACHE)
                End If

                dgvOfferteNew.GetOrder()
                initDGVOfferte()
                dgvOfferteNew.SetOrder()
                RaiseEvent OfferteChanged()
                isStandard = True
                isNew = True
            End If

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try

    End Sub

    Private Sub cbxArchivierteOfferten_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbxArchivierteOfferten.SelectedIndexChanged
        If cbxArchivierteOffertenAnzeigen.Checked = False Then Exit Sub
        If cbxArchivierteOfferten._value = "" Then Exit Sub

        If cbxArchivierteOffertenAnzeigen.Checked = True Then
            edit = False
            handleEditMode(edit)
            lblArchivierteOfferten.Visible = True

            Dim ofId As Integer

            ofId = CInt(cbxArchivierteOfferten._value)

            initDGVOfferteDetailsArchived(ofId)

        End If
        checkPerimissionsDGVDetails()


    End Sub

    Private Sub cbxArchivierteOffertenAnzeigen_CheckedChanged(sender As Object, e As EventArgs) Handles cbxArchivierteOffertenAnzeigen.CheckedChanged

        If dgvOfferteNew.SelectedRows.Count = 0 Then Exit Sub

        If cbxArchivierteOffertenAnzeigen.Checked Then
            cbxArchivierteOfferten.SelectedIndex = -1
            cbxArchivierteOfferten.Items.Clear()
            cbxArchivierteOfferten.Visible = True
            cbxArchivierteOfferten.fillWithSQL("SELECT OfID, CONVERT(VARCHAR(24),[Archiviert am],20) +' - '+  Art as Archivierungsoffert FROM [tblOffertenArchiv] WHERE KundenNr='" & kdNr & "' and OffertenNr='" & dgvOfferteNew.SelectedRows(0).Cells("OffertenNr").Value & "'", False, "FMZOLL", True)
            btnOffertbearbeiten.Visible = False

        Else
            lblArchivierteOfferten.Visible = False
            cbxArchivierteOfferten.Visible = False
            initDGVOfferteDetails(dgvOfferteNew.SelectedRows(0).Cells("OffertenNr").Value)
            btnOffertbearbeiten.Visible = True
        End If
    End Sub


    Private Sub checkPerimissionsDGVDetails()

        Try
            With dgvOfferteDetails

                If Not VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("OFFERTE_BEARBEITEN", "SDL") Then
                    For Each c As DataGridViewColumn In .Columns
                        c.ReadOnly = True
                        handleEditMode(False)
                    Next
                    dgvOfferteDetails.AllowUserToDeleteRows = False
                Else

                    For Each c As DataGridViewColumn In .Columns

                        If isVerag360 Then
                            If (c.Name = "Preis" Or c.Name = "LeistungsBez" Or c.Name = "Anzahl" Or c.Name = "BerechnungsartNr" Or c.Name = "BerechnungsartPosInkludiert" Or c.Name = "BGebLeistungsNr" Or c.Name = "BGebProzent" Or c.Name = "BGebMinBetrag" Or c.Name = "Land" Or c.Name = "VZ" Or c.Name = "RMC" Or c.Name = "Fremd" Or c.Name = "Staffelpreis") Then
                                If edit Then
                                    c.ReadOnly = False
                                    handleEditMode(edit)
                                Else
                                    c.ReadOnly = True
                                    handleEditMode(edit)
                                End If
                            Else
                                c.ReadOnly = True

                            End If
                        Else
                            If (c.Name = "Preis" Or c.Name = "LeistungsBez" Or c.Name = "Anzahl" Or c.Name = "BerechnungsartNr" Or c.Name = "BerechnungsartPosInkludiert") Then
                                If edit Then
                                    c.ReadOnly = False
                                    handleEditMode(edit)
                                Else
                                    c.ReadOnly = True
                                    handleEditMode(edit)
                                End If
                            Else
                                c.ReadOnly = True

                            End If

                            If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("OFFERTE_DATIEREN", "SDL") Then

                                If (c.Name = "Eingegeben am") Then
                                    If edit Then
                                        c.ReadOnly = False
                                        handleEditMode(edit)
                                    End If
                                End If

                            End If
                        End If


                    Next
                    dgvOfferteDetails.AllowUserToDeleteRows = edit
                End If

            End With

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try

    End Sub

    Private Sub initDGVOfferteDetailsArchived(OffertenId)
        Try



            loaded = False
            DGVHasChaged = False

            Dim addFields As String = ""

            Dim OffNR As Integer = -1

            OffNR = CInt(SQL.getValueTxtBySql("SELECT TOP(1) OffertenNr from tblOffertenArchiv where  OfID = " & OffertenId, "FMZOLL"))

            Dim addedFields As Boolean = addFieldsOffert(OffNR, addFields)

            With dgvOfferteDetails
                .Columns.Clear()

                OFFERTEBind = New cEasyBinding(BIND_DB)
                OFFERTEBind.initBinding(" SELECT   [LeistungsNr],[LeistungsBez],[BerechnungsartNr],[Preis],[Anzahl],[BGebLeistungsNr],[BGebProzent],[BGebMinBetrag],BerechnungsartPosInkludiert,[Eingegeben am],[Geändert am],[Sachbearbeiter],[PreisänderungProzent],[PreisAlt],[Preisänderung],KundenNr,OffertenNr " & addFields &
                                              " FROM [tblOffertenpositionenArchiv] " &
                                             " WHERE OfId='" & OffertenId & "' ORDER BY LeistungsNr, Preis DESC", "tblOffertenpositionenArchiv")

                .DataSource = OFFERTEBind.bindingdataTable




                FUNC.dgvCellToCbo(dgvOfferteDetails, 2, "Berechnungsart", "BerechnungsartNr", " SELECT [BerechnungsartNr], CAST(BerechnungsartNr as varchar(3))  + ' - ' + [BerechnungsartBez] as [BerechnungsartBez]  FROM [Berechnungsart] ORDER BY BerechnungsartNr ", "FMZOLL", 150)
                FUNC.dgvCellToCbo(dgvOfferteDetails, 5, "BGebLeist.", "BGebLeistungsNr", " SELECT [LeistungsNr], CAST(LeistungsNr as varchar(3)) + ' - ' + [LeistungsBez] as LeistungsBez FROM [Leistungen] ORDER BY [LeistungsNr] ", "FMZOLL", 250)


                checkPerimissionsDGVDetails()

                .Columns("OffertenNr").Visible = False
                .Columns("KundenNr").Visible = False
                .Columns("LeistungsNr").Width = 30
                .Columns("LeistungsNr").HeaderText = "Nr"
                .Columns("LeistungsBez").MinimumWidth = 200
                .Columns("LeistungsBez").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
                .Columns("LeistungsBez").HeaderText = "Leistung"
                .Columns("BerechnungsartNr").MinimumWidth = 150
                .Columns("Preis").Width = 60
                .Columns("Preis").DefaultCellStyle.Format = "N2"
                .Columns("Preis").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
                .Columns("Anzahl").Width = 50
                .Columns("Anzahl").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter
                .Columns("BerechnungsartPosInkludiert").HeaderText = "Pos.inkl."
                .Columns("BerechnungsartPosInkludiert").Width = 45
                .Columns("BGebLeistungsNr").Width = 60
                .Columns("BGebProzent").Width = 55
                .Columns("BGebProzent").HeaderText = "BGeb %"
                .Columns("BGebProzent").DefaultCellStyle.Format = "P"
                .Columns("BGebProzent").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
                .Columns("BGebMinBetrag").Width = 60
                .Columns("BGebMinBetrag").HeaderText = "BGebMinBetr."
                .Columns("BGebMinBetrag").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
                .Columns("Eingegeben am").Visible = False
                .Columns("PreisänderungProzent").Width = 70
                .Columns("PreisänderungProzent").HeaderText = "Preisänd. %"
                .Columns("PreisänderungProzent").DefaultCellStyle.Format = "P"
                .Columns("PreisänderungProzent").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
                .Columns("PreisAlt").Width = 60
                .Columns("PreisAlt").DefaultCellStyle.Format = "N2"
                .Columns("PreisAlt").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
                .Columns("Preisänderung").Width = 60
                .Columns("Preisänderung").HeaderText = "PreisNeu"
                .Columns("Preisänderung").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight

                If addedFields Then
                    .Columns("Land").Width = 70
                    .Columns("VZ").Width = 40
                    .Columns("VZ").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter
                    .Columns("RMC").Width = 40
                    .Columns("RMC").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter
                    .Columns("Fremd").Width = 70
                    .Columns("Fremd").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter
                End If


                loaded = True
            End With
        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try
    End Sub

    Private Sub saveCurrentOffert()
        Try


            dgvOfferteNew.Enabled = False
            currentOffert = New VERAG_PROG_ALLGEMEIN.cOfferte(kdNr, dgvOfferteNew.SelectedRows(0).Cells("OffertenNr").Value, False)
            Dim orgDataTable As DataTable = dgvOfferteDetails.DataSource
            tmpDataTable = orgDataTable.Copy

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try
    End Sub

    Private Sub checkPermissions()



        If Not VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("OFFERTE_BEARBEITEN", "SDL") Then
            pnlEdit.Visible = False
            pnlSperre.Visible = False
            btnCreateOffert.Visible = False
            dgvOfferteNew.ReadOnly = True
            btnOffertbearbeiten.Visible = False
            btnStandardLaden.Visible = False
            cbxArchivierteOfferten.Enabled = False
        Else
            dgvOfferteDetails.AllowUserToAddRows = True
            dgvOfferteDetails.AllowUserToDeleteRows = True
            dgvOfferteDetails.RowHeadersVisible = True
            btnOffertbearbeiten.Visible = True
            btnStandardLaden.Visible = True
            cbxArchivierteOfferten.Enabled = True
            cbxArchivierteOffertenAnzeigen.Visible = True


            If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("OFFERTE_LOESCHEN", "SDL") Then
                btnDeleteOfferte.Visible = True
            End If
        End If


        If Not VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("KOSTENKALKULATION_OFFERTE", "SDL") Then
            pnlKostenkalkulation.Visible = False
        Else
            pnlKostenkalkulation.Visible = True
        End If

        If dgvOfferteNew.SelectedRows.Count = 0 Then

            btnOffertbearbeiten.Visible = False
            btnStandardLaden.Visible = False
            cbxArchivierteOffertenAnzeigen.Visible = False

        End If

    End Sub

    Private Sub handleEditMode(isInEditMode As Boolean)

        If isInEditMode Then
            lblEditMode.Visible = True
            cbxArchivierteOffertenAnzeigen.Enabled = False
            cbxArchivierteOffertenAnzeigen.Checked = False
            dgvOfferteNew.Enabled = False
            dgvOfferteDetails.ReadOnly = False
            btnOfferteSpeichern.Enabled = True
        Else
            lblEditMode.Visible = False
            cbxArchivierteOffertenAnzeigen.Enabled = True
            dgvOfferteNew.Enabled = True
            dgvOfferteDetails.ReadOnly = True
            btnOfferteSpeichern.Enabled = False
        End If
    End Sub


    Private Sub saveToArchive()
        Try



            If isNew = False AndAlso isStandard = False Or isNew AndAlso isStandard = False Then 'Neuanlage oder Anlage über "Standardoffert laden" speichern, 
                If DGVHasChaged = False Then Exit Sub
            End If

            If isStandard Then
                If isNew Then
                    OfferteArchivieren()
                    isNew = False

                End If
                isStandard = False
            Else

                If DGVHasChaged Then
                    If isNew = False Then
                        OfferteArchivieren()
                        Exit Sub

                    Else
                        If isNew Then
                            OfferteArchivieren()
                            isNew = False
                        End If

                    End If
                End If
            End If

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try


    End Sub

    Private Sub dgvOfferteDetails_UserDeletingRow(sender As Object, e As DataGridViewRowCancelEventArgs) Handles dgvOfferteDetails.UserDeletingRow
        DGVHasChaged = True
    End Sub

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

    Private Sub dgvOfferteDetails_KeyUp(sender As Object, e As KeyEventArgs) Handles dgvOfferteDetails.KeyUp
        If e.KeyCode = Keys.Tab Then


            dgvOfferteDetails.CurrentCell = GetNextCell(dgvOfferteDetails.CurrentCell)
            e.Handled = True

        End If


    End Sub

    Private Function GetNextCell(currentCell As DataGridViewCell) As DataGridViewCell

        Dim i As Integer = 0
        Dim nextCell As DataGridViewCell = currentCell
        Dim j = 0
        Do
            Dim nextCellIndex As Integer = (nextCell.ColumnIndex + j) Mod dgvOfferteDetails.ColumnCount
            Dim nextRowIndex As Integer = If(nextCellIndex = 0, (nextCell.RowIndex + 1) Mod dgvOfferteDetails.RowCount, nextCell.RowIndex)
            lblOffert.Text = "C" & nextCellIndex & "R" & nextRowIndex & "RO" & IIf(nextCell.[ReadOnly], "1", "0") & "H" & IIf(Not nextCell.Visible, "1", "0")
            nextCell = dgvOfferteDetails.Rows(nextRowIndex).Cells(nextCellIndex)
            i += 1
            j = 1
        Loop While (i < (dgvOfferteDetails.RowCount * dgvOfferteDetails.ColumnCount) AndAlso (nextCell.[ReadOnly]) Or i < (dgvOfferteDetails.RowCount * dgvOfferteDetails.ColumnCount) AndAlso Not nextCell.Visible)

        Return nextCell

    End Function

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles btnKK.Click, btnKK_Mail.Click

        Me.Cursor = Cursors.WaitCursor
        Try
            Dim Path = ""
            If True Then


                Dim KD As New VERAG_PROG_ALLGEMEIN.cKunde(kdNr)
                Dim ADR As New VERAG_PROG_ALLGEMEIN.cAdressen(kdNr)
                Dim FIRMA_TMP = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(KD.FilialenNr)
                Dim FirmaID As Integer = -1

                If dgvOfferteDetails.Rows.Count = 0 Then Exit Sub

                Dim dtKostenkalk As System.Data.DataTable = cProgramFunctions.dgridViewTods(dgvOfferteDetails)

                If dtKostenkalk.Rows.Count < 1 Then
                    MsgBox("keine Daten!")
                    Me.Cursor = Cursors.Default
                    Exit Sub
                End If

                Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\SDL\tmp\"
                If Not My.Computer.FileSystem.DirectoryExists(sPath) Then
                    My.Computer.FileSystem.CreateDirectory(sPath)
                End If


                Dim exclApp As Object 'as Application
                Dim Datei As Object 'as WorkBook
                Dim Blatt As Object 'Microsoft.Office.Interop.Excel.Worksheet 'As Object 'as Worksheet
                exclApp = CreateObject("Excel.Application")

                Dim ExcelBez = "Kostenkalkulation"

                Dim offertenNr As Integer = dtKostenkalk.Rows(0).Item("OffertenNr")
                If (offertenNr = 26 Or offertenNr = 38) AndAlso FIRMA_TMP <> "UNISPED" Then FIRMA_TMP = "CS"

                Select Case FIRMA_TMP
                    Case "IMEX" : ExcelBez &= "_IMEX_" : FirmaID = 20
                    Case "VERAG" : ExcelBez &= "_AG_" : FirmaID = 1
                    Case "UNISPED" : ExcelBez &= "_UNISPED_" : FirmaID = 21
                    Case "CS" : ExcelBez &= "_CS " : FirmaID = 11
                    Case Else : ExcelBez &= " "
                End Select

                With exclApp
                    .Visible = False

                    Try
                        Path = sPath & ExcelBez & kdNr & " .xlsx"
                        While System.IO.File.Exists(Path)
                            Path = sPath & ExcelBez & kdNr & "_" & Now.ToString("ddMMyyyyHHmmss") & ".xlsx"
                        End While



                        Select Case FIRMA_TMP
                            Case "IMEX" : My.Computer.FileSystem.WriteAllBytes(Path, My.Resources.Kostenkalkulation_IMEX, False)
                            Case "VERAG" : My.Computer.FileSystem.WriteAllBytes(Path, My.Resources.Kostenkalkulation_AG, False)
                            Case "UNISPED" : My.Computer.FileSystem.WriteAllBytes(Path, My.Resources.Kostenkalkulation_UNI, False)
                            Case "CS" : My.Computer.FileSystem.WriteAllBytes(Path, My.Resources.Kostenkalkulation_CS, False)
                            Case Else : My.Computer.FileSystem.WriteAllBytes(Path, My.Resources.Kostenkalkulation, False)
                        End Select



                    Catch ex As System.Exception
                        VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
                        Me.Cursor = Cursors.Default

                        Exit Sub
                    End Try

                    Datei = .Workbooks.Open(Path) 'Anpassen
                    Blatt = Datei.Worksheets(1) 'Anpassen


                    Blatt.Range("B8").Value = ADR.Name_1
                    Blatt.Range("B9").Value = ADR.AdressenNr


                    Blatt.Range("H11").Value = "Tarif für " & Today().Year

                    Blatt.Range("D11").Value = Blatt.Range("D11").Value.ToString.Replace("2025", Today().Year)

                    Dim currentRow As Integer = 13

                    Dim dtkeineMdtKostenkalk_mitPreise As System.Data.DataTable = dtKostenkalk.Select("Preis <> ''").CopyToDataTable
                    dtkeineMdtKostenkalk_mitPreise.Columns.Add("price_new", System.Type.GetType("System.Int32"))

                    Dim DatumDerZollabf As String = dtkeineMdtKostenkalk_mitPreise.Rows(0).Item("Geändert am")

                    If DatumDerZollabf = "" Then DatumDerZollabf = dtkeineMdtKostenkalk_mitPreise.Rows(0).Item("Eingegeben am")

                    If IsDate(DatumDerZollabf) Then Blatt.Range("B11").Value = "aktueller Tarif " & CDate(DatumDerZollabf).Year

                    For Each row In dtkeineMdtKostenkalk_mitPreise.Rows
                        row("price_new") = CDbl(row("Preis"))
                    Next

                    dtkeineMdtKostenkalk_mitPreise.DefaultView.Sort = "price_new desc"
                    dtkeineMdtKostenkalk_mitPreise = dtkeineMdtKostenkalk_mitPreise.DefaultView.ToTable

                    For Each row In dtkeineMdtKostenkalk_mitPreise.Rows

                        Blatt.Range("A" & currentRow).Value = row("LeistungsBez")
                        Blatt.Range("B" & currentRow).Value = CDbl(row("Preis"))


                        If IsDate(DatumDerZollabf) Then

                            Select Case CDate(DatumDerZollabf).Year
                                'Berechnungssätze laut Johanna Luxbauer
                                Case 2018 : Blatt.Range("D" & currentRow).Value = 0.3782
                                Case 2019 : Blatt.Range("D" & currentRow).Value = 0.3433
                                Case 2020 : Blatt.Range("D" & currentRow).Value = 0.317
                                Case 2021 : Blatt.Range("D" & currentRow).Value = 0.2969
                                Case 2022 : Blatt.Range("D" & currentRow).Value = 0.2567
                                Case 2023 : Blatt.Range("D" & currentRow).Value = 0.1321
                                Case 2024 : Blatt.Range("D" & currentRow).Value = 0.0701
                                Case 2025 : Blatt.Range("D" & currentRow).Value = 0.0295
                                Case 2026 : Blatt.Range("D" & currentRow).Value = 0
                                Case Else
                                    Blatt.Range("D" & currentRow).Value = ""
                            End Select

                        Else
                            Blatt.Range("D" & currentRow).Value = ""
                        End If
                        currentRow = currentRow + 1
                    Next

                    Datei.Save

                    Select Case sender.name
                        Case "btnKK_Mail"


                            exclApp.Visible = False

                            ' Datei öffnen


                            ' Als PDF exportieren
                            Dim tmpPath_Report = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(ExcelBez & kdNr & ".pdf", ".pdf", , False)

                            Datei.ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, tmpPath_Report, XlFixedFormatQuality.xlQualityStandard, True, False)



                            Dim outl As New Outlook.Application
                            Dim Mail As Microsoft.Office.Interop.Outlook.MailItem
                            Mail = outl.CreateItem(0)

                            Mail.To = ADR.E_Mail


                            Dim TextHTML = ""
                            TextHTML &= "Sehr geehrte Damen und Herren,<br>
                             <br>wir möchten uns für die gute Zusammenarbeit mit Ihrem Unternehmen herzlich bedanken.<br>
                             <br>Unsere Aufwendungen für Mitarbeitende, IT-Systeme und Betriebskosten sind Jahr für Jahr gestiegen, so dass wir nicht umhin kommen, unsere Verzollungssätze entsprechend anzupassen.<br>
                             <br>Ihr Verständnis ist uns wichtig und deshalb möchten wir Ihnen die Einflussfaktoren erläutern:<br><br>
                            <ul>
                            <li>Personalkostenerhöhungen in der Branche</li>
                            <li>Verlagerung der Aufgaben von der Zollverwaltung zu den Spediteuren</li>
                            <li>Verschärfte gesetzliche Bestimmungen (CBAM, NCTS5,..)</li>
                            <li>Permanente Updates der elektronischen Zollsysteme</li>
                            <li>Fortlaufende Weiterbildung unserer Zollsachbearbeitenden</li>
                            <li>Verlängerte Öffnungszeiten</li>
                            <li>Inflation, Wirtschaftskrise</li>
                            <li>Gestiegene Energiekosten, Versorgungskosten</li>
                            </ul>
                            <br>
                            Beiliegend erhalten Sie eine Aufstellung mit den angepassten Abfertigungssätzen, gültig ab <b> 01. Juni 2026.</b><br>
                            Wir haben nur die tatsächlichen Personalkostenerhöhungen zum Ansatz genommen. <br>
                            Dass durch die gesetzlich verschärften Bestimmungen der Zeitaufwand beträchtlich gestiegen ist und damit die Abfertigungszahlen pro Person entsprechend gesunken sind, haben wir bei der Preiskalkulation nicht berücksichtigt. <br>
                            Diesen Mehraufwand versuchen wir durch Einsparungsmaßnahmen mit modernster Software und Produktionsverbesserungen wett zu machen.<br><br>
                            Wir bedanken uns für Ihr Verständnis und werden uns auch weiterhin bemühen Ihnen ein zuverlässiger Partner zu sein."
                            TextHTML &= "<br>"
                            TextHTML &= "<br>"
                            TextHTML &= "Mit freundlichen Grüßen<br>"
                            TextHTML &= VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME & "<br>"
                            TextHTML &= "<br>"
                            TextHTML &= cFakturierung.getSignature("DE", FirmaID, True, True)

                            Mail.HTMLBody = "<div style=""font-family:Calibri, Arial"">" & TextHTML & "</div>"
                            Mail.Subject = "Preiserhöhung " & Today().Year
                            Mail.Attachments.Add(tmpPath_Report)
                            Mail.Display()



                        Case Else

                            .Visible = True

                    End Select



                End With

            End If
        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try
        Me.Cursor = Cursors.Default
    End Sub

    Private Function addFieldsOffert(ByRef OffertenNr As Integer, ByRef fields As String)

        If OffertenNr = 14 Or OffertenNr = 15 Or OffertenNr = 31 Then
            fields = ", MDM_Land as Land, MDM_VZ as VZ, MDM_RMC as RMC, MDM_Fremd as Fremd, MDM_Preisstaffel as Staffelpreis "
            Return True
        End If
        Return False

    End Function

    Private Sub rtbBesonderheiten_TextChanged(sender As Object, e As EventArgs) Handles rtbBesonderheiten.TextChanged
        btnSaveBes.Visible = True
    End Sub

    Private Sub btnSaveBes_Click(sender As Object, e As EventArgs) Handles btnSaveBes.Click

        Dim OfferenNr = -1
        If dgvOfferteNew.RowCount > 0 Then
            If dgvOfferteNew.SelectedRows.Count > 0 Then

                OfferenNr = cSqlDb.checkNullStr(dgvOfferteNew.SelectedRows(0).Cells("OffertenNr").Value)

            Else
                OfferenNr = cSqlDb.checkNullStr(dgvOfferteNew.Rows(0).Cells("OffertenNr").Value)
            End If

            If OfferenNr > 0 AndAlso kdNr > 0 Then
                If SQL.doSQL("update [Offerten] set [Besonderheiten] = '" & rtbBesonderheiten.Text & "' where KundenNr = " & kdNr & " and OffertenNr =  " & OfferenNr, "FMZOLL") Then
                    initDGVOfferte()
                End If
            End If

        End If



    End Sub

    Private Sub btnOffertPreisliste_Click(sender As Object, e As EventArgs) Handles btnOffertPreisliste.Click

        MsgBox("Noch nicht implementiert!")

    End Sub

End Class
