From b312396bb565b6546197211711592048aac96bef Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Wed, 16 Aug 2023 12:06:10 +0200 Subject: [PATCH] 16-08-23 --- .../Models/DocumentModel.vb | 13 +++ .../Models/ElementModel.vb | 20 ++++ .../Models/EnvelopeModel.vb | 4 +- .../Models/ReceiverModel.vb | 11 +- .../Controllers/BaseController.vb | 101 +++++++++++++++++ .../Controllers/EnvelopeEditorController.vb | 105 +++++++----------- .../Controllers/EnvelopeListController.vb | 18 ++- .../Controllers/FieldEditorController.vb | 12 +- .../EnvelopeGenerator.Form.vbproj | 1 + .../My Project/licenses.licx | 11 +- .../frmEnvelopeEditor.Designer.vb | 61 +++++----- EnvelopeGenerator.Form/frmEnvelopeEditor.vb | 77 ++++++++----- EnvelopeGenerator.Form/frmMain.Designer.vb | 25 ++++- EnvelopeGenerator.Form/frmMain.resx | 19 ++++ EnvelopeGenerator.Form/frmMain.vb | 33 +++++- 15 files changed, 355 insertions(+), 156 deletions(-) create mode 100644 EnvelopeGenerator.Form/Controllers/BaseController.vb diff --git a/EnvelopeGenerator.Common/Models/DocumentModel.vb b/EnvelopeGenerator.Common/Models/DocumentModel.vb index 46324f1e..3a42949d 100644 --- a/EnvelopeGenerator.Common/Models/DocumentModel.vb +++ b/EnvelopeGenerator.Common/Models/DocumentModel.vb @@ -64,6 +64,19 @@ Public Class DocumentModel End Try End Function + Public Function Delete(pDocumentId As Integer, pTransaction As SqlTransaction) As Boolean + Try + Dim oSql = "DELETE FROM [dbo].[TBSIG_ENVELOPE_DOCUMENT] WHERE GUID = @GUID" + Dim oCommand As New SqlCommand(oSql) + oCommand.Parameters.Add("GUID", SqlDbType.Int).Value = pDocumentId + + Return Database.ExecuteNonQuery(oCommand, pTransaction) + Catch ex As Exception + Logger.Error(ex) + Return False + 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) diff --git a/EnvelopeGenerator.Common/Models/ElementModel.vb b/EnvelopeGenerator.Common/Models/ElementModel.vb index f4113731..521fbe32 100644 --- a/EnvelopeGenerator.Common/Models/ElementModel.vb +++ b/EnvelopeGenerator.Common/Models/ElementModel.vb @@ -150,4 +150,24 @@ Public Class ElementModel Return False End Try End Function + + Public Function DeleteElements(pReceiverId As Integer, pDocumentId As Integer, pTransaction As SqlTransaction) As Boolean + Try + Dim oSql = $"DELETE FROM TBSIG_DOCUMENT_RECEIVER_ELEMENT WHERE RECEIVER_ID = {pReceiverId} AND DOCUMENT_ID = {pDocumentId}" + Return Database.ExecuteNonQuery(oSql, pTransaction) + Catch ex As Exception + Logger.Error(ex) + Return False + End Try + End Function + + Public Function DeleteElements(pDocumentId As Integer, pTransaction As SqlTransaction) As Boolean + Try + Dim oSql = $"DELETE FROM TBSIG_DOCUMENT_RECEIVER_ELEMENT WHERE DOCUMENT_ID = {pDocumentId}" + Return Database.ExecuteNonQuery(oSql, pTransaction) + Catch ex As Exception + Logger.Error(ex) + Return False + End Try + End Function End Class diff --git a/EnvelopeGenerator.Common/Models/EnvelopeModel.vb b/EnvelopeGenerator.Common/Models/EnvelopeModel.vb index d0c7cd2b..76827068 100644 --- a/EnvelopeGenerator.Common/Models/EnvelopeModel.vb +++ b/EnvelopeGenerator.Common/Models/EnvelopeModel.vb @@ -80,10 +80,10 @@ Public Class EnvelopeModel End Try End Function - Public Function Delete(pEnvelope As Envelope) As Boolean + Public Function Delete(pEnvelope As Envelope, pTransaction As SqlTransaction) As Boolean Try Dim oSql = $"DELETE FROM [dbo].[TBSIG_ENVELOPE] WHERE GUID = {pEnvelope.Id}" - Return Database.ExecuteNonQuery(oSql) + Return Database.ExecuteNonQuery(oSql, pTransaction) Catch ex As Exception Return False diff --git a/EnvelopeGenerator.Common/Models/ReceiverModel.vb b/EnvelopeGenerator.Common/Models/ReceiverModel.vb index ee90fcc7..9ccafadd 100644 --- a/EnvelopeGenerator.Common/Models/ReceiverModel.vb +++ b/EnvelopeGenerator.Common/Models/ReceiverModel.vb @@ -137,7 +137,12 @@ Public Class ReceiverModel Public Function ListReceivers(pExistingReceivers As IEnumerable(Of EnvelopeReceiver)) As IEnumerable(Of EnvelopeReceiver) Try + If pExistingReceivers.Count = 0 Then + Return New List(Of EnvelopeReceiver) + End If + Dim oAddresses = pExistingReceivers.Select(Function(r) $"'{r.Email}'").JoinToString(",") + Dim oSql = $"SELECT * FROM [dbo].[TBSIG_RECEIVER] WHERE EMAIL_ADDRESS IN ({oAddresses})" Dim oTable = Database.GetDatatable(oSql) @@ -151,10 +156,10 @@ Public Class ReceiverModel End Try End Function - Public Function Delete(pReceiverId As Integer, pDocumentId As Integer) As Boolean + Public Function Delete(pReceiverId As Integer, pEnvelopeId As Integer, pTransaction As SqlTransaction) As Boolean Try - Dim oSql = $"DELETE FROM TBSIG_DOCUMENT_RECEIVER WHERE RECEIVER_ID = {pReceiverId} AND DOCUMENT_ID = {pDocumentId}" - Return Database.ExecuteNonQuery(oSql) + Dim oSql = $"DELETE FROM TBSIG_ENVELOPE_RECEIVER WHERE RECEIVER_ID = {pReceiverId} AND ENVELOPE_ID = {pEnvelopeId}" + Return Database.ExecuteNonQuery(oSql, pTransaction) Catch ex As Exception Logger.Error(ex) diff --git a/EnvelopeGenerator.Form/Controllers/BaseController.vb b/EnvelopeGenerator.Form/Controllers/BaseController.vb new file mode 100644 index 00000000..e409f6e8 --- /dev/null +++ b/EnvelopeGenerator.Form/Controllers/BaseController.vb @@ -0,0 +1,101 @@ +Imports DigitalData.Modules.Database +Imports DigitalData.Modules.Base +Imports EnvelopeGenerator.Common +Imports System.Data.SqlClient + +Public MustInherit Class BaseController + Inherits BaseClass + + Public EnvelopeModel As EnvelopeModel + Public DocumentModel As DocumentModel + Public ReceiverModel As ReceiverModel + Public ElementModel As ElementModel + Public HistoryModel As HistoryModel + Public UserModel As UserModel + + Public ReadOnly Property Database As MSSQLServer + Public ReadOnly Property State As State + + Public Sub New(pState As State) + MyBase.New(pState.LogConfig) + State = pState + Database = pState.Database + InitializeModels(pState) + End Sub + + Private Sub InitializeModels(pState As State) + EnvelopeModel = New EnvelopeModel(pState) + DocumentModel = New DocumentModel(pState) + ReceiverModel = New ReceiverModel(pState) + ElementModel = New ElementModel(pState) + HistoryModel = New HistoryModel(pState) + UserModel = New UserModel(pState) + End Sub + + Public Function DeleteEnvelope(pEnvelope As Envelope) As Boolean + Dim oConnection As SqlConnection = Database.GetConnection() + Dim oTransaction As SqlTransaction = oConnection.BeginTransaction() + + Try + Dim oResult = pEnvelope.Documents. + Select(Function(d) DeleteDocument(d, oTransaction)). + All(Function(r) r = True) + + If oResult = False Then + Throw New ApplicationException("could not delete documents") + End If + + Dim oResult2 = pEnvelope.Receivers. + Select(Function(r) ReceiverModel.Delete(r.Id, pEnvelope.Id, oTransaction)). + All(Function(r) r = True) + + If oResult2 = False Then + Throw New ApplicationException("could not delete receivers") + End If + + Dim oResult3 = EnvelopeModel.Delete(pEnvelope, oTransaction) + + If oResult3 = False Then + Throw New ApplicationException("could not delete envelope") + End If + + oTransaction.Commit() + Return True + + Catch ex As Exception + Logger.Error(ex) + oTransaction.Rollback() + Return False + + End Try + End Function + + Public Function DeleteDocument(pDocument As EnvelopeDocument, pTransaction As SqlTransaction) As Boolean + Try + + If DocumentModel.Delete(pDocument.Id, pTransaction) = True Then + Dim oResult = ElementModel.DeleteElements(pDocument.Id, pTransaction) + + If oResult = False Then + Throw New ApplicationException("Could not delete elements!") + End If + Else + Throw New ApplicationException("Could not delete document!") + End If + + Catch ex As Exception + Logger.Error(ex) + + Return False + End Try + + Try + IO.File.Delete(pDocument.Filepath) + Catch ex As Exception + Logger.Error(ex) + Return False + End Try + + Return True + End Function +End Class diff --git a/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb b/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb index a82be8bc..1f4b1dec 100644 --- a/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb +++ b/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb @@ -1,60 +1,28 @@ -Imports System.Data.Common -Imports System.Data.SqlClient +Imports System.Data.SqlClient Imports System.IO -Imports DigitalData.Modules.Base -Imports DigitalData.Modules.Database Imports DigitalData.Modules.Logging Imports EnvelopeGenerator.Common Imports EnvelopeGenerator.Common.Constants Public Class EnvelopeEditorController - Inherits BaseClass - - Private ReadOnly Database As MSSQLServer - Private ReadOnly State As State = Nothing - - Private EnvelopeModel As EnvelopeModel - Private DocumentModel As DocumentModel - Private ReceiverModel As ReceiverModel - Private ElementModel As ElementModel - Private HistoryModel As HistoryModel - Private UserModel As UserModel + Inherits BaseController Public ReadOnly Envelope As Envelope = Nothing Public Sub New(pState As State) - MyBase.New(pState.LogConfig) - - Database = pState.Database - State = pState - - InitializeModels(pState) + MyBase.New(pState) Envelope = CreateEnvelope() End Sub Public Sub New(pState As State, pEnvelope As Envelope) - MyBase.New(pState.LogConfig) - - Database = pState.Database - State = pState - - InitializeModels(pState) + MyBase.New(pState) Envelope = pEnvelope Envelope.Documents = DocumentModel.List(pEnvelope.Id) Envelope.Receivers = ReceiverModel.ListEnvelopeReceivers(pEnvelope.Id) End Sub - Private Sub InitializeModels(pState As State) - EnvelopeModel = New EnvelopeModel(pState) - DocumentModel = New DocumentModel(pState) - ReceiverModel = New ReceiverModel(pState) - ElementModel = New ElementModel(pState) - HistoryModel = New HistoryModel(pState) - UserModel = New UserModel(pState) - End Sub - #Region "Public" Public Function CreateEnvelope() As Envelope Dim oEnvelope As New Envelope() With { @@ -114,9 +82,7 @@ Public Class EnvelopeEditorController Public Function CleanupEnvelope() As Boolean If Envelope.Status = Common.Constants.EnvelopeStatus.Created Then - 'TODO: Delete Documents and Receivers and elements - Return EnvelopeModel.Delete(Envelope) - + Return DeleteEnvelope(Envelope) Else Return True End If @@ -141,14 +107,17 @@ Public Class EnvelopeEditorController End Try 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 - oCommand.Parameters.Add("ENVELOPE_ID", SqlDbType.Int).Value = Envelope.Id - 'TODO: delete document file, from temp and from documentpath + Public Overloads Function DeleteDocument(pDocument As EnvelopeDocument) As Boolean + Dim oConnection As SqlConnection = Database.GetConnection + Dim oTransaction As SqlTransaction = oConnection.BeginTransaction - Return Database.ExecuteNonQuery(oCommand) + If DeleteDocument(pDocument, oTransaction) = True Then + oTransaction.Commit() + Return True + Else + oTransaction.Rollback() + Return False + End If End Function Public Function SaveEnvelopeDocumentsToFilesystem(pEnvelope As Envelope) As Boolean @@ -206,28 +175,21 @@ Public Class EnvelopeEditorController End Try End Function - Public Function CreateEnvelopeReceivers(pReceivers As List(Of EnvelopeReceiver)) As Boolean - Dim oExistingReceivers As List(Of EnvelopeReceiver) = ReceiverModel.ListReceivers(pReceivers) + Public Function CreateEnvelopeReceivers(pCurrentReceivers As List(Of EnvelopeReceiver)) As Boolean + Dim oExistingReceivers As List(Of EnvelopeReceiver) = ReceiverModel.ListReceivers(pCurrentReceivers) Dim oExistingAddresses = oExistingReceivers.Select(Function(r) r.Email) - Dim oNewReceivers = pReceivers. + Dim oNewReceivers = pCurrentReceivers. Where(Function(r) Not oExistingAddresses.Contains(r.Email)).ToList() - Dim oOldReceivers = pReceivers. - Where(Function(r) oExistingAddresses.Contains(r.Email)).ToList() - - For Each oReceiver In oOldReceivers - oReceiver.Id = oExistingReceivers. - Where(Function(r) r.Email = oReceiver.Email). - Select(Function(r) r.Id). - FirstOrDefault() + For Each oReceiver In oNewReceivers + oReceiver.Id = 0 Next Dim oConnection = Database.GetConnection() Dim oTransaction = oConnection.BeginTransaction() Try - If InsertReceivers(oNewReceivers, oTransaction) = False Then Throw New ApplicationException("Could not insert receivers!") End If @@ -261,16 +223,35 @@ Public Class EnvelopeEditorController End Try End Function - Private Function DeleteReceiver(pReceiver As EnvelopeReceiver) As Boolean + Public Function DeleteReceiver(pReceiver As EnvelopeReceiver) As Boolean + Dim oConnection As SqlConnection = Database.GetConnection() + Dim oTransaction As SqlTransaction = oConnection.BeginTransaction() + Try + If ReceiverModel.Delete(pReceiver.Id, Envelope.Id, oTransaction) = True Then + Dim oResult = Envelope.Documents. + Select(Function(d) ElementModel.DeleteElements(pReceiver.Id, d.Id, oTransaction)). + All(Function(pResult) pResult = True) - Catch ex As Exception + If oResult = False Then + Throw New ApplicationException("Could not delete elements!") + End If + Else + Throw New ApplicationException("Could not delete receiver!") + End If + oTransaction.Commit() + Return True + + Catch ex As Exception + Logger.Error(ex) + oTransaction.Rollback() + Return False End Try End Function - Public Function ElementsExist(pDocumentId As Integer, pReceiverId As Integer) As Boolean - Return ElementModel.ElementsExist(pDocumentId, pReceiverId) + Public Function ElementsExist(pReceiverId As Integer) As Boolean + Return ElementModel.ElementsExist(Envelope.Id, pReceiverId) End Function Private Function InsertReceivers(pReceivers As List(Of EnvelopeReceiver), pTransaction As SqlTransaction) As Boolean diff --git a/EnvelopeGenerator.Form/Controllers/EnvelopeListController.vb b/EnvelopeGenerator.Form/Controllers/EnvelopeListController.vb index f6c57dd9..2181ed5b 100644 --- a/EnvelopeGenerator.Form/Controllers/EnvelopeListController.vb +++ b/EnvelopeGenerator.Form/Controllers/EnvelopeListController.vb @@ -1,22 +1,18 @@ -Imports DigitalData.Modules.Base -Imports DigitalData.Modules.Database -Imports EnvelopeGenerator.Common +Imports EnvelopeGenerator.Common Public Class EnvelopeListController - Inherits BaseClass - Private ReadOnly Database As MSSQLServer - Private ReadOnly State As State - Private ReadOnly EnvelopeModel As EnvelopeModel + Inherits BaseController Public Sub New(pState As State) - MyBase.New(pState.LogConfig) - Database = pState.Database - State = pState - EnvelopeModel = New EnvelopeModel(pState) + MyBase.New(pState) End Sub Public Function ListEnvelopes() As IEnumerable(Of Envelope) Return EnvelopeModel.List() End Function + Public Overloads Function DeleteEnvelope(pEnvelope As Envelope) As Boolean + Return MyBase.DeleteEnvelope(pEnvelope) + End Function + End Class diff --git a/EnvelopeGenerator.Form/Controllers/FieldEditorController.vb b/EnvelopeGenerator.Form/Controllers/FieldEditorController.vb index 77c081db..8dd59318 100644 --- a/EnvelopeGenerator.Form/Controllers/FieldEditorController.vb +++ b/EnvelopeGenerator.Form/Controllers/FieldEditorController.vb @@ -1,14 +1,9 @@ -Imports DigitalData.Modules.Base -Imports DigitalData.Modules.Database -Imports EnvelopeGenerator.Common +Imports EnvelopeGenerator.Common Imports GdPicture14.Annotations Public Class FieldEditorController - Inherits BaseClass + Inherits BaseController - Private ReadOnly ElementModel As ElementModel - - Private ReadOnly Database As MSSQLServer Private ReadOnly Document As EnvelopeDocument Public Property Elements As New List(Of EnvelopeDocumentElement) @@ -19,8 +14,7 @@ Public Class FieldEditorController End Class Public Sub New(pState As State, pDocument As EnvelopeDocument) - MyBase.New(pState.LogConfig) - Database = pState.Database + MyBase.New(pState) Document = pDocument ElementModel = New ElementModel(pState) diff --git a/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj b/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj index d98466f1..dd8a2ffe 100644 --- a/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj +++ b/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj @@ -105,6 +105,7 @@ + Form diff --git a/EnvelopeGenerator.Form/My Project/licenses.licx b/EnvelopeGenerator.Form/My Project/licenses.licx index 5af8c78d..3d8067d5 100644 --- a/EnvelopeGenerator.Form/My Project/licenses.licx +++ b/EnvelopeGenerator.Form/My Project/licenses.licx @@ -1,9 +1,10 @@ -DevExpress.XtraEditors.SearchLookUpEdit, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a DevExpress.XtraEditors.Repository.RepositoryItemLookUpEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraBars.Ribbon.RibbonControl, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a DevExpress.XtraLayout.LayoutControl, DevExpress.XtraLayout.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.Repository.RepositoryItemComboBox, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.SearchLookUpEdit, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraBars.Ribbon.RibbonControl, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.PictureEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.Repository.RepositoryItemComboBox, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a DevExpress.XtraEditors.Repository.RepositoryItemTextEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a diff --git a/EnvelopeGenerator.Form/frmEnvelopeEditor.Designer.vb b/EnvelopeGenerator.Form/frmEnvelopeEditor.Designer.vb index 75eac0d7..93845f19 100644 --- a/EnvelopeGenerator.Form/frmEnvelopeEditor.Designer.vb +++ b/EnvelopeGenerator.Form/frmEnvelopeEditor.Designer.vb @@ -29,10 +29,11 @@ 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 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() + 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 SplashScreenManager1 As DevExpress.XtraSplashScreen.SplashScreenManager = New DevExpress.XtraSplashScreen.SplashScreenManager(Me, Nothing, True, True) Me.colFilename = New DevExpress.XtraGrid.Columns.TileViewColumn() Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl() Me.btnSave = New DevExpress.XtraBars.BarButtonItem() @@ -41,11 +42,13 @@ Partial Public Class frmEnvelopeEditor Me.btnDeleteFile = New DevExpress.XtraBars.BarButtonItem() Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem() Me.btnEditFields = New DevExpress.XtraBars.BarButtonItem() + Me.btnDeleteReceiver = New DevExpress.XtraBars.BarButtonItem() Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage() Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonPageGroup2 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonPageGroup3 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonPageGroup4 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() + Me.RibbonPageGroup5 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.SplitContainerControl1 = New DevExpress.XtraEditors.SplitContainerControl() Me.GridDocuments = New DevExpress.XtraGrid.GridControl() Me.ViewDocuments = New DevExpress.XtraGrid.Views.Tile.TileView() @@ -67,8 +70,6 @@ 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() @@ -163,6 +164,12 @@ Partial Public Class frmEnvelopeEditor Me.btnEditFields.ImageOptions.SvgImage = CType(resources.GetObject("btnEditFields.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) Me.btnEditFields.Name = "btnEditFields" ' + 'btnDeleteReceiver + ' + Me.btnDeleteReceiver.Caption = "Empfänger löschen" + Me.btnDeleteReceiver.Id = 8 + Me.btnDeleteReceiver.Name = "btnDeleteReceiver" + ' 'RibbonPage1 ' Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1, Me.RibbonPageGroup2, Me.RibbonPageGroup3, Me.RibbonPageGroup4, Me.RibbonPageGroup5}) @@ -196,6 +203,12 @@ Partial Public Class frmEnvelopeEditor Me.RibbonPageGroup4.Name = "RibbonPageGroup4" Me.RibbonPageGroup4.Text = "RibbonPageGroup4" ' + 'RibbonPageGroup5 + ' + Me.RibbonPageGroup5.ItemLinks.Add(Me.btnDeleteReceiver) + Me.RibbonPageGroup5.Name = "RibbonPageGroup5" + Me.RibbonPageGroup5.Text = "RibbonPageGroup5" + ' 'SplitContainerControl1 ' Me.SplitContainerControl1.Dock = System.Windows.Forms.DockStyle.Fill @@ -233,18 +246,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(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) + 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) ' 'SplitContainerControl2 ' @@ -405,17 +418,9 @@ Partial Public Class frmEnvelopeEditor Me.OpenFileDialog1.FileName = "OpenFileDialog1" Me.OpenFileDialog1.Filter = "PDF Files|*.pdf" ' - 'RibbonPageGroup5 + 'SplashScreenManager1 ' - 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" + SplashScreenManager1.ClosingDelay = 500 ' 'frmEnvelopeEditor ' diff --git a/EnvelopeGenerator.Form/frmEnvelopeEditor.vb b/EnvelopeGenerator.Form/frmEnvelopeEditor.vb index 274ae393..96b7af67 100644 --- a/EnvelopeGenerator.Form/frmEnvelopeEditor.vb +++ b/EnvelopeGenerator.Form/frmEnvelopeEditor.vb @@ -1,4 +1,6 @@ Imports System.ComponentModel +Imports System.Threading.Tasks +Imports DevExpress.XtraSplashScreen Imports DigitalData.Modules.Logging Imports EnvelopeGenerator.Common @@ -69,23 +71,30 @@ Partial Public Class frmEnvelopeEditor End Sub Private Sub btnEditFields_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnEditFields.ItemClick - If ViewDocuments.GetSelectedRows().Count > 0 Then - Dim oDocument As EnvelopeDocument = DirectCast(ViewDocuments.GetFocusedRow(), EnvelopeDocument) - Dim oGDPictureKey As String = "21182889975216572111813147150675976632" + Dim oHandle = SplashScreenManager.ShowOverlayForm(Me) - - If SaveEnvelope() Then - Dim oForm As New frmFieldEditor() With { - .Document = Controller.Envelope.Documents. - Where(Function(d) d.Filename = oDocument.Filename). - SingleOrDefault(), - .GDPictureKey = oGDPictureKey, - .Receivers = Receivers.ToList, - .State = State - } - oForm.ShowDialog() + Try + If ViewDocuments.GetSelectedRows().Count > 0 Then + Dim oDocument As EnvelopeDocument = DirectCast(ViewDocuments.GetFocusedRow(), EnvelopeDocument) + Dim oGDPictureKey As String = "21182889975216572111813147150675976632" + + If SaveEnvelope() Then + Dim oForm As New frmFieldEditor() With { + .Document = Controller.Envelope.Documents. + Where(Function(d) d.Filename = oDocument.Filename). + SingleOrDefault(), + .GDPictureKey = oGDPictureKey, + .Receivers = Receivers.ToList, + .State = State + } + oForm.Show() + End If End If - End If + Catch ex As Exception + Logger.Error(ex) + Finally + SplashScreenManager.CloseOverlayForm(oHandle) + End Try End Sub Private Function SaveEnvelope() As Boolean @@ -95,16 +104,10 @@ Partial Public Class frmEnvelopeEditor ' Ensure all receivers are saved ViewReceivers.CloseEditor() - Dim oReceivers = Receivers.ToList - If Controller.CreateEnvelopeReceivers(Receivers.ToList) = False Then - MsgBox("Fehler beim Speichern der Empfänger!", MsgBoxStyle.Critical, Text) - Return False - End If - Dim oEnvelope = Controller.Envelope oEnvelope.Subject = oSubject oEnvelope.Message = oMessage - oEnvelope.Receivers = oReceivers + oEnvelope.Receivers = Receivers.ToList oEnvelope.Documents = Documents.ToList Dim oErrors = oEnvelope.Validate() @@ -112,7 +115,14 @@ Partial Public Class frmEnvelopeEditor Dim oError = "Fehler beim Speichern des Umschlags:" & vbNewLine & vbNewLine & String.Join(vbNewLine, oErrors) MsgBox(oError, MsgBoxStyle.Exclamation, Text) Return False - ElseIf Controller.SaveEnvelope(oEnvelope) = False Then + End If + + If Controller.CreateEnvelopeReceivers(oEnvelope.Receivers) = False Then + MsgBox("Fehler beim Speichern der Empfänger!", MsgBoxStyle.Critical, Text) + Return False + End If + + If Controller.SaveEnvelope(oEnvelope) = False Then MsgBox("Fehler beim Speichern des Umschlags!", MsgBoxStyle.Critical, Text) Return False Else @@ -120,22 +130,31 @@ Partial Public Class frmEnvelopeEditor End If End Function - 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 oReceiver As EnvelopeReceiver = ViewReceivers.GetFocusedRow() + + If oReceiver Is Nothing Then + Exit Sub + End If - 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 Controller.ElementsExist(oReceiver.Id) Then + oMessage = "Es gibt für diesen Empfänger bereits Elemente. Wollen Sie den Empfänger trotzdem löschen?" + End If + If MsgBox(oMessage, MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Text) = MsgBoxResult.No Then Exit Sub End If + If Controller.DeleteReceiver(oReceiver) Then + Receivers.Remove(oReceiver) + Else + MsgBox("Empfänger konnte nicht entfernt werden.", MsgBoxStyle.Critical, Text) + End If + End Sub End Class diff --git a/EnvelopeGenerator.Form/frmMain.Designer.vb b/EnvelopeGenerator.Form/frmMain.Designer.vb index 0f17a88f..fe90e9c1 100644 --- a/EnvelopeGenerator.Form/frmMain.Designer.vb +++ b/EnvelopeGenerator.Form/frmMain.Designer.vb @@ -1,9 +1,9 @@ - _ + Partial Class frmMain Inherits DevExpress.XtraBars.Ribbon.RibbonForm 'Form overrides dispose to clean up the component list. - _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) If disposing AndAlso components IsNot Nothing Then components.Dispose() @@ -17,12 +17,14 @@ Partial Class frmMain 'NOTE: The following procedure is required by the Windows Form Designer 'It can be modified using the Windows Form Designer. 'Do not modify it using the code editor. - _ + Private Sub InitializeComponent() Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMain)) + Dim SplashScreenManager1 As DevExpress.XtraSplashScreen.SplashScreenManager = New DevExpress.XtraSplashScreen.SplashScreenManager(Me, Nothing, True, True) Me.RibbonControl = New DevExpress.XtraBars.Ribbon.RibbonControl() Me.btnCreateEnvelope = New DevExpress.XtraBars.BarButtonItem() Me.btnEditEnvelope = New DevExpress.XtraBars.BarButtonItem() + Me.btnDeleteEnvelope = New DevExpress.XtraBars.BarButtonItem() Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage() Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonStatusBar = New DevExpress.XtraBars.Ribbon.RibbonStatusBar() @@ -36,9 +38,9 @@ Partial Class frmMain 'RibbonControl ' Me.RibbonControl.ExpandCollapseItem.Id = 0 - Me.RibbonControl.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl.ExpandCollapseItem, Me.RibbonControl.SearchEditItem, Me.btnCreateEnvelope, Me.btnEditEnvelope}) + Me.RibbonControl.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl.ExpandCollapseItem, Me.RibbonControl.SearchEditItem, Me.btnCreateEnvelope, Me.btnEditEnvelope, Me.btnDeleteEnvelope}) Me.RibbonControl.Location = New System.Drawing.Point(0, 0) - Me.RibbonControl.MaxItemId = 3 + Me.RibbonControl.MaxItemId = 5 Me.RibbonControl.Name = "RibbonControl" Me.RibbonControl.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1}) Me.RibbonControl.Size = New System.Drawing.Size(1088, 158) @@ -58,6 +60,13 @@ Partial Class frmMain Me.btnEditEnvelope.ImageOptions.SvgImage = CType(resources.GetObject("btnEditEnvelope.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) Me.btnEditEnvelope.Name = "btnEditEnvelope" ' + 'btnDeleteEnvelope + ' + Me.btnDeleteEnvelope.Caption = "Umschlag löschen" + Me.btnDeleteEnvelope.Id = 4 + Me.btnDeleteEnvelope.ImageOptions.SvgImage = CType(resources.GetObject("btnDeleteEnvelope.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) + Me.btnDeleteEnvelope.Name = "btnDeleteEnvelope" + ' 'RibbonPage1 ' Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1}) @@ -68,6 +77,7 @@ Partial Class frmMain ' Me.RibbonPageGroup1.ItemLinks.Add(Me.btnCreateEnvelope) Me.RibbonPageGroup1.ItemLinks.Add(Me.btnEditEnvelope) + Me.RibbonPageGroup1.ItemLinks.Add(Me.btnDeleteEnvelope) Me.RibbonPageGroup1.Name = "RibbonPageGroup1" Me.RibbonPageGroup1.Text = "RibbonPageGroup1" ' @@ -94,6 +104,10 @@ Partial Class frmMain Me.ViewEnvelopes.GridControl = Me.GridEnvelopes Me.ViewEnvelopes.Name = "ViewEnvelopes" ' + 'SplashScreenManager1 + ' + SplashScreenManager1.ClosingDelay = 500 + ' 'frmMain ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -122,4 +136,5 @@ Partial Class frmMain Friend WithEvents GridEnvelopes As DevExpress.XtraGrid.GridControl Friend WithEvents ViewEnvelopes As DevExpress.XtraGrid.Views.Grid.GridView Friend WithEvents btnEditEnvelope As DevExpress.XtraBars.BarButtonItem + Friend WithEvents btnDeleteEnvelope As DevExpress.XtraBars.BarButtonItem End Class diff --git a/EnvelopeGenerator.Form/frmMain.resx b/EnvelopeGenerator.Form/frmMain.resx index acb42b89..94f8fcbb 100644 --- a/EnvelopeGenerator.Form/frmMain.resx +++ b/EnvelopeGenerator.Form/frmMain.resx @@ -153,6 +153,25 @@ LDRMNCwxMnYxNWMwLDAuNSwwLjUsMSwxLDFoMjJjMC41LDAsMS0wLjUsMS0xVjEyTDE2LDR6IE0yNiwx My4xbC0xMCw2LjdMNiwxMy4xdjBsMTAtNi43TDI2LDEzLjEgICBMMjYsMTMuMXoiIGNsYXNzPSJZZWxs b3ciIC8+DQogIDwvZz4NCjwvc3ZnPgs= + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 + LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl + dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAKoCAAAC77u/ + PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi + IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv + MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh + Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg + MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z + ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLkdyZWVue2ZpbGw6IzAz + OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9Cgkuc3Qwe29wYWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNp + dHk6MC41O30KPC9zdHlsZT4NCiAgPGcgaWQ9IlRyYXNoIj4NCiAgICA8cGF0aCBkPSJNOCwyN2MwLDAu + NSwwLjUsMSwxLDFoMTRjMC41LDAsMS0wLjUsMS0xVjEySDhWMjd6IiBjbGFzcz0iQmxhY2siIC8+DQog + ICAgPHBhdGggZD0iTTI1LDZoLTdWNWMwLTAuNS0wLjUtMS0xLTFoLTJjLTAuNSwwLTEsMC41LTEsMXYx + SDdDNi41LDYsNiw2LjUsNiw3djNoMjBWN0MyNiw2LjUsMjUuNSw2LDI1LDZ6IiBjbGFzcz0iQmxhY2si + IC8+DQogIDwvZz4NCjwvc3ZnPgs= \ No newline at end of file diff --git a/EnvelopeGenerator.Form/frmMain.vb b/EnvelopeGenerator.Form/frmMain.vb index cb17e011..a73510c6 100644 --- a/EnvelopeGenerator.Form/frmMain.vb +++ b/EnvelopeGenerator.Form/frmMain.vb @@ -5,6 +5,7 @@ Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Base Imports DigitalData.GUIs.Common Imports EnvelopeGenerator.Common +Imports DevExpress.XtraSplashScreen Public Class frmMain Private LogConfig As LogConfig @@ -74,8 +75,16 @@ Public Class frmMain End Function Private Sub btnCreateEnvelope_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnCreateEnvelope.ItemClick - Dim oForm As New frmEnvelopeEditor() With {.State = State} - oForm.ShowDialog() + Dim oHandle = SplashScreenManager.ShowOverlayForm(Me) + Try + Dim oForm As New frmEnvelopeEditor() With {.State = State} + oForm.ShowDialog() + GridEnvelopes.DataSource = Controller.ListEnvelopes() + Catch ex As Exception + Logger.Error(ex) + Finally + SplashScreenManager.CloseOverlayForm(oHandle) + End Try End Sub Private Sub btnEditEnvelope_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnEditEnvelope.ItemClick @@ -92,6 +101,20 @@ Public Class frmMain GridEnvelopes.DataSource = Controller.ListEnvelopes() End Sub + Private Sub DeleteEnvelope(pRowHandle As Integer) + Dim oEnvelope As Envelope = ViewEnvelopes.GetRow(pRowHandle) + + If MsgBox("Wollen Sie diesen Umschlag wirklich löschen?", MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Text) = MsgBoxResult.No Then + Exit Sub + End If + + If Controller.DeleteEnvelope(oEnvelope) Then + GridEnvelopes.DataSource = Controller.ListEnvelopes() + Else + MsgBox("Umschlag konnte nicht gelöscht werden!", MsgBoxStyle.Critical, Text) + End If + End Sub + Private Sub ViewEnvelopes_DoubleClick(sender As Object, e As EventArgs) Handles ViewEnvelopes.DoubleClick Dim oSelectedRows = ViewEnvelopes.GetSelectedRows() If oSelectedRows.Count > 0 Then @@ -99,4 +122,10 @@ Public Class frmMain End If End Sub + Private Sub btnDeleteEnvelope_ItemClick_1(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnDeleteEnvelope.ItemClick + Dim oSelectedRows = ViewEnvelopes.GetSelectedRows() + If oSelectedRows.Count > 0 Then + DeleteEnvelope(oSelectedRows.First) + End If + End Sub End Class \ No newline at end of file