419 lines
18 KiB
VB.net
419 lines
18 KiB
VB.net
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
|
||
addAttachments(Mail, lastAktuelle_RgNr, False)
|
||
|
||
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
|
||
addAttachments(Mail, RECHNUNG.RechnungsNr, False)
|
||
|
||
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
|
||
|
||
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
|