Files
SDL/SDL/Fakturierung/frmSendEmail.vb
2025-03-20 08:41:57 +01:00

437 lines
19 KiB
VB.net
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 = "<div style=""font-family:Calibri, Arial"">" &
RichTextBox.Text.Replace(ControlChars.Lf, "<br>") &
cFakturierung.getSignature(AD.LandKz, Firma_ID, , , , additionalLine, , If(Firma_ID = "24", True, False)) &
"</div>"
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 = "<div style=""font-family:Calibri, Arial"">" &
RichTextBox.Text.Replace(ControlChars.Lf, "<br>") &
cFakturierung.getSignature(RECHNUNG.RechnungsLandKz, RECHNUNG.Firma_ID, , , , additionalLine, , If(Firma_ID = "24", True, False)) &
"</div>"
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