diff --git a/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb b/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb index 9eba3d45..e809ca72 100644 --- a/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb +++ b/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb @@ -16,6 +16,7 @@ Public Class EnvelopeEditorController Private EnvelopeModel As EnvelopeModel Private DocumentModel As DocumentModel Private ReceiverModel As ReceiverModel + Private ElementModel As ElementModel Public ReadOnly Envelope As Envelope = Nothing @@ -47,6 +48,7 @@ Public Class EnvelopeEditorController EnvelopeModel = New EnvelopeModel(pState) DocumentModel = New DocumentModel(pState) ReceiverModel = New ReceiverModel(pState) + ElementModel = New ElementModel(pState) End Sub #Region "Public" @@ -218,7 +220,7 @@ Public Class EnvelopeEditorController Throw New ArgumentNullException("EnvelopeId") End If - If UpdateReceivers(pEnvelope.Receivers, pTransaction) = False Then + If InsertReceivers(pEnvelope.Receivers, pTransaction) = False Then Return False End If @@ -233,10 +235,22 @@ Public Class EnvelopeEditorController End Try End Function - Private Function UpdateReceivers(pReceivers As List(Of EnvelopeReceiver), pTransaction As SqlTransaction) As Boolean + Private Function DeleteReceiver(pReceiver As EnvelopeReceiver) As Boolean + Try + + Catch ex As Exception + + End Try + End Function + + Public Function ElementsExist(pDocumentId As Integer, pReceiverId As Integer) As Boolean + Return ElementModel.ElementsExist(pDocumentId, pReceiverId) + End Function + + Private Function InsertReceivers(pReceivers As List(Of EnvelopeReceiver), pTransaction As SqlTransaction) As Boolean Try Return pReceivers. - Select(Function(r) UpdateReceiver(r, pTransaction)). + Select(Function(r) InsertReceiver(r, pTransaction)). All(Function(pResult) pResult = True) Catch ex As Exception @@ -256,15 +270,15 @@ Public Class EnvelopeEditorController End Function - Private Function UpdateReceiver(pReceiver As EnvelopeReceiver, pTransaction As SqlTransaction) As Boolean + Private Function InsertReceiver(pReceiver As EnvelopeReceiver, pTransaction As SqlTransaction) As Boolean If ReceiverModel.TestReceiverExists(pReceiver) Then Return True End If - If pReceiver.HasId Then - Return ReceiverModel.Update(pReceiver, pTransaction) - Else + If pReceiver.HasId = False Then Return ReceiverModel.Insert(pReceiver, pTransaction) + Else + Return True End If End Function diff --git a/EnvelopeGenerator.Form/Controllers/FieldEditorController.vb b/EnvelopeGenerator.Form/Controllers/FieldEditorController.vb index c7fcad00..0f0908bb 100644 --- a/EnvelopeGenerator.Form/Controllers/FieldEditorController.vb +++ b/EnvelopeGenerator.Form/Controllers/FieldEditorController.vb @@ -22,11 +22,12 @@ Public Class FieldEditorController ElementModel = New ElementModel(pState) End Sub - Public Sub AddOrUpdateElement(pAnnotation As AnnotationStickyNote, pReceiverId As Integer) + Public Sub AddOrUpdateElement(pAnnotation As AnnotationStickyNote) Dim oTag As String() = pAnnotation.Tag.Split("|"c) - Dim oPage = Integer.Parse(oTag(0)) - Dim oIndex = Integer.Parse(oTag(1)) - Dim oELement = Elements.Where(Function(e) e.AnnotationIndex = oIndex And e.Page = oPage).SingleOrDefault() + Dim oReceiverId = Integer.Parse(oTag(0)) + Dim oPage = Integer.Parse(oTag(1)) + Dim oIndex = Integer.Parse(oTag(2)) + Dim oELement = Elements.Where(Function(e) e.AnnotationIndex = oIndex And e.Page = oPage And e.ReceiverId = oReceiverId).SingleOrDefault() If oELement IsNot Nothing Then oELement.Height = pAnnotation.Height @@ -41,7 +42,7 @@ Public Class FieldEditorController .X = pAnnotation.Left, .Y = pAnnotation.Top, .DocumentId = Document.Id, - .ReceiverId = pReceiverId, + .ReceiverId = oReceiverId, .AnnotationIndex = oIndex, .Page = oPage }) diff --git a/EnvelopeGenerator.Form/Entities/Envelope.vb b/EnvelopeGenerator.Form/Entities/Envelope.vb index 6092285f..2da513ad 100644 --- a/EnvelopeGenerator.Form/Entities/Envelope.vb +++ b/EnvelopeGenerator.Form/Entities/Envelope.vb @@ -28,6 +28,21 @@ 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 + + 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.Form/Entities/EnvelopeReceiver.vb b/EnvelopeGenerator.Form/Entities/EnvelopeReceiver.vb index ce10e54a..e1fd94ca 100644 --- a/EnvelopeGenerator.Form/Entities/EnvelopeReceiver.vb +++ b/EnvelopeGenerator.Form/Entities/EnvelopeReceiver.vb @@ -2,6 +2,8 @@ Public Class EnvelopeReceiver Public Property Id As Integer + Public Property UserId As Integer + Public Property Name As String Public Property Company As String = "" Public Property JobTitle As String = "" diff --git a/EnvelopeGenerator.Form/Models/ElementModel.vb b/EnvelopeGenerator.Form/Models/ElementModel.vb index 41b86c8d..8b8284f0 100644 --- a/EnvelopeGenerator.Form/Models/ElementModel.vb +++ b/EnvelopeGenerator.Form/Models/ElementModel.vb @@ -17,13 +17,29 @@ Public Class ElementModel .Y = pRow.ItemEx("POSITION_Y", 0.0), .Width = pRow.ItemEx("WIDTH", 0.0), .Height = pRow.ItemEx("HEIGHT", 0.0), - .Page = pRow.ItemEx("PAGE", 0) + .Page = pRow.ItemEx("PAGE", 0), + .AnnotationIndex = pRow.ItemEx("ANNOTATION_INDEX", 0) } End Function + Public Function ElementsExist(pEnvelopeId As Integer, pReceiverId As Integer) As Boolean + Try + Dim oSql = $"SELECT COUNT(*) FROM [dbo].[TBSIG_DOCUMENT_RECEIVER_ELEMENT] T + JOIN TBSIG_ENVELOPE_DOCUMENT T2 ON T.DOCUMENT_ID = T2.GUID + WHERE T.RECEIVER_ID = {pReceiverId} AND T2.ENVELOPE_ID = {pEnvelopeId}" + Dim oElementCount As Integer = Database.GetScalarValue(oSql) + + Return oElementCount > 0 + + Catch ex As Exception + Logger.Error(ex) + Return False + End Try + End Function + Public Function List(pDocumentId As Integer) As List(Of EnvelopeDocumentElement) Try - Dim oSql = $"SELECT * FROM [dbo].[TBSIG_DOCUMENT_RECEIVER_ELEMENT] WHERE DOCUMENT_ID = {pDocumentId}" + Dim oSql = $"SELECT * FROM [dbo].[TBSIG_DOCUMENT_RECEIVER_ELEMENT] WHERE DOCUMENT_ID = {pDocumentId} ORDER BY PAGE ASC, ANNOTATION_INDEX ASC" Dim oTable = Database.GetDatatable(oSql) Return oTable?.Rows.Cast(Of DataRow). diff --git a/EnvelopeGenerator.Form/Models/ReceiverModel.vb b/EnvelopeGenerator.Form/Models/ReceiverModel.vb index 1a7e14f8..fa3c6356 100644 --- a/EnvelopeGenerator.Form/Models/ReceiverModel.vb +++ b/EnvelopeGenerator.Form/Models/ReceiverModel.vb @@ -31,24 +31,15 @@ Public Class ReceiverModel Public Function Insert(pReceiver As EnvelopeReceiver, pTransaction As SqlTransaction) As Boolean Try Dim oSql As String = "INSERT INTO [dbo].[TBSIG_RECEIVER] - ([NAME] - ,[EMAIL_ADDRESS] - ,[SIGNATURE] - ,[COMPANY_NAME] - ,[JOB_TITLE]) + ([EMAIL_ADDRESS] + ,[SIGNATURE]) VALUES - (@NAME - ,@EMAIL - ,@SIGNATURE - ,@COMPANY - ,@JOB)" + (@EMAIL + ,@SIGNATURE)" Dim oCommand = New SqlCommand(oSql) - oCommand.Parameters.Add("NAME", SqlDbType.NVarChar).Value = pReceiver.Name oCommand.Parameters.Add("EMAIL", SqlDbType.NVarChar).Value = pReceiver.Email oCommand.Parameters.Add("SIGNATURE", SqlDbType.NVarChar).Value = pReceiver.Signature - oCommand.Parameters.Add("COMPANY", SqlDbType.NVarChar).Value = pReceiver.Company - oCommand.Parameters.Add("JOB", SqlDbType.NVarChar).Value = pReceiver.JobTitle Dim oResult = Database.ExecuteNonQuery(oCommand, pTransaction) If oResult = True Then @@ -67,17 +58,18 @@ Public Class ReceiverModel Public Function Update(pReceiver As EnvelopeReceiver, pTransaction As SqlTransaction) As Boolean Try ' TODO: Update ENVELOPE_RECEIVER instead - Dim oSql As String = "UPDATE [dbo].[TBSIG_RECEIVER] + Dim oSql As String = "UPDATE [dbo].[TBSIG_USER_RECEIVER] SET [NAME] = @NAME ,[COMPANY_NAME] = @COMPANY ,[JOB_TITLE] = @JOB - WHERE GUID = @GUID" + WHERE RECEIVER_ID = @RECEIVER_ID" Dim oCommand = New SqlCommand(oSql) oCommand.Parameters.Add("NAME", SqlDbType.NVarChar).Value = pReceiver.Name oCommand.Parameters.Add("COMPANY", SqlDbType.NVarChar).Value = pReceiver.Company oCommand.Parameters.Add("JOB", SqlDbType.NVarChar).Value = pReceiver.JobTitle - oCommand.Parameters.Add("GUID", SqlDbType.Int).Value = pReceiver.Id + oCommand.Parameters.Add("RECEIVER_ID", SqlDbType.Int).Value = pReceiver.Id + oCommand.Parameters.Add("USER_ID", SqlDbType.Int).Value = pReceiver.Id Return Database.ExecuteNonQuery(oCommand, pTransaction) Catch ex As Exception @@ -101,12 +93,18 @@ Public Class ReceiverModel ,[RECEIVER_ID] ,[PRIVATE_MESSAGE] ,[ACCESS_CODE] + ,[NAME] + ,[JOB_TITLE] + ,[COMPANY_NAME] ,[SEQUENCE]) VALUES (@ENVELOPE_ID ,@RECEIVER_ID ,@MESSAGE ,@ACCESS_CODE + ,@NAME + ,@JOB + ,@COMPANY ,@SEQUENCE)" Dim oCommand As New SqlCommand(oSql) @@ -114,6 +112,9 @@ Public Class ReceiverModel oCommand.Parameters.Add("RECEIVER_ID", SqlDbType.NVarChar).Value = pReceiver.Id oCommand.Parameters.Add("MESSAGE", SqlDbType.NVarChar).Value = pReceiver.PrivateMessage oCommand.Parameters.Add("ACCESS_CODE", SqlDbType.NVarChar).Value = pReceiver.AccessCode + oCommand.Parameters.Add("NAME", SqlDbType.NVarChar).Value = pReceiver.Name + oCommand.Parameters.Add("JOB", SqlDbType.NVarChar).Value = pReceiver.JobTitle + oCommand.Parameters.Add("COMPANY", SqlDbType.NVarChar).Value = pReceiver.Company oCommand.Parameters.Add("SEQUENCE", SqlDbType.NVarChar).Value = pReceiver.Sequence Return Database.ExecuteNonQuery(oCommand, pTransaction) @@ -134,6 +135,18 @@ Public Class ReceiverModel End Try End Function + Public Function Delete(pReceiverId As Integer, pDocumentId As Integer) As Boolean + Try + Dim oSql = $"DELETE FROM TBSIG_DOCUMENT_RECEIVER WHERE RECEIVER_ID = {pReceiverId} AND DOCUMENT_ID = {pDocumentId}" + Return Database.ExecuteNonQuery(oSql) + + Catch ex As Exception + Logger.Error(ex) + Return False + + 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) diff --git a/EnvelopeGenerator.Form/Strings/Envelope.Designer.vb b/EnvelopeGenerator.Form/Strings/Envelope.Designer.vb index d3637dfe..2da1efef 100644 --- a/EnvelopeGenerator.Form/Strings/Envelope.Designer.vb +++ b/EnvelopeGenerator.Form/Strings/Envelope.Designer.vb @@ -64,6 +64,15 @@ Namespace My.Resources End Set End Property + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die Empfänger {0} hat keine gültige Email Addresse. ähnelt. + ''' + Friend Shared ReadOnly Property Invalid_Email_Address() As String + Get + Return ResourceManager.GetString("Invalid Email Address", resourceCulture) + End Get + End Property + ''' ''' Sucht eine lokalisierte Zeichenfolge, die Missing Documents ähnelt. ''' diff --git a/EnvelopeGenerator.Form/Strings/Envelope.resx b/EnvelopeGenerator.Form/Strings/Envelope.resx index 26863d2a..9c48cb82 100644 --- a/EnvelopeGenerator.Form/Strings/Envelope.resx +++ b/EnvelopeGenerator.Form/Strings/Envelope.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Empfänger {0} hat keine gültige Email Addresse. + Missing Documents diff --git a/EnvelopeGenerator.Form/frmEnvelopeEditor.Designer.vb b/EnvelopeGenerator.Form/frmEnvelopeEditor.Designer.vb index 137016ea..75eac0d7 100644 --- a/EnvelopeGenerator.Form/frmEnvelopeEditor.Designer.vb +++ b/EnvelopeGenerator.Form/frmEnvelopeEditor.Designer.vb @@ -29,10 +29,10 @@ Partial Public Class frmEnvelopeEditor Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container() Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmEnvelopeEditor)) - Dim TableColumnDefinition1 As DevExpress.XtraEditors.TableLayout.TableColumnDefinition = New DevExpress.XtraEditors.TableLayout.TableColumnDefinition() - Dim TableRowDefinition1 As DevExpress.XtraEditors.TableLayout.TableRowDefinition = New DevExpress.XtraEditors.TableLayout.TableRowDefinition() - Dim TableRowDefinition2 As DevExpress.XtraEditors.TableLayout.TableRowDefinition = New DevExpress.XtraEditors.TableLayout.TableRowDefinition() - Dim TileViewItemElement1 As DevExpress.XtraGrid.Views.Tile.TileViewItemElement = New DevExpress.XtraGrid.Views.Tile.TileViewItemElement() + Dim TableColumnDefinition2 As DevExpress.XtraEditors.TableLayout.TableColumnDefinition = New DevExpress.XtraEditors.TableLayout.TableColumnDefinition() + Dim TableRowDefinition3 As DevExpress.XtraEditors.TableLayout.TableRowDefinition = New DevExpress.XtraEditors.TableLayout.TableRowDefinition() + Dim TableRowDefinition4 As DevExpress.XtraEditors.TableLayout.TableRowDefinition = New DevExpress.XtraEditors.TableLayout.TableRowDefinition() + Dim TileViewItemElement2 As DevExpress.XtraGrid.Views.Tile.TileViewItemElement = New DevExpress.XtraGrid.Views.Tile.TileViewItemElement() Me.colFilename = New DevExpress.XtraGrid.Columns.TileViewColumn() Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl() Me.btnSave = New DevExpress.XtraBars.BarButtonItem() @@ -67,6 +67,8 @@ Partial Public Class frmEnvelopeEditor Me.FrmEditorBindingSource = New System.Windows.Forms.BindingSource(Me.components) Me.EnvelopeDocumentBindingSource = New System.Windows.Forms.BindingSource(Me.components) Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog() + Me.RibbonPageGroup5 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() + Me.btnDeleteReceiver = New DevExpress.XtraBars.BarButtonItem() CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.SplitContainerControl1.Panel1, System.ComponentModel.ISupportInitialize).BeginInit() @@ -112,9 +114,9 @@ Partial Public Class frmEnvelopeEditor 'RibbonControl1 ' Me.RibbonControl1.ExpandCollapseItem.Id = 0 - Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.btnSave, Me.btnCancel, Me.btnNewFile, Me.btnDeleteFile, Me.BarButtonItem1, Me.btnEditFields}) + Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.btnSave, Me.btnCancel, Me.btnNewFile, Me.btnDeleteFile, Me.BarButtonItem1, Me.btnEditFields, Me.btnDeleteReceiver}) Me.RibbonControl1.Location = New System.Drawing.Point(0, 0) - Me.RibbonControl1.MaxItemId = 8 + Me.RibbonControl1.MaxItemId = 9 Me.RibbonControl1.Name = "RibbonControl1" Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1}) Me.RibbonControl1.Size = New System.Drawing.Size(1164, 158) @@ -163,7 +165,7 @@ Partial Public Class frmEnvelopeEditor ' 'RibbonPage1 ' - Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1, Me.RibbonPageGroup2, Me.RibbonPageGroup3, Me.RibbonPageGroup4}) + Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1, Me.RibbonPageGroup2, Me.RibbonPageGroup3, Me.RibbonPageGroup4, Me.RibbonPageGroup5}) Me.RibbonPage1.Name = "RibbonPage1" Me.RibbonPage1.Text = "RibbonPage1" ' @@ -231,18 +233,18 @@ Partial Public Class frmEnvelopeEditor Me.ViewDocuments.GridControl = Me.GridDocuments Me.ViewDocuments.Name = "ViewDocuments" Me.ViewDocuments.OptionsTiles.ItemSize = New System.Drawing.Size(248, 202) - Me.ViewDocuments.TileColumns.Add(TableColumnDefinition1) - TableRowDefinition1.Length.Value = 152.0R - TableRowDefinition2.Length.Value = 34.0R - Me.ViewDocuments.TileRows.Add(TableRowDefinition1) - Me.ViewDocuments.TileRows.Add(TableRowDefinition2) - TileViewItemElement1.Column = Me.colFilename - TileViewItemElement1.ImageOptions.ImageAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter - TileViewItemElement1.ImageOptions.ImageScaleMode = DevExpress.XtraEditors.TileItemImageScaleMode.Squeeze - TileViewItemElement1.RowIndex = 1 - TileViewItemElement1.Text = "colFilename" - TileViewItemElement1.TextAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter - Me.ViewDocuments.TileTemplate.Add(TileViewItemElement1) + Me.ViewDocuments.TileColumns.Add(TableColumnDefinition2) + TableRowDefinition3.Length.Value = 152.0R + TableRowDefinition4.Length.Value = 34.0R + Me.ViewDocuments.TileRows.Add(TableRowDefinition3) + Me.ViewDocuments.TileRows.Add(TableRowDefinition4) + TileViewItemElement2.Column = Me.colFilename + TileViewItemElement2.ImageOptions.ImageAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter + TileViewItemElement2.ImageOptions.ImageScaleMode = DevExpress.XtraEditors.TileItemImageScaleMode.Squeeze + TileViewItemElement2.RowIndex = 1 + TileViewItemElement2.Text = "colFilename" + TileViewItemElement2.TextAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter + Me.ViewDocuments.TileTemplate.Add(TileViewItemElement2) ' 'SplitContainerControl2 ' @@ -365,9 +367,9 @@ Partial Public Class frmEnvelopeEditor Me.ViewReceivers.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.colName, Me.colEmail}) Me.ViewReceivers.GridControl = Me.GridReceivers Me.ViewReceivers.Name = "ViewReceivers" + Me.ViewReceivers.OptionsBehavior.AllowDeleteRows = DevExpress.Utils.DefaultBoolean.[True] Me.ViewReceivers.OptionsView.NewItemRowPosition = DevExpress.XtraGrid.Views.Grid.NewItemRowPosition.Bottom Me.ViewReceivers.OptionsView.ShowGroupPanel = False - Me.ViewReceivers.OptionsView.ShowIndicator = False ' 'colName ' @@ -387,8 +389,6 @@ Partial Public Class frmEnvelopeEditor 'RepositoryItemEmailEdit ' Me.RepositoryItemEmailEdit.AutoHeight = False - Me.RepositoryItemEmailEdit.MaskSettings.Set("MaskManagerType", GetType(DevExpress.Data.Mask.RegExpMaskManager)) - Me.RepositoryItemEmailEdit.MaskSettings.Set("mask", "\w+@\w+\.\w+") Me.RepositoryItemEmailEdit.Name = "RepositoryItemEmailEdit" ' 'FrmEditorBindingSource @@ -405,6 +405,18 @@ Partial Public Class frmEnvelopeEditor Me.OpenFileDialog1.FileName = "OpenFileDialog1" Me.OpenFileDialog1.Filter = "PDF Files|*.pdf" ' + 'RibbonPageGroup5 + ' + Me.RibbonPageGroup5.ItemLinks.Add(Me.btnDeleteReceiver) + Me.RibbonPageGroup5.Name = "RibbonPageGroup5" + Me.RibbonPageGroup5.Text = "RibbonPageGroup5" + ' + 'btnDeleteReceiver + ' + Me.btnDeleteReceiver.Caption = "Empfänger löschen" + Me.btnDeleteReceiver.Id = 8 + Me.btnDeleteReceiver.Name = "btnDeleteReceiver" + ' 'frmEnvelopeEditor ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -486,6 +498,8 @@ Partial Public Class frmEnvelopeEditor Friend WithEvents RepositoryItemEmailEdit As Repository.RepositoryItemTextEdit Friend WithEvents EnvelopeDocumentBindingSource As BindingSource Friend WithEvents FrmEditorBindingSource As BindingSource + Friend WithEvents btnDeleteReceiver As DevExpress.XtraBars.BarButtonItem + Friend WithEvents RibbonPageGroup5 As DevExpress.XtraBars.Ribbon.RibbonPageGroup #End Region diff --git a/EnvelopeGenerator.Form/frmEnvelopeEditor.vb b/EnvelopeGenerator.Form/frmEnvelopeEditor.vb index af476787..45585ec8 100644 --- a/EnvelopeGenerator.Form/frmEnvelopeEditor.vb +++ b/EnvelopeGenerator.Form/frmEnvelopeEditor.vb @@ -117,4 +117,19 @@ Partial Public Class frmEnvelopeEditor Private Sub RibbonControl1_Click(sender As Object, e As EventArgs) Handles RibbonControl1.Click End Sub + + Private Sub btnDeleteReceiver_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnDeleteReceiver.ItemClick + If ViewReceivers.SelectedRowsCount = 0 Then + Exit Sub + End If + + ' TODO: Delete receivers for ALL documents + + Dim oMessage2 = "Es gibt für diesen Empfänger bereits Elemente. Wollen Sie den Empfänger trotzdem löschen?" + Dim oMessage = "Wollen Sie den ausgewählten Empfänger löschen?" + If MsgBox(oMessage, MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Text) = MsgBoxResult.No Then + Exit Sub + End If + + End Sub End Class diff --git a/EnvelopeGenerator.Form/frmFieldEditor.vb b/EnvelopeGenerator.Form/frmFieldEditor.vb index 384425c4..fe3c9c2a 100644 --- a/EnvelopeGenerator.Form/frmFieldEditor.vb +++ b/EnvelopeGenerator.Form/frmFieldEditor.vb @@ -58,11 +58,8 @@ Partial Public Class frmFieldEditor If Controller.LoadElements() = False Then MsgBox("Elemente konnten nicht geladen werden!", MsgBoxStyle.Critical, Text) Else - - For Each oElement In Controller.Elements - LoadAnnotation(oElement) - Next - + LoadAnnotations(SelectedReceiver.Id) + GDViewer.DisplayFirstPage() End If End Sub @@ -74,8 +71,15 @@ Partial Public Class frmFieldEditor End Function Private Sub BarItem_Click(sender As Object, e As ItemClickEventArgs) - Dim oReceiver As EnvelopeReceiver = e.Item.Tag - SetReceiver(oReceiver) + If Controller.SaveElements() Then + Dim oReceiver As EnvelopeReceiver = e.Item.Tag + SetReceiver(oReceiver) + ClearAnnotations() + LoadAnnotations(oReceiver.Id) + GDViewer.DisplayFirstPage() + Else + MsgBox("Elemente konnten nicht gespeichert werden!", MsgBoxStyle.Critical, Text) + End If End Sub Private Sub SetReceiver(pReceiver As EnvelopeReceiver) @@ -95,10 +99,10 @@ Partial Public Class frmFieldEditor End If End Sub - Private Sub Viewer_AnnotationAddedByUser(AnnotationIdx As Integer) - Dim oAnnotation = GDViewer.GetAnnotationFromIdx(AnnotationIdx) + Private Sub Viewer_AnnotationAddedByUser(pAnnotationIdx As Integer) + Dim oAnnotation = GDViewer.GetAnnotationFromIdx(pAnnotationIdx) Dim oPage = GDViewer.CurrentPage - Dim oTag = $"{oPage}|{AnnotationIdx}" + Dim oTag = GetAnnotationTag(SelectedReceiver.Id, oPage, pAnnotationIdx) If TypeOf oAnnotation Is AnnotationStickyNote Then Dim oStickyNote As AnnotationStickyNote = oAnnotation @@ -115,7 +119,7 @@ Partial Public Class frmFieldEditor End Sub - Private Sub Viewer_BeforeAnnotationAddedByUser(AnnotationIdx As Integer) + Private Sub Viewer_BeforeAnnotationAddedByUser(pAnnotationIdx As Integer) 'NOOP End Sub @@ -124,22 +128,21 @@ Partial Public Class frmFieldEditor Dim oCurrentPage = GDViewer.CurrentPage 'TODO: Save Annotations in Background - - For index = 1 To oPageCount - GDViewer.DisplayPage(index) + For oPage = 1 To oPageCount + GDViewer.DisplayPage(oPage) Dim oAnnotationCount = GDViewer.GetAnnotationCount() - For index1 = 0 To oAnnotationCount - 1 - Dim oAnnotation As Annotation = GDViewer.GetAnnotationFromIdx(index1) + For oAnnotationIndex = 0 To oAnnotationCount - 1 + Dim oAnnotation As Annotation = GDViewer.GetAnnotationFromIdx(oAnnotationIndex) If TypeOf oAnnotation Is AnnotationStickyNote Then Dim oStickyNote As AnnotationStickyNote = oAnnotation - Controller.AddOrUpdateElement(oStickyNote, SelectedReceiver.Id) + Controller.AddOrUpdateElement(oStickyNote) End If Next Next If Not Controller.SaveElements() Then - MsgBox("Element konnten nicht gespeichert werden!", MsgBoxStyle.Critical, Text) + MsgBox("Elemente konnten nicht gespeichert werden!", MsgBoxStyle.Critical, Text) End If GDViewer.DisplayPage(oCurrentPage) @@ -171,9 +174,10 @@ Partial Public Class frmFieldEditor End If End Sub - Private Sub LoadAnnotation(pElement As EnvelopeDocumentElement) + Private Sub LoadAnnotation(pElement As EnvelopeDocumentElement, pReceiverId As Integer) Dim oAnnotation As AnnotationStickyNote = Manager.AddStickyNoteAnnot(0, 0, 0, 0, "SIGNATUR") - + Dim oIndex = Manager.GetAnnotationIdx(oAnnotation) + Dim oPage = pElement.Page If Manager.GetStat() = GdPictureStatus.OK Then oAnnotation.Width = CSng(pElement.Width) @@ -183,14 +187,40 @@ Partial Public Class frmFieldEditor oAnnotation.Fill = True oAnnotation.FillColor = Color.DarkRed oAnnotation.Text = "SIGNATUR" - - ' TODO: Set tag with annotation index and page - 'oAnnotation.Tag = + oAnnotation.Tag = GetAnnotationTag(pReceiverId, oPage, oIndex) If Manager.SaveAnnotationsToPage() = GdPictureStatus.OK Then End If End If End Sub + + Private Sub ClearAnnotations() + Dim oPageCount = GDViewer.PageCount + For oPage = 1 To oPageCount + GDViewer.DisplayPage(oPage) + Dim oAnnotationCount = GDViewer.GetAnnotationCount() + + For oAnnotationIndex = 0 To oAnnotationCount - 1 + GDViewer.DeleteAnnotation(oAnnotationIndex) + Next + Next + End Sub + + Private Sub LoadAnnotations(pReceiverId As Integer) + Dim oPageCount = GDViewer.PageCount + For oPage = 1 To oPageCount + GDViewer.DisplayPage(oPage) + Dim oCurrentPage = oPage + Dim oElements = Controller.Elements.Where(Function(element) element.Page = oCurrentPage And element.ReceiverId = pReceiverId).ToList() + For Each oElement In oElements + LoadAnnotation(oElement, pReceiverId) + Next + Next + End Sub + + Private Function GetAnnotationTag(pReceiver As Integer, pPage As Integer, pIndex As Integer) As String + Return $"{pReceiver}|{pPage}|{pIndex}" + End Function End Class diff --git a/EnvelopeGenerator.Form/frmMain.vb b/EnvelopeGenerator.Form/frmMain.vb index a95d5c2b..676061c1 100644 --- a/EnvelopeGenerator.Form/frmMain.vb +++ b/EnvelopeGenerator.Form/frmMain.vb @@ -88,6 +88,7 @@ Public Class frmMain Dim oEnvelope As Envelope = ViewEnvelopes.GetRow(pRowHandle) Dim oForm As New frmEnvelopeEditor() With {.State = State, .Envelope = oEnvelope} oForm.ShowDialog() + GridEnvelopes.DataSource = Controller.ListEnvelopes() End Sub Private Sub ViewEnvelopes_DoubleClick(sender As Object, e As EventArgs) Handles ViewEnvelopes.DoubleClick @@ -96,4 +97,8 @@ Public Class frmMain LoadEnvelope(oSelectedRows.First) End If End Sub + + Private Sub RibbonControl_Click(sender As Object, e As EventArgs) Handles RibbonControl.Click + + End Sub End Class \ No newline at end of file