From 9a3c3c27061ed6b2517213737eeab1f1888022c7 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Mon, 17 Jul 2023 12:59:36 +0200 Subject: [PATCH] 17.07.2023 --- EnvelopeGenerator.Form/Constants.vb | 11 +- ...troller.vb => EnvelopeEditorController.vb} | 110 ++++---- .../Controllers/FieldEditorController.vb | 115 ++++++++ EnvelopeGenerator.Form/Entities/Envelope.vb | 10 +- .../{EnvelopeFile.vb => EnvelopeDocument.vb} | 4 +- .../Entities/EnvelopeDocumentElement.vb | 14 + .../Entities/EnvelopeReceiver.vb | 5 +- .../EnvelopeGenerator.Form.vbproj | 33 ++- .../Models/EnvelopeModel.vb | 79 ++++++ .../My Project/licenses.licx | 8 +- EnvelopeGenerator.Form/frmEditor.vb | 66 ----- ...igner.vb => frmEnvelopeEditor.Designer.vb} | 26 +- ...{frmEditor.resx => frmEnvelopeEditor.resx} | 0 EnvelopeGenerator.Form/frmEnvelopeEditor.vb | 97 +++++++ .../frmFieldEditor.Designer.vb | 254 ++++++++++++++++++ EnvelopeGenerator.Form/frmFieldEditor.resx | 215 +++++++++++++++ EnvelopeGenerator.Form/frmFieldEditor.vb | 202 ++++++++++++++ EnvelopeGenerator.Form/frmMain.vb | 18 +- .../EnvelopeGenerator.Test.vbproj | 10 +- .../My Project/Application.Designer.vb | 2 +- ...Designer.vb => frmFieldEditor.Designer.vb} | 2 +- .../{frmMain.resx => frmFieldEditor.resx} | 0 .../{frmMain.vb => frmFieldEditor.vb} | 2 +- 23 files changed, 1114 insertions(+), 169 deletions(-) rename EnvelopeGenerator.Form/Controllers/{EnvelopeController.vb => EnvelopeEditorController.vb} (69%) create mode 100644 EnvelopeGenerator.Form/Controllers/FieldEditorController.vb rename EnvelopeGenerator.Form/Entities/{EnvelopeFile.vb => EnvelopeDocument.vb} (85%) create mode 100644 EnvelopeGenerator.Form/Entities/EnvelopeDocumentElement.vb create mode 100644 EnvelopeGenerator.Form/Models/EnvelopeModel.vb delete mode 100644 EnvelopeGenerator.Form/frmEditor.vb rename EnvelopeGenerator.Form/{frmEditor.Designer.vb => frmEnvelopeEditor.Designer.vb} (99%) rename EnvelopeGenerator.Form/{frmEditor.resx => frmEnvelopeEditor.resx} (100%) create mode 100644 EnvelopeGenerator.Form/frmEnvelopeEditor.vb create mode 100644 EnvelopeGenerator.Form/frmFieldEditor.Designer.vb create mode 100644 EnvelopeGenerator.Form/frmFieldEditor.resx create mode 100644 EnvelopeGenerator.Form/frmFieldEditor.vb rename EnvelopeGenerator.Test/{frmMain.Designer.vb => frmFieldEditor.Designer.vb} (99%) rename EnvelopeGenerator.Test/{frmMain.resx => frmFieldEditor.resx} (100%) rename EnvelopeGenerator.Test/{frmMain.vb => frmFieldEditor.vb} (99%) 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 - - 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 - - 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) + pEnvelope.Status = Constants.EnvelopeStatus.Saved + If EnvelopeModel.Update(pEnvelope, oTransaction) = False Then + Throw New ApplicationException + End If - If SaveEnvelopeReceivers(pEnvelope, oTransaction) = False Then - Throw New ApplicationException - End If + 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 + 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,9 +236,9 @@ Public Class EnvelopeController End If End Function - Private Function GetEnvelopeId(pUserId As Integer, pTransaction As SqlTransaction) As Integer + Private Function GetReceiverId(pEmailAddress As String, pTransaction As SqlTransaction) As Integer Try - Return Database.GetScalarValue($"SELECT MAX(GUID) FROM TBSIG_ENVELOPE WHERE USER_ID = {pUserId}", pTransaction) + Return Database.GetScalarValue($"SELECT GUID FROM TBSIG_RECEIVER WHERE EMAIL_ADDRESS = '{pEmailAddress}'", pTransaction) Catch ex As Exception Logger.Error(ex) @@ -244,9 +246,9 @@ Public Class EnvelopeController End Try End Function - Private Function GetReceiverId(pEmailAddress As String, pTransaction As SqlTransaction) As Integer + Private Function GetDocumentId(pFilename As String, pEnvelope As Envelope, pTransaction As SqlTransaction) As Integer Try - Return Database.GetScalarValue($"SELECT GUID FROM TBSIG_RECEIVER WHERE EMAIL_ADDRESS = '{pEmailAddress}'", pTransaction) + 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) 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