From 83026b1ca94e465441194fb130a95f3441848af1 Mon Sep 17 00:00:00 2001 From: Andreas Luxbauer Date: Tue, 10 Mar 2026 08:49:32 +0100 Subject: [PATCH] Mail Sender DroppedJobs --- MailSender/MAILSender.vb | 210 +++++++++++++++++++- MailSender/MailSender.vbproj | 1 + MailSender/My Project/Resources.Designer.vb | 10 + MailSender/My Project/Resources.resx | 3 + MailSender/Resources/KD_DroppedJobs.xlsx | Bin 0 -> 12176 bytes 5 files changed, 223 insertions(+), 1 deletion(-) create mode 100644 MailSender/Resources/KD_DroppedJobs.xlsx 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 0000000000000000000000000000000000000000..7a7bb45c9073afed1026dfbfb7c7ebe0287fc687 GIT binary patch literal 12176 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 literal 0 HcmV?d00001