Imports System.IO
Imports com.sun.xml.internal.rngom
Imports DocumentFormat.OpenXml.Vml
Imports javax.print.attribute.standard
Imports Microsoft.Office.Interop
Imports org.BouncyCastle.Math
Imports VERAG_PROG_ALLGEMEIN

Public Class frmProvisionisverguetung

    Dim loaded = False
    Private Sub frmProvisionisverguetung_load(sender As Object, e As EventArgs) Handles Me.Load
        txtAbfertDat._value = CDate("01." & Now.Month & "." & Now.Year).AddMonths(-1)
        txtAbfertDatBis._value = CDate("01." & Now.Month & "." & Now.Year).AddDays(-1)
        loaded = True
        initDGV()


    End Sub

    Sub initDGV()
        If Not loaded Then Exit Sub

        With MyDatagridview1
            .Columns.Clear()

            If txtAbfertDat._value = "" Then Exit Sub
            If txtAbfertDatBis._value = "" Then Exit Sub

            .SET_SQL("select Firma_ID,AdressenNr,Ordnungsbegriff,kde_Provisionsverguetung_GSAnKdNr GS_AnKdNr,(select Ordnungsbegriff from adressen where AdressenNr = kde_Provisionsverguetung_GSAnKdNr) GS_An,
                        kde_Provisionsverguetung_ProzentDL ProvProz,cast(min(Abfertigungsdatum)as date)MinAbfDat,cast(Max(Abfertigungsdatum)as date)MaxAbfDat,
                        count(DISTINCT RechnungsNr) Anzahl,sum(rp.SteuerfreierBetrag+rp.SteuerpflichtigerBetrag) Umsatz,sum(rp.SteuerfreierBetrag+rp.SteuerpflichtigerBetrag)*kde_Provisionsverguetung_ProzentDL Provision
                        -- Hier die Liste aller Rechnungsnummern mit Komma getrennt
                            ,STUFF((
		                        SELECT ',' + CAST(RA2.RechnungsNr as varchar(50))
		                        FROM Rechnungsausgang RA2
		                        INNER JOIN RechnungsausgangPositionen RP2 ON RA2.RK_ID = RP2.RK_ID
		                        INNER JOIN Leistungen LG2 ON RP2.LeistungsNr = LG2.LeistungsNr
		                        INNER JOIN Filialen FL2 ON RA2.FilialenNr = FL2.FilialenNr
		                        WHERE RA2.RechnungsKundenNr = Adressen.AdressenNr
		                          AND LG2.Provisionsabrechnung = 1
		                          AND FL2.Firma = '" & VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "'
		                          AND RA2.RechnungsDatum BETWEEN '" & CDate(txtAbfertDat._value).ToShortDateString & "' AND '" & CDate(txtAbfertDatBis._value).ToShortDateString & "'
				                         GROUP BY RA2.RechnungsNr
			                        FOR XML PATH(''), TYPE
		                        ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS RechnungsNrListe
                        -- Ende Liste aller Rechnungsnummern
                    FROM Adressen inner join Kunden on KundenNr=AdressenNr inner join tblKundenErweitert on KundenNr=kde_KundenNr
	                        left join Rechnungsausgang RA on RechnungsKundenNr=AdressenNr
	                        inner join RechnungsausgangPositionen RP on RA.RK_ID=RP.RK_ID
	                        inner join Leistungen LG on rp.LeistungsNr= LG.LeistungsNr 
	                        inner join Filialen FL on RA.FilialenNr=FL.FilialenNr
                    where kde_Provisionsverguetung=1
	                        and LG.Provisionsabrechnung=1
	                        and kde_Provisionsverguetung_ProzentDL is not null
                            and FL.Firma='" & VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "'
	                        and RechnungsDatum between '" & CDate(txtAbfertDat._value).ToShortDateString & "' AND '" & CDate(txtAbfertDatBis._value).ToShortDateString & "'
                    group by Firma_ID,AdressenNr,Ordnungsbegriff, kde_Provisionsverguetung_GSAnKdNr,kde_Provisionsverguetung_ProzentDL
                    order by GS_AnKdNr,Ordnungsbegriff
                         ", "FMZOLL")
            .LOAD()
            .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
            .Columns("GS_An").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill

            .Columns("Firma_ID").Visible = False
            .Columns("RechnungsNrListe").Visible = False
            '.Columns("AdressenNr").Visible = False
        End With
    End Sub

    Private Sub txtAbfertDat_ValueChanged() Handles txtAbfertDat.ValueChanged, txtAbfertDatBis.ValueChanged
        initDGV()
    End Sub

    Private Sub cbxNurOffene_CheckedChanged(sender As Object, e As EventArgs) Handles cbxNurOffene.CheckedChanged
        initDGV()
    End Sub

    Private Sub Button9_Click(sender As Object, e As EventArgs) Handles btnPDF.Click, btnMail.Click
        Try
            Me.Cursor = Cursors.WaitCursor
            If MyDatagridview1.SelectedRows.Count = 0 Then
                MsgBox("Bitte zuerst einen oder mehrere Einträge auswählen!")
                Exit Sub
            End If
            Dim gsAnKdNr As Integer = -1
            Dim PDF_LIST As New List(Of String)
            For Each row In MyDatagridview1.SelectedRows
                Dim adrNr = row.Cells("AdressenNr").Value
                gsAnKdNr = row.Cells("GS_AnKdNr").Value
                Dim provProz = row.Cells("ProvProz").Value
                Dim Firma_ID = row.Cells("Firma_ID").Value

                If row.Cells("RechnungsNrListe").Value Is DBNull.Value Then Exit Sub
                If row.Cells("RechnungsNrListe").Value = "" Then Exit Sub

                Dim RechnungsNrListe = row.Cells("RechnungsNrListe").Value.ToString
                Dim RG_LIST As List(Of Integer) = RechnungsNrListe.Split(","c).Where(Function(s) Not String.IsNullOrWhiteSpace(s)).Select(Function(s) Convert.ToInt32(s)).ToList()
                If RG_LIST.Count > 0 Then
                    ' Provisionsabrechnung erstellen
                    Dim pathPDF_SammelBericht = "" 'DATENVERVER_OPTIONS.getTMPPath("\Provisionsabrechnung_" & Now.ToString("yyyyMMdd_HHmmss") & ".pdf", ".pdf")
                    cFakturierung.doSAMMELRechnungDruck_Rechnungsdruck_Sammelrechnungsbericht(-1, Now, 4, pathPDF_SammelBericht, "", "PROVISIONSABRECHNUNG", Nothing, Nothing, RG_LIST, Firma_ID)

                    If pathPDF_SammelBericht <> "" Then PDF_LIST.Add(pathPDF_SammelBericht)
                End If
            Next

            If PDF_LIST.Count = 1 Then
                Select Case sender.name
                    Case "btnPDF"
                        Process.Start(PDF_LIST(0))
                    Case Else
                        createMail(PDF_LIST(0), MyDatagridview1, gsAnKdNr)
                End Select

            ElseIf PDF_LIST.Count > 1 Then
                Dim merge_pathPDF_SammelBericht = DATENVERVER_OPTIONS.getTMPPath("\Provisionsabrechnung_Merge_" & Now.ToString("yyyyMMdd_HHmmss") & ".pdf", ".pdf",, False)
                If FormularManagerNEU.MergePdfFiles(PDF_LIST, merge_pathPDF_SammelBericht) Then
                    Select Case sender.name
                        Case "btnPDF"
                            Process.Start(merge_pathPDF_SammelBericht)
                        Case Else
                            createMail(merge_pathPDF_SammelBericht, MyDatagridview1, gsAnKdNr)
                    End Select

                End If
            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 Sub createMail(path As String, dgv As DataGridView, kdNr As Integer)

        Dim outl As New Outlook.Application
        Dim Mail As Microsoft.Office.Interop.Outlook.MailItem
        Dim ad As New cAdressen(kdNr)
        Try

            Mail = outl.CreateItem(0)


            Dim fileInfo As New FileInfo(path)
            If path <> "" Then
                Mail.Attachments.Add(path, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue,, "PROVISIONSABRECHNUNG" & fileInfo.Extension)
            End If


            Dim mailText As String = "Sehr geehrte Damen und Herren," & vbNewLine & vbNewLine & "anbei die PROVISIONSABRECHNUNG von " & txtAbfertDat._value & " bis " & txtAbfertDatBis._value & "." & vbNewLine & vbNewLine & vbNewLine

            mailText &= "<table border=1>"
            mailText &= "<tr><td>Kunde</td><td>Anzahl Rechnungen</td><td>Umsatz</td><td>Provision</td></tr>"

            Dim sumProv As Double = 0
            Dim sumUmsatz As Double = 0
            Dim anzahl As Integer = 0

            For Each row As DataGridViewRow In dgv.SelectedRows

                mailText &= "<tr>"
                mailText &= "<td><b>" & row.Cells("Ordnungsbegriff").Value & "</b></td>"
                mailText &= "<td><b>" & row.Cells("Anzahl").Value & "</b></td>"
                mailText &= "<td><b>" & CDbl(row.Cells("Umsatz").Value) & "</b></td>"
                mailText &= "<td><b>" & CDbl(row.Cells("Provision").Value) & "</b></td>"
                mailText &= "</tr>"

                sumProv += CDbl(row.Cells("Provision").Value)
                sumUmsatz += CDbl(row.Cells("Umsatz").Value)
                anzahl += CInt(row.Cells("Anzahl").Value)

            Next

            mailText &= "<tr>"
            mailText &= "<td><b>SUMME</b></td>"
            mailText &= "<td><b>" & anzahl & "</b></td>"
            mailText &= "<td><b>" & sumUmsatz & " </b></td>"
            mailText &= "<td><b>" & sumProv & "</b></td>"
            mailText &= "</tr>"

            mailText &= "</table>" & vbNewLine & vbNewLine & vbNewLine


            Dim TextHTML = ""
            If mailText <> "" Then
                TextHTML = "<div style=""font-family:Calibri, Arial"">" & mailText.Replace(ControlChars.Lf, "<br>") & cFakturierung.getSignature(ad.LandKz, VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA_ID,,,,,, ) & "</div>"
                Mail.HTMLBody = TextHTML
            End If

            Mail.Subject = "PROVISIONSABRECHNUNG"

            Mail.To = VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdress(ad.AdressenNr, "Rechnung an")
            Mail.CC = VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdressCC(ad.AdressenNr, "Rechnung an")
            Mail.BCC = VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdressBCC(ad.AdressenNr, "Rechnung an")

            If Mail.To = "" Then
                Mail.To &= IIf(ad.E_Mail IsNot Nothing, ad.E_Mail, "")
            End If

            Mail.Display()
            Me.Cursor = Cursors.Default

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



    End Sub

End Class