diff --git a/EnvelopeGenerator.Common/Constants.vb b/EnvelopeGenerator.Common/Constants.vb
index d695884e..acb80343 100644
--- a/EnvelopeGenerator.Common/Constants.vb
+++ b/EnvelopeGenerator.Common/Constants.vb
@@ -2,11 +2,18 @@
#Region "Status Fields"
Public Enum EnvelopeStatus
- Created = 0
- Saved = 1
- Sent = 2
- PartlySigned = 3
- CompletelySigned = 4
+ EnvelopeCreated = 1001
+ EnvelopeSaved = 1002
+ EnvelopeQueued = 1003
+ EnvelopeSent = 1004
+ EnvelopePartlySigned = 1005
+ EnvelopeCompletelySigned = 1006
+ EnvelopeArchived = 1007
+ EnvelopeTransmittedDMS = 1008
+ EnvelopeDeleted = 1009
+ DocumentOpened = 2001
+ DocumentSigned = 2002
+ SignatureConfirmed = 2003
End Enum
Public Enum ElementStatus
@@ -26,16 +33,16 @@
'''
''' This is a status, which is called Type because it fits with the other action fields
'''
- Public Enum EnvelopeHistoryActionType
- Created = 0
- Saved = 1
- Sent = 2
- EmailSent = 3
- Delivered = 4
- Seen = 5
- Signed = 6
- Rejected = 7
- End Enum
+ 'Public Enum EnvelopeHistoryActionType
+ ' Created = 0
+ ' Saved = 1
+ ' Sent = 2
+ ' EmailSent = 3
+ ' Delivered = 4
+ ' Seen = 5
+ ' Signed = 6
+ ' Rejected = 7
+ 'End Enum
#End Region
#Region "Type Fields"
diff --git a/EnvelopeGenerator.Common/Entities/EmailTemplate.vb b/EnvelopeGenerator.Common/Entities/EmailTemplate.vb
index 871e7631..8ed4d286 100644
--- a/EnvelopeGenerator.Common/Entities/EmailTemplate.vb
+++ b/EnvelopeGenerator.Common/Entities/EmailTemplate.vb
@@ -4,6 +4,7 @@ Public Class EmailTemplate
Private _DocumentReceivedBodyTemplate As List(Of String)
Private _DocumentSignedBodyTemplate As List(Of String)
Private _DocumentCompletedBodyTemplate As List(Of String)
+ Private _DocumentDeletedBodyTemplate As List(Of String)
Private _replaceDictionary As Dictionary(Of String, String)
@@ -34,6 +35,15 @@ Public Class EmailTemplate
""
}
+ _DocumentDeletedBodyTemplate = New List(Of String) From {
+ "Guten Tag, ",
+ "",
+ "Der User hat den Umschlag gelöscht.",
+ "",
+ "Mit freundlichen Grüßen",
+ ""
+ }
+
_DocumentCompletedBodyTemplate = New List(Of String) From {
"Guten Tag, ",
"",
@@ -60,6 +70,10 @@ Public Class EmailTemplate
FillEmailBody(pEmailData, _DocumentReceivedBodyTemplate)
End Sub
+ Public Sub FillEnvelopeDeletedEmailBody(pEmailData As EmailData)
+ FillEmailBody(pEmailData, _DocumentDeletedBodyTemplate)
+ End Sub
+
Public Sub FillDocumentSignedEmailBody(pEmailData As EmailData)
FillEmailBody(pEmailData, _DocumentSignedBodyTemplate)
End Sub
diff --git a/EnvelopeGenerator.Common/Entities/Envelope.vb b/EnvelopeGenerator.Common/Entities/Envelope.vb
index d7fd48af..746491b9 100644
--- a/EnvelopeGenerator.Common/Entities/Envelope.vb
+++ b/EnvelopeGenerator.Common/Entities/Envelope.vb
@@ -29,33 +29,7 @@
End Get
End Property
- Public Function Validate() As List(Of String)
- Dim oErrors As New List(Of String)
- If String.IsNullOrWhiteSpace(Subject) Then
- oErrors.Add(My.Resources.Envelope.Missing_Subject)
- End If
-
- If String.IsNullOrWhiteSpace(Message) Then
- oErrors.Add(My.Resources.Envelope.Missing_Message)
- End If
-
- If Documents.Count = 0 Then
- oErrors.Add(My.Resources.Envelope.Missing_Documents)
- End If
-
- If Receivers.Count = 0 Then
- oErrors.Add(My.Resources.Envelope.Missing_Receivers)
- End If
-
- For Each Receiver In Receivers
- If IsValidEmailAddress(Receiver.Email) = False Then
- oErrors.Add(String.Format(My.Resources.Envelope.Invalid_Email_Address, Receiver.Name))
- End If
- Next
-
- Return oErrors
- End Function
Public Function ValidateReceiverDocumentData() As List(Of String)
Dim oErrors As New List(Of String)
@@ -72,12 +46,5 @@
End Function
- Private Function IsValidEmailAddress(pEmailAddress As String) As Boolean
- Try
- Dim oAddress = New System.Net.Mail.MailAddress(pEmailAddress)
- Return oAddress.Address = pEmailAddress
- Catch ex As Exception
- Return False
- End Try
- End Function
+
End Class
diff --git a/EnvelopeGenerator.Common/Entities/EnvelopeHistoryEntry.vb b/EnvelopeGenerator.Common/Entities/EnvelopeHistoryEntry.vb
index 81cb8681..b6c66580 100644
--- a/EnvelopeGenerator.Common/Entities/EnvelopeHistoryEntry.vb
+++ b/EnvelopeGenerator.Common/Entities/EnvelopeHistoryEntry.vb
@@ -1,6 +1,6 @@
Public Class EnvelopeHistoryEntry
Public EnvelopeId As Integer
Public UserReference As String
- Public ActionType As Constants.EnvelopeHistoryActionType
- Public ActionDate As Date
+ Public Status As Constants.EnvelopeStatus
+ Public ActionDate As Date = Now()
End Class
diff --git a/EnvelopeGenerator.Common/EnvelopeGenerator.Common.vbproj b/EnvelopeGenerator.Common/EnvelopeGenerator.Common.vbproj
index 7f203374..9d95b57b 100644
--- a/EnvelopeGenerator.Common/EnvelopeGenerator.Common.vbproj
+++ b/EnvelopeGenerator.Common/EnvelopeGenerator.Common.vbproj
@@ -137,7 +137,9 @@
Settings.settings
True
+
+
Email.en.resx
True
diff --git a/EnvelopeGenerator.Common/Helpers.vb b/EnvelopeGenerator.Common/Helpers.vb
index 74539b20..bd0e0c75 100644
--- a/EnvelopeGenerator.Common/Helpers.vb
+++ b/EnvelopeGenerator.Common/Helpers.vb
@@ -85,4 +85,13 @@ Public Class Helpers
Return oColoredImage
End Function
+
+ Public Shared Function IsValidEmailAddress(pEmailAddress As String) As Boolean
+ Try
+ Dim oAddress = New System.Net.Mail.MailAddress(pEmailAddress)
+ Return oAddress.Address = pEmailAddress
+ Catch ex As Exception
+ Return False
+ End Try
+ End Function
End Class
diff --git a/EnvelopeGenerator.Common/Models/EnvelopeModel.vb b/EnvelopeGenerator.Common/Models/EnvelopeModel.vb
index 55823c1c..d1026686 100644
--- a/EnvelopeGenerator.Common/Models/EnvelopeModel.vb
+++ b/EnvelopeGenerator.Common/Models/EnvelopeModel.vb
@@ -27,7 +27,7 @@ Public Class EnvelopeModel
.Subject = pRow.ItemEx("SUBJECT", ""),
.Message = pRow.ItemEx("MESSAGE", ""),
.UserId = pRow.ItemEx("USER_ID", 0),
- .Status = ObjectEx.ToEnum(Of Constants.EnvelopeStatus)(pRow.ItemEx("STATUS", Constants.EnvelopeStatus.Created.ToString())),
+ .Status = ObjectEx.ToEnum(Of Constants.EnvelopeStatus)(pRow.ItemEx("STATUS", Constants.EnvelopeStatus.EnvelopeCreated.ToString())),
.AddedWhen = pRow.Item("ADDED_WHEN"),
.User = New User()
}
@@ -57,6 +57,18 @@ Public Class EnvelopeModel
End Try
End Function
+ Public Function GetById(pEnvelopeId As String) As Envelope
+ Try
+ Dim oSql = $"SELECT * FROM [dbo].[TBSIG_ENVELOPE] WHERE GUID = '{pEnvelopeId}'"
+ Dim oTable = Database.GetDatatable(oSql)
+
+ Return ToEnvelope(oTable)
+ Catch ex As Exception
+ Logger.Error(ex)
+ Return Nothing
+ End Try
+ End Function
+
Public Function List() As IEnumerable(Of Envelope)
Try
Dim oSql = $"SELECT * FROM [dbo].[TBSIG_ENVELOPE] WHERE USER_ID = {State.UserId} AND STATUS IN (0,1,2,3)"
@@ -102,25 +114,6 @@ Public Class EnvelopeModel
End Try
End Function
- Public Function Send(pEnvelope As Envelope) As Boolean
- Try
- Dim oSql = "UPDATE [dbo].[TBSIG_ENVELOPE] SET STATUS = @STATUS, SENT_WHEN = GETDATE() WHERE GUID = @GUID"
- Dim oCommand As New SqlCommand(oSql)
- oCommand.Parameters.Add("GUID", SqlDbType.Int).Value = pEnvelope.Id
- oCommand.Parameters.Add("STATUS", SqlDbType.Int).Value = Constants.EnvelopeStatus.Sent
-
- If Database.ExecuteNonQuery(oCommand) Then
- Return True
- Else
- Return False
- End If
-
- Catch ex As Exception
- Logger.Error(ex)
- Return False
- End Try
- End Function
-
Public Function Insert(pEnvelope As Envelope) As Boolean
Try
Dim oSql = "INSERT INTO [dbo].[TBSIG_ENVELOPE] (SUBJECT, MESSAGE, ENVELOPE_UUID, STATUS, USER_ID, TITLE, CONTRACT_TYPE) "
@@ -129,7 +122,7 @@ Public Class EnvelopeModel
oCommand.Parameters.Add("SUBJECT", SqlDbType.NVarChar).Value = String.Empty
oCommand.Parameters.Add("MESSAGE", SqlDbType.NVarChar).Value = String.Empty
oCommand.Parameters.Add("UUID", SqlDbType.NVarChar).Value = pEnvelope.Uuid
- oCommand.Parameters.Add("STATUS", SqlDbType.Int).Value = Constants.EnvelopeStatus.Created
+ oCommand.Parameters.Add("STATUS", SqlDbType.Int).Value = Constants.EnvelopeStatus.EnvelopeCreated
oCommand.Parameters.Add("USER_ID", SqlDbType.Int).Value = pEnvelope.UserId
oCommand.Parameters.Add("TITLE", SqlDbType.NVarChar).Value = pEnvelope.Title
oCommand.Parameters.Add("CONTRACT_TYPE", SqlDbType.Int).Value = pEnvelope.ContractType
@@ -179,7 +172,7 @@ Public Class EnvelopeModel
Public Function Delete(pEnvelope As Envelope, pTransaction As SqlTransaction) As Boolean
Try
Dim oSql = $"DELETE FROM [dbo].[TBSIG_ENVELOPE] WHERE GUID = {pEnvelope.Id}"
- Return Database.ExecuteNonQuery(oSql, pTransaction)
+ 'Return Database.ExecuteNonQuery(oSql, pTransaction)
Catch ex As Exception
Return False
diff --git a/EnvelopeGenerator.Common/Models/HistoryModel.vb b/EnvelopeGenerator.Common/Models/HistoryModel.vb
index 7d25b9f5..ec8d2f94 100644
--- a/EnvelopeGenerator.Common/Models/HistoryModel.vb
+++ b/EnvelopeGenerator.Common/Models/HistoryModel.vb
@@ -7,46 +7,24 @@ Public Class HistoryModel
MyBase.New(pState)
End Sub
- Private Function GetActionDescription(pActionType As Constants.EnvelopeHistoryActionType)
- Select Case pActionType
- Case Constants.EnvelopeHistoryActionType.Created
- Return "Umschlag erfolgreich erstellt"
-
- Case Constants.EnvelopeHistoryActionType.Sent
- Return "Umschlag an Empfänger versendet"
-
- Case Constants.EnvelopeHistoryActionType.Seen
- Return "Umschlag von Empfänger geöffnet"
-
- Case Constants.EnvelopeHistoryActionType.Signed
- Return "Umschlag von Empfänger signiert"
-
- Case Else
- Return pActionType.ToString()
- End Select
- End Function
-
Public Function Insert(pHistory As EnvelopeHistoryEntry) As Boolean
Try
Dim oSql = "INSERT INTO [dbo].[TBSIG_ENVELOPE_HISTORY] "
oSql += " ([ENVELOPE_ID] "
oSql += " ,[USER_REFERENCE] "
- oSql += " ,[ACTION_TYPE] "
- oSql += " ,[ACTION_DESCRIPTION] "
+ oSql += " ,[STATUS] "
oSql += " ,[ACTION_DATE]) "
oSql += " VALUES "
oSql += " (@ENVELOPE_ID "
oSql += " ,@USER_REFERENCE "
- oSql += " ,@ACTION_TYPE "
- oSql += " ,@ACTION_DESCRIPTION "
+ oSql += " ,@STATUS "
oSql += " ,@ACTION_DATE) "
Dim oCommand As New SqlCommand(oSql)
oCommand.Parameters.Add("ENVELOPE_ID", SqlDbType.Int).Value = pHistory.EnvelopeId
oCommand.Parameters.Add("USER_REFERENCE", SqlDbType.NVarChar).Value = pHistory.UserReference
- oCommand.Parameters.Add("ACTION_TYPE", SqlDbType.Int).Value = pHistory.ActionType
- oCommand.Parameters.Add("ACTION_DESCRIPTION", SqlDbType.NVarChar).Value = GetActionDescription(pHistory.ActionType)
- oCommand.Parameters.Add("ACTION_DATE", SqlDbType.DateTime).Value = Now()
+ oCommand.Parameters.Add("STATUS", SqlDbType.Int).Value = pHistory.Status
+ oCommand.Parameters.Add("ACTION_DATE", SqlDbType.DateTime).Value = pHistory.ActionDate
If Database.ExecuteNonQuery(oCommand) Then
Return True
diff --git a/EnvelopeGenerator.Common/Models/ReceiverModel.vb b/EnvelopeGenerator.Common/Models/ReceiverModel.vb
index 01686402..8593196d 100644
--- a/EnvelopeGenerator.Common/Models/ReceiverModel.vb
+++ b/EnvelopeGenerator.Common/Models/ReceiverModel.vb
@@ -23,6 +23,12 @@ Public Class ReceiverModel
}
End Function
+ Private Function ToReceiver(pTable As DataTable) As EnvelopeReceiver
+ Return pTable?.Rows.Cast(Of DataRow).
+ Select(AddressOf ToReceiver).
+ Single()
+ End Function
+
Public Function TestReceiverExists(pReceiver As EnvelopeReceiver) As Boolean
Try
Dim oGuid = Database.GetScalarValue($"SELECT COALESCE(GUID, 0) FROM TBSIG_RECEIVER WHERE EMAIL_ADDRESS = '{pReceiver.Email}'")
@@ -140,13 +146,13 @@ Public Class ReceiverModel
End Try
End Function
- Public Function ListReceivers(pExistingReceivers As IEnumerable(Of EnvelopeReceiver)) As IEnumerable(Of EnvelopeReceiver)
+ Public Function ListReceivers(pReceiversFromGrid As List(Of EnvelopeReceiver)) As IEnumerable(Of EnvelopeReceiver)
Try
- If pExistingReceivers.Count = 0 Then
+ If pReceiversFromGrid.Count = 0 Then
Return New List(Of EnvelopeReceiver)
End If
- Dim oAddresses = pExistingReceivers.Select(Function(r) $"'{r.Email}'").JoinToString(",")
+ Dim oAddresses = pReceiversFromGrid.Select(Function(r) $"'{r.Email}'").JoinToString(",")
Dim oSql = $"SELECT * FROM [dbo].[TBSIG_RECEIVER] WHERE EMAIL_ADDRESS IN ({oAddresses})"
Dim oTable = Database.GetDatatable(oSql)
@@ -173,6 +179,19 @@ Public Class ReceiverModel
End Try
End Function
+ Public Function GetById(pReceiverId As Integer) As EnvelopeReceiver
+ Try
+ Dim oSql = $"SELECT * FROM [dbo].[VWSIG_ENVELOPE_RECEIVERS] WHERE GUID = {pReceiverId}"
+ Dim oTable = Database.GetDatatable(oSql)
+
+ Return ToReceiver(oTable)
+
+ Catch ex As Exception
+ Logger.Error(ex)
+ Return Nothing
+ End Try
+ End Function
+
Public Function GetReceiverIdBySignature(pSignature As String) As Integer
Try
Return Database.GetScalarValue($"SELECT GUID FROM TBSIG_RECEIVER WHERE SIGNATURE = '{pSignature}'")
diff --git a/EnvelopeGenerator.Common/Services/ActionService.vb b/EnvelopeGenerator.Common/Services/ActionService.vb
new file mode 100644
index 00000000..cb3ce0fa
--- /dev/null
+++ b/EnvelopeGenerator.Common/Services/ActionService.vb
@@ -0,0 +1,32 @@
+Imports DigitalData.Modules.Base
+
+Public Class ActionService
+ Inherits BaseClass
+
+ Private ReadOnly State As State
+
+ Private EmailService As EmailService
+ Private HistoryService As HistoryService
+
+
+ Public Sub New(pState As State)
+ MyBase.New(pState.LogConfig)
+
+ State = pState
+ EmailService = New EmailService(pState)
+ HistoryService = New HistoryService(pState)
+ End Sub
+
+ Public Function DeleteEnvelope(pEnvelope As Envelope) As Boolean
+
+ HistoryService.SetEnvelopeStatus(pEnvelope, Constants.EnvelopeStatus.EnvelopeDeleted, pEnvelope.User.Email)
+
+ For Each oReceiver As EnvelopeReceiver In pEnvelope.Receivers
+ EmailService.SendEnvelopeDeletedEmail(oReceiver.Id, pEnvelope.Id)
+ Next
+
+
+ Return True
+ End Function
+
+End Class
\ No newline at end of file
diff --git a/EnvelopeGenerator.Common/Services/EmailService.vb b/EnvelopeGenerator.Common/Services/EmailService.vb
index 24322d79..bd697836 100644
--- a/EnvelopeGenerator.Common/Services/EmailService.vb
+++ b/EnvelopeGenerator.Common/Services/EmailService.vb
@@ -1,18 +1,79 @@
-Imports DigitalData.Modules.Base
+
+Imports DigitalData.Modules.Base
Imports DigitalData.Modules.Logging
Public Class EmailService
Inherits BaseClass
+ Private ReadOnly State As State
+
+ Private ReadOnly EnvelopeModel As EnvelopeModel
+ Private ReadOnly ReceiverModel As ReceiverModel
+ Private ReadOnly EmailModel As EmailModel
+
+ Private ReadOnly EmailTemplate As EmailTemplate
+
Public Sub New(pState As State)
MyBase.New(pState.LogConfig)
+
+ State = pState
+ EnvelopeModel = New EnvelopeModel(pState)
+ ReceiverModel = New ReceiverModel(pState)
+ EmailModel = New EmailModel(pState)
+ EmailTemplate = New EmailTemplate()
End Sub
- Public Function SendSignedEmail(pReceiverId As Integer, pEnvelopeId As Integer)
+ Public Function SendEnvelopeDeletedEmail(pReceiverId As Integer, pEnvelopeId As Integer) As Boolean
+ Dim oEnvelope = EnvelopeModel.GetById(pEnvelopeId)
+ Dim oReceiver = ReceiverModel.GetById(pReceiverId)
- Dim oEnvelope =
+ Dim oEmailData As New EmailData(oEnvelope, oReceiver) With
+ {
+ .SignatureLink = ""
+ }
+ EmailTemplate.FillEnvelopeDeletedEmailBody(oEmailData)
+ If EmailModel.Insert(oEmailData) = False Then
+ Logger.Error("EMail data could not be inserted.")
+ Return False
+ End If
+
+ Return True
+ End Function
+
+ Public Function SendInitialEmail(pReceiverId As Integer, pEnvelopeId As Integer) As Boolean
+ Dim oEnvelope = EnvelopeModel.GetById(pEnvelopeId)
+ Dim oReceiver = ReceiverModel.GetById(pReceiverId)
+
+ Dim oEmailData As New EmailData(oEnvelope, oReceiver) With
+ {
+ .SignatureLink = Helpers.GetEnvelopeURL(State.DbConfig.SignatureHost, oEnvelope.Uuid, oReceiver.Signature)
+ }
+
+ EmailTemplate.FillDocumentReceivedEmailBody(oEmailData)
+
+ If EmailModel.Insert(oEmailData) = False Then
+ Logger.Error("EMail data could not be inserted.")
+ Return False
+ End If
+
+ Return True
+ End Function
+
+ Public Function SendSignedEmail(pReceiverId As Integer, pEnvelopeId As Integer) As Boolean
+ Dim oEnvelope = EnvelopeModel.GetById(pEnvelopeId)
+ Dim oReceiver = ReceiverModel.GetById(pReceiverId)
+
+ Dim oEmailData = New EmailData(oEnvelope, oReceiver) With {.SignatureLink = ""}
+ EmailTemplate.FillDocumentSignedEmailBody(oEmailData)
+
+ If EmailModel.Insert(oEmailData) = False Then
+ Logger.Error("EMail data could not be inserted.")
+ Return False
+ End If
+
+ Return True
End Function
diff --git a/EnvelopeGenerator.Common/Services/HistoryService.vb b/EnvelopeGenerator.Common/Services/HistoryService.vb
new file mode 100644
index 00000000..ae341a66
--- /dev/null
+++ b/EnvelopeGenerator.Common/Services/HistoryService.vb
@@ -0,0 +1,32 @@
+
+Imports DigitalData.Modules.Base
+Imports DigitalData.Modules.Logging
+Imports EnvelopeGenerator.Common.Constants
+
+Public Class HistoryService
+ Inherits BaseClass
+
+ Private ReadOnly State As State
+
+ Private ReadOnly EnvelopeModel As EnvelopeModel
+ Private ReadOnly ReceiverModel As ReceiverModel
+ Private ReadOnly HistoryModel As HistoryModel
+
+ Public Sub New(pState As State)
+ MyBase.New(pState.LogConfig)
+
+ State = pState
+ EnvelopeModel = New EnvelopeModel(pState)
+ ReceiverModel = New ReceiverModel(pState)
+ HistoryModel = New HistoryModel(pState)
+ End Sub
+
+ Public Function SetEnvelopeStatus(pEnvelope As Envelope, pStatus As EnvelopeStatus, pUserReference As String) As Boolean
+ Return HistoryModel.Insert(New EnvelopeHistoryEntry() With {
+ .EnvelopeId = pEnvelope.Id,
+ .ActionDate = Now(),
+ .Status = pStatus,
+ .UserReference = pUserReference
+ })
+ End Function
+End Class
diff --git a/EnvelopeGenerator.Form/Controllers/BaseController.vb b/EnvelopeGenerator.Form/Controllers/BaseController.vb
index 8f524073..ed241d3e 100644
--- a/EnvelopeGenerator.Form/Controllers/BaseController.vb
+++ b/EnvelopeGenerator.Form/Controllers/BaseController.vb
@@ -14,6 +14,8 @@ Public MustInherit Class BaseController
Public UserModel As UserModel
Public EmailModel As EmailModel
+ Public ActionService As ActionService
+
Public ReadOnly Property Database As MSSQLServer
Public ReadOnly Property State As State
@@ -22,6 +24,7 @@ Public MustInherit Class BaseController
State = pState
Database = pState.Database
InitializeModels(pState)
+ ActionService = New ActionService(pState)
End Sub
Private Sub InitializeModels(pState As State)
@@ -39,6 +42,15 @@ Public MustInherit Class BaseController
Return True
End If
+ Return ActionService.DeleteEnvelope(pEnvelope)
+
+ End Function
+
+ Public Function DeleteEnvelope_Old(pEnvelope As Envelope) As Boolean
+ If pEnvelope Is Nothing Then
+ Return True
+ End If
+
Dim oConnection As SqlConnection = Database.GetConnection()
Dim oTransaction As SqlTransaction = oConnection.BeginTransaction()
diff --git a/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb b/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb
index a544855e..c2cab334 100644
--- a/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb
+++ b/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb
@@ -9,6 +9,7 @@ Public Class EnvelopeEditorController
Inherits BaseController
Public ReadOnly Envelope As Envelope = Nothing
+ Public ReadOnly EmailService As EmailService
Public ReadOnly Thumbnail As Thumbnail
@@ -17,6 +18,7 @@ Public Class EnvelopeEditorController
Envelope = CreateEnvelope()
Thumbnail = New Thumbnail(pState.LogConfig)
+ EmailService = New EmailService(pState)
End Sub
Public Sub New(pState As State, pEnvelope As Envelope)
@@ -27,56 +29,36 @@ Public Class EnvelopeEditorController
Envelope.Receivers = ReceiverModel.ListEnvelopeReceivers(pEnvelope.Id).ToList()
Thumbnail = New Thumbnail(pState.LogConfig)
+ EmailService = New EmailService(pState)
End Sub
#Region "Public"
Public Function SendEnvelope() As Boolean
- For Each receiverItem As EnvelopeReceiver In Envelope.Receivers
- If receiverItem.Signature Is Nothing Then
- Logger.Warn("Signature for Receiver is empty. Aborting.")
+ For Each receiverItem As EnvelopeReceiver In Envelope.Receivers
+ If EmailService.SendInitialEmail(receiverItem.Id, Envelope.Id) = False Then
+ Logger.Warn("Email could not be sent.")
Return False
End If
-
- Dim oEmailData As New EmailData(Envelope, receiverItem) With
- {
- .SignatureLink = Helpers.GetEnvelopeURL(State.DbConfig.SignatureHost, Envelope.Uuid, receiverItem.Signature)
- }
-
- Dim oTemplate As New EmailTemplate()
- oTemplate.FillDocumentReceivedEmailBody(oEmailData)
-
- If EmailModel.Insert(oEmailData) = False Then
- Logger.Error("EMail data could not be inserted.")
- Dim oResult As Boolean = False
- End If
-
Next
-
- If EnvelopeModel.Send(Envelope) Then
-
- Dim newHistoryEntry As New EnvelopeHistoryEntry With {
+ Dim newHistoryEntry As New EnvelopeHistoryEntry With {
.EnvelopeId = Envelope.Id,
- .ActionType = EnvelopeHistoryActionType.Sent,
+ .Status = EnvelopeStatus.EnvelopeQueued,
.UserReference = Envelope.User.Email
}
- If HistoryModel.Insert(newHistoryEntry) Then
- 'TODO: Send email to History
- Return True
- Else
- Logger.Warn("History Entry could not be created!")
- Return False
- End If
+ If HistoryModel.Insert(newHistoryEntry) Then
+ Return True
Else
- Logger.Warn("Envelope could not be updated!")
+ Logger.Warn("History Entry could not be created!")
Return False
End If
+
End Function
- Public Function ValidateEnvelopeForSending() As List(Of String)
- Dim oEnvelopeErrors = Envelope.Validate()
+ Public Function ValidateEnvelopeForSending(pErrors As List(Of String)) As List(Of String)
+ Dim oEnvelopeErrors = pErrors
If ElementModel.ElementsExist(Envelope.Id) = False Then
oEnvelopeErrors.Add(Resources.Envelope.Missing_Elements)
@@ -105,7 +87,7 @@ Public Class EnvelopeEditorController
Dim newHistoryEntry As New EnvelopeHistoryEntry With {
.EnvelopeId = oEnvelope.Id,
- .ActionType = EnvelopeHistoryActionType.Created,
+ .Status = EnvelopeStatus.EnvelopeCreated,
.UserReference = oEnvelope.User.Email
}
@@ -117,12 +99,38 @@ Public Class EnvelopeEditorController
End If
End Function
+ Public Function SaveReceivers(pEnvelope As Envelope, pReceiversFromGrid As List(Of EnvelopeReceiver)) As Boolean
+ Dim oExistingReceivers As List(Of EnvelopeReceiver) = ReceiverModel.ListReceivers(pReceiversFromGrid).ToList()
+ Dim oExistingAddresses = oExistingReceivers.Select(Function(r) r.Email)
+ Dim oNewReceivers = pReceiversFromGrid.Where(Function(r) Not oExistingAddresses.Contains(r.Email)).ToList()
+
+ If CreateNewReceivers(oNewReceivers) = False Then
+ Return False
+ End If
+
+ Dim oAllReceivers As List(Of EnvelopeReceiver) = ReceiverModel.ListReceivers(pReceiversFromGrid).ToList()
+
+ pEnvelope.Receivers.Clear()
+
+ For Each oReceiver In pReceiversFromGrid
+ Dim oDbReceiver = oAllReceivers.Where(Function(r) r.Email = oReceiver.Email).SingleOrDefault()
+ If oDbReceiver IsNot Nothing Then
+ oReceiver.Id = oDbReceiver.Id
+ oReceiver.Signature = oDbReceiver.Signature
+ End If
+
+ pEnvelope.Receivers.Add(oReceiver)
+ Next
+
+ Return True
+ End Function
+
Public Function SaveEnvelope() As Boolean
Dim oConnection = Database.GetConnection()
Dim oTransaction = oConnection.BeginTransaction(IsolationLevel.ReadUncommitted)
Try
- Envelope.Status = EnvelopeStatus.Saved
+ Envelope.Status = EnvelopeStatus.EnvelopeSaved
If SaveEnvelopeDocumentsToFilesystem(Envelope) = False Then
Throw New ApplicationException
@@ -152,18 +160,6 @@ Public Class EnvelopeEditorController
End Try
End Function
- Public Function CleanupEnvelope() As Boolean
- If Envelope Is Nothing Then
- Return True
- End If
-
- If Envelope.Status = Common.Constants.EnvelopeStatus.Created Then
- Return DeleteEnvelope(Envelope)
- Else
- Return True
- End If
- End Function
-
Public Function CreateDocument(pDocumentFilePath As String) As EnvelopeDocument
Try
Dim oFileInfo = New FileInfo(pDocumentFilePath)
@@ -270,15 +266,8 @@ Public Class EnvelopeEditorController
End Try
End Function
- Public Function CreateEnvelopeReceivers(pCurrentReceivers As List(Of EnvelopeReceiver)) As Boolean
- Dim oExistingReceivers As List(Of EnvelopeReceiver) = ReceiverModel.ListReceivers(pCurrentReceivers).ToList()
- Dim oExistingAddresses = oExistingReceivers.Select(Function(r) r.Email)
-
- ' Neue Empfänger
- Dim oNewReceivers = pCurrentReceivers.
- Where(Function(r) Not oExistingAddresses.Contains(r.Email)).ToList()
-
- If oNewReceivers.Count = 0 Then
+ Public Function CreateNewReceivers(pNewReceivers As List(Of EnvelopeReceiver)) As Boolean
+ If pNewReceivers.Count = 0 Then
Return True
End If
@@ -286,15 +275,12 @@ Public Class EnvelopeEditorController
Dim oTransaction = oConnection.BeginTransaction()
Try
- If InsertReceivers(oNewReceivers, oTransaction) = False Then
+ If InsertReceivers(pNewReceivers, oTransaction) = False Then
Throw New ApplicationException("Could not insert receivers!")
End If
oTransaction.Commit()
- ' Empfänger neu aus der Datenbank laden
- Envelope.Receivers = ReceiverModel.ListReceivers(pCurrentReceivers).ToList()
-
Return True
Catch ex As Exception
Logger.Error(ex)
diff --git a/EnvelopeGenerator.Form/frmEnvelopeEditor.vb b/EnvelopeGenerator.Form/frmEnvelopeEditor.vb
index 2b45c937..a21f62d2 100644
--- a/EnvelopeGenerator.Form/frmEnvelopeEditor.vb
+++ b/EnvelopeGenerator.Form/frmEnvelopeEditor.vb
@@ -4,6 +4,7 @@ Imports DevExpress.Utils.Svg
Imports DevExpress.XtraEditors
Imports DevExpress.XtraGrid
Imports DevExpress.XtraGrid.Views.Grid
+Imports DevExpress.XtraPrinting.Native
Imports DevExpress.XtraSplashScreen
Imports DigitalData.Modules.Logging
Imports EnvelopeGenerator.Common
@@ -70,7 +71,7 @@ Partial Public Class frmEnvelopeEditor
End If
Next
- If Envelope.Status = Constants.EnvelopeStatus.Sent Then
+ If Envelope.Status = Constants.EnvelopeStatus.EnvelopeSent Then
' TODO - Nach Testen
' SetFormReadonly()
End If
@@ -95,10 +96,6 @@ Partial Public Class frmEnvelopeEditor
ViewDocuments.OptionsBehavior.ReadOnly = True
End Sub
- Private Sub frmEnvelopeEditor_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
- Controller.CleanupEnvelope()
- End Sub
-
Private Sub btnDeleteFile_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnDeleteFile.ItemClick
If ViewDocuments.GetSelectedRows().Count > 0 Then
Dim oDocument As EnvelopeDocument = DirectCast(ViewDocuments.GetFocusedRow(), EnvelopeDocument)
@@ -133,7 +130,7 @@ Partial Public Class frmEnvelopeEditor
Where(Function(d) d.Filename = oDocument.Filename).
SingleOrDefault(),
.GDPictureKey = oGDPictureKey,
- .Receivers = Receivers.ToList,
+ .Receivers = Controller.Envelope.Receivers.ToList,
.State = State
}
oForm.ShowDialog()
@@ -174,6 +171,37 @@ Partial Public Class frmEnvelopeEditor
Return True
End Function
+ Private Function ValidateEnvelope() As List(Of String)
+ Dim oSubject = GetEditValueFromTextControl(txtSubject)
+ Dim oMessage = GetEditValueFromTextControl(txtMessage)
+
+ Dim oErrors As New List(Of String)
+
+ If String.IsNullOrWhiteSpace(oSubject) Then
+ oErrors.Add(Resources.Envelope.Missing_Subject)
+ End If
+
+ If String.IsNullOrWhiteSpace(oMessage) Then
+ oErrors.Add(Resources.Envelope.Missing_Message)
+ End If
+
+ If Documents.Count = 0 Then
+ oErrors.Add(Resources.Envelope.Missing_Documents)
+ End If
+
+ If Receivers.Count = 0 Then
+ oErrors.Add(Resources.Envelope.Missing_Receivers)
+ End If
+
+ For Each Receiver In Receivers
+ If Helpers.IsValidEmailAddress(Receiver.Email) = False Then
+ oErrors.Add(String.Format(Resources.Envelope.Invalid_Email_Address, Receiver.Name))
+ End If
+ Next
+
+ Return oErrors
+ End Function
+
Private Function SaveEnvelope(pWithValidation As Boolean) As Boolean
Dim oSubject = GetEditValueFromTextControl(txtSubject)
Dim oMessage = GetEditValueFromTextControl(txtMessage)
@@ -181,20 +209,25 @@ Partial Public Class frmEnvelopeEditor
' Ensure all receivers are saved
ViewReceivers.CloseEditor()
- Dim oEnvelope = Controller.Envelope
- oEnvelope.Subject = oSubject
- oEnvelope.Message = oMessage
- oEnvelope.Documents = Documents.ToList
-
If pWithValidation = True Then
- Dim oErrors = oEnvelope.Validate()
+ Dim oErrors = ValidateEnvelope()
If oErrors.Any Then
ShowValidationErrors(Resources.Envelope.Errors_when_saving_the_envelope, oErrors)
Return False
End If
End If
- If Controller.CreateEnvelopeReceivers(Receivers.ToList) = False Then
+ Dim oEnvelope = Controller.Envelope
+ oEnvelope.Subject = oSubject
+ oEnvelope.Message = oMessage
+ oEnvelope.Documents = Documents.ToList
+
+
+ 'oEnvelope.Receivers = Receivers.ToList
+
+
+
+ If Controller.SaveReceivers(oEnvelope, Receivers.ToList) = False Then
MsgBox(Resources.Envelope.Error_when_saving_the_recipients, MsgBoxStyle.Critical, Text)
Return False
End If
@@ -249,7 +282,7 @@ Partial Public Class frmEnvelopeEditor
End Sub
Private Sub btnSendEnvelope_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnSendEnvelope.ItemClick
- If Controller.Envelope.Status = Constants.EnvelopeStatus.Sent Then
+ If Controller.Envelope.Status = Constants.EnvelopeStatus.EnvelopeSent Then
MsgBox(Resources.Envelope.Envelope_already_sent, MsgBoxStyle.Information, Text)
Exit Sub
End If
@@ -258,7 +291,9 @@ Partial Public Class frmEnvelopeEditor
Exit Sub
End If
- Dim oErrors = Controller.ValidateEnvelopeForSending()
+ Dim oErrors = ValidateEnvelope()
+ oErrors = Controller.ValidateEnvelopeForSending(oErrors)
+
If oErrors.Any() Then
ShowValidationErrors(Resources.Envelope.Error_sending_the_envelope, oErrors)
Exit Sub
diff --git a/EnvelopeGenerator.Form/frmMain.resx b/EnvelopeGenerator.Form/frmMain.resx
index a0c46884..e77b0599 100644
--- a/EnvelopeGenerator.Form/frmMain.resx
+++ b/EnvelopeGenerator.Form/frmMain.resx
@@ -298,10 +298,10 @@
1088, 158
- 0, 657
+ 0, 659
- 1088, 24
+ 1088, 22
RibbonStatusBar
@@ -328,7 +328,7 @@
2
- 1086, 294
+ 1086, 415
2
@@ -346,7 +346,7 @@
0
- 1086, 294
+ 1086, 415
Offene Umschläge
@@ -436,7 +436,7 @@
112
- 1086, 413
+ 1086, 415
3
@@ -454,7 +454,7 @@
0
- 1086, 413
+ 1086, 415
Abgeschlossene Umschläge
@@ -514,7 +514,7 @@
1
- 1088, 499
+ 1088, 501
5
diff --git a/EnvelopeGenerator.Web/Controllers/EnvelopeController.cs b/EnvelopeGenerator.Web/Controllers/EnvelopeController.cs
index 58753a5b..56d57eae 100644
--- a/EnvelopeGenerator.Web/Controllers/EnvelopeController.cs
+++ b/EnvelopeGenerator.Web/Controllers/EnvelopeController.cs
@@ -9,10 +9,10 @@ namespace EnvelopeGenerator.Web.Controllers
private readonly EnvelopeService envelopeService;
private readonly EmailService emailService;
- public EnvelopeController(DatabaseService database, LoggingService logging, EnvelopeService envelope, EmailService email) : base(database, logging)
+ public EnvelopeController(DatabaseService database, LoggingService logging, EnvelopeService envelope) : base(database, logging)
{
envelopeService = envelope;
- emailService = email;
+ emailService = new(state);
}
[HttpGet]
@@ -62,7 +62,7 @@ namespace EnvelopeGenerator.Web.Controllers
envelopeService.InsertHistoryEntrySigned(response);
- SendSignedEmail(response);
+ emailService.SendSignedEmail(response.Receiver.Id, response.Envelope.Id);
return Ok();
}
@@ -71,18 +71,5 @@ namespace EnvelopeGenerator.Web.Controllers
return ErrorResponse(e);
}
}
-
- public bool SendSignedEmail(EnvelopeResponse response)
- {
- EmailTemplate template = new();
- EmailData emailData = new(response.Envelope, response.Receiver)
- {
- SignatureLink = "",
- };
-
- template.FillDocumentSignedEmailBody(emailData);
-
- return emailService.SendEmail(emailData);
- }
}
}
diff --git a/EnvelopeGenerator.Web/Controllers/HistoryController.cs b/EnvelopeGenerator.Web/Controllers/HistoryController.cs
index c0a0d3f7..604b2540 100644
--- a/EnvelopeGenerator.Web/Controllers/HistoryController.cs
+++ b/EnvelopeGenerator.Web/Controllers/HistoryController.cs
@@ -5,11 +5,6 @@ using static EnvelopeGenerator.Common.Constants;
namespace EnvelopeGenerator.Web.Controllers
{
- public class ActionObject
- {
- public int ActionType { get; set; }
- }
-
public class HistoryController : BaseController
{
private readonly EnvelopeService envelopeService;
@@ -21,7 +16,7 @@ namespace EnvelopeGenerator.Web.Controllers
[HttpPost]
[Route("api/history/{envelopeKey}")]
- public IActionResult Get(string envelopeKey, [FromBody] ActionObject action)
+ public IActionResult Get(string envelopeKey)
{
try
{
@@ -30,12 +25,11 @@ namespace EnvelopeGenerator.Web.Controllers
// Validate Envelope Key and load envelope
envelopeService.EnsureValidEnvelopeKey(envelopeKey);
EnvelopeResponse response = envelopeService.LoadEnvelope(envelopeKey);
- EnvelopeHistoryActionType actionType = (EnvelopeHistoryActionType)action.ActionType;
envelopeService.InsertHistoryEntry(new EnvelopeHistoryEntry()
{
ActionDate = DateTime.Now,
- ActionType = actionType,
+ Status = EnvelopeStatus.DocumentOpened,
EnvelopeId = response.Envelope.Id,
UserReference = response.Receiver.Email
});
diff --git a/EnvelopeGenerator.Web/Program.cs b/EnvelopeGenerator.Web/Program.cs
index 6a7ccd53..6c896479 100644
--- a/EnvelopeGenerator.Web/Program.cs
+++ b/EnvelopeGenerator.Web/Program.cs
@@ -11,7 +11,6 @@ namespace EnvelopeGenerator.Web
// Add base services
builder.Services.AddSingleton();
builder.Services.AddTransient();
- builder.Services.AddTransient();
// Add higher order services
builder.Services.AddSingleton();
diff --git a/EnvelopeGenerator.Web/Services/EmailService.cs b/EnvelopeGenerator.Web/Services/EmailService.cs
deleted file mode 100644
index 2a9506d3..00000000
--- a/EnvelopeGenerator.Web/Services/EmailService.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using EnvelopeGenerator.Common;
-
-namespace EnvelopeGenerator.Web.Services
-{
- public class EmailService : BaseService
- {
- private ReceiverModel receiverModel;
- private EnvelopeModel envelopeModel;
- private HistoryModel historyModel;
- private DocumentModel documentModel;
- private DocumentStatusModel documentStatusModel;
- private EmailModel emailModel;
-
- public EmailService(IConfiguration Config, LoggingService Logging, DatabaseService database) : base(Config, Logging)
- {
- logger = Logging.LogConfig.GetLogger();
-
- if (database.Models == null)
- {
- throw new ArgumentNullException("Models not loaded.");
- }
-
- receiverModel = database.Models.receiverModel;
- envelopeModel = database.Models.envelopeModel;
- historyModel = database.Models.historyModel;
- documentModel = database.Models.documentModel;
- documentStatusModel = database.Models.documentStatusModel;
- emailModel = database.Models.emailModel;
- }
-
- public bool SendEmail(EmailData emailData)
- {
- return emailModel.Insert(emailData);
- }
-
-
-}
-}
diff --git a/EnvelopeGenerator.Web/Services/EnvelopeService.cs b/EnvelopeGenerator.Web/Services/EnvelopeService.cs
index 82a654c3..0ece8ac4 100644
--- a/EnvelopeGenerator.Web/Services/EnvelopeService.cs
+++ b/EnvelopeGenerator.Web/Services/EnvelopeService.cs
@@ -111,7 +111,7 @@ namespace EnvelopeGenerator.Web.Services
return historyModel.Insert(new EnvelopeHistoryEntry()
{
ActionDate = DateTime.Now,
- ActionType = EnvelopeHistoryActionType.Signed,
+ Status = EnvelopeStatus.DocumentSigned,
EnvelopeId = response.Envelope.Id,
UserReference = response.Receiver.Email
});
diff --git a/EnvelopeGenerator.Web/wwwroot/js/app.js b/EnvelopeGenerator.Web/wwwroot/js/app.js
index b6e8a447..a97b59c1 100644
--- a/EnvelopeGenerator.Web/wwwroot/js/app.js
+++ b/EnvelopeGenerator.Web/wwwroot/js/app.js
@@ -90,7 +90,7 @@ class App {
)
const createdAnnotations = await this.Instance.create(annotations)
- await this.Network.postHistory(this.envelopeKey, ActionType.Seen)
+ await this.Network.postHistory(this.envelopeKey)
} catch (e) {
console.error(e)
}
diff --git a/EnvelopeGenerator.Web/wwwroot/js/network.js b/EnvelopeGenerator.Web/wwwroot/js/network.js
index dd0cd609..2a4ccb42 100644
--- a/EnvelopeGenerator.Web/wwwroot/js/network.js
+++ b/EnvelopeGenerator.Web/wwwroot/js/network.js
@@ -32,20 +32,16 @@
})
}
- postHistory(envelopeKey, actionType) {
+ postHistory(envelopeKey) {
const url = `/api/history/${envelopeKey}`
- const data = {
- actionType: actionType,
- }
-
const options = {
credentials: 'include',
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=utf-8',
},
- body: JSON.stringify(data),
+ body: JSON.stringify({}),
}
console.debug('PostHistory/Calling url: ' + url)