diff --git a/EnvelopeGenerator.Form/Constants.vb b/EnvelopeGenerator.Form/Constants.vb
index 41e1ab33..c25d31cc 100644
--- a/EnvelopeGenerator.Form/Constants.vb
+++ b/EnvelopeGenerator.Form/Constants.vb
@@ -1,7 +1,16 @@
Public Class Constants
Public Enum EnvelopeStatus
- Created
+ Created = 0
+ Saved = 1
+ End Enum
+
+ Public Enum ElementType
+ Signature = 0
+ End Enum
+
+ Public Enum ElementStatus
+ Created = 0
End Enum
End Class
diff --git a/EnvelopeGenerator.Form/Controllers/EnvelopeController.vb b/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb
similarity index 69%
rename from EnvelopeGenerator.Form/Controllers/EnvelopeController.vb
rename to EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb
index c4dc2233..60913d64 100644
--- a/EnvelopeGenerator.Form/Controllers/EnvelopeController.vb
+++ b/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb
@@ -1,69 +1,60 @@
-Imports System.Data.SqlClient
+Imports System.Data.Common
+Imports System.Data.SqlClient
+Imports System.Runtime.Remoting.Messaging
Imports DigitalData.Modules.Base
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Logging
+Imports EnvelopeGenerator.Form.My.Resources
-Public Class EnvelopeController
+Public Class EnvelopeEditorController
Inherits BaseClass
Private ReadOnly Database As MSSQLServer
- Private Envelope As Envelope = Nothing
+ Private ReadOnly State As State = Nothing
+ Private ReadOnly EnvelopeModel As EnvelopeModel
+ Public ReadOnly Envelope As Envelope = Nothing
Public Sub New(pState As State)
MyBase.New(pState.LogConfig)
Database = pState.Database
+ State = pState
+
+ EnvelopeModel = New EnvelopeModel(pState)
+ Envelope = CreateEnvelope()
End Sub
#Region "Public"
+ Public Function CreateEnvelope() As Envelope
+ Dim oEnvelope As New Envelope(State.UserId)
+ If EnvelopeModel.Insert(oEnvelope) Then
+ Return oEnvelope
+ Else
+ Return Nothing
+ End If
+ End Function
+
Public Function SaveEnvelope(pEnvelope As Envelope) As Boolean
Dim oConnection = Database.GetConnection()
Dim oTransaction = oConnection.BeginTransaction(IsolationLevel.ReadUncommitted)
Try
- If pEnvelope.Id > 0 Then
+ pEnvelope.Status = Constants.EnvelopeStatus.Saved
+ If EnvelopeModel.Update(pEnvelope, oTransaction) = False Then
+ Throw New ApplicationException
+ End If
- Dim oSql = "UPDATE [dbo].[TBSIG_ENVELOPE] SET [SUBJECT] = @SUBJECT, [MESSAGE] = @MESSAGE, [ENVELOPE_UUID] = @UUID WHERE GUID = @ID AND USER_ID = @USER_ID"
- Dim oCommand As New SqlCommand(oSql)
- oCommand.Parameters.Add("SUBJECT", SqlDbType.NVarChar).Value = pEnvelope.Subject
- oCommand.Parameters.Add("MESSAGE", SqlDbType.NVarChar).Value = pEnvelope.Message
- oCommand.Parameters.Add("UUID", SqlDbType.NVarChar).Value = pEnvelope.Uuid
- oCommand.Parameters.Add("ID", SqlDbType.Int).Value = pEnvelope.Id
- oCommand.Parameters.Add("USER_ID", SqlDbType.Int).Value = pEnvelope.UserId
+ If SaveEnvelopeReceivers(pEnvelope, oTransaction) = False Then
+ Throw New ApplicationException
+ End If
- Dim oResult = Database.ExecuteNonQueryWithConnectionObject(oCommand, oConnection, MSSQLServer.TransactionMode.ExternalTransaction, oTransaction)
- If oResult = False Then
- Throw New ApplicationException
- End If
- Else
-
- Dim oSql = "INSERT INTO [dbo].[TBSIG_ENVELOPE] (SUBJECT, MESSAGE, ENVELOPE_UUID, STATUS, USER_ID) VALUES (@SUBJECT, @MESSAGE, @UUID, @STATUS, @USER_ID)"
- Dim oCommand As New SqlCommand(oSql)
- oCommand.Parameters.Add("SUBJECT", SqlDbType.NVarChar).Value = pEnvelope.Subject
- oCommand.Parameters.Add("MESSAGE", SqlDbType.NVarChar).Value = pEnvelope.Message
- oCommand.Parameters.Add("UUID", SqlDbType.NVarChar).Value = pEnvelope.Uuid
- oCommand.Parameters.Add("STATUS", SqlDbType.NVarChar).Value = pEnvelope.Status.ToString()
- oCommand.Parameters.Add("USER_ID", SqlDbType.Int).Value = pEnvelope.UserId
-
- If Database.ExecuteNonQuery(oCommand, oTransaction) = False Then
- Throw New ApplicationException
- End If
-
- pEnvelope.Id = GetEnvelopeId(pEnvelope.UserId, oTransaction)
-
- If SaveEnvelopeReceivers(pEnvelope, oTransaction) = False Then
- Throw New ApplicationException
- End If
-
- If SaveEnvelopeDocuments(pEnvelope, oTransaction) = False Then
- Throw New ApplicationException
- End If
+ If SaveEnvelopeDocuments(pEnvelope, oTransaction) = False Then
+ Throw New ApplicationException
End If
oTransaction.Commit()
- Envelope = pEnvelope
-
Return True
+
Catch ex As Exception
Logger.Error(ex)
oTransaction.Rollback()
@@ -72,11 +63,17 @@ Public Class EnvelopeController
End Try
End Function
- Public Function DeleteDocument(pDocument As EnvelopeFile) As Boolean
- If Envelope Is Nothing Then
- Return False
- End If
+ Public Function CleanupEnvelope() As Boolean
+ If Envelope.Status = Constants.EnvelopeStatus.Created Then
+ 'TODO: Delete Documents and Receivers and elements
+ Return EnvelopeModel.Delete(Envelope)
+ Else
+ Return True
+ End If
+ End Function
+
+ Public Function DeleteDocument(pDocument As EnvelopeDocument) As Boolean
Dim oSql = "DELETE FROM [dbo].[TBSIG_ENVELOPE_DOCUMENT] WHERE FILENAME = @FILENAME AND ENVELOPE_ID = @ENVELOPE_ID"
Dim oCommand As New SqlCommand(oSql)
oCommand.Parameters.Add("FILENAME", SqlDbType.NVarChar).Value = pDocument.Filename
@@ -89,6 +86,7 @@ Public Class EnvelopeController
Private Function SaveEnvelopeDocuments(pEnvelope As Envelope, pTransaction As SqlTransaction) As Boolean
Try
Return pEnvelope.Documents.
+ Where(Function(d) d.Id = 0).
Select(Function(d) InsertDocument(pEnvelope, d, pTransaction)).
All(Function(pResult) pResult = True)
@@ -98,7 +96,7 @@ Public Class EnvelopeController
End Try
End Function
- Private Function InsertDocument(pEnvelope As Envelope, pDocument As EnvelopeFile, pTransaction As SqlTransaction) As Boolean
+ Private Function InsertDocument(pEnvelope As Envelope, pDocument As EnvelopeDocument, pTransaction As SqlTransaction) As Boolean
Dim oSql = "INSERT INTO [dbo].[TBSIG_ENVELOPE_DOCUMENT]
([FILENAME]
,[FILEPATH]
@@ -113,9 +111,13 @@ Public Class EnvelopeController
oCommand.Parameters.Add("FILEPATH", SqlDbType.NVarChar).Value = pDocument.Filepath
oCommand.Parameters.Add("ENVELOPE_ID", SqlDbType.Int).Value = pEnvelope.Id
- pDocument.EnvelopeId = pEnvelope.Id
-
- Return Database.ExecuteNonQuery(oCommand, pTransaction)
+ If Database.ExecuteNonQuery(oCommand, pTransaction) Then
+ pDocument.EnvelopeId = pEnvelope.Id
+ pDocument.Id = GetDocumentId(pDocument.Filename, pEnvelope, pTransaction)
+ Return True
+ Else
+ Return False
+ End If
End Function
Private Function SaveEnvelopeReceivers(pEnvelope As Envelope, pTransaction As SqlTransaction) As Boolean
@@ -139,7 +141,7 @@ Public Class EnvelopeController
End Try
End Function
- Private Function UpdateReceivers(pReceivers As List(Of Receiver), pTransaction As SqlTransaction) As Boolean
+ Private Function UpdateReceivers(pReceivers As List(Of EnvelopeReceiver), pTransaction As SqlTransaction) As Boolean
Try
Return pReceivers.
Select(Function(r) UpdateReceiver(r, pTransaction)).
@@ -162,7 +164,7 @@ Public Class EnvelopeController
End Function
- Private Function AssignReceiver(pEnvelope As Envelope, pReceiver As Receiver, pTransaction As SqlTransaction) As Boolean
+ Private Function AssignReceiver(pEnvelope As Envelope, pReceiver As EnvelopeReceiver, pTransaction As SqlTransaction) As Boolean
Dim oSql = "INSERT INTO [dbo].[TBSIG_ENVELOPE_RECEIVER]
([ENVELOPE_ID]
,[RECEIVER_ID]
@@ -186,7 +188,7 @@ Public Class EnvelopeController
Return Database.ExecuteNonQuery(oCommand, pTransaction)
End Function
- Private Function UpdateReceiver(pReceiver As Receiver, pTransaction As SqlTransaction) As Boolean
+ Private Function UpdateReceiver(pReceiver As EnvelopeReceiver, pTransaction As SqlTransaction) As Boolean
If pReceiver.Id = 0 Then
Dim oSql As String = "INSERT INTO [dbo].[TBSIG_RECEIVER]
([NAME]
@@ -234,16 +236,6 @@ Public Class EnvelopeController
End If
End Function
- Private Function GetEnvelopeId(pUserId As Integer, pTransaction As SqlTransaction) As Integer
- Try
- Return Database.GetScalarValue($"SELECT MAX(GUID) FROM TBSIG_ENVELOPE WHERE USER_ID = {pUserId}", pTransaction)
-
- Catch ex As Exception
- Logger.Error(ex)
- Return Nothing
- End Try
- End Function
-
Private Function GetReceiverId(pEmailAddress As String, pTransaction As SqlTransaction) As Integer
Try
Return Database.GetScalarValue($"SELECT GUID FROM TBSIG_RECEIVER WHERE EMAIL_ADDRESS = '{pEmailAddress}'", pTransaction)
@@ -253,4 +245,14 @@ Public Class EnvelopeController
Return Nothing
End Try
End Function
+
+ Private Function GetDocumentId(pFilename As String, pEnvelope As Envelope, pTransaction As SqlTransaction) As Integer
+ Try
+ Return Database.GetScalarValue($"SELECT MAX(GUID) FROM TBSIG_ENVELOPE_DOCUMENT WHERE FILENAME = '{pFilename}' AND ENVELOPE_ID = {pEnvelope.Id}", pTransaction)
+
+ Catch ex As Exception
+ Logger.Error(ex)
+ Return Nothing
+ End Try
+ End Function
End Class
diff --git a/EnvelopeGenerator.Form/Controllers/FieldEditorController.vb b/EnvelopeGenerator.Form/Controllers/FieldEditorController.vb
new file mode 100644
index 00000000..037190af
--- /dev/null
+++ b/EnvelopeGenerator.Form/Controllers/FieldEditorController.vb
@@ -0,0 +1,115 @@
+Imports System.Data.SqlClient
+Imports DevExpress.Utils.CommonDialogs
+Imports DigitalData.Modules.Base
+Imports DigitalData.Modules.Database
+
+Public Class FieldEditorController
+ Inherits BaseClass
+
+ Private ReadOnly Database As MSSQLServer
+ Private Envelope As Envelope = Nothing
+
+ Public Sub New(pState As State)
+ MyBase.New(pState.LogConfig)
+ Database = pState.Database
+ End Sub
+
+ Public Function SaveElements(pElements As IEnumerable(Of EnvelopeDocumentElement)) As Boolean
+ Return pElements.
+ Select(AddressOf SaveElement).
+ All(Function(pResult) pResult = True)
+ End Function
+
+ Public Function SaveElement(pElement As EnvelopeDocumentElement) As Boolean
+ Try
+ If pElement.Id > 0 Then
+ Dim oSql = "UPDATE [dbo].[TBSIG_DOCUMENT_RECEIVER_ELEMENT]
+ SET [POSITION_X] = @POSITION_X
+ ,[POSITION_Y] = @POSITION_Y
+ ,[WIDTH] = @WIDTH
+ ,[HEIGHT] = @HEIGHT
+ WHERE GUID = @GUID"
+
+ Dim oCommand As New SqlCommand(oSql)
+ oCommand.Parameters.Add("GUID", SqlDbType.NVarChar).Value = pElement.Id
+ oCommand.Parameters.Add("POSITION_X", SqlDbType.Int).Value = pElement.X
+ oCommand.Parameters.Add("POSITION_Y", SqlDbType.Int).Value = pElement.Y
+ oCommand.Parameters.Add("WIDTH", SqlDbType.Int).Value = pElement.Width
+ oCommand.Parameters.Add("HEIGHT", SqlDbType.Int).Value = pElement.Height
+
+ Return Database.ExecuteNonQuery(oCommand)
+
+ Else
+ Dim oSql = "INSERT INTO [dbo].[TBSIG_DOCUMENT_RECEIVER_ELEMENT]
+ ([DOCUMENT_ID]
+ ,[RECEIVER_ID]
+ ,[ELEMENT_TYPE]
+ ,[POSITION_X]
+ ,[POSITION_Y]
+ ,[WIDTH]
+ ,[HEIGHT]
+ ,[REQUIRED]
+ ,[READ_ONLY]
+ ,[STATUS]
+ ,[PAGE])
+ VALUES
+ (@DOCUMENT_ID
+ ,@RECEIVER_ID
+ ,@ELEMENT_TYPE
+ ,@POSITION_X
+ ,@POSITION_Y
+ ,@WIDTH
+ ,@HEIGHT
+ ,@REQUIRED
+ ,@READ_ONLY
+ ,@STATUS
+ ,@PAGE)"
+
+ Dim oCommand As New SqlCommand(oSql)
+ oCommand.Parameters.Add("DOCUMENT_ID", SqlDbType.NVarChar).Value = pElement.DocumentId
+ oCommand.Parameters.Add("RECEIVER_ID", SqlDbType.NVarChar).Value = pElement.ReceiverId
+ oCommand.Parameters.Add("ELEMENT_TYPE", SqlDbType.NVarChar).Value = pElement.ElementType
+ oCommand.Parameters.Add("POSITION_X", SqlDbType.Int).Value = pElement.X
+ oCommand.Parameters.Add("POSITION_Y", SqlDbType.Int).Value = pElement.Y
+ oCommand.Parameters.Add("WIDTH", SqlDbType.Int).Value = pElement.Width
+ oCommand.Parameters.Add("HEIGHT", SqlDbType.Int).Value = pElement.Height
+ oCommand.Parameters.Add("REQUIRED", SqlDbType.Bit).Value = pElement.Required
+ oCommand.Parameters.Add("READ_ONLY", SqlDbType.Bit).Value = pElement.ReadOnly
+ oCommand.Parameters.Add("STATUS", SqlDbType.NVarChar).Value = pElement.Status.ToString
+ oCommand.Parameters.Add("PAGE", SqlDbType.Int).Value = pElement.Page
+
+
+ If Database.ExecuteNonQuery(oCommand) Then
+ pElement.Id = GetElementId(pElement)
+ Return True
+ Else
+ Return False
+ End If
+ End If
+ Catch ex As Exception
+ Logger.Error(ex)
+ Return False
+ End Try
+ End Function
+
+ Public Function DeleteElement(pElement As EnvelopeDocumentElement) As Boolean
+ Try
+ Dim oSql = $"DELETE FROM TBSIG_DOCUMENT_RECEIVER_ELEMENT WHERE GUID = {pElement.Id}"
+ Return Database.ExecuteNonQuery(oSql)
+ Catch ex As Exception
+ Logger.Error(ex)
+ Return False
+ End Try
+ End Function
+
+ Private Function GetElementId(pElement As EnvelopeDocumentElement) As Integer
+ Try
+ Return Database.GetScalarValue($"SELECT MAX(GUID) FROM TBSIG_DOCUMENT_RECEIVER_ELEMENT
+ WHERE DOCUMENT_ID = {pElement.DocumentId} AND RECEIVER_ID = {pElement.ReceiverId}")
+
+ Catch ex As Exception
+ Logger.Error(ex)
+ Return Nothing
+ End Try
+ End Function
+End Class
diff --git a/EnvelopeGenerator.Form/Entities/Envelope.vb b/EnvelopeGenerator.Form/Entities/Envelope.vb
index 2bfcd707..7ff24bc5 100644
--- a/EnvelopeGenerator.Form/Entities/Envelope.vb
+++ b/EnvelopeGenerator.Form/Entities/Envelope.vb
@@ -4,14 +4,12 @@
Public Property Message As String
Public Property UserId As Integer
Public Property Uuid As String = Guid.NewGuid.ToString()
- Public Property Status As Constants.EnvelopeStatus = Constants.EnvelopeStatus.Created
+ Public Property Status As Constants.EnvelopeStatus
- Public Property Documents As New List(Of EnvelopeFile)
- Public Property Receivers As New List(Of Receiver)
+ Public Property Documents As New List(Of EnvelopeDocument)
+ Public Property Receivers As New List(Of EnvelopeReceiver)
- Public Sub New(pSubject As String, pMessage As String, pUserId As Integer)
- Subject = pSubject
- Message = pMessage
+ Public Sub New(pUserId As Integer)
UserId = pUserId
End Sub
diff --git a/EnvelopeGenerator.Form/Entities/EnvelopeFile.vb b/EnvelopeGenerator.Form/Entities/EnvelopeDocument.vb
similarity index 85%
rename from EnvelopeGenerator.Form/Entities/EnvelopeFile.vb
rename to EnvelopeGenerator.Form/Entities/EnvelopeDocument.vb
index 8fd01d95..58b30f11 100644
--- a/EnvelopeGenerator.Form/Entities/EnvelopeFile.vb
+++ b/EnvelopeGenerator.Form/Entities/EnvelopeDocument.vb
@@ -1,6 +1,8 @@
Imports System.IO
-Public Class EnvelopeFile
+Public Class EnvelopeDocument
+ Public Property Id As Integer
+
Public Property FileInfo As FileInfo
Public Property EnvelopeId As Integer = 0
diff --git a/EnvelopeGenerator.Form/Entities/EnvelopeDocumentElement.vb b/EnvelopeGenerator.Form/Entities/EnvelopeDocumentElement.vb
new file mode 100644
index 00000000..c3988ca1
--- /dev/null
+++ b/EnvelopeGenerator.Form/Entities/EnvelopeDocumentElement.vb
@@ -0,0 +1,14 @@
+Public Class EnvelopeDocumentElement
+ Public Property Id As Integer = 0
+ Public Property X As Integer
+ Public Property Y As Integer
+ Public Property Width As Integer
+ Public Property Height As Integer
+ Public Property ElementType As String
+ Public Property DocumentId As Integer
+ Public Property ReceiverId As Integer
+ Public Property Required As Boolean = False
+ Public Property [ReadOnly] As Boolean = False
+ Public Property Page As Integer = 1
+ Public Property Status As Constants.ElementStatus = Constants.ElementStatus.Created
+End Class
diff --git a/EnvelopeGenerator.Form/Entities/EnvelopeReceiver.vb b/EnvelopeGenerator.Form/Entities/EnvelopeReceiver.vb
index b2ba743d..3c543e58 100644
--- a/EnvelopeGenerator.Form/Entities/EnvelopeReceiver.vb
+++ b/EnvelopeGenerator.Form/Entities/EnvelopeReceiver.vb
@@ -1,6 +1,6 @@
Imports DigitalData.Modules.Base
-Public Class Receiver
+Public Class EnvelopeReceiver
Public Property Id As Integer
Public Property Name As String
Public Property Company As String = ""
@@ -16,7 +16,4 @@ Public Class Receiver
Public Property Sequence As Integer = 0
Public Property PrivateMessage As String = ""
Public Property AccessCode As String = ""
-
-
-
End Class
diff --git a/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj b/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj
index 1837ff54..b4c830d2 100644
--- a/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj
+++ b/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj
@@ -52,6 +52,9 @@
+
+ ..\..\DDMonorepo\Controls.DocumentViewer\bin\Debug\DigitalData.Controls.DocumentViewer.dll
+
..\..\DDModules\Base\bin\Debug\DigitalData.Modules.Base.dll
@@ -64,6 +67,9 @@
..\..\DDModules\Logging\bin\Debug\DigitalData.Modules.Logging.dll
+
+ D:\ProgramFiles\GdPicture.NET 14\Redist\GdPicture.NET (.NET Framework 4.5)\GdPicture.NET.14.dll
+
..\packages\NLog.5.0.5\lib\net46\NLog.dll
@@ -94,17 +100,25 @@
-
+
+
-
+
+
-
+
Form
-
- frmEditor.vb
+
+ frmEnvelopeEditor.vb
+
+
+ frmFieldEditor.vb
+
+
+ Form
frmMain.vb
@@ -112,6 +126,7 @@
Form
+
True
Application.myapp
@@ -123,8 +138,11 @@
True
Envelope.resx
-
- frmEditor.vb
+
+ frmEnvelopeEditor.vb
+
+
+ frmFieldEditor.vb
frmMain.vb
@@ -165,6 +183,7 @@
Application.Designer.vb
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+ dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAANACAAAC77u/
+ PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+ IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+ MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+ Y2U9InByZXNlcnZlIiBpZD0iTGluZV9Db2xvciIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAw
+ IDAgMzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9
+ CgkuQmx1ZXtmaWxsOiMxMTc3RDc7fQoJLnN0MHtmaWxsOm5vbmU7fQoJLnN0MXtvcGFjaXR5OjAuMjU7
+ fQo8L3N0eWxlPg0KICA8cGF0aCBkPSJNMTcsMTFMNywyMWwtNC00TDEzLDdMMTcsMTF6IE0xOCwxMGwx
+ LjctMS43YzAuNC0wLjQsMC40LTEsMC0xLjNMMTcsNC4zYy0wLjQtMC40LTEtMC40LTEuMywwTDE0LDZM
+ MTgsMTB6ICAgTTIsMTh2NGg0TDIsMTh6IiBjbGFzcz0iQmx1ZSIgLz4NCiAgPHJlY3QgeD0iMCIgeT0i
+ MjQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI4IiByeD0iMCIgcnk9IjAiIGlkPSJJbmRpY2F0b3IiIGNsYXNz
+ PSJzdDAiIC8+DQogIDxnIGNsYXNzPSJzdDEiPg0KICAgIDxwYXRoIGQ9Ik0wLDIzLjlWMzJoMzJ2LTgu
+ MUgweiBNMzAsMzBIMnYtNGgyOFYzMHoiIGNsYXNzPSJCbGFjayIgLz4NCiAgPC9nPg0KPC9zdmc+Cw==
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
+ LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+ dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAMICAAAC77u/
+ PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+ IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+ MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+ Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+ MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzczNzM3NDt9Cgku
+ WWVsbG93e2ZpbGw6I0ZDQjAxQjt9CgkuR3JlZW57ZmlsbDojMTI5QzQ5O30KCS5CbHVle2ZpbGw6IzM4
+ N0NCNzt9CgkuUmVke2ZpbGw6I0QwMjEyNzt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
+ Y2l0eTowLjU7fQoJLnN0MXtvcGFjaXR5OjAuNzU7fQoJLnN0MntvcGFjaXR5OjAuMjU7fQoJLnN0M3tk
+ aXNwbGF5Om5vbmU7ZmlsbDojNzM3Mzc0O30KPC9zdHlsZT4NCiAgPHBhdGggZD0iTTI3LDRoLTN2MTBI
+ OFY0SDVDNC40LDQsNCw0LjQsNCw1djIyYzAsMC42LDAuNCwxLDEsMWgyMmMwLjYsMCwxLTAuNCwxLTFW
+ NUMyOCw0LjQsMjcuNiw0LDI3LDR6IE0yNCwyNEg4di02ICBoMTZWMjR6IE0xMCw0djhoMTBWNEgxMHog
+ TTE0LDEwaC0yVjZoMlYxMHoiIGNsYXNzPSJCbGFjayIgLz4NCjwvc3ZnPgs=
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
+ LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+ dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAD0DAAAC77u/
+ PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+ IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+ MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+ Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+ MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJs
+ YWNre2ZpbGw6IzcyNzI3Mjt9CgkuQmx1ZXtmaWxsOiMxMTc3RDc7fQoJLkdyZWVue2ZpbGw6IzAzOUMy
+ Mzt9CgkuWWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
+ Y2l0eTowLjU7fQoJLnN0MXtvcGFjaXR5OjAuNzU7fQo8L3N0eWxlPg0KICA8ZyBpZD0iRGVsZXRlIj4N
+ CiAgICA8Zz4NCiAgICAgIDxwYXRoIGQ9Ik0xOC44LDE2bDYuOS02LjljMC40LTAuNCwwLjQtMSwwLTEu
+ NGwtMS40LTEuNGMtMC40LTAuNC0xLTAuNC0xLjQsMEwxNiwxMy4yTDkuMSw2LjNjLTAuNC0wLjQtMS0w
+ LjQtMS40LDAgICAgTDYuMyw3LjdjLTAuNCwwLjQtMC40LDEsMCwxLjRsNi45LDYuOWwtNi45LDYuOWMt
+ MC40LDAuNC0wLjQsMSwwLDEuNGwxLjQsMS40YzAuNCwwLjQsMSwwLjQsMS40LDBsNi45LTYuOWw2Ljks
+ Ni45ICAgIGMwLjQsMC40LDEsMC40LDEuNCwwbDEuNC0xLjRjMC40LTAuNCwwLjQtMSwwLTEuNEwxOC44
+ LDE2eiIgY2xhc3M9IlJlZCIgLz4NCiAgICA8L2c+DQogIDwvZz4NCjwvc3ZnPgs=
+
+
+
+ 159, 17
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
+ LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+ dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAKEDAAAC77u/
+ PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+ IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+ MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+ Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+ MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z
+ ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLkdyZWVue2ZpbGw6IzAz
+ OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9Cgkuc3Qwe29wYWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNp
+ dHk6MC41O30KPC9zdHlsZT4NCiAgPGcgaWQ9IlVzZXIiPg0KICAgIDxwYXRoIGQ9Ik0xMCw5LjljLTAu
+ MSwwLjUsMC4yLDAuOSwwLjQsMS40YzAuMiwwLjUtMC4xLDEuNywwLjksMS42YzAsMCwwLDAuMSwwLDAu
+ MmMwLjYsMi4zLDIsNC45LDQuNyw0LjkgICBjMi43LDAsNC4yLTIuNiw0LjctNC45YzAsMCwwLTAuMSww
+ LTAuMWMxLDAuMSwwLjYtMS4xLDAuOS0xLjZjMC4yLTAuNSwwLjQtMC45LDAuMy0xLjRjLTAuMS0wLjQt
+ MC40LTAuNC0wLjUtMC4zICAgYzEuOC00LjktMS4xLTQuNy0xLjEtNC43UzIwLDIsMTQuOCwyQzEwLDIs
+ OS40LDYsMTAuNSw5LjZDMTAuNCw5LjYsMTAuMSw5LjcsMTAsOS45eiIgY2xhc3M9IkJsYWNrIiAvPg0K
+ ICAgIDxwYXRoIGQ9Ik0yMCwxOGMtMC44LDEuNS0yLjEsNC00LDRjLTEuOSwwLTMuMi0yLjUtNC00Yy0y
+ LjMsMy41LTgsMS04LDguNVYzMGgyNHYtMy41QzI4LDE5LjEsMjIuMywyMS40LDIwLDE4eiIgY2xhc3M9
+ IkJsYWNrIiAvPg0KICA8L2c+DQo8L3N2Zz4L
+
+
+
+ 159, 17
+
+
+ 17, 17
+
+
+ 284, 17
+
+
\ No newline at end of file
diff --git a/EnvelopeGenerator.Form/frmFieldEditor.vb b/EnvelopeGenerator.Form/frmFieldEditor.vb
new file mode 100644
index 00000000..59231ee0
--- /dev/null
+++ b/EnvelopeGenerator.Form/frmFieldEditor.vb
@@ -0,0 +1,202 @@
+Imports System.ComponentModel
+Imports System.Text
+Imports DevExpress.XtraBars
+Imports DigitalData.Modules.Logging
+Imports GdPicture14
+Imports GdPicture14.Annotations
+
+Partial Public Class frmFieldEditor
+ Private LogConfig As LogConfig
+ Private Logger As Logger
+
+ Private GDViewer As GdViewer
+ Private Manager As AnnotationManager
+ Private Controller As FieldEditorController
+
+ Public Property Document As EnvelopeDocument = Nothing
+ Public Property GDPictureKey As String = ""
+ Public Property Receivers As List(Of EnvelopeReceiver)
+ Public Property SelectedReceiver As EnvelopeReceiver = Nothing
+ Public Property State As State
+
+ Public Property Fields As New List(Of EnvelopeDocumentElement)
+
+ Public Sub New()
+ InitializeComponent()
+ End Sub
+
+ Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
+ LogConfig = New LogConfig(LogConfig.PathType.CustomPath, Application.StartupPath, CompanyName:="Digital Data", ProductName:="EnvelopeGenerator")
+ Logger = LogConfig.GetLogger()
+
+ If Document Is Nothing Then
+ Throw New ArgumentNullException("Document")
+ End If
+
+ If State Is Nothing Then
+ Throw New ArgumentNullException("State")
+ End If
+
+ If GDPictureKey = "" Then
+ Throw New ArgumentNullException("GDPictureKey")
+ End If
+
+ DocumentViewer1.Init(LogConfig, GDPictureKey)
+ DocumentViewer1.LoadFile(Document.Filepath)
+
+ If DocumentViewer1.PdfViewer IsNot Nothing Then
+ GDViewer = DocumentViewer1.PdfViewer
+ Manager = GDViewer.GetAnnotationManager()
+ Manager.InitFromGdViewer(GDViewer)
+ End If
+
+ SetReceiver(Receivers.First())
+ Dim oItems = Receivers.Select(AddressOf CreateBarItem).ToArray()
+ PopupMenu1.AddItems(oItems)
+
+ Controller = New FieldEditorController(State)
+ End Sub
+
+ Private Function CreateBarItem(pReceiver As EnvelopeReceiver) As BarItem
+ Dim oItem = New BarButtonItem(BarManager1, pReceiver.Name)
+ AddHandler oItem.ItemClick, AddressOf BarItem_Click
+ oItem.Tag = pReceiver
+ Return oItem
+ End Function
+
+ Private Sub BarItem_Click(sender As Object, e As ItemClickEventArgs)
+ Dim oReceiver As EnvelopeReceiver = e.Item.Tag
+ SetReceiver(oReceiver)
+ End Sub
+
+ Private Sub SetReceiver(pReceiver As EnvelopeReceiver)
+ txtReceiver.Caption = pReceiver.Name
+ SelectedReceiver = pReceiver
+ End Sub
+
+ Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick
+ If GDViewer IsNot Nothing Then
+
+ AddHandler GDViewer.BeforeAnnotationAddedByUser, AddressOf Viewer_BeforeAnnotationAddedByUser
+ AddHandler GDViewer.AnnotationAddedByUser, AddressOf Viewer_AnnotationAddedByUser
+
+ GDViewer.AddStickyNoteAnnotationInteractive("SIGNATUR", Color.Black, "Arial", FontStyle.Regular, 10, 1, 0)
+
+
+ End If
+ End Sub
+
+ Private Sub Viewer_AnnotationAddedByUser(AnnotationIdx As Integer)
+ Dim oAnnotation = GDViewer.GetAnnotationFromIdx(AnnotationIdx)
+
+ If TypeOf oAnnotation Is AnnotationStickyNote Then
+ Dim oStickyNote As AnnotationStickyNote = oAnnotation
+ oStickyNote.Width = 1
+ oStickyNote.Height = 1
+
+ ApplyAnnotationStyle(oAnnotation)
+ End If
+
+ oAnnotation.CanRotate = False
+ oAnnotation.CanEdit = False
+ oAnnotation.CanResize = False
+ End Sub
+
+ Private Sub Viewer_BeforeAnnotationAddedByUser(AnnotationIdx As Integer)
+ 'NOOP
+ End Sub
+
+ Private Sub BarButtonItem4_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnSave.ItemClick
+ Dim oAnnotationCount = GDViewer.GetAnnotationCount()
+ Dim oElements As New List(Of EnvelopeDocumentElement)
+
+ ' TODO: Annotationen mit den ElementObjekten verknüpfen, um doppelte Sätze zu verhindern
+
+ For index = 0 To oAnnotationCount - 1
+ Dim oAnnotation As Annotation = GDViewer.GetAnnotationFromIdx(index)
+
+ If TypeOf oAnnotation Is AnnotationStickyNote Then
+ Dim oStickyNote As AnnotationStickyNote = oAnnotation
+
+
+ Dim oWidth = InchToPixel(oStickyNote.Width)
+ Dim oHeight = InchToPixel(oStickyNote.Height)
+ Dim oTop = InchToPixel(oStickyNote.Top)
+ Dim oLeft = InchToPixel(oStickyNote.Left)
+
+ Dim oElement As New EnvelopeDocumentElement() With {
+ .ElementType = Constants.ElementType.Signature.ToString,
+ .Height = oHeight,
+ .Width = oWidth,
+ .X = oLeft,
+ .Y = oTop,
+ .DocumentId = Document.Id,
+ .ReceiverId = SelectedReceiver.Id
+ }
+
+ oElements.Add(oElement)
+ End If
+ Next
+
+ If Not Controller.SaveElements(oElements) Then
+ MsgBox("Element konnten nicht gespeichert werden!", MsgBoxStyle.Critical, Text)
+ End If
+ End Sub
+
+ Private Function InchToPixel(pInch As Single) As Single
+ Return pInch * 96
+ End Function
+
+ Private Function PixelToInch(pPixel As Single) As Single
+ Return pPixel / 96
+ End Function
+
+ Private Sub ApplyAnnotationStyle(ByRef pAnnotation As Annotation)
+ If TypeOf pAnnotation Is AnnotationStickyNote Then
+ Dim oStickyNote As AnnotationStickyNote = pAnnotation
+ oStickyNote.Fill = True
+ oStickyNote.FillColor = Color.LightGoldenrodYellow
+ oStickyNote.Text = "SIGNATUR"
+ oStickyNote.Alignment = StringAlignment.Center
+ oStickyNote.LineAlignment = StringAlignment.Center
+ End If
+ End Sub
+
+
+ Private Sub BarButtonItem3_ItemClick_1(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnDelete.ItemClick
+ Dim oSelected = GDViewer.GetSelectedAnnotationIdx()
+
+ If oSelected = -1 Then
+ Exit Sub
+ End If
+
+ If MsgBox("Wollen Sie die Annotation löschen?", MsgBoxStyle.YesNo Or MsgBoxStyle.Question, Text) = DialogResult.Yes Then
+ GDViewer.DeleteAnnotation(oSelected)
+ End If
+ End Sub
+
+ Private Sub LoadAnnotation()
+ Dim oAnnotation As AnnotationStickyNote = Manager.AddStickyNoteAnnot(0, 0, 0, 0, "SIGNATUR")
+
+
+ If Manager.GetStat() = GdPictureStatus.OK Then
+ oAnnotation.Width = 2
+ oAnnotation.Height = 2
+ oAnnotation.Left = 1
+ oAnnotation.Top = 1
+ oAnnotation.Fill = True
+ oAnnotation.FillColor = Color.DarkRed
+ oAnnotation.Text = "SIGNATUR JUNGE"
+
+
+ If Manager.SaveAnnotationsToPage() = GdPictureStatus.OK Then
+ 'oManager.BurnAnnotationsToPage(True)
+
+ 'GDViewer.ReloadAnnotations()
+ 'GDViewer.Redraw()
+ End If
+ End If
+ End Sub
+End Class
+
+
diff --git a/EnvelopeGenerator.Form/frmMain.vb b/EnvelopeGenerator.Form/frmMain.vb
index ebf5f598..d6822796 100644
--- a/EnvelopeGenerator.Form/frmMain.vb
+++ b/EnvelopeGenerator.Form/frmMain.vb
@@ -37,17 +37,21 @@ Public Class frmMain
End Sub
Private Function GetDatabaseConfig() As DbConfig
- Dim oSql As String = "SELECT TOP 1 * FROM TBSIG_CONFIG"
- Dim oTable As DataTable = Database.GetDatatable(oSql)
- Dim oRow = oTable.Rows.Item(0)
+ Try
+ Dim oSql As String = "SELECT TOP 1 * FROM TBSIG_CONFIG"
+ Dim oTable As DataTable = Database.GetDatatable(oSql)
+ Dim oRow = oTable.Rows.Item(0)
- Return New DbConfig() With {
- .DocumentPath = oRow.ItemEx("DOCUMENT_PATH", "")
- }
+ Return New DbConfig() With {
+ .DocumentPath = oRow.ItemEx("DOCUMENT_PATH", "")
+ }
+ Catch ex As Exception
+ Return New DbConfig()
+ End Try
End Function
Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick
- Dim oForm As New frmEditor() With {
+ Dim oForm As New frmEnvelopeEditor() With {
.State = New State With {
.UserId = UserId,
.Config = ConfigManager.Config,
diff --git a/EnvelopeGenerator.Test/EnvelopeGenerator.Test.vbproj b/EnvelopeGenerator.Test/EnvelopeGenerator.Test.vbproj
index 2bc37e2f..d353a865 100644
--- a/EnvelopeGenerator.Test/EnvelopeGenerator.Test.vbproj
+++ b/EnvelopeGenerator.Test/EnvelopeGenerator.Test.vbproj
@@ -95,19 +95,19 @@
-
+
Form
-
- frmMain.vb
+
+ frmFieldEditor.vb
True
Application.myapp
-
- frmMain.vb
+
+ frmFieldEditor.vb
diff --git a/EnvelopeGenerator.Test/My Project/Application.Designer.vb b/EnvelopeGenerator.Test/My Project/Application.Designer.vb
index d3f0179e..c5971d09 100644
--- a/EnvelopeGenerator.Test/My Project/Application.Designer.vb
+++ b/EnvelopeGenerator.Test/My Project/Application.Designer.vb
@@ -32,7 +32,7 @@ Namespace My
_
Protected Overrides Sub OnCreateMainForm()
- Me.MainForm = Global.EnvelopeGenerator.frmMain
+ Me.MainForm = Global.EnvelopeGenerator.frmFieldEditor
End Sub
End Class
End Namespace
diff --git a/EnvelopeGenerator.Test/frmMain.Designer.vb b/EnvelopeGenerator.Test/frmFieldEditor.Designer.vb
similarity index 99%
rename from EnvelopeGenerator.Test/frmMain.Designer.vb
rename to EnvelopeGenerator.Test/frmFieldEditor.Designer.vb
index e37e4025..38f11731 100644
--- a/EnvelopeGenerator.Test/frmMain.Designer.vb
+++ b/EnvelopeGenerator.Test/frmFieldEditor.Designer.vb
@@ -1,4 +1,4 @@
-Partial Public Class frmMain
+Partial Public Class frmFieldEditor
Inherits DevExpress.XtraBars.Ribbon.RibbonForm
'''
diff --git a/EnvelopeGenerator.Test/frmMain.resx b/EnvelopeGenerator.Test/frmFieldEditor.resx
similarity index 100%
rename from EnvelopeGenerator.Test/frmMain.resx
rename to EnvelopeGenerator.Test/frmFieldEditor.resx
diff --git a/EnvelopeGenerator.Test/frmMain.vb b/EnvelopeGenerator.Test/frmFieldEditor.vb
similarity index 99%
rename from EnvelopeGenerator.Test/frmMain.vb
rename to EnvelopeGenerator.Test/frmFieldEditor.vb
index b88bfe68..213d2e5e 100644
--- a/EnvelopeGenerator.Test/frmMain.vb
+++ b/EnvelopeGenerator.Test/frmFieldEditor.vb
@@ -4,7 +4,7 @@ Imports DigitalData.Modules.Logging
Imports GdPicture14
Imports GdPicture14.Annotations
-Partial Public Class frmMain
+Partial Public Class frmFieldEditor
Private LogConfig As LogConfig
Private Logger As Logger