diff --git a/SDL/Fakturierung/cFakturierung.vb b/SDL/Fakturierung/cFakturierung.vb index bb4dc212..1026e934 100644 --- a/SDL/Fakturierung/cFakturierung.vb +++ b/SDL/Fakturierung/cFakturierung.vb @@ -3,7 +3,6 @@ Imports System.Globalization Imports System.IO Imports System.Net Imports System.Web.UI.WebControls.Expressions -Imports GrapeCity.ActiveReports.Export.Pdf Imports iText.Kernel.Pdf Imports itextsharp.text.pdf Imports Microsoft.Office.Interop diff --git a/SDL/Fakturierung/usrCntlFaktAbrechnung.vb b/SDL/Fakturierung/usrCntlFaktAbrechnung.vb index b2b8c1cb..a759c96b 100644 --- a/SDL/Fakturierung/usrCntlFaktAbrechnung.vb +++ b/SDL/Fakturierung/usrCntlFaktAbrechnung.vb @@ -3684,6 +3684,24 @@ Public Class usrCntlFaktAbrechnung saveMe() 'Damit Prüfungen in der Vorschau funktionieren (zT mit DB abhängig -> ReverseCharge) getValues() + 'If RECHNUNG IsNot Nothing AndAlso RECHNUNG.Firma_ID > 0 Then + ' Select Case RECHNUNG.Firma_ID + ' Case 19 + ' Dim rpt As New rptRechnungDruck_MDM + ' If VERAG_PROG_ALLGEMEIN.cProgramFunctions.CheckReportImages(rpt).Count > 0 Then + ' Exit Sub + ' End If + ' Case Else + + ' Dim rpt As New rptRechnungDruck + ' If VERAG_PROG_ALLGEMEIN.cProgramFunctions.CheckReportImages(rpt).Count > 0 Then + ' Exit Sub + ' End If + + ' End Select + + + 'End If cFakturierung.doRechnungsDruck(RECHNUNG,, True,,, getPrinterFromParent) End Sub diff --git a/VERAG_PROG_ALLGEMEIN/VERAG_PROG_ALLGEMEIN.vbproj b/VERAG_PROG_ALLGEMEIN/VERAG_PROG_ALLGEMEIN.vbproj index 18e1309a..5fc0036e 100644 --- a/VERAG_PROG_ALLGEMEIN/VERAG_PROG_ALLGEMEIN.vbproj +++ b/VERAG_PROG_ALLGEMEIN/VERAG_PROG_ALLGEMEIN.vbproj @@ -87,6 +87,9 @@ False F:\PROGRAMMIERUNG\dll\OpenXML\DocumentFormat.OpenXml.dll + + ..\..\..\Aviso\AVISO\Gemeinsames\bin\Debug\DS.Documents.Imaging.dll + False F:\PROGRAMMIERUNG\dll\Dynamsoft\8.3.3\Dynamsoft.Forms.Viewer.dll @@ -123,6 +126,14 @@ False F:\PROGRAMMIERUNG\dll\McDull.Windows.Forms.dll + + ..\..\..\Aviso\AVISO\Gemeinsames\bin\Debug\MESCIUS.ActiveReports.dll + + + + False + ..\..\..\Aviso\AVISO\Gemeinsames\bin\Debug\MESCIUS.ActiveReports.Core.Document.Drawing.Gc.dll + False True diff --git a/VERAG_PROG_ALLGEMEIN/cProgramFunktions.vb b/VERAG_PROG_ALLGEMEIN/cProgramFunktions.vb index da59f1e3..df78c1ec 100644 --- a/VERAG_PROG_ALLGEMEIN/cProgramFunktions.vb +++ b/VERAG_PROG_ALLGEMEIN/cProgramFunktions.vb @@ -1,13 +1,17 @@ Imports System.Drawing Imports System.IO +Imports System.IO.Pipes Imports System.Net.Mail Imports System.Reflection Imports System.Runtime.InteropServices Imports System.Text Imports System.Windows.Forms Imports ClosedXML.Excel +Imports GrapeCity.ActiveReports +Imports GrapeCity.ActiveReports.Core.Document.Drawing.Gc +Imports GrapeCity.ActiveReports.SectionReportModel +Imports GrapeCity.Documents.Imaging Imports Microsoft.Office.Interop -Imports System.IO.Pipes Imports ThoughtWorks.QRCode.Codec Public Class cProgramFunctions @@ -71,6 +75,135 @@ Public Class cProgramFunctions End Function + Public Shared Function CheckAllReportImages() As List(Of String) + + Dim errors As New List(Of String) + + For Each report As GrapeCity.ActiveReports.SectionReport In FindAllReports() + + For Each section As GrapeCity.ActiveReports.SectionReportModel.Section In report.Sections + CheckImagesInControls(section.Controls, errors, report.GetType().Name, section.Name) + Next + + Next + + Return errors + + End Function + + Public Shared Function CheckReportImages(report As SectionReport) As List(Of String) + + Dim errors As New List(Of String) + + For Each section As GrapeCity.ActiveReports.SectionReportModel.Section In report.Sections + CheckImagesInControls(section.Controls, errors, report.GetType().Name, section.Name) + Next + + + Return errors + + End Function + + Private Shared Sub CheckImagesInControls(ctrls As GrapeCity.ActiveReports.SectionReportModel.ControlCollection, errors As List(Of String), reportName As String, sectionName As String) + + For Each ctrl As GrapeCity.ActiveReports.SectionReportModel.ARControl In ctrls + + If TypeOf ctrl Is GrapeCity.ActiveReports.SectionReportModel.Picture Then + + Dim pic = CType(ctrl, GrapeCity.ActiveReports.SectionReportModel.Picture) + + If Not String.IsNullOrEmpty(pic.ImageBase64String) Then + + If Not IsBase64(pic.ImageBase64String) Then + errors.Add($"{reportName} | {sectionName} | {ctrl.Name} → Ungültiger Base64") + End If + + End If + End If + + Next + + End Sub + + Public Shared Function IsBase64(value As String) As Boolean + If String.IsNullOrWhiteSpace(value) Then Return False + + Try + ' Data-URL entfernen + If value.Contains(",") Then + value = value.Substring(value.IndexOf(",") + 1) + End If + + ' Base64 dekodieren + Dim bytes() As Byte = Convert.FromBase64String(value) + + Using ms As New MemoryStream(bytes) + ' Instanz von GcBitmap erstellen + Dim bmp As GcBitmap = Nothing + Try + bmp = New GcBitmap(ms) + ' Zugriff erzwingen + Dim w As Integer = bmp.Width + Dim h As Integer = bmp.Height + + If w <= 0 OrElse h <= 0 Then Return False + + Finally + If bmp IsNot Nothing Then + bmp.Dispose() + End If + End Try + End Using + + Return True + + Catch ex As TypeInitializationException + ' Speziell Typeninitialisierer-Fehler abfangen + ' z. B. "PerTypeValues`1 hat eine Ausnahme verursacht" + Return False + + + + Catch ex As Exception + ' Alle anderen Fehler ebenfalls als ungültig behandeln + Return False + + Catch + Return False + + + End Try + End Function + + + Public Shared Function FindAllReports() As List(Of SectionReport) + Dim list As New List(Of SectionReport) + + ' Alle geladenen Assemblies durchsuchen + For Each asm In AppDomain.CurrentDomain.GetAssemblies() + Try + For Each t In asm.GetTypes() + ' Nur konkrete Klassen, die von SectionReport erben + If GetType(SectionReport).IsAssignableFrom(t) AndAlso t.IsClass AndAlso Not t.IsAbstract Then + Try + ' Parameterloser Konstruktor + Dim instance As SectionReport = CType(Activator.CreateInstance(t), SectionReport) + list.Add(instance) + Catch ex As Exception + ' Ignoriere Klassen ohne parameterlosen Konstruktor + End Try + End If + Next + Catch + ' Manche Assemblies lassen sich nicht durchsuchen + End Try + Next + + Return list + End Function + + Dim r As SectionReport + Public Shared Sub tryGetFilialeAbf_ByLRN(ByVal LRN As String, ByRef FilialenNr As Object, ByRef AbfertigungsNr As Object) @@ -486,7 +619,7 @@ BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, [Control], New Object( wb.Worksheets(0).Tables.FirstOrDefault().ShowAutoFilter = ShowAutoFilter If rangeAsWaehrung IsNot Nothing Then - For Each r In rangeAsWaehrung + For Each r As String In rangeAsWaehrung Try wb.Worksheets(0).Range(r).Style.NumberFormat.SetFormat("###,###,##0.00 " & waehrungsZeichen) Catch ex As Exception @@ -1121,7 +1254,7 @@ BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, [Control], New Object( End Function Private Const SW_SHOWNOACTIVATE As Integer = 4 Private Const SW_RESTORE As Integer = 9 - Shared Sub bringToFront(processId) + Shared Sub bringToFront(processId) ' Prozess finden und in den Vordergrund bringen Try Dim process = System.Diagnostics.Process.GetProcessById(processId)