Imports GrapeCity.DataVisualization.TypeScript Imports Microsoft.Office.Interop Imports Microsoft.Office.Interop.Outlook Imports VERAG_PROG_ALLGEMEIN Public Class frmSendEmail ' Felder / Instanzvariablen Private RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang Private SPEDBUCH As VERAG_PROG_ALLGEMEIN.cSpeditionsbuch Private ReadOnly FUNC As New cProgramFunctions Private printOriginalRg As Object = Nothing Private ATTACHMENTS As New List(Of cFakt_SendMailATTach) Private SR_List As List(Of cFakt_SR_List) = Nothing Private SR_DT As DataTable = Nothing Private Firma_ID As Integer Private SammelrechungArt As Integer Private KdNr As Integer Private DatumBis As Date Private Rechnungsdatum As Date? Private SB As String Private Rechnungsdruck As Integer = 3 Private EinzelAnlagen As Boolean Private Sammelbericht As Boolean Private xlsEvolog As Boolean Private xlsTransFerry As Boolean Private RechnungsNr As Integer Private FakturierungsGruppe As String Private Abfertigungsart As String Private DruckDatumZeit As DateTime Private AvisoIds As List(Of Integer) Private printRgCopy As Boolean = False Private SR As Boolean = False ' Konstruktor 1 Public Sub New(ByVal RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, ByVal SPEDBUCH As VERAG_PROG_ALLGEMEIN.cSpeditionsbuch, ByVal printOriginalRg As Object, ByVal Rechnungsdruck As Integer, ByVal Kdnr As Integer, Optional ByVal Rechnungsdatum As Object = Nothing) ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() Me.RECHNUNG = RECHNUNG ' Hinweis: Firma_ID wird hier nicht als Parameter übergeben. Me.Firma_ID = Firma_ID Me.SPEDBUCH = SPEDBUCH Me.printOriginalRg = printOriginalRg Me.KdNr = Kdnr Me.Rechnungsdruck = Rechnungsdruck If Rechnungsdatum IsNot Nothing Then Me.Rechnungsdatum = CDate(Rechnungsdatum) End If End Sub ' Ereignishandler: Form-Load Private Sub frmFaktEmail_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim AD As VERAG_PROG_ALLGEMEIN.cAdressen Dim FISKAL As cFiskal_Daten = Nothing AD = New VERAG_PROG_ALLGEMEIN.cAdressen(KdNr) FISKAL = New cFiskal_Daten(KdNr) setMailText() If AD.E_Mail IsNot Nothing AndAlso AD.E_Mail <> "" Then lkl.Text = """" & AD.E_Mail & """ anfügen" lkl.Tag = AD.E_Mail End If lblKunde.Text = AD.AdressenNr & " - " & AD.Ordnungsbegriff Dim email_receipt As String = "" If SR Then Dim allAtilla As Boolean = (Firma_ID = 7) If SR_DT IsNot Nothing AndAlso SR_DT.Rows.Count > 0 Then For Each r As DataRow In SR_DT.Rows If "4801" <> r("FilialenNr").ToString() AndAlso "4802" <> r("FilialenNr").ToString() Then allAtilla = False Exit For End If Next End If email_receipt = If(allAtilla, VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdress(KdNr, "Rechnung an (ATILLA)"), "") Else If RECHNUNG.FilialenNr = "4801" OrElse RECHNUNG.FilialenNr = "4802" Then email_receipt = VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdress(KdNr, "Rechnung an (ATILLA)") End If End If Dim EMAILTMP As String = If(email_receipt = "", VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdress(KdNr, "Rechnung an"), email_receipt) If EMAILTMP <> "" Then dgvEmail.Rows.Add(EMAILTMP) Dim EMAILTMPCC As String = If(email_receipt = "", VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdressCC(KdNr, "Rechnung an"), VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdressCC(KdNr, "Rechnung an (ATILLA)")) If EMAILTMPCC <> "" Then dgvEmailCC.Rows.Add(EMAILTMPCC) Dim EMAILTMPBCC As String = If(email_receipt = "", VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdressBCC(KdNr, "Rechnung an"), VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdressBCC(KdNr, "Rechnung an (ATILLA)")) If EMAILTMPBCC <> "" Then dgvEmailBCC.Rows.Add(EMAILTMPBCC) initDGVAnhaenge() End Sub ' Linklabel-Klick: Kunde anzeigen Private Sub lblKunde_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles lblKunde.LinkClicked FUNC.showKd(KdNr) End Sub ' Initialisierung der Anlagen-DGV Private Sub initDGVAnhaenge() With dgvAnhaenge .Rows.Clear() .Enabled = True If SR AndAlso SammelrechungArt <> 6 Then .Enabled = False Exit Sub End If If SammelrechungArt = 6 AndAlso RECHNUNG Is Nothing Then For Each r As DataRow In SR_DT.Rows Dim RG As New VERAG_PROG_ALLGEMEIN.cRechnungsausgang(r("RK_ID")) If RG IsNot Nothing Then RG.LOAD_ANHAENGE() For Each RG_AH In RG.ANHAENGE .Rows.Add(0, "", RG_AH.Bezeichnung, RG_AH.dsId, RG_AH.anhId) Next End If Next Else RECHNUNG.LOAD_ANHAENGE() If RECHNUNG IsNot Nothing AndAlso RECHNUNG.ANHAENGE IsNot Nothing Then For Each RG_AH In RECHNUNG.ANHAENGE .Rows.Add(0, "", RG_AH.Bezeichnung, RG_AH.dsId, RG_AH.anhId) Next End If End If End With dgvAnhaenge.ClearSelection() End Sub ' Anzeige von HTML im WebBrowser Private Sub wbShowHTML(ByVal WebBrowser As WebBrowser, ByVal HtmlText As String) Try With WebBrowser If .Url Is Nothing OrElse .Url.AbsoluteUri <> "about:blank" Then .Navigate("about:blank") System.Windows.Forms.Application.DoEvents() End If ' Hier ggf. den HTML-Inhalt setzen, z. B.: ' .Document.Body.InnerHtml = HtmlText End With Catch ex As System.Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try End Sub ' Gibt die Rechnungsnummer als String zurück Private Function getRgNr(ByVal RechnungsNr As Integer) As String If RechnungsNr <= 0 Then Return "%RgNr%" Return RechnungsNr.ToString() End Function ' Setzt den Mail-Text Private Sub setMailText() Dim abfNr As String = " Pos-Nr.: " & RECHNUNG.FilialenNr & "-" & RECHNUNG.AbfertigungsNr & " LKW: " & RECHNUNG.LKW_Kennzeichen txtSubject.Text = "Verzollungsunterlagen zu " & abfNr RichTextBox.Text = "Sehr geehrte Damen und Herren," & Environment.NewLine & Environment.NewLine & "anbei erhalten Sie die Verzollungsunterlagen zu Ihrer weiteren Verwendung." & Environment.NewLine & Environment.NewLine & "Für weitere Fragen stehen wir Ihnen natürlich gerne zur Verfügung." & Environment.NewLine & Environment.NewLine & "Mit freundlichen Grüßen" & Environment.NewLine End Sub ' Klick-Event des Buttons Private Sub btn_Click(sender As Object, e As EventArgs) Handles btn.Click Dim additionalLine As String = "" If SR Then Try VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.clearTMPPath("Zusammenfassung") Dim listPDFs As New List(Of String) Dim SonstAnlagen As New List(Of String) Dim lastAktuelle_RgNr As Integer = -1 Dim RechnungsNrisSet As Boolean = False Dim AD As New VERAG_PROG_ALLGEMEIN.cAdressen(KdNr) Dim outl As New Outlook.Application Dim Mail_StbFA As Microsoft.Office.Interop.Outlook.MailItem = outl.CreateItem(0) Mail_StbFA.Subject = txtSubject.Text Dim Mail As Microsoft.Office.Interop.Outlook.MailItem = outl.CreateItem(0) Mail.Subject = txtSubject.Text If Firma_ID = 24 Then Try Dim accountToSent As String = SDL.cFakturierung.getDefaultMail("AMBAR", , True) For Each oAccount As Outlook.Account In outl.Session.Accounts If oAccount.SmtpAddress = accountToSent Then Mail.SendUsingAccount = oAccount Exit For End If Next Catch ex As System.Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR("Fehler beim Ermitteln des Mail-Accounts." & ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try End If For Each r As DataGridViewRow In dgvEmail.Rows If r.Cells(0).Value IsNot Nothing AndAlso r.Cells(0).Value.ToString() <> "" Then Mail.To &= r.Cells(0).Value.ToString() & ";" End If Next For Each r As DataGridViewRow In dgvEmailCC.Rows If r.Cells(0).Value IsNot Nothing AndAlso r.Cells(0).Value.ToString() <> "" Then Mail.CC &= r.Cells(0).Value.ToString() & ";" End If Next For Each r As DataGridViewRow In dgvEmailBCC.Rows If r.Cells(0).Value IsNot Nothing AndAlso r.Cells(0).Value.ToString() <> "" Then Mail.BCC &= r.Cells(0).Value.ToString() & ";" End If Next Dim TextHTML As String = "
" & RichTextBox.Text.Replace(ControlChars.Lf, "
") & cFakturierung.getSignature(AD.LandKz, Firma_ID, , , , additionalLine, , If(Firma_ID = "24", True, False)) & "
" Mail.HTMLBody = TextHTML Mail.Subject = txtSubject.Text ATTACHMENTS.Clear() For Each l As String In listPDFs ATTACHMENTS.Add(New cFakt_SendMailATTach(l, "")) Next For Each l As String In SonstAnlagen ATTACHMENTS.Add(New cFakt_SendMailATTach(l, "")) Next If SR_DT IsNot Nothing AndAlso SR_DT.Rows.Count > 0 Then For Each r As DataRow In SR_DT.Rows Dim RG_ANH = VERAG_PROG_ALLGEMEIN.cRechnungsausgang.LOAD_ANHAENGE_LIST(r("RK_ID")) If RG_ANH IsNot Nothing Then For Each ANH In RG_ANH ATTACHMENTS.Add(New cFakt_SendMailATTach(VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(ANH.dsId), ANH.Bezeichnung)) Next End If Next If SPEDBUCH.DokumentId_Steuerbeleg IsNot Nothing Then ATTACHMENTS.Add(New cFakt_SendMailATTach(VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(SPEDBUCH.DokumentId_Steuerbeleg), "Steuerbescheid.pdf")) End If Dim mergePdfEnabled As Boolean = chkMergePDF.Checked addAttachments(Mail, lastAktuelle_RgNr, mergePdfEnabled) Mail.Display() End If Catch ex As System.Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR("Fehler beim Öffnen des Mail-Programmes." & ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Else ' ER-Fall If RECHNUNG.FakturierungsGruppe <> "" Then additionalLine = "Abrechnungsstelle: " & RECHNUNG.FakturierungsGruppe.Replace("WAI", "Waidhaus") End If Try Dim outl As New Outlook.Application Dim Mail As Microsoft.Office.Interop.Outlook.MailItem = outl.CreateItem(0) Dim RechnungsNrisSet As Boolean = False If Firma_ID = 24 Then Try Dim accountToSent As String = SDL.cFakturierung.getDefaultMail("AMBAR", , True) For Each oAccount As Outlook.Account In outl.Session.Accounts If oAccount.SmtpAddress = accountToSent Then Mail.SendUsingAccount = oAccount Exit For End If Next Catch ex As System.Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR("Fehler beim Ermitteln des Mail-Accounts." & ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try End If For Each r As DataGridViewRow In dgvEmail.Rows If r.Cells(0).Value IsNot Nothing AndAlso r.Cells(0).Value.ToString() <> "" Then Mail.To &= r.Cells(0).Value.ToString() & ";" End If Next For Each r As DataGridViewRow In dgvEmailCC.Rows If r.Cells(0).Value IsNot Nothing AndAlso r.Cells(0).Value.ToString() <> "" Then Mail.CC &= r.Cells(0).Value.ToString() & ";" End If Next For Each r As DataGridViewRow In dgvEmailBCC.Rows If r.Cells(0).Value IsNot Nothing AndAlso r.Cells(0).Value.ToString() <> "" Then Mail.BCC &= r.Cells(0).Value.ToString() & ";" End If Next Dim TextHTML As String = "
" & RichTextBox.Text.Replace(ControlChars.Lf, "
") & cFakturierung.getSignature(RECHNUNG.RechnungsLandKz, RECHNUNG.Firma_ID, , , , additionalLine, , If(Firma_ID = "24", True, False)) & "
" Mail.HTMLBody = TextHTML Mail.Subject = txtSubject.Text RECHNUNG.LOAD_ANHAENGE() For Each ANH In RECHNUNG.ANHAENGE ATTACHMENTS.Add(New cFakt_SendMailATTach(VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(ANH.dsId), ANH.Bezeichnung)) Next If SPEDBUCH.DokumentId_Steuerbeleg IsNot Nothing Then ATTACHMENTS.Add(New cFakt_SendMailATTach(VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(SPEDBUCH.DokumentId_Steuerbeleg), "Steuerbescheid.pdf")) End If Dim mergePdfEnabled As Boolean = chkMergePDF.Checked addAttachments(Mail, RECHNUNG.RechnungsNr, mergePdfEnabled) Mail.Display() Catch ex As System.Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR("Fehler beim Öffnen des Mail-Programmes." & ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try End If ATTACHMENTS.Clear() End Sub ' Fügt die gesammelten Anlagen der Mail hinzu Private Sub addAttachments(ByRef Mail As Microsoft.Office.Interop.Outlook.MailItem, ByVal RgNr As Integer, ByVal MergePDF As Boolean) If ATTACHMENTS.Count = 0 Then Exit Sub If MergePDF And ATTACHMENTS.Count > 1 Then Dim extension = ".pdf" Dim zielPfadZusammenfassung = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(IIf(SammelrechungArt <> 6, "Rechnungs_Anhänge_", "Rechnung_") & RgNr & extension, extension,, False, "Zusammenfassung") Dim myList As New List(Of String) For Each a In ATTACHMENTS : myList.Add(a.Pfad) : Next If FormularManagerNEU.MergePdfFiles(myList, zielPfadZusammenfassung) Then ATTACHMENTS.Clear() : ATTACHMENTS.Add(New cFakt_SendMailATTach(zielPfadZusammenfassung, "")) ' überscheiben End If End If Try For Each a In ATTACHMENTS If System.IO.File.Exists(a.Pfad) Then Mail.Attachments.Add(a.Pfad, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, , a.MailName) Else ' Optional: Fehlermeldung protokollieren oder Benutzer informieren VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR("Anhang wurde nicht hinzugefügt, da Datei nicht gefunden wurde: " & a.Pfad, "", System.Reflection.MethodInfo.GetCurrentMethod.Name) End If Next Catch ex As System.Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try End Sub ' Linklabel-Klick: E-Mail-Adresse hinzufügen Private Sub lkl_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles lkl.LinkClicked dgvEmail.Rows.Add(lkl.Tag) End Sub ' DataGridView-Verlassen: Auswahl löschen Private Sub dgvEmail_SelectionChanged(sender As Object, e As EventArgs) _ Handles dgvEmail.Leave, dgvEmailCC.Leave, dgvEmailBCC.Leave CType(sender, DataGridView).ClearSelection() End Sub ' Doppelklick in Anlagen-DGV: Anlage öffnen Private Sub dgvAnhaenge_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) _ Handles dgvAnhaenge.CellDoubleClick Try If dgvAnhaenge.SelectedRows.Count > 0 Then Dim docId = dgvAnhaenge.SelectedRows(0).Cells("clmnDsId").Value Process.Start(VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(docId)) End If Catch ex As System.Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try End Sub End Class ' Klasse für Mail-Anhänge Public Class cFakt_SendMailATTach Public Property Pfad As String Public Property MailName As String Public Sub New(ByVal pfad As String, ByVal MailName As String) Me.Pfad = pfad Me.MailName = MailName End Sub End Class ' Klasse für SR-Listen Public Class cFaktSend_SR_List Private RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang Private SPEDBUCH As VERAG_PROG_ALLGEMEIN.cSpeditionsbuch Public Sub New(ByVal RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, ByVal SPEDBUCH As VERAG_PROG_ALLGEMEIN.cSpeditionsbuch) Me.RECHNUNG = RECHNUNG Me.SPEDBUCH = SPEDBUCH End Sub End Class