Imports DigitalData.Modules.Base Imports DigitalData.Modules.Database Imports EnvelopeGenerator.Common Imports GdPicture14.Annotations Public Class FieldEditorController Inherits BaseClass Private ReadOnly ElementModel As ElementModel Private ReadOnly Database As MSSQLServer Private ReadOnly Document As EnvelopeDocument Public Property Elements As New List(Of EnvelopeDocumentElement) Public Class ElementInfo Public ReceiverId As Integer Public Page As Integer Public Guid As Integer End Class Public Sub New(pState As State, pDocument As EnvelopeDocument) MyBase.New(pState.LogConfig) Database = pState.Database Document = pDocument ElementModel = New ElementModel(pState) End Sub Public Function GetElementInfo(pAnnotationTag As String) As ElementInfo Dim oTag As String() = pAnnotationTag.Split("|"c) Dim oReceiverId = Integer.Parse(oTag(0)) Dim oPage = Integer.Parse(oTag(1)) Dim oGuid = Integer.Parse(oTag(2)) Return New ElementInfo With { .Guid = oGuid, .Page = oPage, .ReceiverId = oReceiverId } End Function Private Function GetElementByPosition(pAnnotation As AnnotationStickyNote, pPage As Integer, pReceiverId As Integer) As EnvelopeDocumentElement Dim oElement = Elements. Where(Function(e) Return e.Left = CSng(Math.Round(pAnnotation.Left, 5)) And e.Top = CSng(Math.Round(pAnnotation.Top, 5)) And e.Page = pPage And e.ReceiverId = pReceiverId End Function).SingleOrDefault() Return oElement End Function Private Function GetElementByGuid(pGuid As Integer) As EnvelopeDocumentElement Dim oElement = Elements.Where(Function(e) pGuid = e.Id).SingleOrDefault() Return oElement End Function Public Function GetElement(pAnnotation As AnnotationStickyNote) As EnvelopeDocumentElement Dim oInfo = GetElementInfo(pAnnotation.Tag) If oInfo.Guid = -1 Then Return GetElementByPosition(pAnnotation, oInfo.Page, oInfo.ReceiverId) Else Return GetElementByGuid(oInfo.Guid) End If End Function Public Sub AddOrUpdateElement(pAnnotation As AnnotationStickyNote) Dim oElement = GetElement(pAnnotation) If oElement IsNot Nothing Then oElement.Height = pAnnotation.Height oElement.Width = pAnnotation.Width oElement.X = pAnnotation.Left oElement.Y = pAnnotation.Top Else Dim oInfo = GetElementInfo(pAnnotation.Tag) Elements.Add(New EnvelopeDocumentElement() With { .ElementType = Common.Constants.ElementType.Signature.ToString, .Height = pAnnotation.Height, .Width = pAnnotation.Width, .X = pAnnotation.Left, .Y = pAnnotation.Top, .DocumentId = Document.Id, .ReceiverId = oInfo.ReceiverId, .Page = oInfo.Page }) End If End Sub Public Function ClearElements(pPage As Integer, pReceiverId As Integer) As IEnumerable(Of EnvelopeDocumentElement) Return Elements. Where(Function(e) e.Page <> pPage And e.ReceiverId <> pReceiverId). ToList() End Function Public Function LoadElements() As Boolean Elements = ElementModel.List(Document.Id) If Elements Is Nothing Then Return False Else Return True End If End Function Public Function SaveElements(pReceiverId As Integer) As Boolean Return Elements. Where(Function(e) e.ReceiverId = pReceiverId). Select(AddressOf SaveElement). All(Function(pResult) pResult = True) End Function Public Function SaveElement(pElement As EnvelopeDocumentElement) As Boolean Try If pElement.Id > 0 Then Return ElementModel.Update(pElement) Else Return ElementModel.Insert(pElement) End If Catch ex As Exception Logger.Error(ex) Return False End Try End Function Public Function DeleteElement(pElement As EnvelopeDocumentElement) As Boolean Try ' Element aus Datenbank löschen If ElementModel.DeleteElement(pElement) Then Dim oElement = New List(Of EnvelopeDocumentElement)() From {pElement} Elements = Elements.Except(oElement).ToList() Return True Else Logger.Error("Element [{0}] could not be deleted!", pElement.Id) Return False End If Catch ex As Exception Logger.Error(ex) Return False End Try End Function End Class