From 6fc0c32c46fd8440d8441f154d835c3c2f054987 Mon Sep 17 00:00:00 2001 From: Developer01 Date: Wed, 7 May 2025 16:50:46 +0200 Subject: [PATCH 1/4] Common und Service API Send API Mails --- .../EnvelopeGenerator.Common.vbproj | 1 + .../APIBackendJobs/SendInvitationMailJob.vb | 170 ++++++++++++++++++ .../My Project/AssemblyInfo.vb | 4 +- .../EnvelopeGenerator.Service.vbproj | 3 +- .../Scheduler_API_SendEnvelopeMails.vb | 72 ++++++++ ...heduler.vb => Scheduler_FinishEnvelope.vb} | 4 +- EnvelopeGenerator.Service/Service.vb | 17 +- 7 files changed, 260 insertions(+), 11 deletions(-) create mode 100644 EnvelopeGenerator.Common/Jobs/APIBackendJobs/SendInvitationMailJob.vb create mode 100644 EnvelopeGenerator.Service/Scheduler_API_SendEnvelopeMails.vb rename EnvelopeGenerator.Service/{Scheduler.vb => Scheduler_FinishEnvelope.vb} (96%) diff --git a/EnvelopeGenerator.Common/EnvelopeGenerator.Common.vbproj b/EnvelopeGenerator.Common/EnvelopeGenerator.Common.vbproj index 6f69ba5b..10fa4f46 100644 --- a/EnvelopeGenerator.Common/EnvelopeGenerator.Common.vbproj +++ b/EnvelopeGenerator.Common/EnvelopeGenerator.Common.vbproj @@ -281,6 +281,7 @@ + diff --git a/EnvelopeGenerator.Common/Jobs/APIBackendJobs/SendInvitationMailJob.vb b/EnvelopeGenerator.Common/Jobs/APIBackendJobs/SendInvitationMailJob.vb new file mode 100644 index 00000000..f61c54c0 --- /dev/null +++ b/EnvelopeGenerator.Common/Jobs/APIBackendJobs/SendInvitationMailJob.vb @@ -0,0 +1,170 @@ +Imports DigitalData.Modules.Database +Imports DigitalData.Modules.Logging +Imports DigitalData.Modules.Base +Imports GdPicture14 +Imports Quartz +Imports System.Security.Cryptography +Imports System.IO +Imports EnvelopeGenerator.Common.Jobs.FinalizeDocument.FinalizeDocumentExceptions +Imports EnvelopeGenerator.Common.Jobs.FinalizeDocument +Imports EnvelopeGenerator.Common.Constants +Imports DevExpress.DataProcessing +Imports System.Data.SqlClient +Imports DevExpress.XtraRichEdit.Layout.Engine + +Namespace Jobs + Public Class SendInvitationMailJob + Implements IJob + + + 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 ReceiverModel As ReceiverModel + Private ActionService As ActionService + + + Private ReadOnly CompleteWaitTime As Integer = 1 + + Private myTempFiles As TempFiles + + Private Class EnvelopeData + Public EnvelopeId As Integer + Public EnvelopeUUID As String + Public DocumentPath As String + End Class + + Public Function Execute(pContext As IJobExecutionContext) As Task Implements IJob.Execute + LogConfig = pContext.MergedJobDataMap.Item(Constants.LOGCONFIG) + Logger = LogConfig.GetLogger() + myTempFiles = New TempFiles(LogConfig) + myTempFiles.Create() + Dim JobId = pContext.JobDetail.Key + Logger.Info("SendInvMail - Starting job {0}", JobId) + + Try + Logger.Debug("SendInvMail - Loading Database..") + Database = GetDatabase(pContext, LogConfig) + + Logger.Debug("SendInvMail - Loading Models & Services") + Dim oState = GetState() + InitializeModels(oState) + + Logger.Debug("SendInvMail - Loading Configuration..") + Config = ConfigModel.LoadConfiguration() + oState.DbConfig = Config + + InitializeServices(oState) + Config.DocumentPath = Config.DocumentPath + + Logger.Debug("SendInvMail - ExportPath: [{0}]", Config.ExportPath) + + Dim oCompleteStatus As Integer = Constants.EnvelopeStatus.EnvelopeCompletelySigned + Dim oSql = $"SELECT * FROM TBSIG_ENVELOPE where SOURCE = 'API' AND STATUS = 1003 order by guid" + 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() + + If oEnvelopeIds.Count > 0 Then + Logger.Info("SendInvMail - Found [{0}] envelopes.", oEnvelopeIds.Count) + End If + + Dim oTotal As Integer = oEnvelopeIds.Count + Dim oCurrent As Integer = 1 + + For Each oId In oEnvelopeIds + Logger.Info("SendInvMail - Gathering Info for Envelope [{0}] ({1}/{2})", oId, oCurrent, oTotal) + Logger.Debug("SendInvMail - Loading Envelope..") + Try + Dim oEnvelope = EnvelopeModel.GetById(oId) + If oEnvelope Is Nothing Then + Logger.Warn("SendInvMail - Envelope could not be loaded for Id [{0}]!", oId) + Throw New ArgumentNullException("EnvelopeData") + End If + Logger.Debug("SendInvMail - Loading Envelope Data..") + Dim oEnvelopeData = GetEnvelopeData(oId) + oEnvelope.Receivers = ReceiverModel.ListEnvelopeReceivers(oEnvelope.Id).ToList() + Logger.Debug("SendInvMail - Created Reveivers!") + If oEnvelopeData Is Nothing Then + Logger.Warn("SendInvMail - EnvelopeData could not be loaded for Id [{0}]!", oId) + Throw New ArgumentNullException("EnvelopeData") + End If + Logger.Info("SendInvMail - Sending InvitationMails for Envelope [{0}]", oId) + If ActionService.SendEnvelope(oEnvelope) = False Then + Throw New ArgumentNullException("EnvelopeData") + End If + Catch ex As Exception + Logger.Warn(ex, $"Unhandled exception while working envelope [{oId}]") + End Try + + oCurrent += 1 + Logger.Info("SendInvMail - Envelope finalized!") + + Next + + Logger.Debug("SendInvMail - Completed job {0} successfully!", JobId) + Catch ex As Exception + Logger.Warn("SendInvMail job failed!") + Logger.Error(ex) + Finally + Logger.Info("SendInvMail execution for [{0}] ended", JobId) + End Try + + Return Task.FromResult(True) + End Function + Private Sub InitializeModels(pState As State) + ConfigModel = New ConfigModel(pState) + EnvelopeModel = New EnvelopeModel(pState) + ReceiverModel = New ReceiverModel(pState) + End Sub + Private Sub InitializeServices(pState As State) + ActionService = New ActionService(pState) + End Sub + Private Function GetDatabase(pContext As IJobExecutionContext, pLogConfig As LogConfig) As MSSQLServer + Dim oConnectionString As String = pContext.MergedJobDataMap.Item(Constants.DATABASE) + Dim Database = New MSSQLServer(pLogConfig, MSSQLServer.DecryptConnectionString(oConnectionString)) + + Return Database + End Function + Private Function GetEnvelopeData(pEnvelopeId As Integer) As EnvelopeData + Dim oSql = $"SELECT T.GUID, T.ENVELOPE_UUID,T2.FILEPATH, T2.BYTE_DATA FROM [dbo].[TBSIG_ENVELOPE] T + JOIN TBSIG_ENVELOPE_DOCUMENT T2 ON T.GUID = T2.ENVELOPE_ID + WHERE T.GUID = {pEnvelopeId}" + Dim oTable As DataTable = Database.GetDatatable(oSql) + Dim oRow As DataRow = oTable.Rows.Cast(Of DataRow).SingleOrDefault() + If oRow Is Nothing Then + Return Nothing + End If + + Dim oData As New EnvelopeData With { + .EnvelopeId = pEnvelopeId, + .DocumentPath = oRow.ItemEx("FILEPATH", ""), + .EnvelopeUUID = oRow.ItemEx("ENVELOPE_UUID", "") + } + + Logger.Debug("Document path: [{0}]", oData.DocumentPath) + + Return oData + End Function + + + + + Private Function GetState() As State + Return New State With { + .LogConfig = LogConfig, + .Database = Database, + .UserId = 0, + .Config = Nothing, + .DbConfig = Nothing + } + End Function + End Class +End Namespace diff --git a/EnvelopeGenerator.Common/My Project/AssemblyInfo.vb b/EnvelopeGenerator.Common/My Project/AssemblyInfo.vb index 8b6b53ef..52938667 100644 --- a/EnvelopeGenerator.Common/My Project/AssemblyInfo.vb +++ b/EnvelopeGenerator.Common/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' indem Sie "*" wie unten gezeigt eingeben: ' - - + + diff --git a/EnvelopeGenerator.Service/EnvelopeGenerator.Service.vbproj b/EnvelopeGenerator.Service/EnvelopeGenerator.Service.vbproj index fa08023f..ea20f2d7 100644 --- a/EnvelopeGenerator.Service/EnvelopeGenerator.Service.vbproj +++ b/EnvelopeGenerator.Service/EnvelopeGenerator.Service.vbproj @@ -260,6 +260,7 @@ + Service.vb @@ -288,7 +289,7 @@ Settings.settings True - + diff --git a/EnvelopeGenerator.Service/Scheduler_API_SendEnvelopeMails.vb b/EnvelopeGenerator.Service/Scheduler_API_SendEnvelopeMails.vb new file mode 100644 index 00000000..fac1cff2 --- /dev/null +++ b/EnvelopeGenerator.Service/Scheduler_API_SendEnvelopeMails.vb @@ -0,0 +1,72 @@ +Imports System.Collections.Specialized +Imports DigitalData.Modules.Base +Imports DigitalData.Modules.Database +Imports DigitalData.Modules.Logging +Imports EnvelopeGenerator.Common.Jobs +Imports EnvelopeGenerator.Common.Jobs.FinalizeDocument +Imports Quartz +Public Class Scheduler_API_SendEnvelopeMails + Inherits BaseClass + Private Scheduler As IScheduler + Private ReadOnly ConnectionString As String + + Private Const JobName = "SendInvitationMailsAPI" + Public Sub New(pLogConfig As LogConfig, pConnectionString As String) + MyBase.New(pLogConfig) + ConnectionString = pConnectionString + Dim oLogProvider = New LogProvider(Logger) + Logging.LogProvider.SetCurrentLogProvider(oLogProvider) + End Sub + + Public Async Function Start(pInterval As Integer) As Task + Try + Logger.Debug("Starting Scheduler SendMailsfromAPI..") + + Dim oProperties As New NameValueCollection() + + Scheduler = Await SchedulerBuilder.Create(oProperties). + UseDefaultThreadPool(Sub(x) x.MaxConcurrency = 5). + BuildScheduler() + Dim oJobKey = New JobKey(JobName) + Dim oJobData = New JobDataMap() From { + {Common.Constants.LOGCONFIG, LogConfig}, + {Common.Constants.DATABASE, ConnectionString} + } + + Logger.Debug("Initialized Job [{0}]", JobName) + + Dim oJob As IJobDetail = JobBuilder.Create(Of SendInvitationMailJob). + UsingJobData(oJobData). + WithIdentity(oJobKey). + Build() + + Dim oTrigger As ITrigger = TriggerBuilder.Create(). + ForJob(oJobKey). + WithIdentity($"{JobName}-trigger"). + WithSimpleSchedule(Sub(s) s. + RepeatForever(). + WithIntervalInMinutes(pInterval)). + StartNow(). + Build() + + Logger.Debug($"{JobName}-trigger initialized") + + Await Scheduler.ScheduleJob(oJob, oTrigger) + + Logger.Debug($"{JobName}-scheduled") + + Await Scheduler.Start() + + Logger.Info($"{JobName}-started") + Catch ex As Exception + Logger.Error(ex) + End Try + + End Function + + Public Async Function [Stop]() As Task + Logger.Info("Stopping scheduler SendMailsfromAPI..") + Await Scheduler.Shutdown() + Logger.Info("Scheduler SendMailsfromAPI stopped!") + End Function +End Class diff --git a/EnvelopeGenerator.Service/Scheduler.vb b/EnvelopeGenerator.Service/Scheduler_FinishEnvelope.vb similarity index 96% rename from EnvelopeGenerator.Service/Scheduler.vb rename to EnvelopeGenerator.Service/Scheduler_FinishEnvelope.vb index 1362e355..9bd10a06 100644 --- a/EnvelopeGenerator.Service/Scheduler.vb +++ b/EnvelopeGenerator.Service/Scheduler_FinishEnvelope.vb @@ -6,7 +6,7 @@ Imports EnvelopeGenerator.Common.Jobs Imports EnvelopeGenerator.Common.Jobs.FinalizeDocument Imports Quartz -Public Class Scheduler +Public Class Scheduler_FinishEnvelope Inherits BaseClass Private Scheduler As IScheduler @@ -28,7 +28,7 @@ Public Class Scheduler Public Async Function Start(pInterval As Integer) As Task Try - Logger.Debug("Starting Scheduler..") + Logger.Debug("Starting Scheduler Finish Envelope..") Dim oProperties As New NameValueCollection() diff --git a/EnvelopeGenerator.Service/Service.vb b/EnvelopeGenerator.Service/Service.vb index c0e1a88b..4431b09b 100644 --- a/EnvelopeGenerator.Service/Service.vb +++ b/EnvelopeGenerator.Service/Service.vb @@ -10,7 +10,8 @@ Public Class Service Private Config As Config Private Database As MSSQLServer Private TempFiles As TempFiles - Private Scheduler As Scheduler + Private Scheduler1 As Scheduler_FinishEnvelope + Private Scheduler2 As Scheduler_API_SendEnvelopeMails Protected Overrides Async Sub OnStart(ByVal args() As String) Try @@ -53,10 +54,13 @@ Public Class Service ' === Initialize Queue === - Logger.Debug("Inititalize Quartz") + Logger.Debug("Inititalizing scheduler(s) ...") - Scheduler = New Scheduler(LogConfig, Config.ConnectionString, oKey, Config.PDFBurnerParams) - Await Scheduler.Start(Config.IntervalInMin) + Scheduler1 = New Scheduler_FinishEnvelope(LogConfig, Config.ConnectionString, oKey, Config.PDFBurnerParams) + Await Scheduler1.Start(Config.IntervalInMin) + + Scheduler2 = New Scheduler_API_SendEnvelopeMails(LogConfig, Config.ConnectionString) + Await Scheduler2.Start(Config.IntervalInMin) Logger.Info("Started [{0}] !", ServiceName) @@ -67,8 +71,9 @@ Public Class Service Protected Overrides Async Sub OnStop() Try - Logger.Info("Stopping [{0}] !", ServiceName) - Await Scheduler.Stop() + Logger.Info("Stopping [{0}] ...", ServiceName) + Await Scheduler1.Stop() + Await Scheduler2.Stop() TempFiles.CleanUp() Logger.Info("Stopped [{0}] !", ServiceName) Catch ex As Exception From 5a8f2d298fbd1ba271b4c94482ffdce7c6b93bba Mon Sep 17 00:00:00 2001 From: Developer01 Date: Thu, 8 May 2025 14:37:34 +0200 Subject: [PATCH 2/4] MS Service Invitations API,Form 2Faktor Properties --- .../APIBackendJobs/SendInvitationMailJob.vb | 8 +- .../FinalizeDocument/FinalizeDocumentJob.vb | 7 +- .../Models/EnvelopeModel.vb | 2 +- .../Strings/Model.Designer.vb | 27 ++-- .../Strings/Model.en.resx | 6 + EnvelopeGenerator.Common/Strings/Model.resx | 6 + .../EnvelopeGenerator.Form.vbproj | 9 ++ .../frm2Factor_Properties.Designer.vb | 121 +++++++++++++++ .../frm2Factor_Properties.resx | 141 ++++++++++++++++++ .../frm2Factor_Properties.vb | 43 ++++++ EnvelopeGenerator.Form/frmEnvelopeEditor.resx | 2 +- EnvelopeGenerator.Form/frmEnvelopeEditor.vb | 2 + EnvelopeGenerator.Form/frmMain.Designer.vb | 51 ++++++- EnvelopeGenerator.Form/frmMain.resx | 133 +++++++++++++++++ EnvelopeGenerator.Form/frmMain.vb | 61 ++++++++ EnvelopeGenerator.Form/frmSplashScreen.resx | 2 +- .../My Project/AssemblyInfo.vb | 4 +- EnvelopeGenerator.Service/Service.vb | 3 + 18 files changed, 605 insertions(+), 23 deletions(-) create mode 100644 EnvelopeGenerator.Form/frm2Factor_Properties.Designer.vb create mode 100644 EnvelopeGenerator.Form/frm2Factor_Properties.resx create mode 100644 EnvelopeGenerator.Form/frm2Factor_Properties.vb diff --git a/EnvelopeGenerator.Common/Jobs/APIBackendJobs/SendInvitationMailJob.vb b/EnvelopeGenerator.Common/Jobs/APIBackendJobs/SendInvitationMailJob.vb index f61c54c0..8ce881a9 100644 --- a/EnvelopeGenerator.Common/Jobs/APIBackendJobs/SendInvitationMailJob.vb +++ b/EnvelopeGenerator.Common/Jobs/APIBackendJobs/SendInvitationMailJob.vb @@ -44,7 +44,7 @@ Namespace Jobs myTempFiles = New TempFiles(LogConfig) myTempFiles.Create() Dim JobId = pContext.JobDetail.Key - Logger.Info("SendInvMail - Starting job {0}", JobId) + Logger.Debug("SendInvMail - Starting job {0}", JobId) Try Logger.Debug("SendInvMail - Loading Database..") @@ -81,7 +81,6 @@ Namespace Jobs For Each oId In oEnvelopeIds Logger.Info("SendInvMail - Gathering Info for Envelope [{0}] ({1}/{2})", oId, oCurrent, oTotal) - Logger.Debug("SendInvMail - Loading Envelope..") Try Dim oEnvelope = EnvelopeModel.GetById(oId) If oEnvelope Is Nothing Then @@ -98,10 +97,11 @@ Namespace Jobs End If Logger.Info("SendInvMail - Sending InvitationMails for Envelope [{0}]", oId) If ActionService.SendEnvelope(oEnvelope) = False Then + Logger.Warn("SendInvMail - Could not send the InvitationMails for Envelope [{0}]", oId) Throw New ArgumentNullException("EnvelopeData") End If Catch ex As Exception - Logger.Warn(ex, $"Unhandled exception while working envelope [{oId}]") + Logger.Warn(ex, $"SendInvMail - Unhandled exception while working envelope [{oId}]") End Try oCurrent += 1 @@ -114,7 +114,7 @@ Namespace Jobs Logger.Warn("SendInvMail job failed!") Logger.Error(ex) Finally - Logger.Info("SendInvMail execution for [{0}] ended", JobId) + Logger.Debug("SendInvMail execution for [{0}] ended", JobId) End Try Return Task.FromResult(True) diff --git a/EnvelopeGenerator.Common/Jobs/FinalizeDocument/FinalizeDocumentJob.vb b/EnvelopeGenerator.Common/Jobs/FinalizeDocument/FinalizeDocumentJob.vb index 94ac0d34..a0e02d60 100644 --- a/EnvelopeGenerator.Common/Jobs/FinalizeDocument/FinalizeDocumentJob.vb +++ b/EnvelopeGenerator.Common/Jobs/FinalizeDocument/FinalizeDocumentJob.vb @@ -53,7 +53,7 @@ Namespace Jobs myTempFiles = New TempFiles(LogConfig) myTempFiles.Create() Dim JobId = pContext.JobDetail.Key - Logger.Info("Starting job {0}", JobId) + Logger.Debug("Starting job {0}", JobId) Try Logger.Debug("Loading GdViewer..") @@ -108,7 +108,6 @@ Namespace Jobs For Each oId In oEnvelopeIds Logger.Info("Finalizing Envelope [{0}] ({1}/{2})", oId, oCurrent, oTotal) - Logger.Debug("Loading Envelope..") Try Dim oEnvelope = EnvelopeModel.GetById(oId) If oEnvelope Is Nothing Then @@ -290,11 +289,15 @@ Namespace Jobs If oMailToCreator <> FinalEmailType.No Then Logger.Debug("Sending email to creator ...") SendFinalEmailToCreator(pEnvelope) ', pAttachment + Else + Logger.Warn($"No SendFinalEmailToCreator - oMailToCreator [{oMailToCreator}] <> [{FinalEmailType.No}] ") End If If oMailToReceivers <> FinalEmailType.No Then Logger.Debug("Sending emails to receivers..") SendFinalEmailToReceivers(pEnvelope) ', pAttachment + Else + Logger.Warn($"No SendFinalEmailToReceivers - oMailToCreator [{oMailToReceivers}] <> [{FinalEmailType.No}] ") End If Return True diff --git a/EnvelopeGenerator.Common/Models/EnvelopeModel.vb b/EnvelopeGenerator.Common/Models/EnvelopeModel.vb index fad25b9a..31b37247 100644 --- a/EnvelopeGenerator.Common/Models/EnvelopeModel.vb +++ b/EnvelopeGenerator.Common/Models/EnvelopeModel.vb @@ -35,7 +35,7 @@ Public Class EnvelopeModel .Language = pRow.ItemEx("LANGUAGE", "de-DE"), .Status = ObjectEx.ToEnum(Of Constants.EnvelopeStatus)(pRow.ItemEx("STATUS", Constants.EnvelopeStatus.EnvelopeCreated.ToString())), .AddedWhen = pRow.Item("ADDED_WHEN"), - .ChangedWhen = pRow.Item("CHANGED_WHEN"), + .ChangedWhen = pRow.ItemEx(Of Date)("CHANGED_WHEN", Nothing), .CertificationType = ObjectEx.ToEnum(Of Constants.CertificationType)(pRow.ItemEx("CERTIFICATION_TYPE", Constants.CertificationType.AdvancedElectronicSignature.ToString())), .User = New User(), .ExpiresWhen = pRow.ItemEx(Of Date)("EXPIRES_WHEN", Nothing), diff --git a/EnvelopeGenerator.Common/Strings/Model.Designer.vb b/EnvelopeGenerator.Common/Strings/Model.Designer.vb index d991e936..1e008899 100644 --- a/EnvelopeGenerator.Common/Strings/Model.Designer.vb +++ b/EnvelopeGenerator.Common/Strings/Model.Designer.vb @@ -325,15 +325,6 @@ Namespace My.Resources End Get End Property - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die ähnelt. - ''' - Public Shared ReadOnly Property ModificationOriginFile_FormFields() As String - Get - Return ResourceManager.GetString("ModificationOriginFile_FormFields", resourceCulture) - End Get - End Property - ''' ''' Sucht eine lokalisierte Zeichenfolge, die Nein ähnelt. ''' @@ -370,6 +361,15 @@ Namespace My.Resources End Get End Property + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die Wollen Sie die 2-Faktor Definition für diesen Empfänger zurücksetzen. Der Empfänger muss sich dann neu identifizieren! ähnelt. + ''' + Public Shared ReadOnly Property ResetTOTPUser() As String + Get + Return ResourceManager.GetString("ResetTOTPUser", resourceCulture) + End Get + End Property + ''' ''' Sucht eine lokalisierte Zeichenfolge, die Gespeichert ähnelt. ''' @@ -415,6 +415,15 @@ Namespace My.Resources End Get End Property + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die Erfolgreich! Dialog wird geschlossen. ähnelt. + ''' + Public Shared ReadOnly Property Success_FormClose() As String + Get + Return ResourceManager.GetString("Success_FormClose", resourceCulture) + End Get + End Property + ''' ''' Sucht eine lokalisierte Zeichenfolge, die Unsigniert ähnelt. ''' diff --git a/EnvelopeGenerator.Common/Strings/Model.en.resx b/EnvelopeGenerator.Common/Strings/Model.en.resx index 38ac1ffc..eaa87da2 100644 --- a/EnvelopeGenerator.Common/Strings/Model.en.resx +++ b/EnvelopeGenerator.Common/Strings/Model.en.resx @@ -210,6 +210,9 @@ Read and Sign + + Do you want to reset the 2-factor definition for this receiver? The receiver must then identify itself again! + Saved @@ -225,6 +228,9 @@ Signed + + Successful! Dialog is closed.successful! Dialog is closed. + Unsigned diff --git a/EnvelopeGenerator.Common/Strings/Model.resx b/EnvelopeGenerator.Common/Strings/Model.resx index eafebbed..5e60d70b 100644 --- a/EnvelopeGenerator.Common/Strings/Model.resx +++ b/EnvelopeGenerator.Common/Strings/Model.resx @@ -216,6 +216,9 @@ Arbeitsanweisung + + Wollen Sie die 2-Faktor Definition für diesen Empfänger zurücksetzen. Der Empfänger muss sich dann neu identifizieren! + Gespeichert @@ -231,6 +234,9 @@ Signiert + + Erfolgreich! Dialog wird geschlossen. + Unsigniert diff --git a/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj b/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj index 6ff1c714..a4a95e32 100644 --- a/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj +++ b/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj @@ -319,6 +319,12 @@ + + frm2Factor_Properties.vb + + + Form + Form @@ -381,6 +387,9 @@ True + + frm2Factor_Properties.vb + frmEnvelopeEditor.vb Designer diff --git a/EnvelopeGenerator.Form/frm2Factor_Properties.Designer.vb b/EnvelopeGenerator.Form/frm2Factor_Properties.Designer.vb new file mode 100644 index 00000000..d9e79a74 --- /dev/null +++ b/EnvelopeGenerator.Form/frm2Factor_Properties.Designer.vb @@ -0,0 +1,121 @@ + _ +Partial Class frm2Factor_Properties + Inherits System.Windows.Forms.Form + + 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Wird vom Windows Form-Designer benötigt. + Private components As System.ComponentModel.IContainer + + 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. + 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. + 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frm2Factor_Properties)) + Me.txtMail = New System.Windows.Forms.TextBox() + Me.txtValid = New System.Windows.Forms.TextBox() + Me.chkTOTP = New System.Windows.Forms.CheckBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.Label3 = New System.Windows.Forms.Label() + Me.SimpleButton1 = New DevExpress.XtraEditors.SimpleButton() + Me.SuspendLayout() + ' + 'txtMail + ' + Me.txtMail.Font = New System.Drawing.Font("Tahoma", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtMail.Location = New System.Drawing.Point(85, 24) + Me.txtMail.Name = "txtMail" + Me.txtMail.ReadOnly = True + Me.txtMail.Size = New System.Drawing.Size(342, 23) + Me.txtMail.TabIndex = 0 + ' + 'txtValid + ' + Me.txtValid.Font = New System.Drawing.Font("Tahoma", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtValid.Location = New System.Drawing.Point(85, 79) + Me.txtValid.Name = "txtValid" + Me.txtValid.ReadOnly = True + Me.txtValid.Size = New System.Drawing.Size(202, 23) + Me.txtValid.TabIndex = 1 + ' + 'chkTOTP + ' + Me.chkTOTP.AutoSize = True + Me.chkTOTP.Font = New System.Drawing.Font("Tahoma", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTOTP.Location = New System.Drawing.Point(85, 53) + Me.chkTOTP.Name = "chkTOTP" + Me.chkTOTP.Size = New System.Drawing.Size(151, 20) + Me.chkTOTP.TabIndex = 2 + Me.chkTOTP.Text = "Secret Key vorhanden" + Me.chkTOTP.UseVisualStyleBackColor = True + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Tahoma", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(12, 27) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(47, 16) + Me.Label1.TabIndex = 3 + Me.Label1.Text = "E-Mail:" + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Tahoma", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(15, 82) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(64, 16) + Me.Label3.TabIndex = 5 + Me.Label3.Text = "Gültig bis:" + ' + 'SimpleButton1 + ' + Me.SimpleButton1.Appearance.Font = New System.Drawing.Font("Tahoma", 9.75!) + Me.SimpleButton1.Appearance.Options.UseFont = True + Me.SimpleButton1.ImageOptions.SvgImage = CType(resources.GetObject("SimpleButton1.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) + Me.SimpleButton1.Location = New System.Drawing.Point(18, 121) + Me.SimpleButton1.Name = "SimpleButton1" + Me.SimpleButton1.Size = New System.Drawing.Size(116, 40) + Me.SimpleButton1.TabIndex = 6 + Me.SimpleButton1.Text = "Zurücksetzen" + ' + 'frm2Factor_Properties + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(443, 170) + Me.Controls.Add(Me.SimpleButton1) + Me.Controls.Add(Me.Label3) + Me.Controls.Add(Me.Label1) + Me.Controls.Add(Me.chkTOTP) + Me.Controls.Add(Me.txtValid) + Me.Controls.Add(Me.txtMail) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frm2Factor_Properties" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Zwei-Faktor Eigenschaften Empfänger:" + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + Friend WithEvents txtMail As TextBox + Friend WithEvents txtValid As TextBox + Friend WithEvents chkTOTP As CheckBox + Friend WithEvents Label1 As Label + Friend WithEvents Label3 As Label + Friend WithEvents SimpleButton1 As DevExpress.XtraEditors.SimpleButton +End Class diff --git a/EnvelopeGenerator.Form/frm2Factor_Properties.resx b/EnvelopeGenerator.Form/frm2Factor_Properties.resx new file mode 100644 index 00000000..0ec58b39 --- /dev/null +++ b/EnvelopeGenerator.Form/frm2Factor_Properties.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 + LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl + dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAANcCAAAC77u/ + PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi + IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv + MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh + Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg + MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkdyZWVue2ZpbGw6IzAzOUMyMzt9Cgku + QmxhY2t7ZmlsbDojNzI3MjcyO30KCS5SZWR7ZmlsbDojRDExQzFDO30KCS5ZZWxsb3d7ZmlsbDojRkZC + MTE1O30KCS5CbHVle2ZpbGw6IzExNzdENzt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh + Y2l0eTowLjU7fQoJLnN0MXtvcGFjaXR5OjAuNzU7fQo8L3N0eWxlPg0KICA8ZyBpZD0iUmVzZXRMYXlv + dXRPcHRpb25zIj4NCiAgICA8cGF0aCBkPSJNMTYsNGMtMy4zLDAtNi4zLDEuMy04LjUsMy41TDQsNHYx + MGgwLjJoNC4xSDE0bC0zLjYtMy42QzExLjgsOC45LDEzLjgsOCwxNiw4YzQuNCwwLDgsMy42LDgsOHMt + My42LDgtOCw4ICAgYy0zLjcsMC02LjgtMi42LTcuNy02SDQuMmMxLDUuNyw1LjksMTAsMTEuOCwxMGM2 + LjYsMCwxMi01LjQsMTItMTJTMjIuNiw0LDE2LDR6IiBjbGFzcz0iR3JlZW4iIC8+DQogIDwvZz4NCjwv + c3ZnPgs= + + + \ No newline at end of file diff --git a/EnvelopeGenerator.Form/frm2Factor_Properties.vb b/EnvelopeGenerator.Form/frm2Factor_Properties.vb new file mode 100644 index 00000000..3ece4500 --- /dev/null +++ b/EnvelopeGenerator.Form/frm2Factor_Properties.vb @@ -0,0 +1,43 @@ +Imports DigitalData.Modules.Database +Imports EnvelopeGenerator.Common.My +Public Class frm2Factor_Properties + Private Sub SimpleButton1_Click(sender As Object, e As EventArgs) Handles SimpleButton1.Click + If MsgBox(Resources.Model.ResetTOTPUser, MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Text) = MsgBoxResult.Yes Then + Dim oupdSQL = $"UPDATE TBSIG_RECEIVER SET TOTP_SECRET_KEY = NULL, TFA_REG_DEADLINE = NULL WHERE EMAIL_ADDRESS = '{txtMail.Text}'" + If DD_ECM.ExecuteNonQuery(oupdSQL) = True Then + MsgBox(Resources.Model.Success_FormClose, MsgBoxStyle.Information) + Me.Close() + Else + MsgBox("Something went wrong. Check the log", MsgBoxStyle.Exclamation) + End If + + End If + End Sub + + Dim TOTP As String + Dim mail As String + Dim Deadline As DateTime + Dim DD_ECM As MSSQLServer + Public Sub New(pmail As String, pTOTP As String, pDeadline As DateTime, pDD_ECM As MSSQLServer) + + ' Dieser Aufruf ist für den Designer erforderlich. + InitializeComponent() + + ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. + mail = pmail + TOTP = pTOTP + Deadline = pDeadline + DD_ECM = pDD_ECM + End Sub + + Private Sub frm2Faktor_Load(sender As Object, e As EventArgs) Handles Me.Load + chkTOTP.Checked = False + If Not IsNothing(TOTP) Then + If TOTP.Length > 1 Then + chkTOTP.Checked = True + End If + End If + txtMail.Text = mail + txtValid.Text = Deadline.ToLongDateString + End Sub +End Class \ No newline at end of file diff --git a/EnvelopeGenerator.Form/frmEnvelopeEditor.resx b/EnvelopeGenerator.Form/frmEnvelopeEditor.resx index 15a9a956..27ecec05 100644 --- a/EnvelopeGenerator.Form/frmEnvelopeEditor.resx +++ b/EnvelopeGenerator.Form/frmEnvelopeEditor.resx @@ -939,7 +939,7 @@ 0 - 17, 54 + 792, 17 557, 17 diff --git a/EnvelopeGenerator.Form/frmEnvelopeEditor.vb b/EnvelopeGenerator.Form/frmEnvelopeEditor.vb index faba9d10..0d44382d 100644 --- a/EnvelopeGenerator.Form/frmEnvelopeEditor.vb +++ b/EnvelopeGenerator.Form/frmEnvelopeEditor.vb @@ -763,4 +763,6 @@ Partial Public Class frmEnvelopeEditor Process.Start(Documents.Item(0).Filepath) End If End Sub + + End Class diff --git a/EnvelopeGenerator.Form/frmMain.Designer.vb b/EnvelopeGenerator.Form/frmMain.Designer.vb index 3a415889..2c66ef2c 100644 --- a/EnvelopeGenerator.Form/frmMain.Designer.vb +++ b/EnvelopeGenerator.Form/frmMain.Designer.vb @@ -66,6 +66,7 @@ Partial Class frmMain Me.BarButtonItem3 = New DevExpress.XtraBars.BarButtonItem() Me.BarButtonItem4 = New DevExpress.XtraBars.BarButtonItem() Me.BarStaticItemGhost = New DevExpress.XtraBars.BarStaticItem() + Me.bbtnitm2Faktor = New DevExpress.XtraBars.BarButtonItem() Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage() Me.RibbonPageEnvelopeActions = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() @@ -103,6 +104,10 @@ Partial Class frmMain Me.btnEnvelopes_thisYear = New DevExpress.XtraEditors.SimpleButton() Me.btnEnvelopes_lastmonth = New DevExpress.XtraEditors.SimpleButton() Me.btnEnvelopes_thismonth = New DevExpress.XtraEditors.SimpleButton() + Me.XtraTabPage3 = New DevExpress.XtraTab.XtraTabPage() + Me.Label1 = New System.Windows.Forms.Label() + Me.Button1 = New System.Windows.Forms.Button() + Me.txtEnvID = New System.Windows.Forms.TextBox() Me.RefreshTimer = New System.Windows.Forms.Timer(Me.components) Me.SaveFileDialog1 = New System.Windows.Forms.SaveFileDialog() Me.XtraSaveFileDialog1 = New DevExpress.XtraEditors.XtraSaveFileDialog(Me.components) @@ -138,6 +143,7 @@ Partial Class frmMain Me.GroupControl2.SuspendLayout() CType(Me.GroupControl1, System.ComponentModel.ISupportInitialize).BeginInit() Me.GroupControl1.SuspendLayout() + Me.XtraTabPage3.SuspendLayout() Me.SuspendLayout() ' 'SplashScreenManager1 @@ -167,7 +173,7 @@ Partial Class frmMain resources.ApplyResources(Me.XtraTabControlMain, "XtraTabControlMain") Me.XtraTabControlMain.Name = "XtraTabControlMain" Me.XtraTabControlMain.SelectedTabPage = Me.XtraTabPage1 - Me.XtraTabControlMain.TabPages.AddRange(New DevExpress.XtraTab.XtraTabPage() {Me.XtraTabPage1, Me.XtraTabPage2, Me.XtraTabPageAdmin}) + Me.XtraTabControlMain.TabPages.AddRange(New DevExpress.XtraTab.XtraTabPage() {Me.XtraTabPage1, Me.XtraTabPage2, Me.XtraTabPageAdmin, Me.XtraTabPage3}) ' 'XtraTabPage1 ' @@ -334,9 +340,9 @@ Partial Class frmMain Me.RibbonControl.ExpandCollapseItem.Id = 0 Me.RibbonControl.ExpandCollapseItem.ImageOptions.ImageIndex = CType(resources.GetObject("RibbonControl.ExpandCollapseItem.ImageOptions.ImageIndex"), Integer) Me.RibbonControl.ExpandCollapseItem.ImageOptions.LargeImageIndex = CType(resources.GetObject("RibbonControl.ExpandCollapseItem.ImageOptions.LargeImageIndex"), Integer) - Me.RibbonControl.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl.ExpandCollapseItem, Me.RibbonControl.SearchEditItem, Me.btnCreateEnvelope, Me.btnEditEnvelope, Me.btnDeleteEnvelope, Me.BarButtonItem1, Me.txtRefreshLabel, Me.btnShowDocument, Me.btnContactReceiver, Me.txtEnvelopeIdLabel, Me.btnOpenLogDirectory, Me.BarCheckItem1, Me.bsitmInfo, Me.bbtnitmEB, Me.bbtnitmInfoMail, Me.bbtnitm_ResendInvitation, Me.BarButtonItem3, Me.BarButtonItem4, Me.BarStaticItemGhost}) + Me.RibbonControl.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl.ExpandCollapseItem, Me.RibbonControl.SearchEditItem, Me.btnCreateEnvelope, Me.btnEditEnvelope, Me.btnDeleteEnvelope, Me.BarButtonItem1, Me.txtRefreshLabel, Me.btnShowDocument, Me.btnContactReceiver, Me.txtEnvelopeIdLabel, Me.btnOpenLogDirectory, Me.BarCheckItem1, Me.bsitmInfo, Me.bbtnitmEB, Me.bbtnitmInfoMail, Me.bbtnitm_ResendInvitation, Me.BarButtonItem3, Me.BarButtonItem4, Me.BarStaticItemGhost, Me.bbtnitm2Faktor}) resources.ApplyResources(Me.RibbonControl, "RibbonControl") - Me.RibbonControl.MaxItemId = 20 + Me.RibbonControl.MaxItemId = 21 Me.RibbonControl.Name = "RibbonControl" Me.RibbonControl.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1, Me.RibbonPage2}) Me.RibbonControl.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False] @@ -494,6 +500,13 @@ Partial Class frmMain Me.BarStaticItemGhost.Name = "BarStaticItemGhost" Me.BarStaticItemGhost.Visibility = DevExpress.XtraBars.BarItemVisibility.Never ' + 'bbtnitm2Faktor + ' + resources.ApplyResources(Me.bbtnitm2Faktor, "bbtnitm2Faktor") + Me.bbtnitm2Faktor.Id = 20 + Me.bbtnitm2Faktor.ImageOptions.SvgImage = CType(resources.GetObject("bbtnitm2Faktor.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) + Me.bbtnitm2Faktor.Name = "bbtnitm2Faktor" + ' 'RibbonPage1 ' Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageEnvelopeActions, Me.RibbonPageGroup1, Me.RibbonPageGroupFunctions}) @@ -521,6 +534,7 @@ Partial Class frmMain Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.btnShowDocument) Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.bbtnitm_ResendInvitation) Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.btnContactReceiver) + Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.bbtnitm2Faktor) Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.bbtnitmEB) Me.RibbonPageGroupFunctions.ItemLinks.Add(Me.bbtnitmInfoMail) Me.RibbonPageGroupFunctions.Name = "RibbonPageGroupFunctions" @@ -791,6 +805,30 @@ Partial Class frmMain resources.ApplyResources(Me.btnEnvelopes_thismonth, "btnEnvelopes_thismonth") Me.btnEnvelopes_thismonth.Name = "btnEnvelopes_thismonth" ' + 'XtraTabPage3 + ' + Me.XtraTabPage3.Controls.Add(Me.Label1) + Me.XtraTabPage3.Controls.Add(Me.Button1) + Me.XtraTabPage3.Controls.Add(Me.txtEnvID) + Me.XtraTabPage3.Name = "XtraTabPage3" + resources.ApplyResources(Me.XtraTabPage3, "XtraTabPage3") + ' + 'Label1 + ' + resources.ApplyResources(Me.Label1, "Label1") + Me.Label1.Name = "Label1" + ' + 'Button1 + ' + resources.ApplyResources(Me.Button1, "Button1") + Me.Button1.Name = "Button1" + Me.Button1.UseVisualStyleBackColor = True + ' + 'txtEnvID + ' + resources.ApplyResources(Me.txtEnvID, "txtEnvID") + Me.txtEnvID.Name = "txtEnvID" + ' 'RefreshTimer ' Me.RefreshTimer.Interval = 120000 @@ -846,6 +884,8 @@ Partial Class frmMain Me.GroupControl2.ResumeLayout(False) CType(Me.GroupControl1, System.ComponentModel.ISupportInitialize).EndInit() Me.GroupControl1.ResumeLayout(False) + Me.XtraTabPage3.ResumeLayout(False) + Me.XtraTabPage3.PerformLayout() Me.ResumeLayout(False) Me.PerformLayout() @@ -931,4 +971,9 @@ Partial Class frmMain Friend WithEvents btnEvvallUs_lastmonth As DevExpress.XtraEditors.SimpleButton Friend WithEvents GridColumn1 As DevExpress.XtraGrid.Columns.GridColumn Friend WithEvents GridColumn2 As DevExpress.XtraGrid.Columns.GridColumn + Friend WithEvents bbtnitm2Faktor As DevExpress.XtraBars.BarButtonItem + Friend WithEvents XtraTabPage3 As DevExpress.XtraTab.XtraTabPage + Friend WithEvents Label1 As Label + Friend WithEvents Button1 As Button + Friend WithEvents txtEnvID As TextBox End Class diff --git a/EnvelopeGenerator.Form/frmMain.resx b/EnvelopeGenerator.Form/frmMain.resx index ca4e37cd..29833266 100644 --- a/EnvelopeGenerator.Form/frmMain.resx +++ b/EnvelopeGenerator.Form/frmMain.resx @@ -868,6 +868,43 @@ Tahoma, 8.25pt, style=Bold + + 2Faktor Eigenschaften + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 + LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl + dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAC4GAAAC77u/ + PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi + IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv + MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh + Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg + MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9Cgku + UmVke2ZpbGw6I0QxMUMxQzt9CgkuWWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuR3JlZW57ZmlsbDojMDM5 + QzIzO30KPC9zdHlsZT4NCiAgPGcgaWQ9IkZpbmdlcnByaW50Ij4NCiAgICA8cGF0aCBkPSJNMjMsNmMt + MC4yLDAtMC40LTAuMS0wLjUtMC4yYy0wLjMtMC4yLTYuNi00LjEtMTUsMEM3LDYuMSw2LjQsNS45LDYu + MSw1LjRjLTAuMi0wLjUsMC0xLjEsMC41LTEuMyAgIEMxNi0wLjYsMjMuMiw0LDIzLjUsNC4yYzAuNSww + LjMsMC42LDAuOSwwLjMsMS40QzIzLjYsNS44LDIzLjMsNiwyMyw2eiBNMy43LDEzLjdjMTAuOS0xMS40 + LDIyLjItMi4zLDIyLjYtMS45ICAgYzAuNCwwLjQsMS4xLDAuMywxLjQtMC4xYzAuNC0wLjQsMC4zLTEu + MS0wLjEtMS40Yy0wLjEtMC4xLTEzLjEtMTAuNy0yNS40LDIuMWMtMC40LDAuNC0wLjQsMSwwLDEuNEMy + LjUsMTMuOSwyLjgsMTQsMywxNCAgIEMzLjMsMTQsMy41LDEzLjksMy43LDEzLjd6IE0yNCwyN2MwLTAu + Ni0wLjQtMS0xLTFjLTUuMywwLTctMy4zLTcuMS0zLjRjLTAuMi0wLjUtMC44LTAuNy0xLjMtMC40Yy0w + LjUsMC4yLTAuNywwLjgtMC40LDEuMyAgIGMwLjEsMC4yLDIuNCw0LjYsOC45LDQuNkMyMy42LDI4LDI0 + LDI3LjYsMjQsMjd6IE0xNS45LDI5LjRjMC4yLTAuNSwwLTEuMS0wLjQtMS4zYzAsMC0zLjUtMS44LTMu + NS01LjFjMC0xLjcsMS4zLTMsMy0zICAgYzEuNiwwLDIuMywwLjgsMy4zLDEuN2MxLDEsMi4zLDIuMyw0 + LjcsMi4zYzIuOCwwLDUtMi4yLDUtNWMwLTMuMi00LTktMTItOUM3LjYsMTAsMiwxNiwyLDI1YzAsMC42 + LDAuNCwxLDEsMXMxLTAuNCwxLTEgICBjMC03LjksNC43LTEzLDEyLTEzYzYuNiwwLDEwLDQuNiwxMCw3 + YzAsMS43LTEuMywzLTMsM2MtMS42LDAtMi4zLTAuOC0zLjMtMS43Yy0xLTEtMi4zLTIuMy00LjctMi4z + Yy0yLjgsMC01LDIuMi01LDUgICBjMCw0LjYsNC40LDYuOCw0LjYsNi45QzE0LjcsMzAsMTQuOCwzMCwx + NSwzMEMxNS40LDMwLDE1LjcsMjkuOCwxNS45LDI5LjR6IE05LjcsMjkuOGMwLjQtMC40LDAuNS0xLDAu + MS0xLjRjMCwwLTEuOC0yLjEtMS44LTUuMyAgIGMwLTIuNCwyLjMtNyw4LTdjNC4zLDAsNiwzLjMsNi4x + LDMuNWMwLjIsMC41LDAuOCwwLjcsMS4zLDAuNGMwLjUtMC4yLDAuNy0wLjgsMC40LTEuM0MyMy44LDE4 + LjQsMjEuNiwxNCwxNiwxNCAgIGMtNi41LDAtMTAsNS4yLTEwLDljMCw0LDIuMSw2LjUsMi4yLDYuN0M4 + LjQsMjkuOSw4LjcsMzAsOSwzMEM5LjIsMzAsOS41LDI5LjksOS43LDI5Ljh6IiBjbGFzcz0iQmxhY2si + IC8+DQogIDwvZz4NCjwvc3ZnPgs= + + 0, 0 @@ -1462,6 +1499,96 @@ 2 + + True + + + 21, 18 + + + 66, 13 + + + 2 + + + EnvelopeID: + + + Label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + XtraTabPage3 + + + 0 + + + 24, 85 + + + 199, 23 + + + 1 + + + Finalisierung emails prüfen + + + Button1 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + XtraTabPage3 + + + 1 + + + 24, 34 + + + 100, 20 + + + 0 + + + txtEnvID + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + XtraTabPage3 + + + 2 + + + 1088, 469 + + + Admin Test + + + XtraTabPage3 + + + DevExpress.XtraTab.XtraTabPage, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + XtraTabControlMain + + + 3 + XtraTabControlMain @@ -1849,6 +1976,12 @@ DevExpress.XtraBars.BarStaticItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + bbtnitm2Faktor + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + RibbonPage1 diff --git a/EnvelopeGenerator.Form/frmMain.vb b/EnvelopeGenerator.Form/frmMain.vb index 081e5497..fcf3a851 100644 --- a/EnvelopeGenerator.Form/frmMain.vb +++ b/EnvelopeGenerator.Form/frmMain.vb @@ -14,6 +14,8 @@ Imports System.Diagnostics Imports System.ComponentModel Imports DevExpress.XtraPrinting Imports System.Web +Imports EnvelopeGenerator.Common.Constants +Imports System.Security.Cryptography Public Class frmMain Private ReadOnly LogConfig As LogConfig @@ -767,4 +769,63 @@ Public Class frmMain GridControlData.DataSource = Nothing End If End Sub + + Private Sub bbtnitm2Faktor_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnitm2Faktor.ItemClick + If ViewEnvelopes.FocusedRowHandle < 0 Then + Exit Sub + End If + + Dim oEnvelope As Envelope = ViewEnvelopes.GetRow(ViewEnvelopes.FocusedRowHandle) + Dim oView As GridView = GridEnvelopes.FocusedView + If oView.Name = ViewReceivers.Name Then + Dim oReceiver As EnvelopeReceiver = oView.GetRow(oView.FocusedRowHandle) + Dim oEnvelopeTitle As String = Net.WebUtility.UrlEncode(oEnvelope.Title) + Dim oDT As DataTable = DB_DD_ECM.GetDatatable($"SELECT * FROM TBSIG_RECEIVER WHERE EMAIL_ADDRESS = '{oReceiver.Email}'") + If Not IsNothing(oDT) Then + If oDT.Rows.Count = 1 Then + Dim oTFA_REG_DL = oDT.Rows(0).Item("TFA_REG_DEADLINE") + Dim oTOTP = oDT.Rows(0).Item("TOTP_SECRET_KEY") + Dim oForm As New frm2Factor_Properties(oReceiver.Email, oTOTP, oTFA_REG_DL, DB_DD_ECM) + oForm.ShowDialog() + End If + End If + + Else + MsgBox(Resources.Envelope.Please_select_a_recipient_from_the_Recipients_tab, MsgBoxStyle.Information, Text) + End If + End Sub + + Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click + If txtEnvID.Text = String.Empty Then + Exit Sub + End If + Dim EnvelopeModel As EnvelopeModel + Dim oState = GetState() + EnvelopeModel = New EnvelopeModel(oState) + + Dim oEnvelope = EnvelopeModel.GetById(txtEnvID.Text) + Dim oMailToCreator = oEnvelope.FinalEmailToCreator + Dim oMailToReceivers = oEnvelope.FinalEmailToReceivers + + If oMailToCreator <> FinalEmailType.No Then + MsgBox("Finale email an Creator könnten/würden gesendet werden!") + Else + MsgBox("Finale email an Creator könnte/würde nicht erzeugt werden!" & vbNewLine & $"No SendFinalEmailToCreator - oMailToCreator [{oMailToCreator}] <> [{FinalEmailType.No}]") + End If + + If oMailToReceivers <> FinalEmailType.No Then + MsgBox("Finale email an Unterzeichner könnten/würden gesendet werden!") + Else + MsgBox("Finale email an Unterzeichner könnte/würde nicht erzeugt werden!" & vbNewLine & $"No SendFinalEmailToReceivers - oMailToReceivers [{oMailToReceivers}] <> [{FinalEmailType.No}]") + End If + End Sub + Private Function GetState() As State + Return New State With { + .LogConfig = LogConfig, + .UserId = 0, + .Database = DB_DD_ECM, + .Config = Nothing, + .DbConfig = Nothing + } + End Function End Class \ No newline at end of file diff --git a/EnvelopeGenerator.Form/frmSplashScreen.resx b/EnvelopeGenerator.Form/frmSplashScreen.resx index 3b8d22e1..166571bd 100644 --- a/EnvelopeGenerator.Form/frmSplashScreen.resx +++ b/EnvelopeGenerator.Form/frmSplashScreen.resx @@ -121,7 +121,7 @@ iVBORw0KGgoAAAANSUhEUgAAAyAAAADICAYAAAAQj4UaAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL - DQAACw0B7QfALAAASudJREFUeF7tvWusZNd5nukfcpSOmmre3Wp2s3lrdpNUk01RPxIk6iBBIjFxMBPZ + DAAACwwBP0AiyAAASudJREFUeF7tvWusZNd5nukfcpSOmmre3Wp2s3lrdpNUk01RPxIk6iBBIjFxMBPZ DGxLEyB2M8ggkegAsSRElikHEsnBJFZrRjZtxZIpZaIZRy2AloGxrAHIRKIQRIqVGJ6AsJEAAwgDOzNJ HCBSLsqfynmq+HV9tepd+1KnLnufen88OKf2rfa67HPed3/rW+t7PnffoxNjjDHGGLNb/n4L/9t9l6b8 vXsX+ewBn1ngkSkvCH79hy9NXr5yafKbz1yavHr10uRfv/jo5Pe//Ohk8uoMfmcb+ziGYznnc4/q663C diff --git a/EnvelopeGenerator.Service/My Project/AssemblyInfo.vb b/EnvelopeGenerator.Service/My Project/AssemblyInfo.vb index 67d152ca..f529650d 100644 --- a/EnvelopeGenerator.Service/My Project/AssemblyInfo.vb +++ b/EnvelopeGenerator.Service/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - - + + diff --git a/EnvelopeGenerator.Service/Service.vb b/EnvelopeGenerator.Service/Service.vb index 4431b09b..4d910e7e 100644 --- a/EnvelopeGenerator.Service/Service.vb +++ b/EnvelopeGenerator.Service/Service.vb @@ -2,6 +2,7 @@ Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Database Imports DigitalData.Modules.Config +Imports System.Threading Public Class Service Private Logger As Logger @@ -59,6 +60,8 @@ Public Class Service Scheduler1 = New Scheduler_FinishEnvelope(LogConfig, Config.ConnectionString, oKey, Config.PDFBurnerParams) Await Scheduler1.Start(Config.IntervalInMin) + Thread.Sleep(2500) + Scheduler2 = New Scheduler_API_SendEnvelopeMails(LogConfig, Config.ConnectionString) Await Scheduler2.Start(Config.IntervalInMin) From 773b43b1ad0bc70d6867b4a2f003d5cbdd0a6c0d Mon Sep 17 00:00:00 2001 From: Developer01 Date: Thu, 8 May 2025 17:01:12 +0200 Subject: [PATCH 3/4] Common Rejection update, SendInvitationMailJob --- .../Jobs/APIBackendJobs/SendInvitationMailJob.vb | 2 +- .../Jobs/FinalizeDocument/FinalizeDocumentJob.vb | 2 +- EnvelopeGenerator.Common/My Project/AssemblyInfo.vb | 4 ++-- EnvelopeGenerator.Common/Services/ActionService.vb | 10 ++++++++-- EnvelopeGenerator.Common/Services/BaseService.vb | 3 --- EnvelopeGenerator.Form/Controllers/BaseController.vb | 2 +- EnvelopeGenerator.Form/frm2Factor_Properties.vb | 2 +- EnvelopeGenerator.Form/frmMain.vb | 4 ++++ 8 files changed, 18 insertions(+), 11 deletions(-) diff --git a/EnvelopeGenerator.Common/Jobs/APIBackendJobs/SendInvitationMailJob.vb b/EnvelopeGenerator.Common/Jobs/APIBackendJobs/SendInvitationMailJob.vb index 8ce881a9..8455e39a 100644 --- a/EnvelopeGenerator.Common/Jobs/APIBackendJobs/SendInvitationMailJob.vb +++ b/EnvelopeGenerator.Common/Jobs/APIBackendJobs/SendInvitationMailJob.vb @@ -125,7 +125,7 @@ Namespace Jobs ReceiverModel = New ReceiverModel(pState) End Sub Private Sub InitializeServices(pState As State) - ActionService = New ActionService(pState) + ActionService = New ActionService(pState, Database) End Sub Private Function GetDatabase(pContext As IJobExecutionContext, pLogConfig As LogConfig) As MSSQLServer Dim oConnectionString As String = pContext.MergedJobDataMap.Item(Constants.DATABASE) diff --git a/EnvelopeGenerator.Common/Jobs/FinalizeDocument/FinalizeDocumentJob.vb b/EnvelopeGenerator.Common/Jobs/FinalizeDocument/FinalizeDocumentJob.vb index a0e02d60..1cec375a 100644 --- a/EnvelopeGenerator.Common/Jobs/FinalizeDocument/FinalizeDocumentJob.vb +++ b/EnvelopeGenerator.Common/Jobs/FinalizeDocument/FinalizeDocumentJob.vb @@ -424,7 +424,7 @@ Namespace Jobs End Function Private Sub InitializeServices(pState As State) - ActionService = New ActionService(pState) + ActionService = New ActionService(pState, Database) End Sub Private Sub InitializeModels(pState As State) diff --git a/EnvelopeGenerator.Common/My Project/AssemblyInfo.vb b/EnvelopeGenerator.Common/My Project/AssemblyInfo.vb index 52938667..36f52719 100644 --- a/EnvelopeGenerator.Common/My Project/AssemblyInfo.vb +++ b/EnvelopeGenerator.Common/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' indem Sie "*" wie unten gezeigt eingeben: ' - - + + diff --git a/EnvelopeGenerator.Common/Services/ActionService.vb b/EnvelopeGenerator.Common/Services/ActionService.vb index 2080a9e8..da1cd171 100644 --- a/EnvelopeGenerator.Common/Services/ActionService.vb +++ b/EnvelopeGenerator.Common/Services/ActionService.vb @@ -2,19 +2,23 @@ Imports DigitalData.Modules.Base Imports EnvelopeGenerator.Common.Constants Imports EnvelopeGenerator.Common.My.Resources +Imports DigitalData.Modules.Database Public Class ActionService Inherits BaseService + Private ReadOnly EmailService As EmailService Private ReadOnly HistoryService As HistoryService Private ReadOnly ReceiverModel As ReceiverModel + Private myDatabase As MSSQLServer - Public Sub New(pState As State) - MyBase.New(pState) + Public Sub New(pState As State, pDD_ECM As MSSQLServer) + MyBase.New(pState) + myDatabase = pDD_ECM EmailService = New EmailService(pState) HistoryService = New HistoryService(pState) ReceiverModel = New ReceiverModel(pState) @@ -63,6 +67,8 @@ Public Class ActionService Else oStatus = Constants.EnvelopeStatus.EnvelopeDeleted End If + Dim oUpd = $"UPDATE TBSIG_ENVELOPE SET REJECTION_REASON = '{pReason}' WHERE GUID = {pEnvelope.Id}" + myDatabase.ExecuteNonQuery(oUpd) If HistoryService.SetEnvelopeStatus(pEnvelope, oStatus, pEnvelope.User.Email) = False Then Return False End If diff --git a/EnvelopeGenerator.Common/Services/BaseService.vb b/EnvelopeGenerator.Common/Services/BaseService.vb index 4e0486e0..5149c8bb 100644 --- a/EnvelopeGenerator.Common/Services/BaseService.vb +++ b/EnvelopeGenerator.Common/Services/BaseService.vb @@ -1,13 +1,10 @@ Imports DigitalData.Modules.Base - Public Class BaseService Inherits BaseClass Friend Property State As State - Public Sub New(pState As State) MyBase.New(pState.LogConfig) - State = pState End Sub End Class diff --git a/EnvelopeGenerator.Form/Controllers/BaseController.vb b/EnvelopeGenerator.Form/Controllers/BaseController.vb index e95260a9..ce4c1687 100644 --- a/EnvelopeGenerator.Form/Controllers/BaseController.vb +++ b/EnvelopeGenerator.Form/Controllers/BaseController.vb @@ -28,7 +28,7 @@ Public MustInherit Class BaseController State = pState Database = pState.Database InitializeModels(pState) - ActionService = New ActionService(pState) + ActionService = New ActionService(pState, Nothing) End Sub Private Sub InitializeModels(pState As State) diff --git a/EnvelopeGenerator.Form/frm2Factor_Properties.vb b/EnvelopeGenerator.Form/frm2Factor_Properties.vb index 3ece4500..87ed0463 100644 --- a/EnvelopeGenerator.Form/frm2Factor_Properties.vb +++ b/EnvelopeGenerator.Form/frm2Factor_Properties.vb @@ -38,6 +38,6 @@ Public Class frm2Factor_Properties End If End If txtMail.Text = mail - txtValid.Text = Deadline.ToLongDateString + txtValid.Text = Deadline.ToString End Sub End Class \ No newline at end of file diff --git a/EnvelopeGenerator.Form/frmMain.vb b/EnvelopeGenerator.Form/frmMain.vb index fcf3a851..cb6e755b 100644 --- a/EnvelopeGenerator.Form/frmMain.vb +++ b/EnvelopeGenerator.Form/frmMain.vb @@ -57,8 +57,10 @@ Public Class frmMain End Try If MYUSER.IsAdmin Then XtraTabControlMain.TabPages(2).PageVisible = True + XtraTabControlMain.TabPages(3).PageVisible = True Else XtraTabControlMain.TabPages(2).PageVisible = False + XtraTabControlMain.TabPages(3).PageVisible = False End If LoadEnvelopeData() End Sub @@ -224,6 +226,7 @@ Public Class frmMain bbtnitm_ResendInvitation.Enabled = False bbtnitmInfoMail.Enabled = False bbtnitmEB.Enabled = True + bbtnitm2Faktor.Enabled = False LoadEnvelopeData() Case 0 btnEditEnvelope.Enabled = True @@ -232,6 +235,7 @@ Public Class frmMain btnShowDocument.Enabled = True bbtnitm_ResendInvitation.Enabled = True bbtnitmInfoMail.Enabled = True + bbtnitm2Faktor.Enabled = True bbtnitmEB.Enabled = False LoadEnvelopeData() From 686b1a3a595cab643de3b953499d97041d202309 Mon Sep 17 00:00:00 2001 From: Developer01 Date: Fri, 9 May 2025 16:51:31 +0200 Subject: [PATCH 4/4] MS Common --- .../Entities/EmailData.vb | 1 + EnvelopeGenerator.Common/Entities/Envelope.vb | 1 + .../EnvelopeGenerator.Common.vbproj | 2 +- EnvelopeGenerator.Common/Helpers.vb | 1 + ...InvitationMailJob.vb => APIEnvelopeJob.vb} | 75 ++++++++++++++++--- .../FinalizeDocument/FinalizeDocumentJob.vb | 16 ++-- EnvelopeGenerator.Common/Models/EmailModel.vb | 2 +- .../Services/ActionService.vb | 10 +++ .../Services/EmailService.vb | 20 +++-- .../Controllers/BaseController.vb | 2 +- .../Controllers/EnvelopeEditorController.vb | 4 +- EnvelopeGenerator.Form/frmEnvelopeMainData.vb | 3 + .../EnvelopeGenerator.Service.vbproj | 2 +- ...Mails.vb => Scheduler_Envelopetask_API.vb} | 4 +- EnvelopeGenerator.Service/Service.vb | 4 +- 15 files changed, 113 insertions(+), 34 deletions(-) rename EnvelopeGenerator.Common/Jobs/APIBackendJobs/{SendInvitationMailJob.vb => APIEnvelopeJob.vb} (62%) rename EnvelopeGenerator.Service/{Scheduler_API_SendEnvelopeMails.vb => Scheduler_Envelopetask_API.vb} (94%) diff --git a/EnvelopeGenerator.Common/Entities/EmailData.vb b/EnvelopeGenerator.Common/Entities/EmailData.vb index 79afc476..ed7bd32c 100644 --- a/EnvelopeGenerator.Common/Entities/EmailData.vb +++ b/EnvelopeGenerator.Common/Entities/EmailData.vb @@ -19,6 +19,7 @@ Public Class EmailData Public Property EmailAttachment As String = "" Public Property ATT1_RELATED_ID As Long Public Property ATT1_REL_TYPE As String = "" + Public Property ADDED_WHO_PROCESS As String = "DDEnvelopGenerator" ''' ''' Constructor for sending email to receiver diff --git a/EnvelopeGenerator.Common/Entities/Envelope.vb b/EnvelopeGenerator.Common/Entities/Envelope.vb index 94eb898b..8cc2cc0f 100644 --- a/EnvelopeGenerator.Common/Entities/Envelope.vb +++ b/EnvelopeGenerator.Common/Entities/Envelope.vb @@ -33,6 +33,7 @@ Public Property History As New List(Of EnvelopeHistoryEntry) Public Property EnvelopeType As EnvelopeType Public Property DOC_RESULT As Byte() + Public Property CURRENT_WORK_APP As String = "signFLOW GUI" Public ReadOnly Property EnvelopeTypeTitle As String Get Return EnvelopeType?.Title diff --git a/EnvelopeGenerator.Common/EnvelopeGenerator.Common.vbproj b/EnvelopeGenerator.Common/EnvelopeGenerator.Common.vbproj index 10fa4f46..669a827a 100644 --- a/EnvelopeGenerator.Common/EnvelopeGenerator.Common.vbproj +++ b/EnvelopeGenerator.Common/EnvelopeGenerator.Common.vbproj @@ -281,7 +281,7 @@ - + diff --git a/EnvelopeGenerator.Common/Helpers.vb b/EnvelopeGenerator.Common/Helpers.vb index 48df1bdc..e464f51a 100644 --- a/EnvelopeGenerator.Common/Helpers.vb +++ b/EnvelopeGenerator.Common/Helpers.vb @@ -52,6 +52,7 @@ Public Class Helpers End Function Public Shared Function GetEnvelopeURL(pHost As String, pEnvelopeUuid As String, pReceiverSignature As String) As String + Dim oEnvelopeUserReference As String = EncodeEnvelopeReceiverId(pEnvelopeUuid, pReceiverSignature) Dim oURL As String = String.Format("{0}/EnvelopeKey/{1}", pHost.Trim(), oEnvelopeUserReference) Return oURL diff --git a/EnvelopeGenerator.Common/Jobs/APIBackendJobs/SendInvitationMailJob.vb b/EnvelopeGenerator.Common/Jobs/APIBackendJobs/APIEnvelopeJob.vb similarity index 62% rename from EnvelopeGenerator.Common/Jobs/APIBackendJobs/SendInvitationMailJob.vb rename to EnvelopeGenerator.Common/Jobs/APIBackendJobs/APIEnvelopeJob.vb index 8455e39a..fc18a37b 100644 --- a/EnvelopeGenerator.Common/Jobs/APIBackendJobs/SendInvitationMailJob.vb +++ b/EnvelopeGenerator.Common/Jobs/APIBackendJobs/APIEnvelopeJob.vb @@ -13,7 +13,7 @@ Imports System.Data.SqlClient Imports DevExpress.XtraRichEdit.Layout.Engine Namespace Jobs - Public Class SendInvitationMailJob + Public Class APIEnvelopeJob Implements IJob @@ -44,30 +44,29 @@ Namespace Jobs myTempFiles = New TempFiles(LogConfig) myTempFiles.Create() Dim JobId = pContext.JobDetail.Key - Logger.Debug("SendInvMail - Starting job {0}", JobId) + Logger.Debug("API Envelopes - Starting job {0}", JobId) Try - Logger.Debug("SendInvMail - Loading Database..") + Logger.Debug("API Envelopes - Loading Database..") Database = GetDatabase(pContext, LogConfig) - Logger.Debug("SendInvMail - Loading Models & Services") + Logger.Debug("API Envelopes - Loading Models & Services") Dim oState = GetState() InitializeModels(oState) - Logger.Debug("SendInvMail - Loading Configuration..") + Logger.Debug("API Envelopes - Loading Configuration..") Config = ConfigModel.LoadConfiguration() oState.DbConfig = Config InitializeServices(oState) Config.DocumentPath = Config.DocumentPath - Logger.Debug("SendInvMail - ExportPath: [{0}]", Config.ExportPath) + Logger.Debug("API Envelopes - ExportPath: [{0}]", Config.ExportPath) - Dim oCompleteStatus As Integer = Constants.EnvelopeStatus.EnvelopeCompletelySigned Dim oSql = $"SELECT * FROM TBSIG_ENVELOPE where SOURCE = 'API' AND STATUS = 1003 order by guid" - Dim oTable = Database.GetDatatable(oSql) + Dim oDTEnv_invitations = Database.GetDatatable(oSql) - Dim oEnvelopeIds As List(Of Integer) = oTable.Rows.Cast(Of DataRow). + Dim oEnvelopeIds As List(Of Integer) = oDTEnv_invitations.Rows.Cast(Of DataRow). Select(Function(r) r.Item("GUID")). Cast(Of Integer). ToList() @@ -83,10 +82,12 @@ Namespace Jobs Logger.Info("SendInvMail - Gathering Info for Envelope [{0}] ({1}/{2})", oId, oCurrent, oTotal) Try Dim oEnvelope = EnvelopeModel.GetById(oId) + If oEnvelope Is Nothing Then Logger.Warn("SendInvMail - Envelope could not be loaded for Id [{0}]!", oId) Throw New ArgumentNullException("EnvelopeData") End If + oEnvelope.CURRENT_WORK_APP = "signFLOW_API_EnvJob_InvMail" Logger.Debug("SendInvMail - Loading Envelope Data..") Dim oEnvelopeData = GetEnvelopeData(oId) oEnvelope.Receivers = ReceiverModel.ListEnvelopeReceivers(oEnvelope.Id).ToList() @@ -108,13 +109,63 @@ Namespace Jobs Logger.Info("SendInvMail - Envelope finalized!") Next + 'Hier nun der Teil um zurückgezogene Envelopes abzuarbeiten + oSql = $"SELECT ENV.GUID,REJ.COMMENT REJECTION_REASON FROM + (SELECT * FROM TBSIG_ENVELOPE where STATUS = 1009 AND SOURCE = 'API') ENV INNER JOIN + (SELECT MAX(GUID) GUID,ENVELOPE_ID,MAX(ADDED_WHEN) ADDED_WHEN,MAX(ACTION_DATE) ACTION_DATE, COMMENT FROM TBSIG_ENVELOPE_HISTORY where STATUS = 1009 GROUP BY ENVELOPE_ID,COMMENT ) REJ ON ENV.GUID = REJ.ENVELOPE_ID LEFT JOIN + (SELECT * FROM TBSIG_ENVELOPE_HISTORY where STATUS = 3004 ) M_Send ON ENV.GUID = M_Send.ENVELOPE_ID + where M_Send.GUID IS NULL" + Dim oDT_EnvWithdrawn = Database.GetDatatable(oSql) + + oEnvelopeIds = oDTEnv_invitations.Rows.Cast(Of DataRow). + Select(Function(r) r.Item("GUID")). + Cast(Of Integer). + ToList() + + If oEnvelopeIds.Count > 0 Then + Logger.Info("WithdrawnEnv - Found [{0}] envelopes.", oEnvelopeIds.Count) + End If + + oTotal = oEnvelopeIds.Count + oCurrent = 1 + Dim oEnvID As Integer + For Each oRow As DataRow In oDT_EnvWithdrawn.Rows + oEnvID = oRow.Item("GUID") + Dim oReason = oRow.Item("REJECTION_REASON") + Logger.Info("WithdrawnEnv - Gathering Info for Envelope [{0}] ({1}/{2})", oEnvID, oCurrent, oTotal) + Try + Dim oEnvelope = EnvelopeModel.GetById(oEnvID) + If oEnvelope Is Nothing Then + Logger.Warn("WithdrawnEnv - Envelope could not be loaded for Id [{0}]!", oEnvID) + Throw New ArgumentNullException("EnvelopeData") + End If + oEnvelope.CURRENT_WORK_APP = "signFLOW_API_EnvJob_Withdrawn" + oEnvelope.Receivers = ReceiverModel.ListEnvelopeReceivers(oEnvelope.Id).ToList() + + Logger.Debug("WithdrawnEnv - Sending Withdrawn Mails..") + + If ActionService.API_SendWithdrawn_Mails(oEnvelope, oReason) = False Then + Logger.Warn("Could not send the Mails for withdrawn Envelope") + Else + Dim oStatInsert = $"INSERT INTO TBSIG_ENVELOPE_HISTORY (ENVELOPE_ID,STATUS,USER_REFERENCE,ADDED_WHEN,ACTION_DATE) VALUES ('{oEnvelope.Id}',3004,'API',GETDATE(),GETDATE())" + Database.ExecuteNonQuery(oStatInsert) + End If + Catch ex As Exception + Logger.Warn(ex, $"WithdrawnEnv - Unhandled exception while working envelope [{oEnvID}]") + End Try + + oCurrent += 1 + Logger.Info("WithdrawnEnv - Envelope finalized!") + + Next + - Logger.Debug("SendInvMail - Completed job {0} successfully!", JobId) + Logger.Debug("API Envelopes - Completed job {0} successfully!", JobId) Catch ex As Exception - Logger.Warn("SendInvMail job failed!") + Logger.Warn("API Envelopes job failed!") Logger.Error(ex) Finally - Logger.Debug("SendInvMail execution for [{0}] ended", JobId) + Logger.Debug("API Envelopes execution for [{0}] ended", JobId) End Try Return Task.FromResult(True) diff --git a/EnvelopeGenerator.Common/Jobs/FinalizeDocument/FinalizeDocumentJob.vb b/EnvelopeGenerator.Common/Jobs/FinalizeDocument/FinalizeDocumentJob.vb index 1cec375a..5ad56183 100644 --- a/EnvelopeGenerator.Common/Jobs/FinalizeDocument/FinalizeDocumentJob.vb +++ b/EnvelopeGenerator.Common/Jobs/FinalizeDocument/FinalizeDocumentJob.vb @@ -146,7 +146,7 @@ Namespace Jobs Directory.CreateDirectory(oOutputDirectoryPath) End If Dim oOutputFilePath = Path.Combine(oOutputDirectoryPath, $"{oEnvelope.Uuid}.pdf") - Logger.Info("Writing finalized Pdf to disk..") + Logger.Debug("Writing finalized Pdf to disk..") Logger.Info("Output path is [{0}]", oOutputFilePath) Try @@ -156,12 +156,14 @@ Namespace Jobs Throw New ExportDocumentException("Could not export final document to disk!", ex) End Try - Logger.Info("Writing EB-bytes to database...") + Logger.Debug("Writing EB-bytes to database...") Update_File_DB(oOutputFilePath, oEnvelope.Id) - Logger.Info("Sending finalized report-mails..") + If SendFinalEmails(oEnvelope) = False Then ', oOutputFilePath Throw New ApplicationException("Final emails could not be sent!") + Else + Logger.Info("Report-mails successfully sent!") End If Logger.Debug("Setting envelope status..") If ActionService.FinalizeEnvelope(oEnvelope) = False Then @@ -174,7 +176,7 @@ Namespace Jobs oCurrent += 1 - Logger.Info("Envelope finalized!") + Logger.Info($"Envelope [{oId}] finalized!") Next @@ -191,7 +193,7 @@ Namespace Jobs Logger.Warn("Certificate Document job failed!") Logger.Error(ex) Finally - Logger.Info("Job execution for [{0}] ended", JobId) + Logger.Debug("Job execution for [{0}] ended", JobId) End Try Return Task.FromResult(True) @@ -358,9 +360,9 @@ Namespace Jobs oInputPath = pEnvelopeData.DocumentPath Logger.Info($"Input path: [{oInputPath}]") Else - Logger.Info($"we got bytes..") + Logger.Debug($"we got bytes..") oInputPath = Config.DocumentPathOrigin - Logger.Info($"oInputPath: {Config.DocumentPathOrigin}") + Logger.Debug($"oInputPath: {Config.DocumentPathOrigin}") End If diff --git a/EnvelopeGenerator.Common/Models/EmailModel.vb b/EnvelopeGenerator.Common/Models/EmailModel.vb index b04a45b2..b0b1e2ae 100644 --- a/EnvelopeGenerator.Common/Models/EmailModel.vb +++ b/EnvelopeGenerator.Common/Models/EmailModel.vb @@ -18,7 +18,7 @@ Public Class EmailModel oCommand.Parameters.Add("EMAIL_ADRESS", SqlDbType.NVarChar).Value = pEmail.EmailAdress oCommand.Parameters.Add("EMAIL_SUBJ", SqlDbType.NVarChar).Value = pEmail.EmailSubject oCommand.Parameters.Add("EMAIL_BODY", SqlDbType.NVarChar).Value = pEmail.EmailBody - oCommand.Parameters.Add("ADDED_WHO", SqlDbType.NVarChar).Value = "DDEnvelopGenerator" + oCommand.Parameters.Add("ADDED_WHO", SqlDbType.NVarChar).Value = pEmail.ADDED_WHO_PROCESS oCommand.Parameters.Add("SENDING_PROFILE", SqlDbType.Int).Value = State.DbConfig.SendingProfile oCommand.Parameters.Add("REFERENCE_ID", SqlDbType.Int).Value = pEmail.ReferenceID oCommand.Parameters.Add("REFERENCE_STRING", SqlDbType.NVarChar).Value = pEmail.ReferenceString diff --git a/EnvelopeGenerator.Common/Services/ActionService.vb b/EnvelopeGenerator.Common/Services/ActionService.vb index da1cd171..efcb320a 100644 --- a/EnvelopeGenerator.Common/Services/ActionService.vb +++ b/EnvelopeGenerator.Common/Services/ActionService.vb @@ -3,6 +3,7 @@ Imports DigitalData.Modules.Base Imports EnvelopeGenerator.Common.Constants Imports EnvelopeGenerator.Common.My.Resources Imports DigitalData.Modules.Database +Imports System.ComponentModel Public Class ActionService Inherits BaseService @@ -83,6 +84,15 @@ Public Class ActionService Return True End Function + Public Function API_SendWithdrawn_Mails(pEnvelope As Envelope, pReason As String) As Boolean + Dim oSendResult As Boolean = False + For Each oReceiver As EnvelopeReceiver In pEnvelope.Receivers + If EmailService.SendEnvelopeDeletedEmail(pEnvelope, oReceiver, pReason) = False Then + Return False + End If + Next + Return True + End Function Public Function OpenEnvelope(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean Dim oUserReference = pReceiver.Email diff --git a/EnvelopeGenerator.Common/Services/EmailService.vb b/EnvelopeGenerator.Common/Services/EmailService.vb index d4e7893c..584c720c 100644 --- a/EnvelopeGenerator.Common/Services/EmailService.vb +++ b/EnvelopeGenerator.Common/Services/EmailService.vb @@ -17,10 +17,11 @@ Public Class EmailService End Sub Public Function SendEnvelopeDeletedEmail(pEnvelope As Envelope, pReceiver As EnvelopeReceiver, pReason As String) As Boolean - Logger.Debug("Creating email data object.") + Logger.Debug("SendEnvelopeDeletedEmail - Creating email data object...") Dim oEmailData As New EmailData(pEnvelope, pReceiver, Constants.EnvelopeStatus.MessageDeletionSent) With { - .SignatureLink = "" + .SignatureLink = "", + .ADDED_WHO_PROCESS = pEnvelope.CURRENT_WORK_APP } EmailTemplate.FillEnvelopeDeletedEmailBody(oEmailData, pReason) @@ -37,7 +38,8 @@ Public Class EmailService Logger.Debug("Creating email data object.") Dim oEmailData As New EmailData(pEnvelope, pReceiver, Constants.EnvelopeStatus.MessageInvitationSent) With { - .SignatureLink = Helpers.GetEnvelopeURL(State.DbConfig.SignatureHost, pEnvelope.Uuid, pReceiver.Signature) + .SignatureLink = Helpers.GetEnvelopeURL(State.DbConfig.SignatureHost, pEnvelope.Uuid, pReceiver.Signature), + .ADDED_WHO_PROCESS = pEnvelope.CURRENT_WORK_APP } EmailTemplate.FillDocumentReceivedEmailBody(oEmailData) @@ -51,9 +53,13 @@ Public Class EmailService End Function Public Function GetReceiverUrl(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As String + Logger.Debug($"State.DbConfig.SignatureHost: {State.DbConfig.SignatureHost}") + Logger.Debug($" pEnvelope.Uuid: {pEnvelope.Uuid}") + Logger.Debug($" pReceiver.Signature: {pReceiver.Signature}") Dim oEmailData As New EmailData(pEnvelope, pReceiver, Constants.EnvelopeStatus.MessageInvitationSent) With { - .SignatureLink = Helpers.GetEnvelopeURL(State.DbConfig.SignatureHost, pEnvelope.Uuid, pReceiver.Signature) + .SignatureLink = Helpers.GetEnvelopeURL(State.DbConfig.SignatureHost, pEnvelope.Uuid, pReceiver.Signature), + .ADDED_WHO_PROCESS = pEnvelope.CURRENT_WORK_APP } Return oEmailData.SignatureLink End Function @@ -61,9 +67,13 @@ Public Class EmailService Public Function SendDocumentAccessCodeReceivedEmail(pEnvelope As Envelope, pReceiver As EnvelopeReceiver) As Boolean Logger.Debug("Creating email data object.") + Logger.Debug($"State.DbConfig.SignatureHost: {State.DbConfig.SignatureHost}") + Logger.Debug($" pEnvelope.Uuid: {pEnvelope.Uuid}") + Logger.Debug($" pReceiver.Signature: {pReceiver.Signature}") Dim oEmailData As New EmailData(pEnvelope, pReceiver, Constants.EnvelopeStatus.MessageAccessCodeSent) With { - .SignatureLink = Helpers.GetEnvelopeURL(State.DbConfig.SignatureHost, pEnvelope.Uuid, pReceiver.Signature) + .SignatureLink = Helpers.GetEnvelopeURL(State.DbConfig.SignatureHost, pEnvelope.Uuid, pReceiver.Signature), + .ADDED_WHO_PROCESS = pEnvelope.CURRENT_WORK_APP } EmailTemplate.FillDocumentAccessCodeReceivedEmailBody(oEmailData) diff --git a/EnvelopeGenerator.Form/Controllers/BaseController.vb b/EnvelopeGenerator.Form/Controllers/BaseController.vb index ce4c1687..9f9a7e9e 100644 --- a/EnvelopeGenerator.Form/Controllers/BaseController.vb +++ b/EnvelopeGenerator.Form/Controllers/BaseController.vb @@ -28,7 +28,7 @@ Public MustInherit Class BaseController State = pState Database = pState.Database InitializeModels(pState) - ActionService = New ActionService(pState, Nothing) + ActionService = New ActionService(pState, Database) End Sub Private Sub InitializeModels(pState As State) diff --git a/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb b/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb index e4c36658..cd9510a2 100644 --- a/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb +++ b/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb @@ -22,7 +22,7 @@ Public Class EnvelopeEditorController Envelope = CreateEnvelope() Thumbnail = New Thumbnail(pState.LogConfig) EmailService = New EmailService(pState) - ActionService = New ActionService(pState) + ActionService = New ActionService(pState, Nothing) End Sub Public Sub New(pState As State, pEnvelope As Envelope) @@ -33,7 +33,7 @@ Public Class EnvelopeEditorController Envelope.Receivers = ReceiverModel.ListEnvelopeReceivers(pEnvelope.Id).ToList() Thumbnail = New Thumbnail(pState.LogConfig) - ActionService = New ActionService(pState) + ActionService = New ActionService(pState, Nothing) End Sub #Region "Public" diff --git a/EnvelopeGenerator.Form/frmEnvelopeMainData.vb b/EnvelopeGenerator.Form/frmEnvelopeMainData.vb index 73be93ff..a6978b64 100644 --- a/EnvelopeGenerator.Form/frmEnvelopeMainData.vb +++ b/EnvelopeGenerator.Form/frmEnvelopeMainData.vb @@ -65,6 +65,9 @@ Public Class frmEnvelopeMainData chked_2Faktor.EditValue = DEF_TF_ENABLED Else + If IsNothing(Envelope.EnvelopeType) Then + Envelope.EnvelopeType = EnvelopeType + End If If Envelope.EnvelopeType.ContractType = 0 Then cmbEnvelopeType.EditValue = EnvelopeType Else diff --git a/EnvelopeGenerator.Service/EnvelopeGenerator.Service.vbproj b/EnvelopeGenerator.Service/EnvelopeGenerator.Service.vbproj index ea20f2d7..1c195651 100644 --- a/EnvelopeGenerator.Service/EnvelopeGenerator.Service.vbproj +++ b/EnvelopeGenerator.Service/EnvelopeGenerator.Service.vbproj @@ -260,7 +260,7 @@ - + Service.vb diff --git a/EnvelopeGenerator.Service/Scheduler_API_SendEnvelopeMails.vb b/EnvelopeGenerator.Service/Scheduler_Envelopetask_API.vb similarity index 94% rename from EnvelopeGenerator.Service/Scheduler_API_SendEnvelopeMails.vb rename to EnvelopeGenerator.Service/Scheduler_Envelopetask_API.vb index fac1cff2..d5cd3428 100644 --- a/EnvelopeGenerator.Service/Scheduler_API_SendEnvelopeMails.vb +++ b/EnvelopeGenerator.Service/Scheduler_Envelopetask_API.vb @@ -5,7 +5,7 @@ Imports DigitalData.Modules.Logging Imports EnvelopeGenerator.Common.Jobs Imports EnvelopeGenerator.Common.Jobs.FinalizeDocument Imports Quartz -Public Class Scheduler_API_SendEnvelopeMails +Public Class Scheduler_Envelopetask_API Inherits BaseClass Private Scheduler As IScheduler Private ReadOnly ConnectionString As String @@ -35,7 +35,7 @@ Public Class Scheduler_API_SendEnvelopeMails Logger.Debug("Initialized Job [{0}]", JobName) - Dim oJob As IJobDetail = JobBuilder.Create(Of SendInvitationMailJob). + Dim oJob As IJobDetail = JobBuilder.Create(Of APIEnvelopeJob). UsingJobData(oJobData). WithIdentity(oJobKey). Build() diff --git a/EnvelopeGenerator.Service/Service.vb b/EnvelopeGenerator.Service/Service.vb index 4d910e7e..d54aae47 100644 --- a/EnvelopeGenerator.Service/Service.vb +++ b/EnvelopeGenerator.Service/Service.vb @@ -12,7 +12,7 @@ Public Class Service Private Database As MSSQLServer Private TempFiles As TempFiles Private Scheduler1 As Scheduler_FinishEnvelope - Private Scheduler2 As Scheduler_API_SendEnvelopeMails + Private Scheduler2 As Scheduler_Envelopetask_API Protected Overrides Async Sub OnStart(ByVal args() As String) Try @@ -62,7 +62,7 @@ Public Class Service Thread.Sleep(2500) - Scheduler2 = New Scheduler_API_SendEnvelopeMails(LogConfig, Config.ConnectionString) + Scheduler2 = New Scheduler_Envelopetask_API(LogConfig, Config.ConnectionString) Await Scheduler2.Start(Config.IntervalInMin) Logger.Info("Started [{0}] !", ServiceName)