vermerke
This commit is contained in:
@@ -33,11 +33,13 @@ Public Class frmSendungsDokumentanforderung
|
||||
Private Shared _customerPortalAnhangsartenFetchedUtc As DateTime = DateTime.MinValue
|
||||
Private Shared _customerPortalCustomFilenameAnhangsartId As Integer = -1
|
||||
Private ReadOnly _kontaktEmailRows As New List(Of KontaktEmailRow)
|
||||
Private ReadOnly _kundenFirmaByNr As New Dictionary(Of Integer, String)
|
||||
Private _kontaktRolleTabs As TabControl
|
||||
|
||||
Public Sub New(avisoId As Integer, sendungId As Integer, state As DokumentanforderungState)
|
||||
Public Sub New(ByVal avisoIdValue As Integer, ByVal sendungIdValue As Integer, state As DokumentanforderungState)
|
||||
InitializeComponent()
|
||||
AvisoID = avisoId
|
||||
SendungID = sendungId
|
||||
AvisoID = avisoIdValue
|
||||
SendungID = sendungIdValue
|
||||
Icon = cMeineFunktionenAVISO.GetProgrammIcon
|
||||
_stateToApply = If(state, New DokumentanforderungState())
|
||||
End Sub
|
||||
@@ -45,6 +47,7 @@ Public Class frmSendungsDokumentanforderung
|
||||
Private ReadOnly _stateToApply As DokumentanforderungState
|
||||
|
||||
Private Sub frmSendungsDokumentanforderung_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
||||
ResolveContextIds()
|
||||
VERAG_PROG_ALLGEMEIN.cAllgemein._TRANSLATE(Me)
|
||||
If cmbCustomerUploadLanguage.SelectedIndex < 0 Then
|
||||
Dim idx = cmbCustomerUploadLanguage.Items.IndexOf("de")
|
||||
@@ -62,17 +65,25 @@ Public Class frmSendungsDokumentanforderung
|
||||
LoadKontaktEmails()
|
||||
End Sub
|
||||
|
||||
Private Sub ResolveContextIds()
|
||||
If AvisoID > 0 AndAlso SendungID <> 0 Then Return
|
||||
|
||||
Dim parentForm = TryCast(Me.Owner, frmAddSendungsvermerkShort)
|
||||
If parentForm IsNot Nothing Then
|
||||
If AvisoID <= 0 AndAlso parentForm.AvisoID > 0 Then
|
||||
AvisoID = parentForm.AvisoID
|
||||
End If
|
||||
If SendungID = 0 AndAlso parentForm.SendungID <> 0 Then
|
||||
SendungID = parentForm.SendungID
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub InitializeKontaktEmailGrid()
|
||||
EnsureKontaktRolleTabs()
|
||||
If dgvKontaktEmails.Columns.Count > 0 Then Return
|
||||
dgvKontaktEmails.AutoGenerateColumns = False
|
||||
|
||||
Dim colRolle As New DataGridViewTextBoxColumn()
|
||||
colRolle.Name = "colRolle"
|
||||
colRolle.HeaderText = "Rolle"
|
||||
colRolle.DataPropertyName = "Rolle"
|
||||
colRolle.Width = 100
|
||||
dgvKontaktEmails.Columns.Add(colRolle)
|
||||
|
||||
Dim colArt As New DataGridViewTextBoxColumn()
|
||||
colArt.Name = "colArt"
|
||||
colArt.HeaderText = "Art"
|
||||
@@ -80,6 +91,13 @@ Public Class frmSendungsDokumentanforderung
|
||||
colArt.Width = 130
|
||||
dgvKontaktEmails.Columns.Add(colArt)
|
||||
|
||||
Dim colFirma As New DataGridViewTextBoxColumn()
|
||||
colFirma.Name = "colFirma"
|
||||
colFirma.HeaderText = "Firma"
|
||||
colFirma.DataPropertyName = "Firma"
|
||||
colFirma.Width = 180
|
||||
dgvKontaktEmails.Columns.Add(colFirma)
|
||||
|
||||
Dim colEmail As New DataGridViewTextBoxColumn()
|
||||
colEmail.Name = "colEmail"
|
||||
colEmail.HeaderText = "E-Mail"
|
||||
@@ -93,7 +111,7 @@ Public Class frmSendungsDokumentanforderung
|
||||
dgvKontaktEmails.Rows.Clear()
|
||||
|
||||
Dim dedupe As New HashSet(Of String)(StringComparer.OrdinalIgnoreCase)
|
||||
|
||||
|
||||
Dim fraechterKdNr As Integer = 0
|
||||
Dim auftraggeberKdNr As Integer = 0
|
||||
Dim avisiererKdNr As Integer = 0
|
||||
@@ -115,12 +133,11 @@ Public Class frmSendungsDokumentanforderung
|
||||
End If
|
||||
|
||||
If AvisoID > 0 Then
|
||||
Dim dtAviso = AvisoDAL.loadDataTableBySQL("SELECT Frächter_KdNr, Auftraggeber_KdNr FROM tblAviso WHERE AvisoID = " & AvisoID)
|
||||
If dtAviso IsNot Nothing AndAlso dtAviso.Rows.Count > 0 Then
|
||||
Dim r = dtAviso.Rows(0)
|
||||
fraechterKdNr = ToIntSafe(r("Frächter_KdNr"))
|
||||
Dim aviso = AvisoDAL.LesenAviso(AvisoID, "")
|
||||
If aviso IsNot Nothing Then
|
||||
fraechterKdNr = ToIntSafe(aviso.Frächter_KdNr)
|
||||
If auftraggeberKdNr = 0 Then
|
||||
auftraggeberKdNr = ToIntSafe(r("Auftraggeber_KdNr"))
|
||||
auftraggeberKdNr = ToIntSafe(aviso.Auftraggeber_KdNr)
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
@@ -134,82 +151,111 @@ Public Class frmSendungsDokumentanforderung
|
||||
AddKontaktEmailsByKunde("Absender", absenderKdNr, dedupe)
|
||||
AddKontaktEmailsByKunde("Frachtführer", frachtfuehrerKdNr, dedupe)
|
||||
|
||||
RefreshKontaktRolleTabs()
|
||||
End Sub
|
||||
|
||||
Private Sub EnsureKontaktRolleTabs()
|
||||
If _kontaktRolleTabs IsNot Nothing Then Return
|
||||
|
||||
_kontaktRolleTabs = New TabControl()
|
||||
_kontaktRolleTabs.Name = "tbKontaktRollen"
|
||||
_kontaktRolleTabs.Location = New Point(dgvKontaktEmails.Left, dgvKontaktEmails.Top)
|
||||
_kontaktRolleTabs.Size = New Size(dgvKontaktEmails.Width, 24)
|
||||
_kontaktRolleTabs.Anchor = dgvKontaktEmails.Anchor
|
||||
|
||||
AddHandler _kontaktRolleTabs.SelectedIndexChanged, AddressOf KontaktRolleTabs_SelectedIndexChanged
|
||||
|
||||
Controls.Add(_kontaktRolleTabs)
|
||||
_kontaktRolleTabs.BringToFront()
|
||||
|
||||
dgvKontaktEmails.Top = _kontaktRolleTabs.Bottom + 4
|
||||
dgvKontaktEmails.Height = btnVermerkSetzen.Top - dgvKontaktEmails.Top - 6
|
||||
End Sub
|
||||
|
||||
Private Sub RefreshKontaktRolleTabs()
|
||||
EnsureKontaktRolleTabs()
|
||||
|
||||
Dim selectedRolle = GetSelectedKontaktRolle()
|
||||
RemoveHandler _kontaktRolleTabs.SelectedIndexChanged, AddressOf KontaktRolleTabs_SelectedIndexChanged
|
||||
_kontaktRolleTabs.TabPages.Clear()
|
||||
|
||||
Dim rollen As New List(Of String)
|
||||
For Each row In _kontaktEmailRows
|
||||
dgvKontaktEmails.Rows.Add(row.Rolle, row.Art, row.Email)
|
||||
If row Is Nothing Then Continue For
|
||||
If rollen.Contains(row.Rolle) Then Continue For
|
||||
rollen.Add(row.Rolle)
|
||||
Dim page As New TabPage(row.Rolle)
|
||||
page.Tag = row.Rolle
|
||||
_kontaktRolleTabs.TabPages.Add(page)
|
||||
Next
|
||||
|
||||
_kontaktRolleTabs.Visible = _kontaktRolleTabs.TabPages.Count > 0
|
||||
|
||||
If _kontaktRolleTabs.TabPages.Count > 0 Then
|
||||
Dim selectedIndex As Integer = 0
|
||||
For i As Integer = 0 To _kontaktRolleTabs.TabPages.Count - 1
|
||||
If String.Equals(_kontaktRolleTabs.TabPages(i).Tag.ToString(), selectedRolle, StringComparison.OrdinalIgnoreCase) Then
|
||||
selectedIndex = i
|
||||
Exit For
|
||||
End If
|
||||
Next
|
||||
_kontaktRolleTabs.SelectedIndex = selectedIndex
|
||||
End If
|
||||
|
||||
AddHandler _kontaktRolleTabs.SelectedIndexChanged, AddressOf KontaktRolleTabs_SelectedIndexChanged
|
||||
BindKontaktEmailsForSelectedRolle()
|
||||
End Sub
|
||||
|
||||
Private Function GetSelectedKontaktRolle() As String
|
||||
If _kontaktRolleTabs Is Nothing Then Return ""
|
||||
If _kontaktRolleTabs.SelectedTab Is Nothing Then Return ""
|
||||
Return If(_kontaktRolleTabs.SelectedTab.Tag, "").ToString().Trim()
|
||||
End Function
|
||||
|
||||
Private Sub BindKontaktEmailsForSelectedRolle()
|
||||
dgvKontaktEmails.Rows.Clear()
|
||||
|
||||
Dim selectedRolle = GetSelectedKontaktRolle()
|
||||
For Each row In _kontaktEmailRows
|
||||
If row Is Nothing Then Continue For
|
||||
If selectedRolle <> "" AndAlso Not String.Equals(row.Rolle, selectedRolle, StringComparison.OrdinalIgnoreCase) Then Continue For
|
||||
dgvKontaktEmails.Rows.Add(row.Art, row.Firma, row.Email)
|
||||
Next
|
||||
|
||||
If If(txtCustomerUploadEmail.Text, "").Trim() = "" AndAlso dgvKontaktEmails.Rows.Count > 0 Then
|
||||
txtCustomerUploadEmail.Text = If(dgvKontaktEmails.Rows(0).Cells("colEmail").Value, "").ToString().Trim()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub KontaktRolleTabs_SelectedIndexChanged(sender As Object, e As EventArgs)
|
||||
BindKontaktEmailsForSelectedRolle()
|
||||
End Sub
|
||||
|
||||
Private Sub AddKontaktEmailsByKunde(rolle As String, kundenNr As Integer, dedupe As HashSet(Of String))
|
||||
If kundenNr <= 0 Then Return
|
||||
|
||||
' 1. E-Mails aus Kundenstammdaten laden (direkt von Datenbank)
|
||||
Try
|
||||
Dim sql As String = "SELECT E_Mail, E_Mail2 FROM Adressen WHERE AdressenNr = " & kundenNr
|
||||
Using conn As System.Data.SqlClient.SqlConnection = VERAG_PROG_ALLGEMEIN.cSqlDb.GetNewOpenConnectionFMZOLL(False)
|
||||
Using cmd As New System.Data.SqlClient.SqlCommand(sql, conn)
|
||||
Using reader = cmd.ExecuteReader()
|
||||
If reader.Read() Then
|
||||
Dim email1 = If(reader("E_Mail") Is DBNull.Value, "", reader("E_Mail").ToString().Trim())
|
||||
Dim email2 = If(reader("E_Mail2") Is DBNull.Value, "", reader("E_Mail2").ToString().Trim())
|
||||
|
||||
If email1 <> "" Then
|
||||
For Each splitEmail In email1.Split({";"c, ","c}, StringSplitOptions.RemoveEmptyEntries)
|
||||
Dim em = splitEmail.Trim()
|
||||
If em = "" Then Continue For
|
||||
Dim key1 = rolle & "|" & kundenNr.ToString() & "|Stammdaten|" & em.ToLowerInvariant()
|
||||
If Not dedupe.Contains(key1) Then
|
||||
dedupe.Add(key1)
|
||||
_kontaktEmailRows.Add(New KontaktEmailRow With {.Rolle = rolle, .Art = "Stammdaten", .Email = em})
|
||||
End If
|
||||
Next
|
||||
End If
|
||||
|
||||
If email2 <> "" Then
|
||||
For Each splitEmail In email2.Split({";"c, ","c}, StringSplitOptions.RemoveEmptyEntries)
|
||||
Dim em = splitEmail.Trim()
|
||||
If em = "" Then Continue For
|
||||
Dim key2 = rolle & "|" & kundenNr.ToString() & "|Stammdaten|" & em.ToLowerInvariant()
|
||||
If Not dedupe.Contains(key2) Then
|
||||
dedupe.Add(key2)
|
||||
_kontaktEmailRows.Add(New KontaktEmailRow With {.Rolle = rolle, .Art = "Stammdaten", .Email = em})
|
||||
End If
|
||||
Next
|
||||
End If
|
||||
End If
|
||||
End Using
|
||||
End Using
|
||||
End Using
|
||||
Catch
|
||||
End Try
|
||||
Dim firma = GetKundenFirma(kundenNr)
|
||||
|
||||
' 2. E-Mails aus E-Mail-Benachrichtigungen (Sendungsdetails) laden (direkt von Datenbank)
|
||||
Try
|
||||
Dim sql As String = "SELECT eb_ebartId, eb_EMail, eb_cc, eb_bcc FROM tblEmailBenachrichtigung WHERE eb_KundenNr = " & kundenNr
|
||||
Dim sql As String = "SELECT * FROM tblKundenKontakt WHERE kkd_KundenNr = " & kundenNr
|
||||
Using conn As System.Data.SqlClient.SqlConnection = VERAG_PROG_ALLGEMEIN.cSqlDb.GetNewOpenConnectionFMZOLL(False)
|
||||
Using cmd As New System.Data.SqlClient.SqlCommand(sql, conn)
|
||||
Using reader = cmd.ExecuteReader()
|
||||
While reader.Read()
|
||||
Dim artId = If(reader("eb_ebartId") Is DBNull.Value, 0, Convert.ToInt32(reader("eb_ebartId")))
|
||||
Dim email = If(reader("eb_EMail") Is DBNull.Value, "", reader("eb_EMail").ToString().Trim())
|
||||
Dim isCc = If(reader("eb_cc") Is DBNull.Value, False, Convert.ToBoolean(reader("eb_cc")))
|
||||
Dim isBcc = If(reader("eb_bcc") Is DBNull.Value, False, Convert.ToBoolean(reader("eb_bcc")))
|
||||
|
||||
If email = "" Then Continue While
|
||||
|
||||
Dim empfaengerArt = If(isBcc, "BCC", If(isCc, "CC", "AN"))
|
||||
Dim artText = ResolveMailArtLabel(artId) & " / " & empfaengerArt
|
||||
|
||||
For Each splitEmail In email.Split({";"c, ","c}, StringSplitOptions.RemoveEmptyEntries)
|
||||
Dim em = splitEmail.Trim()
|
||||
If em = "" Then Continue For
|
||||
Dim key = rolle & "|" & kundenNr.ToString() & "|" & artText & "|" & em.ToLowerInvariant()
|
||||
If Not dedupe.Contains(key) Then
|
||||
dedupe.Add(key)
|
||||
_kontaktEmailRows.Add(New KontaktEmailRow With {.Rolle = rolle, .Art = artText, .Email = em})
|
||||
End If
|
||||
Dim artText = GetStringValue(reader, "kkd_kkaBez")
|
||||
If artText = "" Then artText = "Kontakt"
|
||||
Dim emails = GetStringValues(reader, "kkd_EMail", "kkd_EMail2", "kkd_Email", "kkd_Email2", "kkd_Mail", "kkd_Mail2", "EMail", "EMail2", "Email", "Email2", "Mail", "Mail2")
|
||||
If emails.Count = 0 Then Continue While
|
||||
|
||||
For Each email In emails
|
||||
For Each splitEmail In email.Split({";"c, ","c}, StringSplitOptions.RemoveEmptyEntries)
|
||||
Dim em = splitEmail.Trim()
|
||||
If em = "" Then Continue For
|
||||
Dim key = rolle & "|" & kundenNr.ToString() & "|" & artText & "|" & em.ToLowerInvariant()
|
||||
If Not dedupe.Contains(key) Then
|
||||
dedupe.Add(key)
|
||||
_kontaktEmailRows.Add(New KontaktEmailRow With {.Rolle = rolle, .Art = artText, .Firma = firma, .Email = em})
|
||||
End If
|
||||
Next
|
||||
Next
|
||||
End While
|
||||
End Using
|
||||
@@ -219,21 +265,57 @@ Public Class frmSendungsDokumentanforderung
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Function ResolveMailArtLabel(artId As Integer) As String
|
||||
Select Case artId
|
||||
Case 1
|
||||
Return "Ankunft"
|
||||
Case 2
|
||||
Return "Freigabe"
|
||||
Case 3
|
||||
Return "Ankunft Export"
|
||||
Case 4
|
||||
Return "Freigabe Export"
|
||||
Case 5
|
||||
Return "Status"
|
||||
Case Else
|
||||
Return "Unbekannt"
|
||||
End Select
|
||||
Private Function GetStringValue(reader As IDataRecord, fieldName As String) As String
|
||||
For i As Integer = 0 To reader.FieldCount - 1
|
||||
If String.Equals(reader.GetName(i), fieldName, StringComparison.OrdinalIgnoreCase) Then
|
||||
If reader.IsDBNull(i) Then Return ""
|
||||
Return reader(i).ToString().Trim()
|
||||
End If
|
||||
Next
|
||||
|
||||
Return ""
|
||||
End Function
|
||||
|
||||
Private Function GetStringValues(reader As IDataRecord, ParamArray fieldNames() As String) As List(Of String)
|
||||
Dim values As New List(Of String)
|
||||
Dim seen As New HashSet(Of String)(StringComparer.OrdinalIgnoreCase)
|
||||
|
||||
For Each fieldName In fieldNames
|
||||
Dim value = GetStringValue(reader, fieldName)
|
||||
If value = "" Then Continue For
|
||||
If seen.Contains(value) Then Continue For
|
||||
seen.Add(value)
|
||||
values.Add(value)
|
||||
Next
|
||||
|
||||
Return values
|
||||
End Function
|
||||
|
||||
Private Function GetKundenFirma(kundenNr As Integer) As String
|
||||
If kundenNr <= 0 Then Return ""
|
||||
If _kundenFirmaByNr.ContainsKey(kundenNr) Then Return _kundenFirmaByNr(kundenNr)
|
||||
|
||||
Dim firma As String = ""
|
||||
|
||||
Try
|
||||
Dim sql As String = "SELECT TOP 1 [Name 1], [Ordnungsbegriff] FROM Adressen WHERE AdressenNr = " & kundenNr
|
||||
Using conn As System.Data.SqlClient.SqlConnection = VERAG_PROG_ALLGEMEIN.cSqlDb.GetNewOpenConnectionFMZOLL(False)
|
||||
Using cmd As New System.Data.SqlClient.SqlCommand(sql, conn)
|
||||
Using reader = cmd.ExecuteReader()
|
||||
If reader.Read() Then
|
||||
firma = If(reader("Name 1") Is DBNull.Value, "", reader("Name 1").ToString().Trim())
|
||||
If firma = "" Then
|
||||
firma = If(reader("Ordnungsbegriff") Is DBNull.Value, "", reader("Ordnungsbegriff").ToString().Trim())
|
||||
End If
|
||||
End If
|
||||
End Using
|
||||
End Using
|
||||
End Using
|
||||
Catch
|
||||
End Try
|
||||
|
||||
_kundenFirmaByNr(kundenNr) = firma
|
||||
Return firma
|
||||
End Function
|
||||
|
||||
Private Function ToIntSafe(value As Object) As Integer
|
||||
@@ -1179,6 +1261,7 @@ Public Class frmSendungsDokumentanforderung
|
||||
Private Class KontaktEmailRow
|
||||
Public Property Rolle As String
|
||||
Public Property Art As String
|
||||
Public Property Firma As String
|
||||
Public Property Email As String
|
||||
End Class
|
||||
|
||||
|
||||
Reference in New Issue
Block a user