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) - Logger.Debug("SendInvMail - Completed job {0} successfully!", JobId) + 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("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)