diff --git a/MailSender/MAILSender.vb b/MailSender/MAILSender.vb index 262ee2d..9874398 100644 --- a/MailSender/MAILSender.vb +++ b/MailSender/MAILSender.vb @@ -1,4 +1,5 @@ -Imports System.Data.SqlClient +Imports System.Runtime.InteropServices +Imports System.Data.SqlClient Imports System.IO Imports System.Net Imports System.Net.Mail @@ -50,7 +51,7 @@ Module Mail 'Exit Sub - ' PARAM = "TETRAPAK_OKT" + ' PARAM = "MDM_IT_Verguetung" 'PARAM = "JAHRESABRECHNUNG AG-ZS" ' PARAM = "UID_OPS_SYSKA_ABGLEICH" @@ -408,6 +409,17 @@ Module Mail If MDM_Zollbuero_Verguetung(Jahr) Then 'für Andreas Details System.Console.WriteLine("Vorgang erfolgreich abgeschlossen ...") End If + Case "MDM_IT_Verguetung" + System.Console.WriteLine("OPTION erkannt: MDM_IT_Verguetung _ Erstellt die Auswertung der durchgeführten MDM Transaktionen.") + System.Console.WriteLine("Auswertung gestartet...") + Dim Jahr = -1 + If (parameter.Count - 1) >= 2 Then + Jahr = parameter(2) + System.Console.WriteLine("Parameter 'Jahr' erkannt: " & Jahr) + End If + If MDM_IT_Verguetung(Jahr) Then 'für Andreas Details + System.Console.WriteLine("Vorgang erfolgreich abgeschlossen ...") + End If Case "Kassenbuch_Zufall" System.Console.WriteLine("OPTION erkannt: Kassenbuch_Zufall - Zufallsziehung zur Kassenkontrolle.") System.Console.WriteLine("Vorgang gestartet...") @@ -1359,6 +1371,77 @@ Module Mail Return False End Function + Private Function MDM_IT_Verguetung(Jahr) As Boolean + Dim Msg As New MailMessage + Dim myCredentials As New System.Net.NetworkCredential + myCredentials.UserName = "al@verag.ag" + myCredentials.Password = "verag#2" + + Msg.IsBodyHtml = False + Dim mySmtpsvr As New SmtpClient() + mySmtpsvr.Host = "owa.verag.ag" + mySmtpsvr.Port = 587 '25 '587 '25 + mySmtpsvr.UseDefaultCredentials = False + mySmtpsvr.Credentials = myCredentials + System.Console.WriteLine("E-Mail Daten initialisiert...") + Try + Dim datum As String = Now.AddDays(-1).ToShortDateString + System.Console.WriteLine("Erstelle EXCEL...") + Dim excel As String = genEXCEL_MDM_IT(Jahr) + System.Console.WriteLine("EXCEL erstellt...") + If excel <> "" And Not excel.StartsWith("ERROR: ") Then + + System.Console.WriteLine("Sende E-Mail...") + Msg.From = New MailAddress("al@verag.ag") + + + ' Msg.To.Add("Viktoria.Leirich@imex-group.at") + Msg.To.Add("as@verag.ag") + Msg.To.Add("sales@verag.ag") + '' Msg.To.Add("jl@verag.ag") + '' Msg.Bcc.Add("al@verag.ag") + Msg.CC.Add("jl@verag.ag") + Msg.CC.Add("al@verag.ag") + + + Msg.Subject = "Auswertung MDM-IT Vergütung" + Msg.Body = "Anbei befindet sich die Auswertung der MDM-IT Vergütung" & + "." & vbNewLine & vbNewLine & "Erstellt am: " & Now.ToShortDateString & ", um " & Now.ToShortTimeString & + vbNewLine & vbNewLine & vbNewLine & "Automatisch generiertes E-Mail." + + Dim attachment1 As Attachment = New Attachment(File.OpenRead(excel), "Auswertung.xlsx") + Msg.Attachments.Add(attachment1) + + mySmtpsvr.Send(Msg) + + System.Console.WriteLine("E-Mail gesendet.") + System.Console.WriteLine("Erfolgreich!") + Return True + Else + System.Console.WriteLine(excel) + End If + Catch ex As Exception + Try + mySmtpsvr.Port = 25 + mySmtpsvr.Send(Msg) + + Catch ex2 As Exception + Try + mySmtpsvr.Host = "192.168.0.107" + mySmtpsvr.Port = 25 + mySmtpsvr.Send(Msg) + + Catch ex3 As Exception + MsgBox(ex3.Message & ex3.StackTrace) + Return False + End Try + End Try + + + End Try + Return False + End Function + Private Function SendEmail_OP5000(firma As String, LandEinschr As String, Mail_to() As String, Mail_cc() As String, Mail_bcc() As String, Mail_Subject As String) As Boolean ' send() @@ -3065,6 +3148,154 @@ Module Mail End Function + Public Function genEXCEL_MDM_IT(ByVal Jahr As Integer) As String + Dim exclApp As Object = Nothing + Dim Datei As Object = Nothing + Dim Blatt As Object = Nothing + + Try + Dim yearVal As Integer = If(Jahr > 0, Jahr, Now.AddMonths(-1).Year) + + exclApp = CreateObject("Excel.Application") + With exclApp + .Visible = False + .DisplayAlerts = False + + Dim filepath As String = sPath & "MDM_IT_Verguetung.xlsx" + + 'Template aus Resources schreiben + Try + My.Computer.FileSystem.WriteAllBytes(filepath, My.Resources.MDM_it_Verguetung, False) + Catch ex As Exception + Return "ERROR 01: " & ex.Message & vbNewLine & ex.StackTrace + End Try + + Datei = .Workbooks.Open(filepath) + Blatt = Datei.Worksheets("CS") ' ggf. anpassen + + ' Jahr eintragen (wie bisher) + Blatt.Range("G1").Value = yearVal + + ' --- Zielbereich leeren (nur Wertebereich, nicht Monatsnamen/Überschriften) --- + ' Monate sind i.d.R. Zeile 7-18 (12 Monate). Spalten B-F + Blatt.Range("B8:F19").ClearContents() + + ' --- SQL 1x laden: alle Monate / Datenquellen --- + Dim sqlstr As String = + "SELECT * FROM ( + SELECT + COUNT(*) AS Anzahl, + 'IDS' AS Datenquelle, + MONTH(t.YearMonthDay) AS [Month], + YEAR(t.YearMonthDay) AS [Year] + FROM tblIDSTransactionsNew t + INNER JOIN tbl_IDS_Länder l ON t.OutletCountryCode = l.OutletCountryCode + INNER JOIN tbl_IDS_Produkte p ON t.ProductTypeCode = p.ProductTypeCode + WHERE YEAR(t.YearMonthDay) = " & yearVal & " + GROUP BY MONTH(t.YearMonthDay), YEAR(t.YearMonthDay) + + UNION ALL + + SELECT + COUNT(*) AS Anzahl, + Datenquelle, + MONTH([Transaction date]) AS [Month], + YEAR([Transaction date]) AS [Year] + FROM [VERAG].[dbo].[tblMautbericht] + WHERE YEAR([Transaction date]) = " & yearVal & " + GROUP BY Datenquelle, MONTH([Transaction date]), YEAR([Transaction date]) + ) AS temp + ORDER BY Datenquelle, temp.[Year], temp.[Month];" + + Dim dt As DataTable = loadDgvBySqlFMZOLL(sqlstr) + + ' --- Map (Datenquelle, Monat) -> Anzahl --- + Dim map As New Dictionary(Of String, Integer)(StringComparer.OrdinalIgnoreCase) + + If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then + For Each r As DataRow In dt.Rows + Dim src As String = If(r("Datenquelle") Is DBNull.Value, "", CStr(r("Datenquelle")).Trim()) + + ' Sonderzuordnung + If src.Equals("AT", StringComparison.OrdinalIgnoreCase) Then + src = "ASFINAG" + End If + + Dim m As Integer = If(r("Month") Is DBNull.Value, 0, Convert.ToInt32(r("Month"))) + Dim cnt As Integer = If(r("Anzahl") Is DBNull.Value, 0, Convert.ToInt32(r("Anzahl"))) + + If m >= 1 AndAlso m <= 12 AndAlso src <> "" Then + Dim key As String = src & "|" & m.ToString() + ' Falls doppelte Zeilen vorkommen, addieren wir (sicherer) + If map.ContainsKey(key) Then + map(key) += cnt + Else + map(key) = cnt + End If + End If + Next + End If + + ' --- Spaltenmapping Datenquelle -> Excel-Spalte --- + Dim col As New Dictionary(Of String, String)(StringComparer.OrdinalIgnoreCase) From { + {"IDS", "B"}, + {"PLOSE", "C"}, + {"ASFINAG", "D"}, + {"MSE", "E"}, + {"UTA", "F"} + } + + ' --- Schreiben: Monate 1..12 in Zeilen 7..18 --- + For monthIdx As Integer = 1 To 12 + Dim rowExcel As Integer = 7 + monthIdx ' 7..18 + + For Each kvp In col + Dim src As String = kvp.Key + Dim colLetter As String = kvp.Value + Dim key As String = src & "|" & monthIdx.ToString() + + Dim value As Integer = 0 + If map.ContainsKey(key) Then value = map(key) + + Blatt.Range(colLetter & rowExcel.ToString()).Value = value + Next + Next + + Datei.Save() + Try : Datei.Close(True) : Catch : End Try + Try : .Quit() : Catch : End Try + End With + + Return sPath & "MDM_IT_Verguetung.xlsx" + + Catch ex As Exception + Return "ERROR 02: " & ex.Message & vbNewLine & ex.StackTrace + + Finally + ' COM sauber freigeben (verhindert EXCEL.EXE-Leichen) + Try + If Blatt IsNot Nothing Then Marshal.FinalReleaseComObject(Blatt) + Catch + End Try + Try + If Datei IsNot Nothing Then Marshal.FinalReleaseComObject(Datei) + Catch + End Try + Try + If exclApp IsNot Nothing Then Marshal.FinalReleaseComObject(exclApp) + Catch + End Try + + Blatt = Nothing + Datei = Nothing + exclApp = Nothing + + GC.Collect() + GC.WaitForPendingFinalizers() + GC.Collect() + End Try + End Function + Public Function genEXCEL_DEPOT(KundenNr) As String diff --git a/MailSender/MailSender.vbproj b/MailSender/MailSender.vbproj index b15ab67..7118932 100644 --- a/MailSender/MailSender.vbproj +++ b/MailSender/MailSender.vbproj @@ -101,9 +101,9 @@ VbMyResourcesResXFileCodeGenerator - Resources.Designer.vb My.Resources Designer + Resources.Designer.vb @@ -119,12 +119,8 @@ - - Always - - - Always - + + Always diff --git a/MailSender/My Project/Resources.Designer.vb b/MailSender/My Project/Resources.Designer.vb index 29a6d4e..c926658 100644 --- a/MailSender/My Project/Resources.Designer.vb +++ b/MailSender/My Project/Resources.Designer.vb @@ -100,6 +100,26 @@ Namespace My.Resources End Get End Property + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Byte[]. + ''' + Friend ReadOnly Property MDM_AI_Verguetung() As Byte() + Get + Dim obj As Object = ResourceManager.GetObject("MDM_AI_Verguetung", resourceCulture) + Return CType(obj,Byte()) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Byte[]. + ''' + Friend ReadOnly Property MDM_IT_Verguetung() As Byte() + Get + Dim obj As Object = ResourceManager.GetObject("MDM_IT_Verguetung", 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 ee6689d..a566e5c 100644 --- a/MailSender/My Project/Resources.resx +++ b/MailSender/My Project/Resources.resx @@ -130,6 +130,12 @@ ..\Resources\Detailauswertung_divers.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 + + + ..\Resources\MDM_IT_Verguetung.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + ..\resources\mdm_zoll_verguetung.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/MailSender/Resources/MDM_IT_Verguetung.xlsx b/MailSender/Resources/MDM_IT_Verguetung.xlsx index 7b0cc56..f0339dd 100644 Binary files a/MailSender/Resources/MDM_IT_Verguetung.xlsx and b/MailSender/Resources/MDM_IT_Verguetung.xlsx differ diff --git a/UID/ADMIN.vbproj b/UID/ADMIN.vbproj index aaba6b3..9fb8b2d 100644 --- a/UID/ADMIN.vbproj +++ b/UID/ADMIN.vbproj @@ -980,6 +980,8 @@ Always + + Component Always diff --git a/UID/My Project/Resources.Designer.vb b/UID/My Project/Resources.Designer.vb index 49c0df4..023baeb 100644 --- a/UID/My Project/Resources.Designer.vb +++ b/UID/My Project/Resources.Designer.vb @@ -424,6 +424,26 @@ Namespace My.Resources End Get End Property + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Byte[]. + ''' + Friend ReadOnly Property MDM_AI_Verguetung() As Byte() + Get + Dim obj As Object = ResourceManager.GetObject("MDM_AI_Verguetung", resourceCulture) + Return CType(obj,Byte()) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Byte[]. + ''' + Friend ReadOnly Property MDM_IT_Verguetung() As Byte() + Get + Dim obj As Object = ResourceManager.GetObject("MDM_IT_Verguetung", resourceCulture) + Return CType(obj,Byte()) + End Get + End Property + ''' ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. ''' diff --git a/UID/My Project/Resources.resx b/UID/My Project/Resources.resx index 3c00e24..093ca70 100644 --- a/UID/My Project/Resources.resx +++ b/UID/My Project/Resources.resx @@ -316,4 +316,10 @@ ..\Resources\sdl_ico2.ico;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\MDM_AI_Verguetung.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\MDM_IT_Verguetung.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/UID/Resources/MDM_AI_Verguetung.xlsx b/UID/Resources/MDM_AI_Verguetung.xlsx new file mode 100644 index 0000000..63a115c Binary files /dev/null and b/UID/Resources/MDM_AI_Verguetung.xlsx differ diff --git a/UID/Resources/MDM_IT_Verguetung.xlsx b/UID/Resources/MDM_IT_Verguetung.xlsx new file mode 100644 index 0000000..7b0cc56 Binary files /dev/null and b/UID/Resources/MDM_IT_Verguetung.xlsx differ