diff --git a/MailSender/MAILSender.vb b/MailSender/MAILSender.vb
index f7b7242..e1e7a24 100644
--- a/MailSender/MAILSender.vb
+++ b/MailSender/MAILSender.vb
@@ -62,7 +62,7 @@ Module Mail
'------------------------------------------------------------------------------------
' PARAM = "NCTSLIST_TOBB"
- ' PARAM = "NCTSLIST_TOBB"
+ 'PARAM = "KD_DroppedJobs"
'------------------------------------------------------------------------------------
If PARAM = "" Then
@@ -429,6 +429,28 @@ Module Mail
If MDM_IT_Verguetung(Jahr) Then 'für Andreas Details
System.Console.WriteLine("Vorgang erfolgreich abgeschlossen ...")
End If
+ Case "KD_DroppedJobs" 'Rückgang Abfertigungszahlen
+ System.Console.WriteLine("OPTION erkannt: KD_DroppedJobs _ Erstellt die Auswertung der Kunden mit rückläufigen Zahlen")
+ System.Console.WriteLine("Auswertung gestartet...")
+ Dim FirmaTmp = ""
+ If (parameter.Count - 1) >= 2 Then
+ FirmaTmp = parameter(2)
+ System.Console.WriteLine("Parameter 'FirmaTmp' erkannt: " & FirmaTmp)
+ End If
+
+ If FirmaTmp <> "" Then
+ KD_DroppedJobs(FirmaTmp, "EMPFÄNGER")
+ KD_DroppedJobs(FirmaTmp, "AVISIERER")
+ System.Console.WriteLine("Vorgang abgeschlossen ...")
+ Else
+ KD_DroppedJobs("VERAG", "EMPFÄNGER")
+ KD_DroppedJobs("VERAG", "AVISIERER")
+ KD_DroppedJobs("IMEX", "EMPFÄNGER")
+ KD_DroppedJobs("IMEX", "AVISIERER")
+ KD_DroppedJobs("UNISPED", "EMPFÄNGER")
+ KD_DroppedJobs("UNISPED", "AVISIERER")
+ System.Console.WriteLine("Vorgang abgeschlossen ...")
+ End If
Case "Kassenbuch_Zufall"
System.Console.WriteLine("OPTION erkannt: Kassenbuch_Zufall - Zufallsziehung zur Kassenkontrolle.")
System.Console.WriteLine("Vorgang gestartet...")
@@ -1380,6 +1402,192 @@ Module Mail
Return False
End Function
+ Private Function KD_DroppedJobs(Firma, Art) As Boolean
+
+ Dim [To] = ""
+ Dim CC = ""
+ Dim Bcc = ""
+ Select Case Firma
+ Case "VERAG"
+ [To] = "kundenservice@verag.ag"
+ CC = "cf@verag.ag;al@verag.ag;ml@verag.ag"
+ Case "IMEX"
+ [To] = "kundenservice@verag.ag"
+ CC = "cf@verag.ag;al@verag.ag;ml@verag.ag"
+ Case "UNISPED"
+ [To] = "kundenservice@verag.ag"
+ CC = "cf@verag.ag;al@verag.ag;ml@verag.ag"
+ End Select
+
+ '''''''''''''''''''''''''''
+ '[To] = "al@verag.ag"
+ 'CC = ""
+ '''''''''''''''''''''''''''
+ '''
+ System.Console.WriteLine("E-Mail Daten initialisiert...")
+ Try
+
+
+ System.Console.WriteLine("SQL Abfrage / Daten laden...")
+ ' --- SQL 1x laden: alle Monate / Datenquellen ---
+ Dim sqlstr As String = ""
+
+ Select Case Art
+ Case "EMPFÄNGER"
+ sqlstr =
+ "SELECT *
+ FROM dbo.ufn_KundenDropoff_Empfaenger
+ (
+ '" & Firma & "', -- Firma
+ DEFAULT, -- Stichtag der Analyse ('2026-03-09')
+ 150, -- Mindest-Risikoscore für Anzeige
+ 52, -- Referenzzeitraum (Wochen)
+ 4, -- aktuelle Vergleichsperiode (Wochen)
+ 100, -- Mindestanzahl Vorgänge pro Jahr
+ 0.25, -- minimaler Drop (25%)
+ 21, -- Inaktivitätsgrenze (Tage)
+ 10.0, -- Gewicht absoluter Mengenrückgang
+ 5.0, -- Gewicht prozentualer Rückgang !!!!!!!!!
+ 20.0, -- Strafgewicht wenn letzte Woche 0
+ 50, -- Bonus wenn Kunde >21 Tage inaktiv
+ 20 -- Bonus wenn Kunde >14 Tage inaktiv
+ )
+ ORDER BY
+ RiskScore DESC,
+ ImpactPerWeek DESC,
+ DropPct_RecentVsBaseline DESC,
+ DaysSinceLast DESC,
+ BaselineAvgPerWeek DESC;"
+ Case "AVISIERER"
+ sqlstr =
+ "SELECT *
+ FROM dbo.ufn_KundenDropoff_Avisierer
+ (
+ '" & Firma & "', -- Firma
+ DEFAULT, -- Stichtag der Analyse ('2026-03-09')
+ 150, -- Mindest-Risikoscore für Anzeige
+ 52, -- Referenzzeitraum (Wochen)
+ 4, -- aktuelle Vergleichsperiode (Wochen)
+ 100, -- Mindestanzahl Vorgänge pro Jahr
+ 0.25, -- minimaler Drop (25%)
+ 21, -- Inaktivitätsgrenze (Tage)
+ 10.0, -- Gewicht absoluter Mengenrückgang
+ 5.0, -- Gewicht prozentualer Rückgang !!!!!!!!!
+ 20.0, -- Strafgewicht wenn letzte Woche 0
+ 50, -- Bonus wenn Kunde >21 Tage inaktiv
+ 20 -- Bonus wenn Kunde >14 Tage inaktiv
+ )
+ ORDER BY
+ RiskScore DESC,
+ ImpactPerWeek DESC,
+ DropPct_RecentVsBaseline DESC,
+ DaysSinceLast DESC,
+ BaselineAvgPerWeek DESC;"
+ End Select
+
+
+ Dim dt As DataTable = (New VERAG_PROG_ALLGEMEIN.SQL).loadDgvBySql(sqlstr, "FMZOLL")
+
+
+
+ System.Console.WriteLine("Erstelle EXCEL...")
+ Dim excel As String = ""
+
+ '---------------------------------------------------
+ Dim exclApp As Object = Nothing
+ Dim Datei As Object = Nothing
+ Dim Blatt As Object = Nothing
+
+ Dim filepath As String = ""
+
+ Try
+
+ exclApp = CreateObject("Excel.Application")
+ With exclApp
+ .Visible = False
+ .DisplayAlerts = False
+
+ Dim filepathTmp = sPath & "KD_DroppedJobs_" & Art & "_" & Format(Now, "yyyyMMdd_HHmmss") & ".xlsx"
+
+ ' Template aus Resources schreiben
+ Try
+ My.Computer.FileSystem.WriteAllBytes(filepathTmp, My.Resources.KD_DroppedJobs, False)
+ Catch ex As Exception
+ MsgBox(ex.Message & ex.StackTrace)
+
+ Return False
+ End Try
+
+ Datei = .Workbooks.Open(filepathTmp)
+ Blatt = Datei.Worksheets(1)
+
+ Blatt.Range("D1").Value = Art
+ Blatt.Range("F1").Value = Now.ToShortDateString
+
+ Dim r As Integer = 4
+ Dim c As Integer = 1
+
+ If dt IsNot Nothing Then
+
+ For Each row As DataRow In dt.Rows
+ c = 1
+ ' MsgBox("r: " & r)
+ For Each col As DataColumn In dt.Columns
+ ' MsgBox("c: " & c)
+
+ Blatt.Cells(r, c).Value = row(col)
+ c += 1
+ Next
+ r += 1
+ Next
+
+ Datei.SaveAs(filepathTmp)
+ Datei.Close(False)
+ exclApp.Quit()
+
+ filepath = filepathTmp
+
+ End If
+ End With
+ Catch ex As Exception
+ MsgBox(ex.Message & ex.StackTrace)
+
+ Return False
+ Finally
+
+ Blatt = Nothing
+ Datei = Nothing
+ exclApp = Nothing
+
+ GC.Collect()
+ GC.WaitForPendingFinalizers()
+ GC.Collect()
+ End Try
+ '---------------------------------------------------
+
+ Dim From = "al@verag.ag"
+ If filepath <> "" Then
+ System.Console.WriteLine("EXCEL erstellt...")
+
+ System.Console.WriteLine("Sende E-Mail...")
+
+ Dim ANHANG As List(Of String) = New List(Of String)
+ ANHANG.Add(filepath)
+ VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail([To], "Auswertung Dropped Jobs: " & Art & " - " & Firma, "Anbei befindet sich die Auswertung der Dropped Jobs von " & Firma & ".", From,,, CC, Bcc, ANHANG)
+ Return True
+ Else
+ System.Console.WriteLine("EXCEL Error - Pfad leer...")
+ System.Console.WriteLine("Sende Error E-Mail...")
+ VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail([To], "Auswertung Dropped Jobs - kein Anhang", "Fehler beim Erstellen für " & Firma & ".", From,,, CC, Bcc)
+ Return False
+ End If
+ Catch ex3 As Exception
+ MsgBox(ex3.Message & ex3.StackTrace)
+ Return False
+ End Try
+ Return False
+
+ End Function
Private Function MDM_IT_Verguetung(Jahr) As Boolean
Dim Msg As New MailMessage
Dim myCredentials As New System.Net.NetworkCredential
diff --git a/MailSender/MailSender.vbproj b/MailSender/MailSender.vbproj
index 7118932..f1fd8c3 100644
--- a/MailSender/MailSender.vbproj
+++ b/MailSender/MailSender.vbproj
@@ -119,6 +119,7 @@
+
diff --git a/MailSender/My Project/Resources.Designer.vb b/MailSender/My Project/Resources.Designer.vb
index c926658..a5214b8 100644
--- a/MailSender/My Project/Resources.Designer.vb
+++ b/MailSender/My Project/Resources.Designer.vb
@@ -100,6 +100,16 @@ Namespace My.Resources
End Get
End Property
+ '''
+ ''' Sucht eine lokalisierte Ressource vom Typ System.Byte[].
+ '''
+ Friend ReadOnly Property KD_DroppedJobs() As Byte()
+ Get
+ Dim obj As Object = ResourceManager.GetObject("KD_DroppedJobs", resourceCulture)
+ Return CType(obj,Byte())
+ End Get
+ End Property
+
'''
''' Sucht eine lokalisierte Ressource vom Typ System.Byte[].
'''
diff --git a/MailSender/My Project/Resources.resx b/MailSender/My Project/Resources.resx
index a566e5c..5ce21eb 100644
--- a/MailSender/My Project/Resources.resx
+++ b/MailSender/My Project/Resources.resx
@@ -130,6 +130,9 @@
..\Resources\Detailauswertung_divers.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ ..\Resources\KD_DroppedJobs.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
..\Resources\MDM_AI_Verguetung.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
diff --git a/MailSender/Resources/KD_DroppedJobs.xlsx b/MailSender/Resources/KD_DroppedJobs.xlsx
new file mode 100644
index 0000000..7a7bb45
Binary files /dev/null and b/MailSender/Resources/KD_DroppedJobs.xlsx differ