Imports System.Globalization
Imports System.Text

Public Class usrCntlBH
    Dim GrenzeVersicherung = 50000
    Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
    Dim culture As CultureInfo = New CultureInfo("de-DE")
    Private Sub btnWord_Click(sender As Object, e As EventArgs) Handles btnWord.Click
        If frmMDM_BH_SollHaben.Visible Then frmMDM_BH_SollHaben.Close()

        frmMDM_BH_SollHaben.MdmSollHaben = cbxMdmSollHaben.Checked
        frmMDM_BH_SollHaben.MdmSollSoll = cbxMdmSollSoll.Checked
        frmMDM_BH_SollHaben.MdmHabenHaben = cbxMdmHabenHaben.Checked
        frmMDM_BH_SollHaben.MdmSollHabenOhneKdNr = cbxMdmSollHabenOhneKdNr.Checked

        frmMDM_BH_SollHaben.Show()
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If frmBH_SollHaben.Visible Then frmBH_SollHaben.Close()
        frmBH_SollHaben.Show()
    End Sub


    Private Sub usrCntlBH_Load(sender As Object, e As EventArgs) Handles Me.Load
        'MyComboBox1.fillWithSQL(" SELECT tblUStVAntrag.UStVAn_LandKz,tblUStVAntrag.UStVAn_LandKz FROM tblUStVAntrag GROUP BY tblUStVAntrag.UStVAn_LandKz HAVING (((tblUStVAntrag.UStVAn_LandKz) Is Not Null)) ", False, "FMZOLL", True)



        cboAbfVerbFirma.fillWithSQL(" SELECT distinct([Firma]) FROM [VERAG].[dbo].[Filialen] order by [Firma]", False, "FMZOLL", True)
        cboAbfVerbFirma.changeItem(VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA)

        MyComboBox1.fillWithSQL("  SELECT Währungstabelle.LandKz, [Länderverzeichnis für die Außenhandelsstatistik].LandKz  + ' - ' + [Länderverzeichnis für die Außenhandelsstatistik].LandBez   AS LandKzISO2 " &
         " FROM [Länderverzeichnis für die Außenhandelsstatistik] LEFT JOIN Währungstabelle ON [Länderverzeichnis für die Außenhandelsstatistik].LandNr = Währungstabelle.Währungsschlüssel " &
         " where [Länderverzeichnis für die Außenhandelsstatistik].LandKz IN ('DE','AT','BA','BE','BG','FR','HR','MK','MD','ME','NL','RO','CH','SK','SI','RS','TR','HU') " &
         " ORDER BY [Länderverzeichnis für die Außenhandelsstatistik].LandKz;", False, "FMZOLL", True)

        cboSort.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Firmenname", "Ordnungsbegriff"))
        cboSort.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Umsatz", "UmsatzRg DESC"))
        cboSort.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Laufender Saldo", "LfdSaldo DESC"))
        cboSort.SelectedIndex = 0

        Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
            Case "IMEX" : MyListBox1.fillWithSQL("SELECT [Firma_ID],[Firma_Bez]  FROM [VERAG].[dbo].[tblFirma] where Firma_ID IN (20) order by [Firma_ID]  ", False, "FMZOLL")
            Case Else
                MyListBox1.fillWithSQL("SELECT [Firma_ID],[Firma_Bez]  FROM [VERAG].[dbo].[tblFirma] where Firma_ID NOT IN (20) order by [Firma_ID] ", False, "FMZOLL")

                For i = 0 To MyListBox1.Items.Count - 1
                    If VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_abteilung = "MDM" Then
                        If DirectCast(MyListBox1.Items(i), VERAG_PROG_ALLGEMEIN.MyListItem).Value = 1 Or DirectCast(MyListBox1.Items(i), VERAG_PROG_ALLGEMEIN.MyListItem).Value = 15 Then MyListBox1.SetSelected(i, True)
                    Else
                        If DirectCast(MyListBox1.Items(i), VERAG_PROG_ALLGEMEIN.MyListItem).Value <> 7 Then MyListBox1.SetSelected(i, True)
                    End If
                Next
        End Select

        '   If VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_abteilung = "MDM" Then CheckBox1.Checked = True : cbxSDLLeistungenSperre.Checked = True 'VERALTET
        'txtOPRisikoBetragVon._value = ""
        txtOPUmsatzVon.Text = "01.01." & (Now.Year - 1)
        txtOPUmsatzBis.Text = "31.12." & (Now.Year - 1)
        txtBagatellgrenzeBei._value = 800
    End Sub

    Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
        'MyComboBox1.Enabled = sender.checked
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Try

            Me.Cursor = Cursors.WaitCursor
            If Not checkOPValid() Then Me.Cursor = Cursors.Default : Exit Sub

        Dim dt = SQL.loadDgvBySql(getOPSql(), "FMZOLL")
        dt.Columns.Add("VersicherungsBetrag", Type.GetType("System.Double"))
        For Each r In dt.Rows
            r("VersicherungsBetrag") = getVersBetrag(r("Risiko"), r("Versicherungssumme"), r("GemeldeterBetrag"))
        Next
        dt.Columns("VersicherungsBetrag").ColumnName = "V-Betrag"
        dt.Columns("Versicherungssumme").ColumnName = "V-Summe"
        dt.Columns("Vorauszahlung").ColumnName = "VZ"
        'dt.Columns("GemeldeterBetrag")
        dt.Columns.Remove("GemeldeterBetrag")

        If cbxFormatNumbers.Checked Then
            cProgramFunctions.genExcelFromDT_NEW(dt, {"E1:E" & (dt.Rows.Count + 1), "H1:M" & (dt.Rows.Count + 1), "O1:P" & (dt.Rows.Count + 1)})
        Else
            cProgramFunctions.genExcelCSVFromDT(dt)
        End If


        'cProgramFunctions.genExcelFromDT_NEW(dt)
        'cProgramFunctions.genExcelFromDT_NEW(dt, , False)
        Me.Cursor = Cursors.Default

        Catch ex As Exception
            MsgBox(ex.Message & ex.StackTrace)
        End Try
    End Sub

    'MyListBox1
    Function getOPSql() As String
        Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
            Case "IMEX" : Return getOPSqlIMEX()
            Case Else : Return getOPSqlVERAG()
        End Select
    End Function

    Function getOPSqlVERAG() As String
        Dim Firmen_ID = If(MyListBox1.SelectedItems.Count > 0, "and Firma_ID IN (" & getValuesFirma() & ") ", "")
        Dim sqlStr = ""
        sqlStr &= "SELECT * FROM ("
        sqlStr &= " SELECT        Ordnungsbegriff, AdressenNr as KdNr, Adressen.LandKz, "
        If cbxDeckungsstoppAnzeigen.Checked Then sqlStr &= " (SELECT TOP 1 ISNULL([kde_Versicherung_DeckungsstoppDatum],'')  FROM [tblKundenErweitert]  where kde_Versicherung_Deckungsstopp=1 and kde_KundenNr=AdressenNr) AS DS, "
        If True Then sqlStr &= " isnull((SELECT TOP 1 [kde_Versicherung_GemeldeterBetrag] FROM [tblKundenErweitert]  where kde_KundenNr=AdressenNr),0) AS GemeldeterBetrag, "
        sqlStr &= "     (SELECT SUM(Gesamtausstand) FROM dbo.[Offene Posten] WHERE (Kontonummer = AdressenNr " & Firmen_ID & ")) AS LfdSaldo, "
        sqlStr &= "     (SELECT        MIN(Belegdatum) AS Expr1"
        sqlStr &= "         FROM            dbo.[Offene Posten]"
        sqlStr &= "         WHERE        (Kontonummer = AdressenNr " & Firmen_ID & ")) AS Datum, "
        sqlStr &= "    /* (SELECT        MAX(Belegdatum) AS Expr1"
        sqlStr &= "         FROM            dbo.[Offene Posten]"
        sqlStr &= "         WHERE        (Kontonummer = AdressenNr " & Firmen_ID & ")) AS OPDatumMax, */"
        sqlStr &= "     CASE WHEN UStV_SummeUmsatzsteuerbetragEUR > UStV_SummeErstattungsbetragEUR THEN UStV_SummeUmsatzsteuerbetragEUR - UStV_SummeErstattungsbetragEUR ELSE 0 END AS UStDiff,"
        sqlStr &= "     UStV_Summe3470BetragEUR AS Kto3470, UStV_SummeVZBetragEUR AS Vorauszahlung, UStV_SummeVorschaubetragEUR AS Vorschau, "
        sqlStr &= "      isnull((SELECT SUM(Gesamtausstand) FROM dbo.[Offene Posten] WHERE (Kontonummer = AdressenNr " & Firmen_ID & ")),0) - isnull(CASE WHEN UStV_SummeUmsatzsteuerbetragEUR > UStV_SummeErstattungsbetragEUR THEN UStV_SummeUmsatzsteuerbetragEUR - UStV_SummeErstattungsbetragEUR "
        sqlStr &= "     ELSE 0 END ,0) - isnull(UStV_Summe3470BetragEUR,0) + isnull(UStV_SummeVZBetragEUR,0) - isnull(UStV_SummeVorschaubetragEUR,0) - isnull(CASE WHEN ISNULL(BankgarantieGültigBis, "
        sqlStr &= "     GETDATE()) < GETDATE() THEN 0 ELSE ISNULL(BankgarantieBetrag, 0) END,0) AS Risiko ,  /*BankgarantieBetrag, BankgarantieGültigBis, */"
        sqlStr &= "     Versicherungssumme "



        '  sqlStr &= "     CASE WHEN LfdSaldo>" & GrenzeVersicherung & " THEN CASE WHEN ISNUMERIC(Versicherungssumme )=1 THEN cast(Versicherungssumme as decimal(16,2))  ELSE null END  ELSE null END as Versicherungssumme "

        '  If cbxOPUmsatz.Checked Then sqlStr &= " ,(SELECT SUM(SteuerfreierGesamtbetrag + SteuerpflichtigerGesamtbetrag)  as UmsatzRg FROM [Rechnungsausgang]  WHERE Kunden.KundenNrZentrale=[Rechnungsausgang].KundenNrZentrale AND RechnungsDatum between '01.06.2016' and '01.06.2017') as UmsatzRg "
        If cbxOPUmsatz.Checked Then sqlStr &= " ,(SELECT sum([SteuerpflichtigerBetragLokal]+[SteuerfreierBetragLokal]) as UmsatzRg/*,sum([RechnungsbetragLokal])as BruttoUmsatzRg*/  FROM [tblTrdinInvoice]  WHERE Kunden.KundenNrZentrale=[tblTrdinInvoice].KundenNrZentrale AND Rechnungsdatum between '" & CDate(txtOPUmsatzVon._value).ToShortDateString & "' and '" & CDate(txtOPUmsatzBis._value).ToShortDateString & "') as UmsatzRg "

        sqlStr &= " FROM  Adressen INNER JOIN Kunden ON AdressenNr = KundenNr "

        'ANerkennung Versicherungsfall muss false sein:
        '   sqlStr &= " AND isnull((SELECT  kde_Versicherung_AnerkennungVersicherungsfall FROM tblKundenErweitert WHERE kde_KundenNr=Adressen.AdressenNr),0)=0 "

        'sqlStr &= "     and LfdSaldo > " & GrenzeVersicherung & " "
        If txtOPKdName.Text <> "" Then sqlStr &= "       and Ordnungsbegriff LIKE '" & txtOPKdName.Text.Replace("*", "%") & "'"
        If txtOPKdNrVon.Text <> "" Then sqlStr &= "      and AdressenNr >= '" & txtOPKdNrVon.Text & "'"
        If txtOPKdNrBis.Text <> "" Then sqlStr &= "      and AdressenNr <= '" & txtOPKdNrBis.Text & "'"
        '        If CheckBox1.Checked And MyComboBox1._value <> "" Then sqlStr &= "      and Adressen.LandKz = '" & MyComboBox1._value & "'"
        If MyComboBox1._value <> "" Then sqlStr &= "      and Adressen.LandKz = '" & MyComboBox1._value & "'"

        If cbxNurVersicherteLänder.Checked Then
            sqlStr &= " AND (select TOP 1 [Länderverzeichnis für die Außenhandelsstatistik].LandKz from [Länderverzeichnis für die Außenhandelsstatistik] "
            sqlStr &= "  LEFT JOIN Währungstabelle ON Währungstabelle.Währungsschlüssel=[Länderverzeichnis für die Außenhandelsstatistik].LandNr"
            sqlStr &= "       where Währungstabelle.LandKz = Adressen.LandKz) IN ('DE','AT','BE','BA','BG','FR','HR','MK','MD','ME','NL','RO','CH','SK','SI','RS','XS','TR','HU')"
        End If


        If cbxNichtVersicherbarAusblenden.Checked Then sqlStr &= " AND isnull((SELECT  kde_txtVersicherungNichtVersicherbar FROM tblKundenErweitert WHERE kde_KundenNr=Adressen.AdressenNr),0)=0 "

        If cbxKundeBeiRechtsanwaltausblenden.Checked Then sqlStr &= " and Rechtsanwalt= 0 "
        'If cbxKundeBeiRechtsanwaltausblenden.Checked Then sqlStr &= " and Rechtsanwalt= 0 "

        If cbx2JahreUmsatz.Checked Then sqlStr &= " and (SELECT COUNT(*)  FROM [tblKundenumsatz] where KundenNr=AdressenNr AND Firma_ID IN (" & getValuesFirma() & ")  AND Jahr in(DATEPART(YEAR, getdate()),DATEPART(YEAR, getdate())-1 ))>0 "


        'Kunden mit gesperrten Liestungen ausblenden:
        ' - Abfertigungsverbot=1
        ' - SDL Leistungen, außer Maut (sdltyp 2) -> alle gesperrt
        If cbxSDLLeistungenSperre.Checked Then
            sqlStr &= " AND NOT ( "
            sqlStr &= " Abfertigungsverbot=1 AND "
            sqlStr &= " (SELECT COUNT(*) FROM  [SDL].[dbo].[KundenSDL] AS SDL INNER JOIN [SDL].[dbo].[Speditionsdienstleistungen] ON  [Speditionsdienstleistungen].SDLNr=SDL.SDLNr WHERE SDL.Sperre=0 AND SDL.KundenNr=Adressen.AdressenNr AND [Speditionsdienstleistungen].SDLTypNr IN (1,2) )=0 "
            sqlStr &= " ) "
        End If




        'sqlStr &= "     and AdressenNr LIKE '7%'"
        'sqlStr &= "     and (select COUNT(*) from Offerten where Offerten.KundenNr=AdressenNr and OffertenNr IN(1,26,27))>0 "
        sqlStr &= ") as T "
        sqlStr &= " WHERE 1=1 "

        If txtOPRisikoBetragVon._value <> "" Or txtOPRisikoBetragBis._value <> "" Then
            If txtOPRisikoBetragVon._value <> "" Then sqlStr &= " AND Risiko >= '" & txtOPRisikoBetragVon._value & "'"
            If txtOPRisikoBetragBis._value <> "" Then sqlStr &= " AND Risiko <= '" & txtOPRisikoBetragBis._value & "'"
        End If

        If CheckBox1.Checked Then
            sqlStr &= " AND EXISTS"
            sqlStr &= "  (SELECT AdressenNr"
            sqlStr &= "     FROM tblSteuernummern "
            sqlStr &= "  WHERE (AdressenNr =T.AdressenNr))"
        End If

        If cbxHideZeroValues.Checked Then
            'sqlStr &= " AND NOT((Risiko=0 OR Risiko='') AND LfdSaldo =0  AND Vorauszahlung =0  AND Vorschau =0  AND Kto3470 =0  AND UStDiff =0) "
            sqlStr &= " AND NOT((Risiko=0 OR Risiko='') AND (LfdSaldo=0 OR LfdSaldo='')  AND (Vorauszahlung=0 OR Vorauszahlung='')  AND (Vorschau=0 OR Vorschau='')  AND (Kto3470=0 OR Kto3470='')  AND (UStDiff=0 OR UStDiff='')) "
        End If
        If cbxOPUmsatz.Checked Then
            If txtOPUmsatzBetragVon._value <> "" Then
                sqlStr &= " AND UmsatzRg >= '" & CDbl(txtOPUmsatzBetragVon._value) & "' "
            End If
            If txtOPUmsatzBetragBis._value <> "" Then
                sqlStr &= " AND UmsatzRg <= '" & CDbl(txtOPUmsatzBetragBis._value) & "' "
            End If
        End If

        If Not cbxOPUmsatz.Checked And cboSort._value = "UmsatzRg DESC" Then
            sqlStr &= " ORDER BY Ordnungsbegriff"
        Else
            sqlStr &= " ORDER BY " & cboSort._value
        End If

        Return sqlStr
    End Function


    Function getOPSqlIMEX() As String

        '  Dim Firmen_ID = If(MyListBox1.SelectedItems.Count > 0, "and Firma_ID IN (" & getValuesFirma() & ") ", "")
        Dim sqlStr = ""
        sqlStr &= "SELECT * FROM ("
        sqlStr &= " SELECT        Ordnungsbegriff, AdressenNr as KdNr, Adressen.LandKz, "
        If cbxDeckungsstoppAnzeigen.Checked Then sqlStr &= " (SELECT TOP 1 ISNULL([kde_Versicherung_DeckungsstoppDatum],'')  FROM [tblKundenErweitert]  where kde_Versicherung_Deckungsstopp=1 and kde_KundenNr=AdressenNr) AS DS, "
        If True Then sqlStr &= " isnull((SELECT TOP 1 [kde_Versicherung_GemeldeterBetrag] FROM [tblKundenErweitert]  where kde_KundenNr=AdressenNr),0) AS GemeldeterBetrag, "
        sqlStr &= "     (SELECT SUM(Saldo) FROM dbo.[Offene_Posten_DVO] WHERE (KundenNr = AdressenNr )) AS LfdSaldo, "
        sqlStr &= "     (SELECT        MIN(Datum) AS Expr1"
        sqlStr &= "         FROM            dbo.Offene_Posten_DVO"
        sqlStr &= "         WHERE        (KundenNr = AdressenNr )) AS Datum, "
        sqlStr &= "    /* (SELECT        MAX(Datum) AS Expr1"
        sqlStr &= "         FROM            dbo.Offene_Posten_DVO"
        sqlStr &= "         WHERE        (KundenNr = AdressenNr )) AS OPDatumMax, */"
        sqlStr &= "     CASE WHEN UStV_SummeUmsatzsteuerbetragEUR > UStV_SummeErstattungsbetragEUR THEN UStV_SummeUmsatzsteuerbetragEUR - UStV_SummeErstattungsbetragEUR ELSE 0 END AS UStDiff,"
        sqlStr &= "     UStV_Summe3470BetragEUR AS Kto3470, UStV_SummeVZBetragEUR AS Vorauszahlung, UStV_SummeVorschaubetragEUR AS Vorschau, "
        sqlStr &= "      isnull((SELECT SUM(Saldo) FROM dbo.Offene_Posten_DVO WHERE (KundenNr = AdressenNr )),0) - isnull(CASE WHEN UStV_SummeUmsatzsteuerbetragEUR > UStV_SummeErstattungsbetragEUR THEN UStV_SummeUmsatzsteuerbetragEUR - UStV_SummeErstattungsbetragEUR "
        sqlStr &= "     ELSE 0 END ,0) - isnull(UStV_Summe3470BetragEUR,0) + isnull(UStV_SummeVZBetragEUR,0) - isnull(UStV_SummeVorschaubetragEUR,0) - isnull(CASE WHEN ISNULL(BankgarantieGültigBis, "
        sqlStr &= "     GETDATE()) < GETDATE() THEN 0 ELSE ISNULL(BankgarantieBetrag, 0) END,0) AS Risiko ,  /*BankgarantieBetrag, BankgarantieGültigBis, */"
        sqlStr &= "     Versicherungssumme "



        '  sqlStr &= "     CASE WHEN LfdSaldo>" & GrenzeVersicherung & " THEN CASE WHEN ISNUMERIC(Versicherungssumme )=1 THEN cast(Versicherungssumme as decimal(16,2))  ELSE null END  ELSE null END as Versicherungssumme "

        '  If cbxOPUmsatz.Checked Then sqlStr &= " ,(SELECT SUM(SteuerfreierGesamtbetrag + SteuerpflichtigerGesamtbetrag)  as UmsatzRg FROM [Rechnungsausgang]  WHERE Kunden.KundenNrZentrale=[Rechnungsausgang].KundenNrZentrale AND RechnungsDatum between '01.06.2016' and '01.06.2017') as UmsatzRg "
        If cbxOPUmsatz.Checked Then sqlStr &= " ,(SELECT sum([SteuerpflichtigerBetragLokal]+[SteuerfreierBetragLokal]) as UmsatzRg/*,sum([RechnungsbetragLokal])as BruttoUmsatzRg*/  FROM [tblTrdinInvoice]  WHERE Kunden.KundenNrZentrale=[tblTrdinInvoice].KundenNrZentrale AND Rechnungsdatum between '" & CDate(txtOPUmsatzVon._value).ToShortDateString & "' and '" & CDate(txtOPUmsatzBis._value).ToShortDateString & "') as UmsatzRg "

        sqlStr &= " FROM  Adressen INNER JOIN Kunden ON AdressenNr = KundenNr "
        'IMEX:
        sqlStr &= " AND isnull(FilialenNr,'')='5501' "

        'ANerkennung Versicherungsfall muss false sein:
        sqlStr &= " AND isnull((SELECT  kde_Versicherung_AnerkennungVersicherungsfall FROM tblKundenErweitert WHERE kde_KundenNr=Adressen.AdressenNr),0)=0 "

        'sqlStr &= "     and LfdSaldo > " & GrenzeVersicherung & " "
        If txtOPKdName.Text <> "" Then sqlStr &= "       and Ordnungsbegriff LIKE '" & txtOPKdName.Text.Replace("*", "%") & "'"
        If txtOPKdNrVon.Text <> "" Then sqlStr &= "      and AdressenNr >= '" & txtOPKdNrVon.Text & "'"
        If txtOPKdNrBis.Text <> "" Then sqlStr &= "      and AdressenNr <= '" & txtOPKdNrBis.Text & "'"
        '        If CheckBox1.Checked And MyComboBox1._value <> "" Then sqlStr &= "      and Adressen.LandKz = '" & MyComboBox1._value & "'"
        If MyComboBox1._value <> "" Then sqlStr &= "      and Adressen.LandKz = '" & MyComboBox1._value & "'"

        If cbxNurVersicherteLänder.Checked Then
            sqlStr &= " AND (select TOP 1 [Länderverzeichnis für die Außenhandelsstatistik].LandKz from [Länderverzeichnis für die Außenhandelsstatistik] "
            sqlStr &= "  LEFT JOIN Währungstabelle ON Währungstabelle.Währungsschlüssel=[Länderverzeichnis für die Außenhandelsstatistik].LandNr"
            sqlStr &= "       where Währungstabelle.LandKz = Adressen.LandKz) IN ('DE','AT','BA','BE','BG','FR','HR','MK','MD','ME','NL','RO','CH','SK','SI','RS','XS','TR','HU')"
        End If


        If cbxNichtVersicherbarAusblenden.Checked Then sqlStr &= " AND isnull((SELECT  kde_txtVersicherungNichtVersicherbar FROM tblKundenErweitert WHERE kde_KundenNr=Adressen.AdressenNr),0)=0 "

        If cbxKundeBeiRechtsanwaltausblenden.Checked Then sqlStr &= " and Rechtsanwalt= 0 "
        'If cbxKundeBeiRechtsanwaltausblenden.Checked Then sqlStr &= " and Rechtsanwalt= 0 "

        If cbx2JahreUmsatz.Checked Then sqlStr &= " and (SELECT COUNT(*)  FROM [tblKundenumsatz] where KundenNr=AdressenNr AND Jahr in(DATEPART(YEAR, getdate()),DATEPART(YEAR, getdate())-1 ))>0 "


        'Kunden mit gesperrten Liestungen ausblenden:
        ' - Abfertigungsverbot=1
        ' - SDL Leistungen, außer Maut (sdltyp 2) -> alle gesperrt
        If cbxSDLLeistungenSperre.Checked Then
            sqlStr &= " AND NOT ( "
            sqlStr &= " Abfertigungsverbot=1 AND "
            sqlStr &= " (SELECT COUNT(*) FROM  [SDL].[dbo].[KundenSDL] AS SDL INNER JOIN [SDL].[dbo].[Speditionsdienstleistungen] ON  [Speditionsdienstleistungen].SDLNr=SDL.SDLNr WHERE SDL.Sperre=0 AND SDL.KundenNr=Adressen.AdressenNr AND [Speditionsdienstleistungen].SDLTypNr IN (1,2) )=0 "
            sqlStr &= " ) "
        End If




        'sqlStr &= "     and AdressenNr LIKE '7%'"
        'sqlStr &= "     and (select COUNT(*) from Offerten where Offerten.KundenNr=AdressenNr and OffertenNr IN(1,26,27))>0 "
        sqlStr &= ") as T "
        sqlStr &= " WHERE 1=1 "

        If txtOPRisikoBetragVon._value <> "" Or txtOPRisikoBetragBis._value <> "" Then
            If txtOPRisikoBetragVon._value <> "" Then sqlStr &= " AND Risiko >= '" & txtOPRisikoBetragVon._value & "'"
            If txtOPRisikoBetragBis._value <> "" Then sqlStr &= " AND Risiko <= '" & txtOPRisikoBetragBis._value & "'"
        End If

        If CheckBox1.Checked Then
            sqlStr &= " AND EXISTS"
            sqlStr &= "  (SELECT AdressenNr"
            sqlStr &= "     FROM tblSteuernummern "
            sqlStr &= "  WHERE (AdressenNr =T.AdressenNr))"
        End If

        If cbxHideZeroValues.Checked Then

            sqlStr &= " AND NOT((Risiko=0) AND (LfdSaldo=0)  AND (Vorauszahlung=0)  AND (Vorschau=0)  AND (Kto3470=0)  AND (UStDiff=0)) "

        End If
        If cbxOPUmsatz.Checked Then
            If txtOPUmsatzBetragVon._value <> "" Then
                sqlStr &= " AND UmsatzRg >= '" & CDbl(txtOPUmsatzBetragVon._value) & "' "
            End If
            If txtOPUmsatzBetragBis._value <> "" Then
                sqlStr &= " AND UmsatzRg <= '" & CDbl(txtOPUmsatzBetragBis._value) & "' "
            End If
        End If

        If Not cbxOPUmsatz.Checked And cboSort._value = "UmsatzRg DESC" Then
            sqlStr &= " ORDER BY Ordnungsbegriff"
        Else
            sqlStr &= " ORDER BY " & cboSort._value
        End If

        Return sqlStr
    End Function

    Function getValuesFirma() As String
        Dim s As String = ""
        For Each i In MyListBox1.SelectedItems
            s += DirectCast(i, VERAG_PROG_ALLGEMEIN.MyListItem).Value & ", "
        Next
        If s.EndsWith(", ") Then
            s = s.Substring(0, s.Length - 2)
        End If
        Return s
    End Function

    Function checkOPValid() As Boolean
        If txtOPRisikoBetragVon._value <> "" AndAlso Not IsNumeric(txtOPRisikoBetragVon._value) Then MsgBox("Risikobetrag-Von nicht korrekt!") : Return False
        If txtOPRisikoBetragBis._value <> "" AndAlso Not IsNumeric(txtOPRisikoBetragBis._value) Then MsgBox("Risikobetrag-Bis nicht korrekt!") : Return False
        If txtOPKdNrVon.Text <> "" AndAlso Not IsNumeric(txtOPKdNrVon.Text) Then MsgBox("KdNr-Von nicht korrekt!") : Return False
        If txtOPKdNrBis.Text <> "" AndAlso Not IsNumeric(txtOPKdNrBis.Text) Then MsgBox("KdNr-Bis nicht korrekt!") : Return False
        If cbxOPUmsatz.Checked Then
            Try : DateTime.ParseExact(txtOPUmsatzVon._value, "dd.MM.yyyy", culture)
            Catch ex As Exception : MsgBox("Umsatz-Von nicht korrekt!") : Return False : End Try
            Try : DateTime.ParseExact(txtOPUmsatzBis._value, "dd.MM.yyyy", culture)
            Catch ex As Exception : MsgBox("Umsatz-Bis nicht korrekt!") : Return False : End Try
        End If
        If cbxBagatellgrenze.Checked Then
            If txtBagatellgrenzeBei._value <> "" AndAlso Not IsNumeric(txtBagatellgrenzeBei._value) Then MsgBox("txtBagatellgrenze nicht korrekt!") : Return False
        End If
        '  If txtOPRisikoBetrag.Text <> "" AndAlso Not IsNumeric(txtOPRisikoBetrag.Text) Then MsgBox("Risikobetrag nicht korrekt!") : Return False
        Return True
    End Function

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Me.Cursor = Cursors.WaitCursor
        If Not checkOPValid() Then Me.Cursor = Cursors.Default : Exit Sub
        Try

            Dim dt As DataTable = SQL.loadDgvBySql_Param(getOPSql, "FMZOLL")
            'DataGridView.DataSource = dt


            Dim print As New frmPrintLayout
            print.Text = "Speditionsbericht"
            Dim rpt As New rptOP_Risikobericht
            rpt.DataSource = dt

            If rpt.DataSource.rows.count = 0 Then
                rpt.Dispose() : print.Dispose()
                MsgBox("Keine Daten vorhanden!")
                Exit Sub
            End If
            If cbxOPUmsatz.Checked Then
                rpt.lblUmsatzText.Visible = True
                rpt.lblUmsatzText.Text = "Umsatz (" & txtOPUmsatzVon.Text & " - " & txtOPUmsatzBis.Text & ")"
            Else
                rpt.lblUmsatzText.Visible = False
            End If

            Dim sum = 0
            rpt.lblSachbearbeiter.Text = VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME

            rpt.lblDat.Text = Now.ToLongDateString
            '  Dim sumAnz As Double = 0
            '  Dim sumBar As Double = 0
            Dim dummycount As Integer = 0
            AddHandler rpt.Detail.Format, Sub()
                                              rpt.lblKdNr.Text = If(rpt.Fields.Item("AdressenNr").Value, "")
                                              rpt.lblKunde.Text = If(rpt.Fields.Item("Ordnungsbegriff").Value, "")
                                              rpt.lblAV.Text = If(rpt.Fields.Item("Abfertigungsverbot").Value, "Ja", "")
                                              rpt.lblLand.Text = If(rpt.Fields.Item("LandKz").Value IsNot DBNull.Value, rpt.Fields.Item("LandKz").Value, "")

                                              rpt.lblBankgarantie.Text = If(rpt.Fields.Item("BankgarantieBetrag").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("BankgarantieBetrag").Value).ToString("C"), "")
                                              rpt.lblOPSaldo.Text = If(rpt.Fields.Item("LfdSaldo").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("LfdSaldo").Value).ToString("C"), "")
                                              rpt.lblUStDiff.Text = If(rpt.Fields.Item("UStDiff").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("UStDiff").Value).ToString("C"), "")
                                              rpt.lblKto3470.Text = If(rpt.Fields.Item("Kto3470").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("Kto3470").Value).ToString("C"), "")
                                              rpt.lblVorauszahlung.Text = If(rpt.Fields.Item("Vorauszahlung").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("Vorauszahlung").Value).ToString("C"), "")
                                              rpt.lblVorschau.Text = If(rpt.Fields.Item("Vorschau").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("Vorschau").Value).ToString("C"), "")

                                              If cbxOPUmsatz.Checked Then
                                                  rpt.lblUmsatz.Text = If(rpt.Fields.Item("UmsatzRg").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("UmsatzRg").Value).ToString("C"), "")
                                                  rpt.lblUmsatz.Visible = True
                                              End If

                                              Dim risiko As Double = 0
                                              If (rpt.Fields.Item("Risiko").Value IsNot DBNull.Value) Then
                                                  risiko = CDbl(rpt.Fields.Item("Risiko").Value)
                                                  rpt.lblRisiko.Text = risiko.ToString("C")
                                                  If risiko > 0 Then
                                                      rpt.lblRisiko.ForeColor = Color.Red
                                                  Else
                                                      rpt.lblRisiko.ForeColor = Color.Black
                                                  End If

                                              Else
                                                  rpt.lblRisiko.Text = ""
                                              End If


                                              rpt.lblVersicherungssumme.Text = If(rpt.Fields.Item("Versicherungssumme").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("Versicherungssumme").Value).ToString("C"), "")



                                              rpt.lblVersBetrag.Text = getVersBetrag(risiko, rpt.Fields.Item("Versicherungssumme").Value, rpt.Fields.Item("GemeldeterBetrag").Value).ToString("C")



                                              '   rpt.lblVersicherungssumme.Text = If(rpt.Fields.Item("Versicherungssumme").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("Versicherungssumme").Value).ToString("C"), "")

                                              '   rpt.lblVorschau.Text = If(rpt.Fields.Item("Vorschau").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("Vorschau").Value).ToString("C"), "")

                                              rpt.lblBankgarantieGueltigBis.Text = If(rpt.Fields.Item("BankgarantieGültigBis").Value IsNot DBNull.Value, CDate(rpt.Fields.Item("BankgarantieGültigBis").Value).ToShortDateString, "")
                                              rpt.lblOPDat.Text = If(rpt.Fields.Item("OPDatumMin").Value IsNot DBNull.Value, CDate(rpt.Fields.Item("OPDatumMin").Value).ToShortDateString, "")
                                              'Abwechselnd grauen und weißen Hintergrund
                                              dummycount += 1
                                              If (dummycount Mod 2) = 0 Then
                                                  rpt.Detail.BackColor = Color.FromArgb(240, 240, 240)
                                              Else
                                                  rpt.Detail.BackColor = Drawing.Color.White
                                              End If
                                          End Sub

            print.Viewer.LoadDocument(rpt)
            print.Viewer.ViewType = GrapeCity.Viewer.Common.Model.ViewType.Continuous
            print.Show()

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        Me.Cursor = Cursors.Default
    End Sub

    Function getVersBetrag(risiko, Versicherungssumme, GemeldeterBetrag) As Double
        If risiko Is DBNull.Value Then Return 0

        Dim versBetrag As Double = 0
        If risiko <= 0 Then
            versBetrag = 0
        ElseIf cbxBagatellgrenze.Checked And risiko <= txtBagatellgrenzeBei._value Then
            versBetrag = 0 ' kleiner Bagatellgrenze
        ElseIf risiko <= GrenzeVersicherung Then
            If Versicherungssumme IsNot DBNull.Value Then
                If risiko > CDbl(Versicherungssumme) Then
                    versBetrag = Versicherungssumme
                Else
                    versBetrag = risiko
                End If
            Else
                versBetrag = risiko
            End If
        Else
            If Versicherungssumme IsNot DBNull.Value Then
                If risiko > CDbl(Versicherungssumme) Then
                    versBetrag = Versicherungssumme
                Else
                    versBetrag = risiko
                End If
            Else
                versBetrag = GrenzeVersicherung
            End If
        End If

        Return If(GemeldeterBetrag > 0, GemeldeterBetrag, versBetrag)
    End Function

    Private Sub cbxOPUmsatz_CheckedChanged(sender As Object, e As EventArgs) Handles cbxOPUmsatz.CheckedChanged
        txtOPUmsatzVon.Enabled = sender.checked
        txtOPUmsatzBis.Enabled = sender.checked
        txtOPUmsatzBetragVon.Enabled = sender.checked
        txtOPUmsatzBetragBis.Enabled = sender.checked
    End Sub

    Private Sub cbxBagatellgrenze_CheckedChanged(sender As Object, e As EventArgs) Handles cbxBagatellgrenze.CheckedChanged
        txtBagatellgrenzeBei.Enabled = sender.checked
    End Sub


    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        Dim sqlStr = " SELECT TOP (1000) [KundenNr] as KdNr,Ordnungsbegriff as Kunde"
        sqlStr &= " ,(Versicherungssumme ) as  [Vers.summe]"
        '  sqlStr &= " ,isnull(cast(Versicherungssumme as varchar(50)),'') as  [Vers.summe]"
        sqlStr &= " ,case when kde_Versicherung_Deckungsstopp=1 then 'WAHR' ELSE '' END as [DS]"
        sqlStr &= " 	  ,isnull(cast(cast(kde_Versicherung_DeckungsstoppDatum as date) as varchar(10)),'') as  [DS Datum]"
        sqlStr &= " ,case when kde_txtVersicherungNichtVersicherbar=1 then 'WAHR' ELSE '' END as  [nicht versicherbar]"
        sqlStr &= " ,case when kde_Versicherung_Uebergeben=1 then 'WAHR' ELSE '' END as [Vers. übergeben]"
        sqlStr &= " 	  ,isnull(cast(cast(kde_Versicherung_UebergebenAm as date) as varchar(10)),'') as  [Vers. übergeben Dat] "
        sqlStr &= " ,case when kde_Versicherung_AnerkennungVersicherungsfall=1 then 'WAHR' ELSE '' END as [Vers.fall]"
        sqlStr &= " ,isnull(cast(kde_txtVersicherungDeckungsquote as varchar(20)),'') as  [Quote]"
        sqlStr &= " 	  ,isnull(cast(cast(kde_Versicherung_AnerkennungVersicherungsfallAb as date) as varchar(10)),'') as  [Anerk. Vers. Fall] "
        sqlStr &= " FROM [VERAG].[dbo].[Kunden] inner join Adressen on AdressenNr=KundenNr left join tblKundenErweitert on kde_KundenNr =KundenNr"
        sqlStr &= " where (Versicherungssumme is not null  or kde_txtVersicherungNichtVersicherbar=1 or kde_Versicherung_Deckungsstopp=1 or kde_Versicherung_Uebergeben=1 or kde_Versicherung_AnerkennungVersicherungsfall=1)"
        sqlStr &= " order by Ordnungsbegriff "

        Me.Cursor = Cursors.WaitCursor
        If Not checkOPValid() Then Me.Cursor = Cursors.Default : Exit Sub

        Dim dt = SQL.loadDgvBySql(sqlStr, "FMZOLL")
        '   dt.Columns.Add("VersicherungsBetrag", Type.GetType("System.Double"))
        '  For Each r In dt.Rows
        'r("VersicherungsBetrag") = getVersBetrag(r("Risiko"), r("Versicherungssumme"))
        ' Next
        '   dt.Columns("VersicherungsBetrag").ColumnName = "V-Betrag"
        '  dt.Columns("Versicherungssumme").ColumnName = "V-Summe"
        ' dt.Columns("Vorauszahlung").ColumnName = "VZ"

        '  If cbxFormatNumbers.Checked Then
        cProgramFunctions.genExcelFromDT_NEW(dt, {"C1:C" & (dt.Rows.Count + 1), "C1:C" & (dt.Rows.Count + 1)})
        '  Else
        '   cProgramFunctions.genExcelCSVFromDT(dt)
        '  End If


        'cProgramFunctions.genExcelFromDT_NEW(dt)
        'cProgramFunctions.genExcelFromDT_NEW(dt, , False)


        Me.Cursor = Cursors.Default
    End Sub


    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
        Dim f As New frmVorauskasse
        f.Show(Me)
    End Sub



    Private Sub GroupBox4_Enter(sender As Object, e As EventArgs) Handles GroupBox4.Enter

    End Sub

    Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
        Dim StartZeit As Date = DateTime.Now
        Dim StopZeit As Date = DateTime.Now
        Label31.Visible = False
        Dim cnt = 0
        'dim listAVISO = New List(Of cAviso)
        Dim sql As New VERAG_PROG_ALLGEMEIN.SQL
        Dim kdnr_tmp = ""
        Try

            Dim fd As New OpenFileDialog
            fd.Filter ="CSV Files (*.csv)|*.csv"
            If fd.ShowDialog = DialogResult.OK Then
                If fd.FileName.ToUpper.EndsWith(".CSV") Then

                    Dim Lines As String() = My.Computer.FileSystem.ReadAllText(fd.FileName, System.Text.Encoding.Default).Split(vbCr)
                    Dim LineCount As Integer = Lines.Length

                    ' fd.FileName.EndsWith(".csv") 
                    Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(fd.FileName, Encoding.Default)
                        MyReader.TextFieldType = FileIO.FieldType.Delimited
                        MyReader.SetDelimiters(";")
                        Dim currentRow As String()


                        If VERAG_PROG_ALLGEMEIN.cOffene_Posten_DVO.DELETE_ALL Then



                            While Not MyReader.EndOfData
                                Try
                                    ' If cnt > 100 Then Exit Sub
                                    currentRow = MyReader.ReadFields()
                                    '    Dim currentField As String
                                    Dim kdnr As Integer = 1000000

                                    If currentRow.Length > 24 Then
                                        If IsNumeric(currentRow(0).Trim()) AndAlso currentRow(0) > 99999 Then

                                            If CInt(currentRow(0)) <> 200001 Then ' DUBIOSE FORDERUNGEN


                                                Try

                                                    kdnr += currentRow(0).Substring(1) 'erste Stelle weg --> 2 oder 5
                                                    kdnr_tmp = kdnr

                                                    Dim OP As New VERAG_PROG_ALLGEMEIN.cOffene_Posten_DVO()
                                                    '  VERAG_PROG_ALLGEMEIN.SQL.isleernothing(getTrimedString(currentRow(11), 20))
                                                    '220404
                                                    '   Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
                                                    OP.Konto = CInt(sql.isleernothing(currentRow(0)))
                                                    OP.KontoBez = sql.isleernothing(currentRow(1))
                                                    OP.KundenNr = kdnr
                                                    OP.Rechnung = sql.isleernothing(currentRow(2))
                                                    OP.Datum = sql.isleernothing(currentRow(3))
                                                    OP.Buchungsbetrag_SOLL = CDbl(sql.isleernothing(currentRow(4)))
                                                    OP.Buchungsbetrag_HABEN = CDbl(sql.isleernothing(currentRow(5)))
                                                    OP.Saldo = CDbl(sql.isleernothing(currentRow(6)))
                                                    OP.Steuercode = sql.isleernothing(currentRow(7))
                                                    OP.Ländercode = sql.isleernothing(currentRow(8))
                                                    OP.Steuerbetrag = CDbl(sql.isleernothing(currentRow(9)))
                                                    OP.Buchungstext = sql.isleernothing(currentRow(10) & currentRow(11))
                                                    OP.Faell_Tage1 = sql.isleernothing(currentRow(12))
                                                    If IsNumeric(currentRow(13)) Then OP.Faell_Prozent1 = CDbl(sql.isleernothing(currentRow(13)))
                                                    OP.Faell_Tage2 = sql.isleernothing(currentRow(14))
                                                    If IsNumeric(currentRow(15)) Then OP.Faell_Prozent2 = CDbl(sql.isleernothing(currentRow(15)))
                                                    OP.Faell_Tage3 = sql.isleernothing(currentRow(16))
                                                    If IsNumeric(currentRow(17)) Then OP.Faell_Prozent3 = CDbl(sql.isleernothing(currentRow(17)))
                                                    OP.Mahnstufe = sql.isleernothing(currentRow(18))
                                                    '  OP.Rechnung_Gutschrift = sql.isleernothing(currentRow(21))?
                                                    ' OP.Storno = sql.isleernothing(currentRow(XXXX))
                                                    OP.Jahr = sql.isleernothing(currentRow(20))
                                                    OP.Faelligkeit = CDate(sql.isleernothing(currentRow(25)))

                                                    OP.SAVE()

                                                Catch ex As Exception
                                                    MsgBox("KdNr: " & kdnr & vbNewLine & ex.Message & ex.StackTrace)
                                                End Try


                                            End If
                                        End If

                                    End If

                                    cnt += 1

                                    If cnt Mod 10 = 0 Then
                                        Application.DoEvents()

                                        Label30.Text = (cnt) & " / " & LineCount
                                    End If
                                    'For Each currentField In currentRow
                                    'Next
                                Catch ex As Exception
                                    MsgBox(kdnr_tmp & "  " & ex.Message & ex.StackTrace)
                                End Try
                            End While
                            Label30.Text = (cnt + 1) & " / " & LineCount
                            Label31.Visible = True
                        Else
                            MsgBox("FEHLER beim Löschen der vorhandenen OP-Liste.")
                        End If
                    End Using
                End If
            End If

        Catch ex As Exception
            MsgBox(ex.Message & ex.StackTrace)
        Finally

        End Try

    End Sub

    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
        Dim f As New frmBU_Mahnlauf
        f.Show()
    End Sub

    Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
        Dim sqlStr = "SELECT  KundenNr,[Adressen].[Name 1] + ' ' + isnull([Adressen].[Name 2],'') Name,[Adressen].[Straße],[Adressen].[LandKz],[Adressen].[PLZ],[Adressen].[Ort],[Adressen].[Telefon],[Adressen].[E-Mail],[Adressen].[UstIdKz],[Adressen].[UstIdNr],[Abfertigungsverbot seit],[Abfertigungsverbot Grund]
                          FROM  [Adressen] inner join Kunden on AdressenNr=KundenNr 
                          inner join Filialen on kunden.FilialenNr=Filialen.FilialenNr
                          where Filialen.Firma='" & cboAbfVerbFirma._value & "' and Abfertigungsverbot=1  and Auswahl='A' ORDER BY KundenNr "

        Me.Cursor = Cursors.WaitCursor
        If Not checkOPValid() Then Me.Cursor = Cursors.Default : Exit Sub

        Dim dt = SQL.loadDgvBySql(sqlStr, "FMZOLL")


        cProgramFunctions.genExcelFromDT_NEW(dt)


        Me.Cursor = Cursors.Default
    End Sub
End Class
