diff --git a/EnvelopeGenerator.Common/EnvelopeGenerator.Common.vbproj b/EnvelopeGenerator.Common/EnvelopeGenerator.Common.vbproj index 2c36e458..0f0839b7 100644 --- a/EnvelopeGenerator.Common/EnvelopeGenerator.Common.vbproj +++ b/EnvelopeGenerator.Common/EnvelopeGenerator.Common.vbproj @@ -136,8 +136,9 @@ - - + + + @@ -150,6 +151,7 @@ + @@ -167,9 +169,9 @@ Settings.settings True - - - + + + rptEnvelopeHistory.vb diff --git a/EnvelopeGenerator.Common/Jobs/FinalizeDocument/FinalizeDocumentExceptions.vb b/EnvelopeGenerator.Common/Jobs/FinalizeDocument/FinalizeDocumentExceptions.vb new file mode 100644 index 00000000..a43386cb --- /dev/null +++ b/EnvelopeGenerator.Common/Jobs/FinalizeDocument/FinalizeDocumentExceptions.vb @@ -0,0 +1,52 @@ +Namespace Jobs.FinalizeDocument + Public Class FinalizeDocumentExceptions + + Public Class MergeDocumentException + Inherits ApplicationException + + Public Sub New(message As String) + MyBase.New(message) + End Sub + + Public Sub New(message As String, innerException As Exception) + MyBase.New(message, innerException) + End Sub + End Class + + Public Class BurnAnnotationException + Inherits ApplicationException + + Public Sub New(message As String) + MyBase.New(message) + End Sub + + Public Sub New(message As String, innerException As Exception) + MyBase.New(message, innerException) + End Sub + End Class + + Public Class CreateReportException + Inherits ApplicationException + + Public Sub New(message As String) + MyBase.New(message) + End Sub + + Public Sub New(message As String, innerException As Exception) + MyBase.New(message, innerException) + End Sub + End Class + Public Class ExportDocumentException + Inherits ApplicationException + + Public Sub New(message As String) + MyBase.New(message) + End Sub + + Public Sub New(message As String, innerException As Exception) + MyBase.New(message, innerException) + End Sub + End Class + + End Class +End Namespace diff --git a/EnvelopeGenerator.Common/Jobs/CertificateDocumentJob.vb b/EnvelopeGenerator.Common/Jobs/FinalizeDocument/FinalizeDocumentJob.vb similarity index 54% rename from EnvelopeGenerator.Common/Jobs/CertificateDocumentJob.vb rename to EnvelopeGenerator.Common/Jobs/FinalizeDocument/FinalizeDocumentJob.vb index cd171756..29e5328e 100644 --- a/EnvelopeGenerator.Common/Jobs/CertificateDocumentJob.vb +++ b/EnvelopeGenerator.Common/Jobs/FinalizeDocument/FinalizeDocumentJob.vb @@ -5,25 +5,31 @@ Imports GdPicture14 Imports Quartz Imports System.Security.Cryptography Imports System.IO +Imports EnvelopeGenerator.Common.Jobs.FinalizeDocument.FinalizeDocumentExceptions +Imports EnvelopeGenerator.Common.Jobs.FinalizeDocument +Imports System.Web.Caching +Imports System.Web.UI Namespace Jobs - Public Class CertificateDocumentJob + Public Class FinalizeDocumentJob Implements IJob - Private LicenseManager As New LicenseManager() + Private ReadOnly LicenseManager As New LicenseManager() Private GdViewer As GdViewer - Private ConfigModel As ConfigModel - Private EnvelopeModel As EnvelopeModel - Private LogConfig As LogConfig Private Logger As Logger Private Database As MSSQLServer Private Config As DbConfig + Private ConfigModel As ConfigModel + Private EnvelopeModel As EnvelopeModel + Private ReportModel As ReportModel + Private ActionService As ActionService Private PDFBurner As PDFBurner + Private ReportCreator As ReportCreator Private Class EnvelopeData Public EnvelopeId As Integer @@ -45,15 +51,19 @@ Namespace Jobs GdViewer = New GdViewer() LicenseManager.RegisterKEY(oGdPictureKey) - Logger.Debug("Loading PDFBurner..") - PDFBurner = New PDFBurner(LogConfig, oGdPictureKey) - Logger.Debug("Loading Database..") Database = GetDatabase(pContext, LogConfig) Logger.Debug("Loading Models & Services") - InitializeModels() - InitializeServices() + Dim oState = GetState() + InitializeModels(oState) + InitializeServices(oState) + + Logger.Debug("Loading PDFBurner..") + PDFBurner = New PDFBurner(LogConfig, oGdPictureKey) + + Logger.Debug("Loading ReportCreator..") + ReportCreator = New ReportCreator(LogConfig, oState) Logger.Debug("Loading Configuration..") Config = ConfigModel.LoadConfiguration() @@ -65,130 +75,139 @@ Namespace Jobs Dim oSql = $"SELECT * FROM TBSIG_ENVELOPE WHERE STATUS = {oCompleteStatus}" Dim oTable = Database.GetDatatable(oSql) - Dim oEnvelopeIds As List(Of Integer) = oTable.Rows.Cast(Of DataRow). Select(Function(r) r.Item("GUID")). Cast(Of Integer). ToList() Logger.Info("Found [{0}] completed envelopes.", oEnvelopeIds.Count) + Dim oTotal As Integer = oEnvelopeIds.Count + Dim oCurrent As Integer = 1 For Each oId In oEnvelopeIds - Logger.Info("Finalizing Envelope [{0}]", oId) - Dim oEnvelopeData = GetEnvelopeData(oId) + Logger.Info("Finalizing Envelope [{0}] ({1}/{2})", oId, oCurrent, oTotal) - If oEnvelopeData Is Nothing Then - Logger.Warn("EnvelopeData could not be loaded for Envelope [{0}]!", oId) + Logger.Debug("Loading Envelope..") + Dim oEnvelope = EnvelopeModel.GetById(oId) + + If oEnvelope Is Nothing Then + Logger.Warn("Envelope could not be loaded for Id [{0}]!", oId) Throw New ArgumentNullException("EnvelopeData") End If - If GenerateFinalPDF(oEnvelopeData) = False Then + Logger.Debug("Loading Envelope Data..") + Dim oEnvelopeData = GetEnvelopeData(oId) + + If oEnvelopeData Is Nothing Then + Logger.Warn("EnvelopeData could not be loaded for Id [{0}]!", oId) + Throw New ArgumentNullException("EnvelopeData") + End If + + Logger.Debug("Burning Annotations to pdf") + Dim oBurnedDocument As Byte() = BurnAnnotationsToPdf(oEnvelopeData) + If oBurnedDocument Is Nothing Then Logger.Warn("Document could not be finalized!") Throw New ApplicationException("Document could not be finalized") End If - ' Dim oReport As Byte() = Await GenerateReportPdf(oId) - ' MergeDocuments() + Logger.Debug("Creating report..") + Dim oReport As Byte() = ReportCreator.CreateReport(oEnvelope) - Dim oEnvelope = EnvelopeModel.GetById(oId) - If oEnvelope Is Nothing Then - Logger.Warn("Envelope could not loaded!") - Throw New ApplicationException("Envelope could not loaded!") - End If + Logger.Debug("Merging documents..") + Dim oMergedDocument As Byte() = MergeDocuments(oBurnedDocument, oReport) + Dim oOutputDirectoryPath = Config.ExportPath + Dim oOutputFilePath = Path.Combine(oOutputDirectoryPath, $"{oEnvelope.Uuid}.pdf") + + Logger.Info("Writing finalized Pdf to disk..") + Logger.Info("Output path is [{0}]", oOutputFilePath) + + Try + File.WriteAllBytes(oOutputFilePath, oMergedDocument) + Catch ex As Exception + Throw New ExportDocumentException("Could not export final document to disk!", ex) + Logger.Error(ex) + End Try + + Logger.Debug("Setting envelope status..") If ActionService.FinalizeEnvelope(oEnvelope) = False Then Logger.Warn("Envelope could not be finalized!") Throw New ApplicationException("Envelope could not be finalized") End If + oCurrent += 1 Logger.Info("Envelope finalized!") Next Logger.Info("Completed job {0} successfully!", JobId) + Catch ex As MergeDocumentException + Logger.Warn("Certificate Document job failed at step: Merging documents!") + Logger.Error(ex) Catch ex As Exception Logger.Warn("Certificate Document job failed!") Logger.Error(ex) End Try + + Logger.Info("Job execution for [{0}] ended", JobId) End Function - Private Function MergeDocuments(pDocumentPath As String, pReport As Byte()) + Private Function MergeDocuments(pDocument As Byte(), pReport As Byte()) As Byte() + Using oDocumentStream As New MemoryStream(pDocument) + Using oReportStream As New MemoryStream(pReport) + Using oFinalStream As New MemoryStream() + Using oDocumentPDF As New GdPicturePDF() + Using oReportPDF As New GdPicturePDF() - Using oGdPicturePDF As New GdPicturePDF() - Using oGdPicturePDFReport As New GdPicturePDF() - Using oStream As New MemoryStream(pReport) + ' Load the source file into memory + oDocumentPDF.LoadFromStream(oDocumentStream, True) + If oDocumentPDF.GetStat() Then + Throw New MergeDocumentException($"Document could not be loaded: {oDocumentPDF.GetStat}") + End If - ' Load the source file into memory - If oGdPicturePDF.LoadFromFile(pDocumentPath, True) <> GdPictureStatus.OK Then - Throw New ApplicationException("Document could not be loaded!") - End If + ' Load the report file into memory + oReportPDF.LoadFromStream(oReportStream, True) + If oDocumentPDF.GetStat() Then + Throw New MergeDocumentException($"Report could not be loaded: {oDocumentPDF.GetStat}") + End If - ' Load the report file into memory - If oGdPicturePDFReport.LoadFromStream(oStream, True) <> GdPictureStatus.OK Then - Throw New ApplicationException("Report could not be loaded!") - End If + ' Merge the documents + Dim oMergedPDF = oDocumentPDF.Merge2Documents(oDocumentPDF, oReportPDF) + If oDocumentPDF.GetStat() Then + Throw New MergeDocumentException($"Documents could not be merged: {oDocumentPDF.GetStat}") + End If - If oGdPicturePDF.ClonePages(oGdPicturePDFReport, "*") = GdPictureStatus.OK Then - Throw New ApplicationException("Report could not be loaded!") - End If + oMergedPDF.SaveToStream(oFinalStream) + Return oFinalStream.ToArray() + End Using + End Using End Using End Using End Using End Function - Private Function GenerateFinalPDF(pData As EnvelopeData) As Boolean + Private Function BurnAnnotationsToPdf(pData As EnvelopeData) As Byte() Dim pEnvelopeId = pData.EnvelopeId Logger.Info("Burning [{0}] signatures", pData.AnnotationData.Count) Dim oAnnotations = pData.AnnotationData Dim oInputPath = pData.DocumentPath - Dim oOutputPath = Config.ExportPath + Logger.Info("Input path: [{0}]", oInputPath) - Logger.Info("Output path: [{0}]", oOutputPath) + Dim oInputDocumentBuffer As Byte() + Try + oInputDocumentBuffer = File.ReadAllBytes(oInputPath) + Catch ex As Exception + Logger.Error(ex) + Throw New BurnAnnotationException("Source document could not be read from disk!", ex) + End Try - Dim oBurnResult = PDFBurner.BurnInstantJSONAnnotationsToPDF(oInputPath, oAnnotations, oOutputPath) - - If oBurnResult = False Then - Logger.Warn("PDF Could not be burned for Envelope [{0}]!", pEnvelopeId) - Return False - End If - - Return True + Return PDFBurner.BurnInstantJSONAnnotationsToPDF(oInputDocumentBuffer, oAnnotations) End Function - 'Private Async Function GenerateReportPdf(pEnvelopeId As Integer) As Task(Of Byte()) - ' Dim oSql As String = $"SELECT * FROM VWSIG_ENVELOPE_REPORT WHERE ENVELOPE_ID = {pEnvelopeId}" - ' Dim oTable As DataTable = Database.GetDatatable(oSql) - ' Dim oItems = GetReportSource(oTable) - - ' If oItems.Count = 0 Then - ' Return Nothing - ' End If - - ' Dim oState As New State() With { - ' .Database = Database, - ' .LogConfig = LogConfig - ' } - ' EnvelopeModel = New EnvelopeModel(oState) - ' Dim oEnvelope = EnvelopeModel.GetById(pEnvelopeId) - - ' Dim oCreator As New ReportCreator(oEnvelope) - ' Dim oBuffer = Await oCreator.CreateReport(oItems) - - ' Return oBuffer - 'End Function - - 'Private Function GetReportSource(pDataTable As DataTable) As List(Of ReportItem) - ' Return pDataTable.Rows. - ' Cast(Of DataRow). - ' Select(AddressOf ToReportItem). - ' OrderByDescending(Function(r) r.ItemDate). - ' ToList() - 'End Function - Private Function GetEnvelopeData(pEnvelopeId As Integer) As EnvelopeData Dim oSql = $"SELECT T.GUID, T2.FILEPATH FROM [dbo].[TBSIG_ENVELOPE] T JOIN TBSIG_ENVELOPE_DOCUMENT T2 ON T.GUID = T2.ENVELOPE_ID @@ -210,6 +229,7 @@ Namespace Jobs Return oData End Function + Private Function GetAnnotationData(pEnvelopeId As Integer) As List(Of String) Dim oSql = $"SELECT VALUE FROM TBSIG_DOCUMENT_STATUS WHERE ENVELOPE_ID = {pEnvelopeId}" Dim oTable As DataTable = Database.GetDatatable(oSql) @@ -221,26 +241,14 @@ Namespace Jobs End Function - Private Function ToReportItem(pRow As DataRow) As ReportItem - Return New ReportItem() With { - .EnvelopeId = pRow.Item("ENVELOPE_ID"), - .EnvelopeTitle = pRow.ItemEx("HEAD_TITLE", String.Empty), - .EnvelopeSubject = pRow.ItemEx("HEAD_SUBJECT", String.Empty), - .ItemDate = pRow.ItemEx(Of Date)("POS_WHEN", Nothing), - .ItemStatus = pRow.ItemEx("POS_STATUS", 0), - .ItemUserReference = pRow.ItemEx("POS_WHO", "") - } - End Function - - Private Sub InitializeServices() - Dim oState = GetState() - ActionService = New ActionService(oState) + Private Sub InitializeServices(pState As State) + ActionService = New ActionService(pState) End Sub - Private Sub InitializeModels() - Dim oState = GetState() - ConfigModel = New ConfigModel(oState) - EnvelopeModel = New EnvelopeModel(oState) + Private Sub InitializeModels(pState As State) + ConfigModel = New ConfigModel(pState) + EnvelopeModel = New EnvelopeModel(pState) + ReportModel = New ReportModel(pState) End Sub Private Function GetDatabase(pContext As IJobExecutionContext, pLogConfig As LogConfig) As MSSQLServer diff --git a/EnvelopeGenerator.Common/Jobs/PDFBurner.vb b/EnvelopeGenerator.Common/Jobs/FinalizeDocument/PDFBurner.vb similarity index 73% rename from EnvelopeGenerator.Common/Jobs/PDFBurner.vb rename to EnvelopeGenerator.Common/Jobs/FinalizeDocument/PDFBurner.vb index bd63eb89..09e10a3b 100644 --- a/EnvelopeGenerator.Common/Jobs/PDFBurner.vb +++ b/EnvelopeGenerator.Common/Jobs/FinalizeDocument/PDFBurner.vb @@ -4,8 +4,9 @@ Imports DigitalData.Modules.Base Imports DigitalData.Modules.Logging Imports GdPicture14 Imports Newtonsoft.Json +Imports EnvelopeGenerator.Common.Jobs.FinalizeDocument.FinalizeDocumentExceptions -Namespace Jobs +Namespace Jobs.FinalizeDocument Public Class PDFBurner Inherits BaseClass @@ -26,47 +27,43 @@ Namespace Jobs Manager = New AnnotationManager() End Sub - Public Function BurnInstantJSONAnnotationsToPDF(pSourceFilePath As String, pInstantJSONList As List(Of String), pDestinationDirectoryPath As String) As Boolean + Public Function BurnInstantJSONAnnotationsToPDF(pSourceBuffer As Byte(), pInstantJSONList As List(Of String)) As Byte() Dim oResult As GdPictureStatus - oResult = Manager.InitFromFile(pSourceFilePath) - If oResult <> GdPictureStatus.OK Then - Logger.Warn("Could not open file [{0}] for burning: [{1}]", pSourceFilePath, oResult.ToString) - Return False - End If - - For Each oJSON In pInstantJSONList - If AddInstantJSONAnnotationToPDF(oJSON) = False Then - Logger.Warn("Adding Annotation failed. Exiting") - Return False - End If - Next - - Dim oFileInfo As New FileInfo(pSourceFilePath) - Dim oDestinationFilePath As String = Path.Combine(pDestinationDirectoryPath, oFileInfo.Name) - Logger.Debug("Export filepath: [{0}]", oDestinationFilePath) - Try - oResult = Manager.BurnAnnotationsToPage(RemoveInitialAnnots:=True, VectorMode:=True) - If oResult <> GdPictureStatus.OK Then - Logger.Warn("Could not burn annotations to file file [{0}]: [{1}]", pSourceFilePath, oResult.ToString) - Return False - End If + Using oSourceStream As New MemoryStream(pSourceBuffer) + oResult = Manager.InitFromStream(oSourceStream) + If oResult <> GdPictureStatus.OK Then + Throw New BurnAnnotationException($"Could not open document for burning: [{oResult}]") + End If - oResult = Manager.SaveDocumentToPDF(oDestinationFilePath) - If oResult <> GdPictureStatus.OK Then - Logger.Warn("Could not save file [{0}] to path [{1}]: [{2}]", oFileInfo.Name, oDestinationFilePath, oResult.ToString) - Return False - End If + For Each oJSON In pInstantJSONList + If AddInstantJSONAnnotationToPDF(oJSON) = False Then + Throw New BurnAnnotationException($"Adding Annotation failed") + End If + Next - Manager.Close() - Return True + oResult = Manager.BurnAnnotationsToPage(RemoveInitialAnnots:=True, VectorMode:=True) + If oResult <> GdPictureStatus.OK Then + Throw New BurnAnnotationException($"Could not burn annotations to file: [{oResult}]") + End If + + Using oNewStream As New MemoryStream() + oResult = Manager.SaveDocumentToPDF(oNewStream) + If oResult <> GdPictureStatus.OK Then + Throw New BurnAnnotationException($"Could not save document to stream: [{oResult}]") + End If + + Manager.Close() + + Return oNewStream.ToArray() + End Using + End Using Catch ex As Exception - Logger.Warn("Could not burn and save annotations to file [{0}]!", oDestinationFilePath) Logger.Error(ex) - Return False + Return Nothing End Try End Function diff --git a/EnvelopeGenerator.Common/Jobs/FinalizeDocument/ReportCreator.vb b/EnvelopeGenerator.Common/Jobs/FinalizeDocument/ReportCreator.vb new file mode 100644 index 00000000..8b8c6ae9 --- /dev/null +++ b/EnvelopeGenerator.Common/Jobs/FinalizeDocument/ReportCreator.vb @@ -0,0 +1,91 @@ +Imports System.IO +Imports DigitalData.Modules.Logging +Imports DigitalData.Modules.Base +Imports EnvelopeGenerator.Common.Jobs.FinalizeDocument.FinalizeDocumentExceptions + +Public Class ReportCreator + Inherits BaseClass + + Private Envelope As Envelope + Private ReadOnly ReportModel As ReportModel + Private ReadOnly EnvelopeModel As EnvelopeModel + + Public Sub New(pLogConfig As LogConfig, pState As State) + MyBase.New(pLogConfig) + + ReportModel = New ReportModel(pState) + EnvelopeModel = New EnvelopeModel(pState) + End Sub + + Public Function CreateReport(pEnvelope As Envelope) As Byte() + Try + Logger.Debug("Loading report data..") + Dim oTable = ReportModel.List(pEnvelope.Id) + Dim oItems = GetReportSource(oTable) + + Envelope = pEnvelope + + If oItems.Count = 0 Then + Throw New CreateReportException("No report data found!") + End If + + Logger.Debug("Creating report with [{0}] items..", oItems.Count) + Dim oBuffer = DoCreateReport(oItems) + Logger.Debug("Report created!") + + Return oBuffer + Catch ex As Exception + Logger.Error(ex) + Throw New CreateReportException("Could not prepare report data!", ex) + End Try + End Function + + Private Function GetReportSource(pDataTable As DataTable) As List(Of ReportItem) + Logger.Debug("Preparing report data") + Return pDataTable.Rows. + Cast(Of DataRow). + Select(AddressOf ToReportItem). + OrderByDescending(Function(r) r.ItemDate). + ToList() + End Function + + Private Function DoCreateReport(pReportItems As List(Of ReportItem)) As Byte() + Dim oItems = pReportItems.Select(AddressOf MergeEnvelope).ToList() + Dim oSource As New ReportSource With {.Items = oItems} + Dim oReport As New rptEnvelopeHistory() With {.DataSource = oSource, .DataMember = "Items"} + + Logger.Debug("Creating report in memory..") + oReport.CreateDocument() + + Logger.Debug("Exporting report to stream..") + Using oStream As New MemoryStream() + oReport.ExportToPdf(oStream) + + Logger.Debug("Writing report to buffer..") + Return oStream.ToArray() + End Using + End Function + + Private Function MergeEnvelope(pItem As ReportItem) As ReportItem + If pItem.Envelope Is Nothing Then + pItem.Envelope = Envelope + End If + Return pItem + End Function + + Private Function ToReportItem(pRow As DataRow) As ReportItem + Try + Return New ReportItem() With { + .EnvelopeId = pRow.Item("ENVELOPE_ID"), + .EnvelopeTitle = pRow.ItemEx("HEAD_TITLE", String.Empty), + .EnvelopeSubject = pRow.ItemEx("HEAD_SUBJECT", String.Empty), + .ItemDate = pRow.ItemEx(Of Date)("POS_WHEN", Nothing), + .ItemStatus = pRow.ItemEx("POS_STATUS", 0), + .ItemUserReference = pRow.ItemEx("POS_WHO", "") + } + Catch ex As Exception + Logger.Error(ex) + Throw New CreateReportException("Could not read data from database!", ex) + End Try + End Function +End Class diff --git a/EnvelopeGenerator.Common/Reports/ReportItem.vb b/EnvelopeGenerator.Common/Jobs/FinalizeDocument/ReportItem.vb similarity index 100% rename from EnvelopeGenerator.Common/Reports/ReportItem.vb rename to EnvelopeGenerator.Common/Jobs/FinalizeDocument/ReportItem.vb diff --git a/EnvelopeGenerator.Common/Reports/ReportSource.vb b/EnvelopeGenerator.Common/Jobs/FinalizeDocument/ReportSource.vb similarity index 100% rename from EnvelopeGenerator.Common/Reports/ReportSource.vb rename to EnvelopeGenerator.Common/Jobs/FinalizeDocument/ReportSource.vb diff --git a/EnvelopeGenerator.Common/Models/ReportModel.vb b/EnvelopeGenerator.Common/Models/ReportModel.vb new file mode 100644 index 00000000..a846b423 --- /dev/null +++ b/EnvelopeGenerator.Common/Models/ReportModel.vb @@ -0,0 +1,14 @@ +Public Class ReportModel + Inherits BaseModel + + Public Sub New(pState As State) + MyBase.New(pState) + End Sub + + Public Function List(pEnvelopeId As Integer) As DataTable + Dim oSql As String = $"SELECT * FROM VWSIG_ENVELOPE_REPORT WHERE ENVELOPE_ID = {pEnvelopeId}" + Dim oTable As DataTable = Database.GetDatatable(oSql) + + Return oTable + End Function +End Class diff --git a/EnvelopeGenerator.Common/Reports/ReportCreator.vb b/EnvelopeGenerator.Common/Reports/ReportCreator.vb deleted file mode 100644 index 09fe32c4..00000000 --- a/EnvelopeGenerator.Common/Reports/ReportCreator.vb +++ /dev/null @@ -1,30 +0,0 @@ -Imports System.IO -Imports DevExpress.XtraPrinting - -Public Class ReportCreator - Private Envelope As Envelope - - Public Sub New(pEnvelope As Envelope) - Envelope = pEnvelope - End Sub - - Public Async Function CreateReport(pReportItems As List(Of ReportItem)) As Task(Of Byte()) - Dim oItems = pReportItems.Select(AddressOf MergeEnvelope).ToList() - Dim oSource As New ReportSource With {.Items = oItems} - Dim oReport As New rptEnvelopeHistory() With {.DataSource = oSource, .DataMember = "Items"} - - Await oReport.CreateDocumentAsync() - - Using oStream As New MemoryStream() - Await oReport.ExportToPdfAsync(oStream, New PdfExportOptions) - Return oStream.ToArray() - End Using - End Function - - Private Function MergeEnvelope(pItem As ReportItem) As ReportItem - If pItem.Envelope Is Nothing Then - pItem.Envelope = Envelope - End If - Return pItem - End Function -End Class diff --git a/EnvelopeGenerator.Common/Strings/Envelope.en.resx b/EnvelopeGenerator.Common/Strings/Envelope.en.resx index 9c4738bf..cc8efa00 100644 --- a/EnvelopeGenerator.Common/Strings/Envelope.en.resx +++ b/EnvelopeGenerator.Common/Strings/Envelope.en.resx @@ -156,6 +156,9 @@ Envelope Invitations Sent + + Overview + The invitations were successfully prepared for dispatch. @@ -220,7 +223,7 @@ Signature - Signature Editor + Signature-Editor The envelope could not be deleted! diff --git a/EnvelopeGenerator.Common/Strings/Envelope.resx b/EnvelopeGenerator.Common/Strings/Envelope.resx index 58e5c8a3..60c875f6 100644 --- a/EnvelopeGenerator.Common/Strings/Envelope.resx +++ b/EnvelopeGenerator.Common/Strings/Envelope.resx @@ -156,6 +156,9 @@ Die Einladungen wurden versendet + + Übersicht + Die Einladungen wurden erfolgreich zum Versand bereitgestellt. @@ -220,7 +223,7 @@ Signatur - Signatur Editor + Signatur-Editor Der Umschlag konnte nicht gelöscht werden! diff --git a/EnvelopeGenerator.Common/Strings/Envelope1.Designer.vb b/EnvelopeGenerator.Common/Strings/Envelope1.Designer.vb index af9ddbca..b069d09b 100644 --- a/EnvelopeGenerator.Common/Strings/Envelope1.Designer.vb +++ b/EnvelopeGenerator.Common/Strings/Envelope1.Designer.vb @@ -190,6 +190,15 @@ Namespace My.Resources End Get End Property + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die Übersicht ähnelt. + ''' + Public Shared ReadOnly Property Envelope_Overview() As String + Get + Return ResourceManager.GetString("Envelope Overview", resourceCulture) + End Get + End Property + ''' ''' Sucht eine lokalisierte Zeichenfolge, die Die Einladungen wurden erfolgreich zum Versand bereitgestellt. ähnelt. ''' @@ -371,7 +380,7 @@ Namespace My.Resources End Property ''' - ''' Sucht eine lokalisierte Zeichenfolge, die Signatur Editor ähnelt. + ''' Sucht eine lokalisierte Zeichenfolge, die Signatur-Editor ähnelt. ''' Public Shared ReadOnly Property Signature_Editor() As String Get