diff --git a/DDMonorepo.sln b/DDMonorepo.sln
index dc0ee726..5f01bae5 100644
--- a/DDMonorepo.sln
+++ b/DDMonorepo.sln
@@ -25,8 +25,6 @@ Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Messaging", "Message\Messag
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DDTestService", "DDTestService\DDTestService.vbproj", "{63B0EAA3-8BF5-46DA-9040-15E781F4C3B1}"
EndProject
-Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Variables", "Variables\Variables.vbproj", "{836C9ADE-E04E-4E1E-B17A-201E68014790}"
-EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Config", "Modules.Config\Config.vbproj", "{44982F9B-6116-44E2-85D0-F39650B1EF99}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Controls", "Controls", "{F98C0329-C004-417F-B2AB-7466E88D8220}"
@@ -76,6 +74,8 @@ Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "JobRunner", "Service.JobRun
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "LookupControlGui", "LookupControlGui\LookupControlGui.vbproj", "{B65E24B3-D334-455D-A0BF-B33B8358B013}"
EndProject
+Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MonoDiag", "LoggerDiag\MonoDiag.vbproj", "{3D437957-B90B-4D8F-9219-6D19B0C90994}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -110,10 +110,6 @@ Global
{63B0EAA3-8BF5-46DA-9040-15E781F4C3B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{63B0EAA3-8BF5-46DA-9040-15E781F4C3B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{63B0EAA3-8BF5-46DA-9040-15E781F4C3B1}.Release|Any CPU.Build.0 = Release|Any CPU
- {836C9ADE-E04E-4E1E-B17A-201E68014790}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {836C9ADE-E04E-4E1E-B17A-201E68014790}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {836C9ADE-E04E-4E1E-B17A-201E68014790}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {836C9ADE-E04E-4E1E-B17A-201E68014790}.Release|Any CPU.Build.0 = Release|Any CPU
{44982F9B-6116-44E2-85D0-F39650B1EF99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{44982F9B-6116-44E2-85D0-F39650B1EF99}.Debug|Any CPU.Build.0 = Debug|Any CPU
{44982F9B-6116-44E2-85D0-F39650B1EF99}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -186,6 +182,10 @@ Global
{B65E24B3-D334-455D-A0BF-B33B8358B013}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B65E24B3-D334-455D-A0BF-B33B8358B013}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B65E24B3-D334-455D-A0BF-B33B8358B013}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3D437957-B90B-4D8F-9219-6D19B0C90994}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3D437957-B90B-4D8F-9219-6D19B0C90994}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3D437957-B90B-4D8F-9219-6D19B0C90994}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3D437957-B90B-4D8F-9219-6D19B0C90994}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -198,7 +198,6 @@ Global
{EAF0EA75-5FA7-485D-89C7-B2D843B03A96} = {3E2008C8-27B1-41DD-9B1A-0C4029F6AECC}
{AF664D85-0A4B-4BAB-A2F8-83110C06553A} = {3E2008C8-27B1-41DD-9B1A-0C4029F6AECC}
{63B0EAA3-8BF5-46DA-9040-15E781F4C3B1} = {7AF3F9C2-C939-4A08-95C1-0453207E298A}
- {836C9ADE-E04E-4E1E-B17A-201E68014790} = {3E2008C8-27B1-41DD-9B1A-0C4029F6AECC}
{44982F9B-6116-44E2-85D0-F39650B1EF99} = {3E2008C8-27B1-41DD-9B1A-0C4029F6AECC}
{3DCD6D1A-C830-4241-B7E4-27430E7EA483} = {F98C0329-C004-417F-B2AB-7466E88D8220}
{991D0231-4623-496D-8BD0-9CA906029CBC} = {3E2008C8-27B1-41DD-9B1A-0C4029F6AECC}
@@ -217,6 +216,7 @@ Global
{7386AB04-DF8D-4DFB-809D-1FAC8212CB7E} = {CC368D6A-6AC4-4EB9-A092-14700FABEF7A}
{926E6474-5613-4373-BB99-B101158B91EF} = {7AF3F9C2-C939-4A08-95C1-0453207E298A}
{B65E24B3-D334-455D-A0BF-B33B8358B013} = {CC368D6A-6AC4-4EB9-A092-14700FABEF7A}
+ {3D437957-B90B-4D8F-9219-6D19B0C90994} = {8FFE925E-8B84-45F1-93CB-32B1C96F41EB}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C1BE4090-A0FD-48AF-86CB-39099D14B286}
diff --git a/DDZUGFeRDService/ThreadRunner.vb b/DDZUGFeRDService/ThreadRunner.vb
index 45dbb8d5..d1ffbe67 100644
--- a/DDZUGFeRDService/ThreadRunner.vb
+++ b/DDZUGFeRDService/ThreadRunner.vb
@@ -20,6 +20,7 @@ Public Class ThreadRunner
Private _successDirectory As String
Private _errorDirectory As String
Private _originalEmailDirectory As String
+ Private _attachmentDirectory As String
Private _zugferd As ZUGFeRDInterface
Private _jobArguments As WorkerArgs
Private _mssql As MSSQLServer
@@ -148,6 +149,9 @@ Public Class ThreadRunner
Case ZUGFERD_REJECTED_EML
args.RejectedEmailDirectory = row.Item("FOLDER_PATH")
+ Case ZUGFERD_ATTACHMENTS
+ args.AttachmentsSubDirectory = row.Item("FOLDER_PATH")
+
End Select
Next
diff --git a/Filesystem/Encryption.vb b/Filesystem/Encryption.vb
index b7a3b95b..1ec620de 100644
--- a/Filesystem/Encryption.vb
+++ b/Filesystem/Encryption.vb
@@ -1,5 +1,6 @@
Imports System.IO
Imports System.Security.Cryptography
+Imports System.Text.Encoding
Imports DigitalData.Modules.Logging
'''
@@ -19,8 +20,6 @@ Public Class Encryption
Private ReadOnly _password As String
Private _logger As Logger
-
-
Public Sub New(LogConfig As LogConfig, Password As String)
_logger = LogConfig.GetLogger()
@@ -31,13 +30,24 @@ Public Class Encryption
_password = Password
End Sub
- Public Async Function EncryptAsync(oPlainTextBytes As Byte()) As Task(Of Byte())
+ Public Async Function EncryptAsync(PlainTextBytes As Byte()) As Task(Of Byte())
Return Await Task.Run(Function() As Byte()
- Return Encrypt(oPlainTextBytes)
+ Return Encrypt(PlainTextBytes)
End Function)
End Function
- Public Function Encrypt(oPlainTextBytes As Byte()) As Byte()
+ Public Function Encrypt(PlainText As String) As String
+ Try
+ Dim oBytes As Byte() = UTF8.GetBytes(PlainText)
+ Dim oEncrypted As Byte() = Encrypt(oBytes)
+ Return UTF8.GetString(oEncrypted)
+ Catch ex As Exception
+ _logger.Error(ex)
+ Throw ex
+ End Try
+ End Function
+
+ Public Function Encrypt(PlainTextBytes As Byte()) As Byte()
Try
' Salt and IV is randomly generated each time, but is preprended to encrypted cipher text
' so that the same Salt and IV values can be used when decrypting.
@@ -53,7 +63,7 @@ Public Class Encryption
Using oEncryptor = oSymmetricKey.CreateEncryptor(oKeyBytes, oIvStringBytes)
Using oMemoryStream = New MemoryStream()
Using oCryptoStream = New CryptoStream(oMemoryStream, oEncryptor, CryptoStreamMode.Write)
- oCryptoStream.Write(oPlainTextBytes, 0, oPlainTextBytes.Length)
+ oCryptoStream.Write(PlainTextBytes, 0, PlainTextBytes.Length)
oCryptoStream.FlushFinalBlock()
' Create the final bytes as a concatenation of the random salt bytes, the random iv bytes and the cipher bytes.
Dim oCipherTextBytes = oSaltStringBytes
@@ -79,16 +89,27 @@ Public Class Encryption
End Function)
End Function
- Public Function Decrypt(cipherTextBytesWithSaltAndIv As Byte()) As Byte()
+ Public Function Decrypt(CipherTextPlainWithSaltAndIv As String) As String
+ Try
+ Dim oBytes As Byte() = UTF8.GetBytes(CipherTextPlainWithSaltAndIv)
+ Dim oDecrypted As Byte() = Decrypt(oBytes)
+ Return UTF8.GetString(oDecrypted)
+ Catch ex As Exception
+ _logger.Error(ex)
+ Throw ex
+ End Try
+ End Function
+
+ Public Function Decrypt(CipherTextBytesWithSaltAndIv As Byte()) As Byte()
Try
' Get the complete stream of bytes that represent:
' [32 bytes of Salt] + [32 bytes of IV] + [n bytes of CipherText]
' Get the saltbytes by extracting the first 32 bytes from the supplied cipherText bytes.
- Dim oSaltStringBytes = cipherTextBytesWithSaltAndIv.Take(KEY_SIZE / 8).ToArray()
+ Dim oSaltStringBytes = CipherTextBytesWithSaltAndIv.Take(KEY_SIZE / 8).ToArray()
' Get the IV bytes by extracting the next 32 bytes from the supplied cipherText bytes.
- Dim oIvStringBytes = cipherTextBytesWithSaltAndIv.Skip(KEY_SIZE / 8).Take(KEY_SIZE / 8).ToArray()
+ Dim oIvStringBytes = CipherTextBytesWithSaltAndIv.Skip(KEY_SIZE / 8).Take(KEY_SIZE / 8).ToArray()
' Get the actual cipher text bytes by removing the first 64 bytes from the cipherText string.
- Dim oCipherTextBytes = cipherTextBytesWithSaltAndIv.Skip((KEY_SIZE / 8) * 2).Take(cipherTextBytesWithSaltAndIv.Length - ((KEY_SIZE / 8) * 2)).ToArray()
+ Dim oCipherTextBytes = CipherTextBytesWithSaltAndIv.Skip((KEY_SIZE / 8) * 2).Take(CipherTextBytesWithSaltAndIv.Length - ((KEY_SIZE / 8) * 2)).ToArray()
Using oPassword = New Rfc2898DeriveBytes(_password, oSaltStringBytes, DERIVATION_ITERATIONS)
Dim oKeyBytes = oPassword.GetBytes(KEY_SIZE / 8)
diff --git a/GUIs.ClientSuite/ApplicationEvents.vb b/GUIs.ClientSuite/ApplicationEvents.vb
index c581efb4..e3e9c513 100644
--- a/GUIs.ClientSuite/ApplicationEvents.vb
+++ b/GUIs.ClientSuite/ApplicationEvents.vb
@@ -13,6 +13,7 @@ Namespace My
Private _Logger As Logger
Private _BaseUserConfigPath As String = Windows.Forms.Application.UserAppDataPath
+ Private _BaseLocalUserConfigPath As String = Windows.Forms.Application.LocalUserAppDataPath
Private _BaseMachineConfigPath As String = Windows.Forms.Application.CommonAppDataPath
Public Sub App_Startup() Handles Me.Startup
@@ -20,11 +21,11 @@ Namespace My
' System Config files like Service Url will be saved in %LocalAppdata% so they will remain on the machine
Dim oSystemConfigManager As New ConfigManager(Of ClassConfig)(oLogConfig,
- Windows.Forms.Application.UserAppDataPath,
- Windows.Forms.Application.CommonAppDataPath)
+ _BaseLocalUserConfigPath,
+ _BaseMachineConfigPath)
' Layout files will be saved in %Appdata% (Roaming) so they will be syncronized with the user profile
- Dim oUIConfigPath = IO.Path.Combine(Windows.Forms.Application.UserAppDataPath, ClassConstants.FOLDER_NAME_LAYOUT)
+ Dim oUIConfigPath = IO.Path.Combine(_BaseUserConfigPath, ClassConstants.FOLDER_NAME_LAYOUT)
Dim oUIConfigManager As New ConfigManager(Of ClassUIConfig)(oLogConfig, oUIConfigPath, oUIConfigPath)
LogConfig = oLogConfig
diff --git a/GUIs.ClientSuite/ClassPanelManager.vb b/GUIs.ClientSuite/ClassPanelManager.vb
index 123e831e..a127fde9 100644
--- a/GUIs.ClientSuite/ClassPanelManager.vb
+++ b/GUIs.ClientSuite/ClassPanelManager.vb
@@ -40,9 +40,8 @@ Public Class PanelManager
Private Sub View_DocumentDeactivated(sender As Object, e As DocumentEventArgs)
Dim oDocument As BaseDocument = e.Document
- ' TODO: oDocument.Control can be nothing
- Dim oHashcode As Integer = oDocument.Control.GetHashCode
+ ' TODO: oDocument.Control can be nothing
If oDocument Is Nothing Then
Exit Sub
End If
@@ -51,7 +50,7 @@ Public Class PanelManager
For Each oPanel As DockPanel In _dockManager.Panels
Dim oTag As Integer = oPanel.Tag
- If oTag = oHashcode Then
+ If oTag = oDocument.Control.GetHashCode Then
oPanel.Hide()
End If
Next
diff --git a/GUIs.ClientSuite/ClientSuite.vbproj b/GUIs.ClientSuite/ClientSuite.vbproj
index f10fbcc8..4232a45d 100644
--- a/GUIs.ClientSuite/ClientSuite.vbproj
+++ b/GUIs.ClientSuite/ClientSuite.vbproj
@@ -69,6 +69,7 @@
+
@@ -86,9 +87,9 @@
..\packages\FirebirdSql.EntityFrameworkCore.Firebird.6.4.0\lib\netstandard2.0\FirebirdSql.EntityFrameworkCore.Firebird.dll
+
- False
- ..\Modules.Logging\bin\Debug\NLog.dll
+ ..\packages\NLog.4.5.11\lib\net45\NLog.dll
..\packages\jacobslusser.ScintillaNET.3.6.3\lib\net40\ScintillaNET.dll
@@ -101,6 +102,7 @@
+
@@ -168,10 +170,16 @@
Form
-
+
+ frmWorkflowOverview.vb
+
+
+ Form
+
+
frmWorkflowStep.vb
-
+
Form
@@ -197,6 +205,20 @@
+
+ GridOverview.vb
+
+
+ UserControl
+
+
+ NavControlOverview.vb
+
+
+ UserControl
+
+
+
DockManagerTest.vb
@@ -330,7 +352,10 @@
frmFormDesigner.vb
-
+
+ frmWorkflowOverview.vb
+
+
frmWorkflowStep.vb
@@ -339,6 +364,12 @@
DocumentPanel.vb
+
+ GridOverview.vb
+
+
+ NavControlOverview.vb
+
DockManagerTest.vb
@@ -490,7 +521,17 @@
-
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GUIs.ClientSuite/Common/ClassCommonViews.vb b/GUIs.ClientSuite/Common/ClassCommonViews.vb
index ae25cbf6..9cb0a812 100644
--- a/GUIs.ClientSuite/Common/ClassCommonViews.vb
+++ b/GUIs.ClientSuite/Common/ClassCommonViews.vb
@@ -51,4 +51,26 @@ Public Class ClassCommonViews
Throw ex
End Try
End Function
+
+ Public Async Function VWIDB_GUI_WF_OVERVIEW(UserId As Int64, FormId As Int64) As Task(Of DataTable)
+ Try
+ My.Channel.CreateDatabaseRequest("Load Control Data", True)
+
+ Dim oSQL As String = $"SELECT * FROM VWIDB_GUI_WF_OVERVIEW WHERE USERID = {UserId} AND FORMID = {FormId}"
+ Dim oResult = Await My.Channel.ReturnDatatableAsync(oSQL)
+ Dim oTable = oResult.Table
+
+ If Not oResult.OK Then
+ _Logger.Error(New ApplicationException(oResult.ErrorMessage))
+ Return Nothing
+ End If
+
+ My.Channel.CloseDatabaseRequest()
+
+ Return oResult.Table
+ Catch ex As Exception
+ _Logger.Error(ex)
+ Throw ex
+ End Try
+ End Function
End Class
diff --git a/GUIs.ClientSuite/ModuleWorkflow/GridOverview.Designer.vb b/GUIs.ClientSuite/ModuleWorkflow/GridOverview.Designer.vb
new file mode 100644
index 00000000..15a1c6bd
--- /dev/null
+++ b/GUIs.ClientSuite/ModuleWorkflow/GridOverview.Designer.vb
@@ -0,0 +1,74 @@
+ _
+Partial Class GridOverview
+ Inherits System.Windows.Forms.UserControl
+
+ 'UserControl überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+ _
+ Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+ Try
+ If disposing AndAlso components IsNot Nothing Then
+ components.Dispose()
+ End If
+ Finally
+ MyBase.Dispose(disposing)
+ End Try
+ End Sub
+
+ 'Wird vom Windows Form-Designer benötigt.
+ Private components As System.ComponentModel.IContainer
+
+ 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+ 'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
+ 'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+ _
+ Private Sub InitializeComponent()
+ Me.GridControl = New DevExpress.XtraGrid.GridControl()
+ Me.gvOverview = New DevExpress.XtraGrid.Views.Grid.GridView()
+ Me.GridView1 = New DevExpress.XtraGrid.Views.Grid.GridView()
+ CType(Me.GridControl, System.ComponentModel.ISupportInitialize).BeginInit()
+ CType(Me.gvOverview, System.ComponentModel.ISupportInitialize).BeginInit()
+ CType(Me.GridView1, System.ComponentModel.ISupportInitialize).BeginInit()
+ Me.SuspendLayout()
+ '
+ 'GridControl
+ '
+ Me.GridControl.Dock = System.Windows.Forms.DockStyle.Fill
+ Me.GridControl.Location = New System.Drawing.Point(0, 0)
+ Me.GridControl.MainView = Me.gvOverview
+ Me.GridControl.Name = "GridControl"
+ Me.GridControl.Size = New System.Drawing.Size(626, 461)
+ Me.GridControl.TabIndex = 1
+ Me.GridControl.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.gvOverview, Me.GridView1})
+ '
+ 'gvOverview
+ '
+ Me.gvOverview.GridControl = Me.GridControl
+ Me.gvOverview.Name = "gvOverview"
+ Me.gvOverview.OptionsFind.AlwaysVisible = True
+ Me.gvOverview.OptionsView.GroupDrawMode = DevExpress.XtraGrid.Views.Grid.GroupDrawMode.Office
+ Me.gvOverview.OptionsView.ShowGroupedColumns = True
+ Me.gvOverview.OptionsView.ShowVerticalLines = DevExpress.Utils.DefaultBoolean.[True]
+ '
+ 'GridView1
+ '
+ Me.GridView1.GridControl = Me.GridControl
+ Me.GridView1.Name = "GridView1"
+ '
+ 'GridOverview
+ '
+ Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
+ Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+ Me.Controls.Add(Me.GridControl)
+ Me.Name = "GridOverview"
+ Me.Size = New System.Drawing.Size(626, 461)
+ CType(Me.GridControl, System.ComponentModel.ISupportInitialize).EndInit()
+ CType(Me.gvOverview, System.ComponentModel.ISupportInitialize).EndInit()
+ CType(Me.GridView1, System.ComponentModel.ISupportInitialize).EndInit()
+ Me.ResumeLayout(False)
+
+ End Sub
+
+ Friend WithEvents GridControl As DevExpress.XtraGrid.GridControl
+ Friend WithEvents gvOverview As DevExpress.XtraGrid.Views.Grid.GridView
+ Friend WithEvents GridView1 As DevExpress.XtraGrid.Views.Grid.GridView
+End Class
diff --git a/GUIs.ClientSuite/FormWorkflow/frmWorkflowStep.resx b/GUIs.ClientSuite/ModuleWorkflow/GridOverview.resx
similarity index 100%
rename from GUIs.ClientSuite/FormWorkflow/frmWorkflowStep.resx
rename to GUIs.ClientSuite/ModuleWorkflow/GridOverview.resx
diff --git a/GUIs.ClientSuite/ModuleWorkflow/GridOverview.vb b/GUIs.ClientSuite/ModuleWorkflow/GridOverview.vb
new file mode 100644
index 00000000..9020cd81
--- /dev/null
+++ b/GUIs.ClientSuite/ModuleWorkflow/GridOverview.vb
@@ -0,0 +1,27 @@
+Public Class GridOverview
+ Private _DataSource As List(Of WorkflowItem)
+
+ Public Property DataSource As List(Of WorkflowItem)
+ Get
+ Return _DataSource
+ End Get
+ Set(value As List(Of WorkflowItem))
+ _DataSource = value
+ GridControl.DataSource = value
+
+ If Not IsNothing(value) Then
+ ApplyStyles()
+ End If
+ End Set
+ End Property
+
+ Private Sub ApplyStyles()
+ With gvOverview.Columns.Item("StateImage")
+ .VisibleIndex = 0
+ .MaxWidth = 20
+ .OptionsColumn.ShowCaption = False
+ End With
+ gvOverview.Columns.Item("Process").VisibleIndex = 1
+ gvOverview.Columns.Item("State").Visible = False
+ End Sub
+End Class
diff --git a/GUIs.ClientSuite/ModuleWorkflow/NavControlOverview.Designer.vb b/GUIs.ClientSuite/ModuleWorkflow/NavControlOverview.Designer.vb
new file mode 100644
index 00000000..56bf792f
--- /dev/null
+++ b/GUIs.ClientSuite/ModuleWorkflow/NavControlOverview.Designer.vb
@@ -0,0 +1,60 @@
+ _
+Partial Class NavControlOverview
+ Inherits System.Windows.Forms.UserControl
+
+ 'UserControl überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+ _
+ Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+ Try
+ If disposing AndAlso components IsNot Nothing Then
+ components.Dispose()
+ End If
+ Finally
+ MyBase.Dispose(disposing)
+ End Try
+ End Sub
+
+ 'Wird vom Windows Form-Designer benötigt.
+ Private components As System.ComponentModel.IContainer
+
+ 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+ 'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
+ 'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+ _
+ Private Sub InitializeComponent()
+ Me.NavBarControl = New DevExpress.XtraNavBar.NavBarControl()
+ Me.NavBarGroup1 = New DevExpress.XtraNavBar.NavBarGroup()
+ CType(Me.NavBarControl, System.ComponentModel.ISupportInitialize).BeginInit()
+ Me.SuspendLayout()
+ '
+ 'NavBarControl
+ '
+ Me.NavBarControl.ActiveGroup = Me.NavBarGroup1
+ Me.NavBarControl.Dock = System.Windows.Forms.DockStyle.Fill
+ Me.NavBarControl.Groups.AddRange(New DevExpress.XtraNavBar.NavBarGroup() {Me.NavBarGroup1})
+ Me.NavBarControl.Location = New System.Drawing.Point(0, 0)
+ Me.NavBarControl.Name = "NavBarControl"
+ Me.NavBarControl.Size = New System.Drawing.Size(150, 150)
+ Me.NavBarControl.TabIndex = 0
+ Me.NavBarControl.Text = "NavBarControl1"
+ '
+ 'NavBarGroup1
+ '
+ Me.NavBarGroup1.Caption = "Workflow"
+ Me.NavBarGroup1.Expanded = True
+ Me.NavBarGroup1.Name = "NavBarGroup1"
+ '
+ 'NavControlOverview
+ '
+ Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
+ Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+ Me.Controls.Add(Me.NavBarControl)
+ Me.Name = "NavControlOverview"
+ CType(Me.NavBarControl, System.ComponentModel.ISupportInitialize).EndInit()
+ Me.ResumeLayout(False)
+
+ End Sub
+
+ Friend WithEvents NavBarControl As DevExpress.XtraNavBar.NavBarControl
+ Friend WithEvents NavBarGroup1 As DevExpress.XtraNavBar.NavBarGroup
+End Class
diff --git a/GUIs.ClientSuite/ModuleWorkflow/NavControlOverview.resx b/GUIs.ClientSuite/ModuleWorkflow/NavControlOverview.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/GUIs.ClientSuite/ModuleWorkflow/NavControlOverview.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
\ No newline at end of file
diff --git a/GUIs.ClientSuite/ModuleWorkflow/NavControlOverview.vb b/GUIs.ClientSuite/ModuleWorkflow/NavControlOverview.vb
new file mode 100644
index 00000000..d2150829
--- /dev/null
+++ b/GUIs.ClientSuite/ModuleWorkflow/NavControlOverview.vb
@@ -0,0 +1,40 @@
+Imports DevExpress.XtraNavBar
+
+Public Class NavControlOverview
+ Private _DataSource As List(Of WorkflowItem)
+
+ Public Property DataSource As List(Of WorkflowItem)
+ Get
+ Return _DataSource
+ End Get
+ Set(value As List(Of WorkflowItem))
+ _DataSource = value
+
+ 'TODO: Update Navbar Items
+ If Not IsNothing(value) Then
+ UpdateItems(value)
+ End If
+
+ End Set
+ End Property
+
+ Private Sub UpdateItems(WorkflowItems As List(Of WorkflowItem))
+ Dim oTotalItems = WorkflowItems.Count
+ Dim oGroupedItems = WorkflowItems.GroupBy(Function(Item As WorkflowItem)
+ Return Item.Process
+ End Function)
+
+ AddItem("Alle Workflows", oTotalItems)
+
+ For Each oGroupedItem As IGrouping(Of String, WorkflowItem) In oGroupedItems
+ AddItem(oGroupedItem.Key, oGroupedItem.Count)
+ Next
+ End Sub
+
+ Private Sub AddItem(Title As String, Count As Integer)
+ Dim oItem = New NavBarItem() With {
+ .Caption = $"{Title} ({Count})"
+ }
+ NavBarControl.Groups.First().ItemLinks.Add(oItem)
+ End Sub
+End Class
diff --git a/GUIs.ClientSuite/ModuleWorkflow/WorkflowDetail.vb b/GUIs.ClientSuite/ModuleWorkflow/WorkflowDetail.vb
new file mode 100644
index 00000000..089ffd99
--- /dev/null
+++ b/GUIs.ClientSuite/ModuleWorkflow/WorkflowDetail.vb
@@ -0,0 +1,3 @@
+Public Class WorkflowDetail
+ Public Property Title
+End Class
diff --git a/GUIs.ClientSuite/ModuleWorkflow/WorkflowItem.vb b/GUIs.ClientSuite/ModuleWorkflow/WorkflowItem.vb
new file mode 100644
index 00000000..5b34c9b2
--- /dev/null
+++ b/GUIs.ClientSuite/ModuleWorkflow/WorkflowItem.vb
@@ -0,0 +1,39 @@
+Imports System.ComponentModel
+Imports DigitalData.GUIs.ClientSuite
+
+Public Class WorkflowItem
+ Implements INotifyPropertyChanged
+
+ Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
+
+ Private _state As String
+
+ Public Property Title As String
+ Public Property CreatedAt As DateTime
+ Public Property Process As String
+
+ Public Property IconMap As Dictionary(Of String, String)
+ Public Property StateImage As Image
+ Public Property State As String
+ Get
+ Return _state
+ End Get
+ Set(value As String)
+ _state = value
+ StateImage = GetIcon(value, IconMap)
+ End Set
+ End Property
+
+ Public Sub New(IconMap As Dictionary(Of String, String))
+ Me.IconMap = IconMap
+ End Sub
+
+ Private Function GetIcon(StateName As String, IconMap As Dictionary(Of String, String)) As Image
+ If IconMap.ContainsKey(StateName) Then
+ Dim IconName = IconMap.Item(StateName)
+ Return My.Resources.ResourceManager.GetObject(IconName)
+ Else
+ Return Nothing
+ End If
+ End Function
+End Class
diff --git a/GUIs.ClientSuite/ModuleWorkflow/frmWorkflowOverview.Designer.vb b/GUIs.ClientSuite/ModuleWorkflow/frmWorkflowOverview.Designer.vb
new file mode 100644
index 00000000..dfcaaf9a
--- /dev/null
+++ b/GUIs.ClientSuite/ModuleWorkflow/frmWorkflowOverview.Designer.vb
@@ -0,0 +1,337 @@
+
+Partial Class frmWorkflowOverview
+ Inherits DigitalData.GUIs.ClientSuite.Base.BaseRibbonForm
+
+ 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+
+ Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+ Try
+ If disposing AndAlso components IsNot Nothing Then
+ components.Dispose()
+ End If
+ Finally
+ MyBase.Dispose(disposing)
+ End Try
+ End Sub
+
+ 'Wird vom Windows Form-Designer benötigt.
+ Private components As System.ComponentModel.IContainer
+
+ 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+ 'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
+ 'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+
+ Private Sub InitializeComponent()
+ Me.components = New System.ComponentModel.Container()
+ Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmWorkflowOverview))
+ Dim TableColumnDefinition1 As DevExpress.XtraEditors.TableLayout.TableColumnDefinition = New DevExpress.XtraEditors.TableLayout.TableColumnDefinition()
+ Dim TableColumnDefinition2 As DevExpress.XtraEditors.TableLayout.TableColumnDefinition = New DevExpress.XtraEditors.TableLayout.TableColumnDefinition()
+ Dim TableColumnDefinition3 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 TableRowDefinition3 As DevExpress.XtraEditors.TableLayout.TableRowDefinition = New DevExpress.XtraEditors.TableLayout.TableRowDefinition()
+ Dim TableSpan1 As DevExpress.XtraEditors.TableLayout.TableSpan = New DevExpress.XtraEditors.TableLayout.TableSpan()
+ Dim TileViewItemElement1 As DevExpress.XtraGrid.Views.Tile.TileViewItemElement = New DevExpress.XtraGrid.Views.Tile.TileViewItemElement()
+ Dim WindowsUIButtonImageOptions1 As DevExpress.XtraBars.Docking2010.WindowsUIButtonImageOptions = New DevExpress.XtraBars.Docking2010.WindowsUIButtonImageOptions()
+ Dim WindowsUIButtonImageOptions2 As DevExpress.XtraBars.Docking2010.WindowsUIButtonImageOptions = New DevExpress.XtraBars.Docking2010.WindowsUIButtonImageOptions()
+ Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl()
+ Me.BarCheckItem1 = New DevExpress.XtraBars.BarCheckItem()
+ Me.BarCheckItem2 = New DevExpress.XtraBars.BarCheckItem()
+ Me.BarCheckItem3 = New DevExpress.XtraBars.BarCheckItem()
+ Me.RibbonPageCategory1 = New DevExpress.XtraBars.Ribbon.RibbonPageCategory()
+ Me.RibbonPage3 = New DevExpress.XtraBars.Ribbon.RibbonPage()
+ Me.RibbonPageGroup3 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
+ Me.RibbonStatusBar1 = New DevExpress.XtraBars.Ribbon.RibbonStatusBar()
+ Me.RibbonPage2 = New DevExpress.XtraBars.Ribbon.RibbonPage()
+ Me.SplitContainerControl1 = New DevExpress.XtraEditors.SplitContainerControl()
+ Me.NavControlOverview = New DigitalData.GUIs.ClientSuite.NavControlOverview()
+ Me.GridWorkflowDetails = New DevExpress.XtraGrid.GridControl()
+ Me.tvDetails = New DevExpress.XtraGrid.Views.Tile.TileView()
+ Me.LayoutControl1 = New DevExpress.XtraLayout.LayoutControl()
+ Me.WindowsUIButtonPanel1 = New DevExpress.XtraBars.Docking2010.WindowsUIButtonPanel()
+ Me.LayoutControlGroup1 = New DevExpress.XtraLayout.LayoutControlGroup()
+ Me.SimpleLabelItem1 = New DevExpress.XtraLayout.SimpleLabelItem()
+ Me.LayoutControlItem2 = New DevExpress.XtraLayout.LayoutControlItem()
+ Me.SimpleLabelItem2 = New DevExpress.XtraLayout.SimpleLabelItem()
+ Me.SimpleLabelItem3 = New DevExpress.XtraLayout.SimpleLabelItem()
+ Me.GridOverview = New DigitalData.GUIs.ClientSuite.GridOverview()
+ CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit()
+ CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).BeginInit()
+ Me.SplitContainerControl1.SuspendLayout()
+ CType(Me.GridWorkflowDetails, System.ComponentModel.ISupportInitialize).BeginInit()
+ CType(Me.tvDetails, System.ComponentModel.ISupportInitialize).BeginInit()
+ CType(Me.LayoutControl1, System.ComponentModel.ISupportInitialize).BeginInit()
+ Me.LayoutControl1.SuspendLayout()
+ CType(Me.LayoutControlGroup1, System.ComponentModel.ISupportInitialize).BeginInit()
+ CType(Me.SimpleLabelItem1, System.ComponentModel.ISupportInitialize).BeginInit()
+ CType(Me.LayoutControlItem2, System.ComponentModel.ISupportInitialize).BeginInit()
+ CType(Me.SimpleLabelItem2, System.ComponentModel.ISupportInitialize).BeginInit()
+ CType(Me.SimpleLabelItem3, System.ComponentModel.ISupportInitialize).BeginInit()
+ Me.SuspendLayout()
+ '
+ 'RibbonControl1
+ '
+ Me.RibbonControl1.ExpandCollapseItem.Id = 0
+ Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.BarCheckItem1, Me.BarCheckItem2, Me.BarCheckItem3})
+ Me.RibbonControl1.Location = New System.Drawing.Point(0, 0)
+ Me.RibbonControl1.MaxItemId = 7
+ Me.RibbonControl1.Name = "RibbonControl1"
+ Me.RibbonControl1.PageCategories.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageCategory() {Me.RibbonPageCategory1})
+ Me.RibbonControl1.Size = New System.Drawing.Size(1134, 146)
+ Me.RibbonControl1.StatusBar = Me.RibbonStatusBar1
+ '
+ 'BarCheckItem1
+ '
+ Me.BarCheckItem1.Caption = "Alle"
+ Me.BarCheckItem1.CheckStyle = DevExpress.XtraBars.BarCheckStyles.Radio
+ Me.BarCheckItem1.Id = 3
+ Me.BarCheckItem1.ImageOptions.Image = CType(resources.GetObject("BarCheckItem1.ImageOptions.Image"), System.Drawing.Image)
+ Me.BarCheckItem1.ImageOptions.LargeImage = CType(resources.GetObject("BarCheckItem1.ImageOptions.LargeImage"), System.Drawing.Image)
+ Me.BarCheckItem1.Name = "BarCheckItem1"
+ '
+ 'BarCheckItem2
+ '
+ Me.BarCheckItem2.Caption = "Aktuell verantwortlich"
+ Me.BarCheckItem2.CheckStyle = DevExpress.XtraBars.BarCheckStyles.Radio
+ Me.BarCheckItem2.Id = 4
+ Me.BarCheckItem2.ImageOptions.Image = CType(resources.GetObject("BarCheckItem2.ImageOptions.Image"), System.Drawing.Image)
+ Me.BarCheckItem2.ImageOptions.LargeImage = CType(resources.GetObject("BarCheckItem2.ImageOptions.LargeImage"), System.Drawing.Image)
+ Me.BarCheckItem2.Name = "BarCheckItem2"
+ '
+ 'BarCheckItem3
+ '
+ Me.BarCheckItem3.Caption = "Beteiligt"
+ Me.BarCheckItem3.CheckStyle = DevExpress.XtraBars.BarCheckStyles.Radio
+ Me.BarCheckItem3.Id = 6
+ Me.BarCheckItem3.ImageOptions.Image = CType(resources.GetObject("BarCheckItem3.ImageOptions.Image"), System.Drawing.Image)
+ Me.BarCheckItem3.ImageOptions.LargeImage = CType(resources.GetObject("BarCheckItem3.ImageOptions.LargeImage"), System.Drawing.Image)
+ Me.BarCheckItem3.Name = "BarCheckItem3"
+ '
+ 'RibbonPageCategory1
+ '
+ Me.RibbonPageCategory1.Name = "RibbonPageCategory1"
+ Me.RibbonPageCategory1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage3})
+ Me.RibbonPageCategory1.Text = "Worflows"
+ '
+ 'RibbonPage3
+ '
+ Me.RibbonPage3.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup3})
+ Me.RibbonPage3.Name = "RibbonPage3"
+ Me.RibbonPage3.Text = "Allgemein"
+ '
+ 'RibbonPageGroup3
+ '
+ Me.RibbonPageGroup3.ItemLinks.Add(Me.BarCheckItem1)
+ Me.RibbonPageGroup3.ItemLinks.Add(Me.BarCheckItem3)
+ Me.RibbonPageGroup3.ItemLinks.Add(Me.BarCheckItem2)
+ Me.RibbonPageGroup3.Name = "RibbonPageGroup3"
+ Me.RibbonPageGroup3.Text = "Verantwortlichkeit"
+ '
+ 'RibbonStatusBar1
+ '
+ Me.RibbonStatusBar1.Location = New System.Drawing.Point(0, 702)
+ Me.RibbonStatusBar1.Name = "RibbonStatusBar1"
+ Me.RibbonStatusBar1.Ribbon = Me.RibbonControl1
+ Me.RibbonStatusBar1.Size = New System.Drawing.Size(1134, 21)
+ '
+ 'RibbonPage2
+ '
+ Me.RibbonPage2.Name = "RibbonPage2"
+ Me.RibbonPage2.Text = "RibbonPage2"
+ '
+ 'SplitContainerControl1
+ '
+ Me.SplitContainerControl1.Dock = System.Windows.Forms.DockStyle.Fill
+ Me.SplitContainerControl1.Location = New System.Drawing.Point(0, 146)
+ Me.SplitContainerControl1.Name = "SplitContainerControl1"
+ Me.SplitContainerControl1.Panel1.Controls.Add(Me.GridOverview)
+ Me.SplitContainerControl1.Panel1.Controls.Add(Me.NavControlOverview)
+ Me.SplitContainerControl1.Panel1.Text = "Panel1"
+ Me.SplitContainerControl1.Panel2.Controls.Add(Me.GridWorkflowDetails)
+ Me.SplitContainerControl1.Panel2.Controls.Add(Me.LayoutControl1)
+ Me.SplitContainerControl1.Panel2.Text = "Panel2"
+ Me.SplitContainerControl1.Size = New System.Drawing.Size(1134, 556)
+ Me.SplitContainerControl1.SplitterPosition = 841
+ Me.SplitContainerControl1.TabIndex = 5
+ Me.SplitContainerControl1.Text = "SplitContainerControl1"
+ '
+ 'NavControlOverview
+ '
+ Me.NavControlOverview.DataSource = Nothing
+ Me.NavControlOverview.Dock = System.Windows.Forms.DockStyle.Left
+ Me.NavControlOverview.Location = New System.Drawing.Point(0, 0)
+ Me.NavControlOverview.Name = "NavControlOverview"
+ Me.NavControlOverview.Size = New System.Drawing.Size(185, 556)
+ Me.NavControlOverview.TabIndex = 1
+ '
+ 'GridWorkflowDetails
+ '
+ Me.GridWorkflowDetails.Dock = System.Windows.Forms.DockStyle.Fill
+ Me.GridWorkflowDetails.Location = New System.Drawing.Point(0, 166)
+ Me.GridWorkflowDetails.MainView = Me.tvDetails
+ Me.GridWorkflowDetails.MenuManager = Me.RibbonControl1
+ Me.GridWorkflowDetails.Name = "GridWorkflowDetails"
+ Me.GridWorkflowDetails.Size = New System.Drawing.Size(281, 390)
+ Me.GridWorkflowDetails.TabIndex = 1
+ Me.GridWorkflowDetails.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.tvDetails})
+ '
+ 'tvDetails
+ '
+ Me.tvDetails.GridControl = Me.GridWorkflowDetails
+ Me.tvDetails.Name = "tvDetails"
+ Me.tvDetails.OptionsTiles.ItemSize = New System.Drawing.Size(248, 123)
+ Me.tvDetails.OptionsTiles.LayoutMode = DevExpress.XtraGrid.Views.Tile.TileViewLayoutMode.List
+ Me.tvDetails.TileColumns.Add(TableColumnDefinition1)
+ Me.tvDetails.TileColumns.Add(TableColumnDefinition2)
+ Me.tvDetails.TileColumns.Add(TableColumnDefinition3)
+ TableRowDefinition1.Length.Value = 15.0R
+ TableRowDefinition2.Length.Value = 13.0R
+ TableRowDefinition3.Length.Value = 13.0R
+ Me.tvDetails.TileRows.Add(TableRowDefinition1)
+ Me.tvDetails.TileRows.Add(TableRowDefinition2)
+ Me.tvDetails.TileRows.Add(TableRowDefinition3)
+ TableSpan1.ColumnSpan = 2
+ TableSpan1.RowSpan = 2
+ Me.tvDetails.TileSpans.Add(TableSpan1)
+ TileViewItemElement1.ImageOptions.ImageAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter
+ TileViewItemElement1.ImageOptions.ImageScaleMode = DevExpress.XtraEditors.TileItemImageScaleMode.ZoomInside
+ TileViewItemElement1.Text = "element1"
+ TileViewItemElement1.TextAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter
+ Me.tvDetails.TileTemplate.Add(TileViewItemElement1)
+ '
+ 'LayoutControl1
+ '
+ Me.LayoutControl1.Controls.Add(Me.WindowsUIButtonPanel1)
+ Me.LayoutControl1.Dock = System.Windows.Forms.DockStyle.Top
+ Me.LayoutControl1.Location = New System.Drawing.Point(0, 0)
+ Me.LayoutControl1.Name = "LayoutControl1"
+ Me.LayoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = New System.Drawing.Rectangle(1186, 56, 650, 400)
+ Me.LayoutControl1.Root = Me.LayoutControlGroup1
+ Me.LayoutControl1.Size = New System.Drawing.Size(281, 166)
+ Me.LayoutControl1.TabIndex = 0
+ Me.LayoutControl1.Text = "LayoutControl1"
+ '
+ 'WindowsUIButtonPanel1
+ '
+ WindowsUIButtonImageOptions1.Image = CType(resources.GetObject("WindowsUIButtonImageOptions1.Image"), System.Drawing.Image)
+ WindowsUIButtonImageOptions2.Image = CType(resources.GetObject("WindowsUIButtonImageOptions2.Image"), System.Drawing.Image)
+ Me.WindowsUIButtonPanel1.Buttons.AddRange(New DevExpress.XtraEditors.ButtonPanel.IBaseButton() {New DevExpress.XtraBars.Docking2010.WindowsUIButton("Verlängerung", True, WindowsUIButtonImageOptions1, DevExpress.XtraBars.Docking2010.ButtonStyle.PushButton, "", -1, True, Nothing, True, False, True, Nothing, -1, False), New DevExpress.XtraBars.Docking2010.WindowsUIButton("Kündigung", True, WindowsUIButtonImageOptions2, DevExpress.XtraBars.Docking2010.ButtonStyle.PushButton, "", -1, True, Nothing, True, False, True, Nothing, -1, False)})
+ Me.WindowsUIButtonPanel1.ContentAlignment = System.Drawing.ContentAlignment.MiddleLeft
+ Me.WindowsUIButtonPanel1.Location = New System.Drawing.Point(12, 96)
+ Me.WindowsUIButtonPanel1.Name = "WindowsUIButtonPanel1"
+ Me.WindowsUIButtonPanel1.Size = New System.Drawing.Size(257, 55)
+ Me.WindowsUIButtonPanel1.TabIndex = 0
+ Me.WindowsUIButtonPanel1.Text = "WindowsUIButtonPanel1"
+ '
+ 'LayoutControlGroup1
+ '
+ Me.LayoutControlGroup1.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.[True]
+ Me.LayoutControlGroup1.GroupBordersVisible = False
+ Me.LayoutControlGroup1.Items.AddRange(New DevExpress.XtraLayout.BaseLayoutItem() {Me.SimpleLabelItem1, Me.LayoutControlItem2, Me.SimpleLabelItem2, Me.SimpleLabelItem3})
+ Me.LayoutControlGroup1.Name = "Root"
+ Me.LayoutControlGroup1.Size = New System.Drawing.Size(281, 166)
+ Me.LayoutControlGroup1.TextVisible = False
+ '
+ 'SimpleLabelItem1
+ '
+ Me.SimpleLabelItem1.AllowHotTrack = False
+ Me.SimpleLabelItem1.AppearanceItemCaption.Font = New System.Drawing.Font("Segoe UI", 15.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
+ Me.SimpleLabelItem1.AppearanceItemCaption.ForeColor = System.Drawing.SystemColors.MenuHighlight
+ Me.SimpleLabelItem1.AppearanceItemCaption.Options.UseFont = True
+ Me.SimpleLabelItem1.AppearanceItemCaption.Options.UseForeColor = True
+ Me.SimpleLabelItem1.Location = New System.Drawing.Point(0, 0)
+ Me.SimpleLabelItem1.Name = "SimpleLabelItem1"
+ Me.SimpleLabelItem1.Size = New System.Drawing.Size(261, 34)
+ Me.SimpleLabelItem1.Text = "Vertragsnr. 4711"
+ Me.SimpleLabelItem1.TextSize = New System.Drawing.Size(151, 30)
+ '
+ 'LayoutControlItem2
+ '
+ Me.LayoutControlItem2.Control = Me.WindowsUIButtonPanel1
+ Me.LayoutControlItem2.Location = New System.Drawing.Point(0, 84)
+ Me.LayoutControlItem2.Name = "LayoutControlItem2"
+ Me.LayoutControlItem2.Size = New System.Drawing.Size(261, 62)
+ Me.LayoutControlItem2.TextSize = New System.Drawing.Size(0, 0)
+ Me.LayoutControlItem2.TextVisible = False
+ '
+ 'SimpleLabelItem2
+ '
+ Me.SimpleLabelItem2.AllowHotTrack = False
+ Me.SimpleLabelItem2.AppearanceItemCaption.Font = New System.Drawing.Font("Segoe UI", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
+ Me.SimpleLabelItem2.AppearanceItemCaption.Options.UseFont = True
+ Me.SimpleLabelItem2.Location = New System.Drawing.Point(0, 59)
+ Me.SimpleLabelItem2.Name = "SimpleLabelItem2"
+ Me.SimpleLabelItem2.Size = New System.Drawing.Size(261, 25)
+ Me.SimpleLabelItem2.Text = "Sunshine GmbH"
+ Me.SimpleLabelItem2.TextSize = New System.Drawing.Size(151, 21)
+ '
+ 'SimpleLabelItem3
+ '
+ Me.SimpleLabelItem3.AllowHotTrack = False
+ Me.SimpleLabelItem3.AppearanceItemCaption.Font = New System.Drawing.Font("Segoe UI", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
+ Me.SimpleLabelItem3.AppearanceItemCaption.Options.UseFont = True
+ Me.SimpleLabelItem3.Location = New System.Drawing.Point(0, 34)
+ Me.SimpleLabelItem3.Name = "SimpleLabelItem3"
+ Me.SimpleLabelItem3.Size = New System.Drawing.Size(261, 25)
+ Me.SimpleLabelItem3.Text = "Objekt: Haus Nr. 9"
+ Me.SimpleLabelItem3.TextSize = New System.Drawing.Size(151, 21)
+ '
+ 'GridOverview1
+ '
+ Me.GridOverview.Dock = System.Windows.Forms.DockStyle.Fill
+ Me.GridOverview.Location = New System.Drawing.Point(185, 0)
+ Me.GridOverview.Name = "GridOverview1"
+ Me.GridOverview.Size = New System.Drawing.Size(656, 556)
+ Me.GridOverview.TabIndex = 2
+ '
+ 'frmWorkflowOverview
+ '
+ Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
+ Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+ Me.ClientSize = New System.Drawing.Size(1134, 723)
+ Me.Controls.Add(Me.SplitContainerControl1)
+ Me.Controls.Add(Me.RibbonStatusBar1)
+ Me.Controls.Add(Me.RibbonControl1)
+ Me.Name = "frmWorkflowOverview"
+ Me.Ribbon = Me.RibbonControl1
+ Me.StatusBar = Me.RibbonStatusBar1
+ Me.Text = "Workflow Übersicht"
+ CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).EndInit()
+ CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).EndInit()
+ Me.SplitContainerControl1.ResumeLayout(False)
+ CType(Me.GridWorkflowDetails, System.ComponentModel.ISupportInitialize).EndInit()
+ CType(Me.tvDetails, System.ComponentModel.ISupportInitialize).EndInit()
+ CType(Me.LayoutControl1, System.ComponentModel.ISupportInitialize).EndInit()
+ Me.LayoutControl1.ResumeLayout(False)
+ CType(Me.LayoutControlGroup1, System.ComponentModel.ISupportInitialize).EndInit()
+ CType(Me.SimpleLabelItem1, System.ComponentModel.ISupportInitialize).EndInit()
+ CType(Me.LayoutControlItem2, System.ComponentModel.ISupportInitialize).EndInit()
+ CType(Me.SimpleLabelItem2, System.ComponentModel.ISupportInitialize).EndInit()
+ CType(Me.SimpleLabelItem3, System.ComponentModel.ISupportInitialize).EndInit()
+ Me.ResumeLayout(False)
+ Me.PerformLayout()
+
+ End Sub
+
+ Friend WithEvents RibbonControl1 As DevExpress.XtraBars.Ribbon.RibbonControl
+ Friend WithEvents RibbonStatusBar1 As DevExpress.XtraBars.Ribbon.RibbonStatusBar
+ Friend WithEvents RibbonPage2 As DevExpress.XtraBars.Ribbon.RibbonPage
+ Friend WithEvents RibbonPageCategory1 As DevExpress.XtraBars.Ribbon.RibbonPageCategory
+ Friend WithEvents RibbonPage3 As DevExpress.XtraBars.Ribbon.RibbonPage
+ Friend WithEvents RibbonPageGroup3 As DevExpress.XtraBars.Ribbon.RibbonPageGroup
+ Friend WithEvents SplitContainerControl1 As DevExpress.XtraEditors.SplitContainerControl
+ Friend WithEvents GridWorkflowDetails As DevExpress.XtraGrid.GridControl
+ Friend WithEvents LayoutControl1 As DevExpress.XtraLayout.LayoutControl
+ Friend WithEvents LayoutControlGroup1 As DevExpress.XtraLayout.LayoutControlGroup
+ Friend WithEvents BarCheckItem1 As DevExpress.XtraBars.BarCheckItem
+ Friend WithEvents BarCheckItem2 As DevExpress.XtraBars.BarCheckItem
+ Friend WithEvents BarCheckItem3 As DevExpress.XtraBars.BarCheckItem
+ Friend WithEvents WindowsUIButtonPanel1 As DevExpress.XtraBars.Docking2010.WindowsUIButtonPanel
+ Friend WithEvents SimpleLabelItem1 As DevExpress.XtraLayout.SimpleLabelItem
+ Friend WithEvents LayoutControlItem2 As DevExpress.XtraLayout.LayoutControlItem
+ Friend WithEvents SimpleLabelItem2 As DevExpress.XtraLayout.SimpleLabelItem
+ Friend WithEvents SimpleLabelItem3 As DevExpress.XtraLayout.SimpleLabelItem
+ Friend WithEvents tvDetails As DevExpress.XtraGrid.Views.Tile.TileView
+ Friend WithEvents NavControlOverview As NavControlOverview
+ Friend WithEvents GridOverview As GridOverview
+End Class
diff --git a/GUIs.ClientSuite/ModuleWorkflow/frmWorkflowOverview.resx b/GUIs.ClientSuite/ModuleWorkflow/frmWorkflowOverview.resx
new file mode 100644
index 00000000..8a96f180
--- /dev/null
+++ b/GUIs.ClientSuite/ModuleWorkflow/frmWorkflowOverview.resx
@@ -0,0 +1,231 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAYdEVYdFRpdGxlAFRlYW07UGVvcGxlO0dyb3VwO1w5
+ 6BYAAADzSURBVDhPpdA9CsJAEAVglYBYeQYPoJ2tBxDEMq2FJ5BASsVrWNhqmc4rKHgJsbAXTKXre2En
+ TNZJESw+iPPzzKTlnPuLWWyifJhtT23YwdPbQwfMuhUwBhdgzaxbAbEauMISIm8BZ5B+bAWkvvmBunPe
+ wJnUCujDCy5Qdw57nOn/BPiQBA6gzxGssZfoHb3MW4cwADlHY429EURlAH50YQM3uMMU5BxZLl4b2OMM
+ Z7nTY8AR9D/RCniO/OYza3qGMgbkqvCANcg5E694bWCPMzKfl9/Af4fwnLlXeW29EwZY54QyvRMG6HPq
+ 5HqnEtCca30Bw6t+WSTe8moAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAYdEVYdFRpdGxlAFRlYW07UGVvcGxlO0dyb3VwO1w5
+ 6BYAAAJ9SURBVFhHxdbNq41RFMfx461wURSljExuESJCoRiR7kAmTBhgoJiJgUxu/gKGElJckpFEGVFC
+ XiciRt4Zka6IPL6/2/Oc1l7P2veeczs9Bp/u2WuvtfY+z8s+t1UUxX8VBpvUGhi8kbMR1/EZv/EFN7EJ
+ Ub50XRMGsQZ/UAQU34Be1GQ3cB5Ro8ol9KImu4EniJpUnqIXNdkNvIJvUDmHlfA1c7AWZ/EXvu41fE24
+ gWXI3ctBKGcX7sA+bHexGxNwFL5WPZcgWS8ZlAbgi2UYM3DMxCLHMQ3fTKyi3sl6yaA0Fc/gi+9hOr6b
+ WOQHZuG2iYl6qneyXjIwdCltsVzDahfLWQ/l29ge1NaqBUr6pp9gG5zEVhfLUd4JM1avPtTWqgWMzfiF
+ qom+/QEzHs1BrCo/q8cWRGuMugHRG3EK97EQeg78YpEHWIQzqD35VhjEZESFtxAt6CnP1qmXetrYCB9Y
+ gP14jI+YBzuvRrkzoqL5pbA9dU6op3pr3O5ZfZiN09ChYpu9wV7ofm7HJPjXy9MBpcNoMfbhHey81tBa
+ WnNkA3PxEjYpR6/XNhfzNL/OxSI67udrA0MmOJarUM1FE7MuQPPKi+a9ISXriI0mc3ZgCg5Bt0ixtzgC
+ 3aKdZawTw9pAdGZHXkCLi+6xamWm+Tyx/KvnRflRH+trVdipfujyHzYxS7+CV6C8aL6m9k9ikKRfQF3e
+ 56h2rtNND5vN06W3r6jyVad6m5eslwzEJetp9q+R9RCX8cjEPNWrT7uvXS8ZiElcjm4f0Bz1WYGuNtDp
+ sdup9vFs10sGUiXhJ6JG46V+XW3gA6JG4/UeY2+gaWGwSWGwSWGwOUXrHy0ANvXoR9wdAAAAAElFTkSu
+ QmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAATdEVYdFRpdGxlAFBlb3BsZTtBc3NpZ25+WIkkAAAA
+ 4ElEQVQ4T6XRPQ4BURQF4ClEr1FrSSSiokLPGuxEQqbQWIRFSKYXCWuwAmoKRJ5zJu/Ke/fd0Si+MRnn
+ nMxP5pz7S3nI81wbwAHu3hFGkGStgRpcwClXqEOUtwbaoMuiA1HeGhiDVaYJRHlrYA1WmfhflLcGhvAG
+ XeY1vtwobw3QHvQAryXZqgF+sidImeet2arIYOF/S1UDNIeT1wvKTspkDTRgA99v7sNSrhzoww5ewNve
+ QheaCIbliAxM4QHyzCGWl7ooZOCsSiF5aeFI8gg3VdL0SDLwU1gAjvjzIvsAqlQYjVXYUosAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAATdEVYdFRpdGxlAFBlb3BsZTtBc3NpZ25+WIkkAAAB
+ 0UlEQVRYR8XWsStFYRgG8DNIGQyKrIrFwG69UhSD8sfIcON2B2UmBnZlMCoWVjYZlBSxIWUg5HgenXP6
+ vu88597zHjeGX3K+732fx7mUKI7jf+V902w2y5iFXbiDj8Q97ME8qBmpSoENiNvYATWbYy0wDSpQWQC1
+ w2MtwNeuwpR9UDs81gKXoMKUK1A7PNYCL6DClGdQOzzWAiqoyBuoHR5LgRqooFY4o3ZlLAU2QYW0whm1
+ K2MpsAoqpBXOqF0ZS4FheAQVpPAuZ9SujKUA1UGFKYugdnisBcZAhSm8q3Z4rAXoEFSg6wjUbE6VAuPw
+ CiqYeMY7ajanSgGagXcIw/mMZ2pGqlqgGx4gLPAEPFMzUtUCNABLwN+JE1iGQVB3C1kLTMB68EzZBt5V
+ Z54yBYagARfA18x/v0ZA3SX++X0B73KmNtc4iKCefM0pKtAHW8BA93OmY+gB9z71whmk91aSEIbHaWBI
+ FRiF62RJkVOYhK7EFJxDeh6Gly7QDzfOonY+E+4zFV66wFqwzCr9rMPwQmEBy0+vMJhvQIYpYQG11CJ9
+ A6VLhAVug4VVFJXIPndXWODXggC3RHj2wyvQCSIkLaHO/qQAsYR63vkCNnH0DUZ2qvqAgwutAAAAAElF
+ TkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAcdEVYdFRpdGxlAFRlYW07UGVvcGxlO0dyb3VwO1Vz
+ ZXKTe2BJAAAA8klEQVQ4T6XQvw7BUBQG8BKJmPoMHoDN6gEsxq4GTyCiI29hMBgx9jFIvIQY7BKduL6v
+ uac5vU6HxvBL6vz59DRyzv3FLDZRPqwO2xbs4OntoQ1m3QoYgQuwZtatgEQNXGEOHW8GZ5B+YgWkvvmB
+ unPewJnUCojhBReoO4c9zsQ/AT5kCUfQ5wjW2FvqHb3MWwfQBzlHY429IXTKAPzowgZucIcJyDmyXLw2
+ sMcZznKnx4AT6H+iBfAc+c1n1vQMZQzIVeEBa5Bzxl7x2sAeZ2Q+L7+B/w7hOVOv8tp6JwywzglleicM
+ 0OfUyfVOJaA5F30Bv8maeRXqkFsAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAcdEVYdFRpdGxlAFRlYW07UGVvcGxlO0dyb3VwO1Vz
+ ZXKTe2BJAAACnklEQVRYR8XVz4tPYRTH8cEoP4YaRalZ2UwRIkINxYo0C9mwYYGFYqexkI38BSwsJKTM
+ kKyk1KwoIT83IlZ+syKNRuTr/dE9+jzPPHfmmsXX4lXfc+55zrlz73Of6Wi1Wv9VMdlOSTAweMptxHV8
+ xA98wg1sQl4batf4HJcEFIa1+IlWgfIb4PWN1viskAQUhQsoNQqX4PWN1viskAQUhUfVojqP4fWN1vis
+ kAQUhRfVopLzWAWvl3lYh3P4hXzdS58VkoAiWY66d3kMqtmFW/DNdhu7MQVHkK9Vz6U+T5KAAumvFuRG
+ 0IWjlis5jpn4YrnQ7/MkCSiQGXhSLXB3MAtfLVfyDXNx03KinjN8niQBBUGP0hfLNazJcnXWQ/We2+Oz
+ QhJQFPSXfoA3OImtWa6O6k5YrF6zfVZIAorcZnxHNNFff8Di8RzE6uq3emzxOS4JKMzpiziNu1gE7YN8
+ WMk9LMZZjNn5LgkoDp1aaHEYRmlgbjjrq16dngtJQFEP9uMh3mMB/AbUqO6MCLq+LOupc0I91bvHZ0ZR
+ N85Ah4o3e4W90PvcjmnIP6+cDigdRkuwD2/g1zVDs7r/3AA/5uM5vKiOPq9tWS6n631ZrkTH/ULdwJAl
+ J3IVWjNoOXexeqKqK13PDalYR2zpYp0dmI5D0CtS7jUOQ69oZ5VrYkQ3UDqzS55Bw0XvWGtljv2eWj0B
+ 7RfVl/q4z393Y7VwIr3Q4x+wnNN/wSvo9b7jSQJr5PQfUI/3KeLOdbpps3mdHr1/oqrXui6fkUsCinPa
+ zfln5O7jMh5YLqf1fT7HJQGFbgX+dYPWUZ+VPiskAUWu6bHbVHI8hySgyI2i1GiyRn1WSAKK3DuUGk3W
+ W58VxiTarZhsp2KynYrJ9ml1/AZUr3hglRjmdgAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAARdEVYdFRpdGxlAFJlc2V0O1VuZG87E4EW/wAAAYJJ
+ REFUWEfFlj1Ow2AMhnsAJK7TIdyEEzDCUhYmDsEpunOTbhyAgakSW/BTpdVr1+nHh6gzPFLs+LWdfL+r
+ cRwXJXVWkjorSZ2VOGMYhhZrY2NsjZ2xn+AZH++IybQHtB44IxNM3BlvxpcxNiCGWDRnubQeOMMCXqLA
+ eDD4wqzYJdCgdfm0HjjDAhBqE8/GtxGT/xa05OhqAGiC7rPi78ajwVjfTvCMj3cxnhynP6H1wBmT4Mhn
+ sD+MJ+PGOH1RgHfEEKtahuMwJ7QeOEMEERLeG7HgHMTGJpiYrh44IwgUvioWaYFGc7A61loPnBEEyqsR
+ C7RgOOKc2Gg9cEYIjmRLtAUTU3NstR44IwRn9DbB6lD9TuuBM0LwHD1NsERVu9d64AwL+G8Wb6B7CIBT
+ TUVMJE3aQ/ckBI5UFbGULu1+c/xpGQK/LR67ZRvREbZNFZdtxUc4OOIdgIR81VUPI2WR4zhSfiHJoPuy
+ K9kcZZfSFoz19a7lS5A6K0mdlaTOOsbVD4kgpriFBNvrAAAAAElFTkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAApdEVYdFRpdGxlAFJlbW92ZTtEZWxldGU7QmFycztS
+ aWJib247U3RhbmRhcmQ7Y1ZIMAAAAUFJREFUWEfFlUEOwjAMBHlYheBjSLw8xJKN3N1N43AIhxFi8Xp8
+ KOqttfZXZLgTGe5Ehjuh4DgO5C6yKnfcj1AAC16d5p/424xvFx0ZCsSCYOUI6qInoKAPqwXfRZ0sUgy7
+ 6DIo6IMPKCJXR4zkwQN9py9GHzLeqaRQR8zktpN8FNiQs3JESW6gj4IYdCpHlOUG+ijIw87siCtOcgN9
+ FGDB+eUIkhvoo0CVnJUjpNxAHwWqlKgcMZQb6KNAlRKzB87I/w4CfRSoklORB8Mj0EeBKnVW5IE8An0U
+ iNIv8oCOQB8FUJjJ7YGbPZinI9BHQRquyGO2fAT6KPDBFXlQOgJ9FPSh2etYyYPZEfPXsdEHR4uu5MFl
+ F10UBF6gBUWGXfRQkPHiqjyQXXRQgPTSMy9YhLq4n4LdyHAnMtyJDPfRbh/esgzdHdsY9wAAAABJRU5E
+ rkJggg==
+
+
+
\ No newline at end of file
diff --git a/GUIs.ClientSuite/ModuleWorkflow/frmWorkflowOverview.vb b/GUIs.ClientSuite/ModuleWorkflow/frmWorkflowOverview.vb
new file mode 100644
index 00000000..e23d0981
--- /dev/null
+++ b/GUIs.ClientSuite/ModuleWorkflow/frmWorkflowOverview.vb
@@ -0,0 +1,51 @@
+Imports System.ComponentModel
+Imports DevExpress.Utils
+
+Public Class frmWorkflowOverview
+ Private WorkflowItems As BindingList(Of WorkflowItem)
+ Private WorkflowDetails As BindingList(Of WorkflowDetail)
+
+ Private Async Sub frmWorkflowOverview_Load(sender As Object, e As EventArgs) Handles MyBase.Load
+ Dim oDatatable As DataTable
+ Dim oWorkflows As New List(Of WorkflowItem)
+
+ Dim oIconMap As New Dictionary(Of String, String) From {
+ {"Start", "ampel_gruen"},
+ {"not started", "ampel_rot"}
+ }
+
+ Try
+ oDatatable = Await My.Common.Views.VWIDB_GUI_WF_OVERVIEW(70, 104)
+
+ For Each oRow As DataRow In oDatatable.Rows
+ oWorkflows.Add(New WorkflowItem(oIconMap) With {
+ .Title = oRow.Item("REQUEST_TITLE"),
+ .State = oRow.Item("STATETITLE"),
+ .Process = oRow.Item("PROCESS_NAME")
+ })
+ Next
+ Catch ex As Exception
+ ShowErrorMessage(ex)
+ End Try
+
+ GridOverview.DataSource = oWorkflows
+ NavControlOverview.DataSource = oWorkflows
+
+
+
+
+
+ 'gvOverview.GroupFormat = "[#image]{1} {2}"
+ 'With gvOverview.Columns.Item("CreatedAt")
+ ' .OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.DateAlt
+ ' .GroupInterval = DevExpress.XtraGrid.ColumnGroupInterval.DateRange
+ ' .SortOrder = DevExpress.Data.ColumnSortOrder.Descending
+ ' .Group()
+ 'End With
+
+ End Sub
+
+ Private Sub frmWorkflowOverview_Shown(sender As Object, e As EventArgs) Handles Me.Shown
+ RibbonControl1.SelectPage(RibbonPage3)
+ End Sub
+End Class
\ No newline at end of file
diff --git a/GUIs.ClientSuite/FormWorkflow/frmWorkflowStep.Designer.vb b/GUIs.ClientSuite/ModuleWorkflow/frmWorkflowStep.Designer.vb
similarity index 100%
rename from GUIs.ClientSuite/FormWorkflow/frmWorkflowStep.Designer.vb
rename to GUIs.ClientSuite/ModuleWorkflow/frmWorkflowStep.Designer.vb
diff --git a/GUIs.ClientSuite/ModuleWorkflow/frmWorkflowStep.resx b/GUIs.ClientSuite/ModuleWorkflow/frmWorkflowStep.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/GUIs.ClientSuite/ModuleWorkflow/frmWorkflowStep.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
\ No newline at end of file
diff --git a/GUIs.ClientSuite/FormWorkflow/frmWorkflowStep.vb b/GUIs.ClientSuite/ModuleWorkflow/frmWorkflowStep.vb
similarity index 98%
rename from GUIs.ClientSuite/FormWorkflow/frmWorkflowStep.vb
rename to GUIs.ClientSuite/ModuleWorkflow/frmWorkflowStep.vb
index 255e9629..afe6c3cc 100644
--- a/GUIs.ClientSuite/FormWorkflow/frmWorkflowStep.vb
+++ b/GUIs.ClientSuite/ModuleWorkflow/frmWorkflowStep.vb
@@ -1,5 +1,4 @@
Imports DevExpress.XtraLayout
-Imports DigitalData.GUIs.ClientSuite
Imports DigitalData.GUIs.ClientSuite.Controls
Public Class frmWorkflowStep
diff --git a/GUIs.ClientSuite/My Project/Resources.Designer.vb b/GUIs.ClientSuite/My Project/Resources.Designer.vb
index e47024a1..a23044d4 100644
--- a/GUIs.ClientSuite/My Project/Resources.Designer.vb
+++ b/GUIs.ClientSuite/My Project/Resources.Designer.vb
@@ -60,6 +60,36 @@ Namespace My.Resources
End Set
End Property
+ '''
+ ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
+ '''
+ Friend ReadOnly Property ampel_gelb() As System.Drawing.Bitmap
+ Get
+ Dim obj As Object = ResourceManager.GetObject("ampel_gelb", resourceCulture)
+ Return CType(obj,System.Drawing.Bitmap)
+ End Get
+ End Property
+
+ '''
+ ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
+ '''
+ Friend ReadOnly Property ampel_gruen() As System.Drawing.Bitmap
+ Get
+ Dim obj As Object = ResourceManager.GetObject("ampel_gruen", resourceCulture)
+ Return CType(obj,System.Drawing.Bitmap)
+ End Get
+ End Property
+
+ '''
+ ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
+ '''
+ Friend ReadOnly Property ampel_rot() As System.Drawing.Bitmap
+ Get
+ Dim obj As Object = ResourceManager.GetObject("ampel_rot", resourceCulture)
+ Return CType(obj,System.Drawing.Bitmap)
+ End Get
+ End Property
+
'''
''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
'''
diff --git a/GUIs.ClientSuite/My Project/Resources.resx b/GUIs.ClientSuite/My Project/Resources.resx
index 7b7aa66a..c8fa5830 100644
--- a/GUIs.ClientSuite/My Project/Resources.resx
+++ b/GUIs.ClientSuite/My Project/Resources.resx
@@ -118,25 +118,31 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- ..\Resources\iconfinder_Gowalla_324477.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\ComboBox.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
..\Resources\TextBox.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\iconfinder_Gowalla_324477.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
..\Resources\DatePicker.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\ComboBox.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
..\Resources\user_16xLG.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\CheckBox.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\StatusAnnotations_Complete_and_ok_32xLG.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\ampel-gelb.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\ampel-gruen.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\ampel-rot.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
\ No newline at end of file
diff --git a/GUIs.ClientSuite/My Project/licenses.licx b/GUIs.ClientSuite/My Project/licenses.licx
index b7fe4078..89071046 100644
--- a/GUIs.ClientSuite/My Project/licenses.licx
+++ b/GUIs.ClientSuite/My Project/licenses.licx
@@ -1,16 +1,16 @@
-DevExpress.XtraBars.Docking.DockManager, DevExpress.XtraBars.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraNavBar.NavBarControl, DevExpress.XtraNavBar.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraDataLayout.DataLayoutControl, DevExpress.XtraLayout.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraTreeList.TreeList, DevExpress.XtraTreeList.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraLayout.LayoutControl, DevExpress.XtraLayout.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraBars.Docking2010.DocumentManager, DevExpress.XtraBars.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraBars.Ribbon.RibbonControl, DevExpress.XtraBars.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraBars.Navigation.OfficeNavigationBar, DevExpress.XtraBars.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraTabbedMdi.XtraTabbedMdiManager, DevExpress.XtraBars.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraVerticalGrid.PropertyGridControl, DevExpress.XtraVerticalGrid.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraVerticalGrid.PropertyGridControl, DevExpress.XtraVerticalGrid.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraBars.Docking.DockManager, DevExpress.XtraBars.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraDataLayout.DataLayoutControl, DevExpress.XtraLayout.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.Utils.MVVM.MVVMContext, DevExpress.Utils.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraBars.Navigation.OfficeNavigationBar, DevExpress.XtraBars.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraTreeList.TreeList, DevExpress.XtraTreeList.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraLayout.LayoutControl, DevExpress.XtraLayout.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraNavBar.NavBarControl, DevExpress.XtraNavBar.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
diff --git a/GUIs.ClientSuite/Resources/ampel-gelb.png b/GUIs.ClientSuite/Resources/ampel-gelb.png
new file mode 100644
index 00000000..5d51423e
Binary files /dev/null and b/GUIs.ClientSuite/Resources/ampel-gelb.png differ
diff --git a/GUIs.ClientSuite/Resources/ampel-gruen.png b/GUIs.ClientSuite/Resources/ampel-gruen.png
new file mode 100644
index 00000000..fe34e2a5
Binary files /dev/null and b/GUIs.ClientSuite/Resources/ampel-gruen.png differ
diff --git a/GUIs.ClientSuite/Resources/ampel-rot.png b/GUIs.ClientSuite/Resources/ampel-rot.png
new file mode 100644
index 00000000..97dae97a
Binary files /dev/null and b/GUIs.ClientSuite/Resources/ampel-rot.png differ
diff --git a/GUIs.ClientSuite/Workers/HeartbeatWorker.vb b/GUIs.ClientSuite/Workers/HeartbeatWorker.vb
index 7bba52ba..892b90bd 100644
--- a/GUIs.ClientSuite/Workers/HeartbeatWorker.vb
+++ b/GUIs.ClientSuite/Workers/HeartbeatWorker.vb
@@ -1,47 +1,44 @@
Imports System.Timers
-Imports DigitalData.GUIs.ClientSuite
Imports DigitalData.GUIs.ClientSuite.Base
-Imports DigitalData.Modules.EDMIAPI.IDBServiceReference
Imports DigitalData.Modules.Logging
+
Namespace Workers
Public Class HeartbeatWorker
Inherits BaseClass
Implements IWorker
- Private _Channel As IIDBServiceChannel
-
Public Event OnlineChanged As OnlineChangedEventHandler
Public Delegate Sub OnlineChangedEventHandler(sender As Object, Online As Boolean)
Public ReadOnly Property Interval As Integer = 4000 Implements IWorker.Interval
+ Public ReadOnly Property Name As String = "Heartbeat Worker" Implements IWorker.Name
Public Sub New(LogConfig As LogConfig)
MyBase.New(LogConfig)
End Sub
Public Sub Setup() Implements IWorker.Setup
- _Channel = My.ChannelFactory.CreateChannel()
- _Channel.Open()
+ Logger.Debug("Starting {0}", "HeartbeatWorker")
End Sub
- Public Async Sub Callback(manager As WorkerManager, e As ElapsedEventArgs) Implements IWorker.Callback
+ Public Async Sub Callback(Manager As WorkerManager, e As ElapsedEventArgs) Implements IWorker.Callback
Try
- Logger.Debug("Checking if Service is up...")
-
- If _Channel.State = ServiceModel.CommunicationState.Faulted Then
- _Channel = My.ChannelFactory.CreateChannel()
+ If My.Channel.State = ServiceModel.CommunicationState.Faulted Then
+ My.Channel = My.ChannelFactory.CreateChannel()
End If
' Connect to service and send hearbeat request
- Dim oResult = Await _Channel.HeartbeatAsync()
+ Dim oResult = Await My.Channel.HeartbeatAsync()
Logger.Debug("Service is online")
SetOnlineState(True)
Catch ex As Exception
+
Logger.Debug("Service is offline!")
Logger.Error(ex)
+ Manager.StopWorkers()
SetOnlineState(False)
Finally
My.Application.Service.LastChecked = DateTime.Now
@@ -49,7 +46,7 @@ Namespace Workers
End Sub
Public Sub Teardown() Implements IWorker.Teardown
- ' TODO: Close channel gracefully
+ Logger.Debug("Stopping {0}", Name)
End Sub
Private Sub SetOnlineState(NewState As Boolean)
diff --git a/GUIs.ClientSuite/Workers/IWorker.vb b/GUIs.ClientSuite/Workers/IWorker.vb
index 9405ca10..3a967712 100644
--- a/GUIs.ClientSuite/Workers/IWorker.vb
+++ b/GUIs.ClientSuite/Workers/IWorker.vb
@@ -3,6 +3,7 @@
Namespace Workers
Public Interface IWorker
ReadOnly Property Interval As Integer
+ ReadOnly Property Name As String
Sub Setup()
Sub Teardown()
diff --git a/GUIs.ClientSuite/Workers/WorkerManager.vb b/GUIs.ClientSuite/Workers/WorkerManager.vb
index e48e1fa9..e3407bc7 100644
--- a/GUIs.ClientSuite/Workers/WorkerManager.vb
+++ b/GUIs.ClientSuite/Workers/WorkerManager.vb
@@ -6,6 +6,14 @@ Namespace Workers
Public Class WorkerManager
Inherits BaseClass
+ '''
+ ''' Holds information about a worker
+ '''
+ Class WorkerState
+ Public Worker As IWorker
+ Public Timer As Timer
+ End Class
+
'''
''' List of workers that will be started.
'''
@@ -13,52 +21,73 @@ Namespace Workers
GetType(HeartbeatWorker),
GetType(WorkflowOverviewWorker)
}
- Private Workers As New List(Of IWorker)
- Private TimerList As New List(Of Timer)
+ Private Workers As New List(Of WorkerState)
Public Sub New(LogConfig As LogConfig, SyncronizingObject As frmMain)
MyBase.New(LogConfig)
- Workers = CreateWorkers()
-
- For Each oWorker As IWorker In Workers
- Dim oTimer = New Timer(oWorker.Interval) With {
- .SynchronizingObject = SyncronizingObject,
- .Enabled = True
- }
-
- AddHandler oTimer.Elapsed, Sub(sender As Object, e As ElapsedEventArgs)
- Try
- oWorker.Callback(Me, e)
- Catch ex As Exception
- Logger.Warn("Worker {0} threw an error in callback.", oWorker.GetType.Name)
- End Try
- End Sub
-
- TimerList.Add(oTimer)
- Next
+ Workers = CreateWorkers(SyncronizingObject)
End Sub
Public Function GetWorker(Of T)() As T
- For Each oWorker In Workers
- If TypeOf oWorker Is T Then
- Return oWorker
+ For Each oWorkerState As WorkerState In Workers
+ If TypeOf oWorkerState.Worker Is T Then
+ Return oWorkerState.Worker
End If
Next
Return Nothing
End Function
- Private Function CreateWorkers() As List(Of IWorker)
- Dim oWorkers As New List(Of IWorker)
+ Public Sub StopWorkers()
+ Logger.Debug("Stopping all workers..")
+ For Each oWorkerState In Workers
+ oWorkerState.Timer.Stop()
+
+ Try
+ oWorkerState.Worker.Teardown()
+ Catch ex As Exception
+ Logger.Warn("Worker {0} threw an error during teardown.", oWorkerState.Worker.Name)
+ End Try
+ Next
+ Logger.Debug("All workers stopped.")
+ End Sub
+
+ Private Function CreateTimer(Worker As IWorker, SyncronizingObject As frmMain)
+ Dim oTimer = New Timer(Worker.Interval) With {
+ .SynchronizingObject = SyncronizingObject,
+ .Enabled = True
+ }
+
+ AddHandler oTimer.Elapsed, Sub(sender As Object, e As ElapsedEventArgs)
+ Try
+ Worker.Callback(Me, e)
+ Catch ex As Exception
+ Logger.Warn("Worker {0} threw an error in callback.", Worker.Name)
+ Logger.Error(ex)
+ End Try
+ End Sub
+
+ Return oTimer
+ End Function
+
+ Private Function CreateWorkers(SyncronizingObject As frmMain) As List(Of WorkerState)
+ Dim oWorkers As New List(Of WorkerState)
For Each oWorkerType In WorkerTypes
+ Dim oWorker As IWorker = Activator.CreateInstance(oWorkerType, New Object() {LogConfig})
+
Try
- Dim oWorker As IWorker = Activator.CreateInstance(oWorkerType, New Object() {LogConfig})
oWorker.Setup()
- oWorkers.Add(oWorker)
+
+ Dim oWorkerState As New WorkerState() With {
+ .Worker = oWorker,
+ .Timer = CreateTimer(oWorker, SyncronizingObject)
+ }
+
+ oWorkers.Add(oWorkerState)
Catch ex As Exception
- Logger.Warn("Worker {0} threw an error while creating. Skipping.", oWorkerType.Name)
+ Logger.Warn("Worker {0} threw an error during setup. Skipping.", oWorker.Name)
Logger.Error(ex)
Continue For
End Try
diff --git a/GUIs.ClientSuite/Workers/WorkflowOverviewWorker.vb b/GUIs.ClientSuite/Workers/WorkflowOverviewWorker.vb
index e7578624..1e70e8be 100644
--- a/GUIs.ClientSuite/Workers/WorkflowOverviewWorker.vb
+++ b/GUIs.ClientSuite/Workers/WorkflowOverviewWorker.vb
@@ -12,6 +12,7 @@ Namespace Workers
End Sub
Public ReadOnly Property Interval As Integer = 60000 Implements IWorker.Interval
+ Public ReadOnly Property Name As String = "WorkflowOverview Worker" Implements IWorker.Name
Public Sub Setup() Implements IWorker.Setup
Throw New NotImplementedException()
diff --git a/GUIs.ClientSuite/frmConfigUser.vb b/GUIs.ClientSuite/frmConfigUser.vb
index 620653b4..80c884bf 100644
--- a/GUIs.ClientSuite/frmConfigUser.vb
+++ b/GUIs.ClientSuite/frmConfigUser.vb
@@ -22,7 +22,8 @@ Public Class frmConfigUser
End Sub
Private Sub btnAppFolder_Click(sender As Object, e As EventArgs) Handles btnAppFolder.Click
- Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData))
+ Dim oAppData = Application.LocalUserAppDataPath
+ Process.Start(oAppData)
End Sub
Private Sub chkLogErrorsOnly_CheckedChanged(sender As Object, e As EventArgs) Handles chkLogErrorsOnly.CheckedChanged
diff --git a/GUIs.ClientSuite/frmMain.Designer.vb b/GUIs.ClientSuite/frmMain.Designer.vb
index 05fcebf0..d8636b59 100644
--- a/GUIs.ClientSuite/frmMain.Designer.vb
+++ b/GUIs.ClientSuite/frmMain.Designer.vb
@@ -21,11 +21,10 @@ Partial Class frmMain
'Do not modify it using the code editor.
Private Sub InitializeComponent()
- Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMain))
- Dim PushTransition1 As DevExpress.Utils.Animation.PushTransition = New DevExpress.Utils.Animation.PushTransition()
+ Dim PushTransition2 As DevExpress.Utils.Animation.PushTransition = New DevExpress.Utils.Animation.PushTransition()
Me.RibbonControl = New DevExpress.XtraBars.Ribbon.RibbonControl()
- Me.MainMenu = New DevExpress.XtraBars.Ribbon.ApplicationMenu(Me.components)
+ Me.MainMenu = New DevExpress.XtraBars.Ribbon.ApplicationMenu()
Me.BarButtonExit = New DevExpress.XtraBars.BarButtonItem()
Me.BarButtonUserSettings = New DevExpress.XtraBars.BarButtonItem()
Me.BarButtonConnectionSettings = New DevExpress.XtraBars.BarButtonItem()
@@ -51,13 +50,14 @@ Partial Class frmMain
Me.RibbonPageGroup6 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonStatusBar = New DevExpress.XtraBars.Ribbon.RibbonStatusBar()
- Me.DocumentManager = New DevExpress.XtraBars.Docking2010.DocumentManager(Me.components)
- Me.TabbedView1 = New DevExpress.XtraBars.Docking2010.Views.Tabbed.TabbedView(Me.components)
- Me.DockManager = New DevExpress.XtraBars.Docking.DockManager(Me.components)
+ Me.DocumentManager = New DevExpress.XtraBars.Docking2010.DocumentManager()
+ Me.TabbedView1 = New DevExpress.XtraBars.Docking2010.Views.Tabbed.TabbedView()
+ Me.DockManager = New DevExpress.XtraBars.Docking.DockManager()
Me.MainNav = New DevExpress.XtraBars.Navigation.OfficeNavigationBar()
Me.NavbarItemHome = New DevExpress.XtraBars.Navigation.NavigationBarItem()
Me.NavbarItemSearch = New DevExpress.XtraBars.Navigation.NavigationBarItem()
Me.NavbarItemWorkflow = New DevExpress.XtraBars.Navigation.NavigationBarItem()
+ Me.BarButtonItem5 = New DevExpress.XtraBars.BarButtonItem()
CType(Me.RibbonControl, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.MainMenu, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.DocumentManager, System.ComponentModel.ISupportInitialize).BeginInit()
@@ -70,15 +70,15 @@ Partial Class frmMain
'
Me.RibbonControl.ApplicationButtonDropDownControl = Me.MainMenu
Me.RibbonControl.ExpandCollapseItem.Id = 0
- Me.RibbonControl.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl.ExpandCollapseItem, Me.BarButtonExit, Me.BarButtonUserSettings, Me.LabelCurrentUser, Me.LabelCurrentMachine, Me.LabelCurrentVersion, Me.BarButtonItem1, Me.SkinDropDownButtonItem1, Me.BarButtonDeleteControl, Me.BarButtonConnectionSettings, Me.LabelCurrentLanguage, Me.BarButtonItem2, Me.BarWorkspaceMenuItem1, Me.LabelServiceOnline, Me.BarButtonUserManager, Me.LabelServiceOffline, Me.BarButtonItem3, Me.BarButtonFormDesigner, Me.BarButtonItem4})
+ Me.RibbonControl.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl.ExpandCollapseItem, Me.BarButtonExit, Me.BarButtonUserSettings, Me.LabelCurrentUser, Me.LabelCurrentMachine, Me.LabelCurrentVersion, Me.BarButtonItem1, Me.SkinDropDownButtonItem1, Me.BarButtonDeleteControl, Me.BarButtonConnectionSettings, Me.LabelCurrentLanguage, Me.BarButtonItem2, Me.BarWorkspaceMenuItem1, Me.LabelServiceOnline, Me.BarButtonUserManager, Me.LabelServiceOffline, Me.BarButtonItem3, Me.BarButtonFormDesigner, Me.BarButtonItem4, Me.BarButtonItem5})
Me.RibbonControl.Location = New System.Drawing.Point(0, 0)
- Me.RibbonControl.MaxItemId = 25
+ Me.RibbonControl.MaxItemId = 26
Me.RibbonControl.MdiMergeStyle = DevExpress.XtraBars.Ribbon.RibbonMdiMergeStyle.Always
Me.RibbonControl.Name = "RibbonControl"
Me.RibbonControl.PageHeaderItemLinks.Add(Me.SkinDropDownButtonItem1)
Me.RibbonControl.PageHeaderItemLinks.Add(Me.BarWorkspaceMenuItem1)
Me.RibbonControl.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPageStart, Me.RibbonPageAdmin})
- Me.RibbonControl.Size = New System.Drawing.Size(1139, 146)
+ Me.RibbonControl.Size = New System.Drawing.Size(1139, 143)
Me.RibbonControl.StatusBar = Me.RibbonStatusBar
'
'MainMenu
@@ -181,7 +181,7 @@ Partial Class frmMain
'WorkspaceManager1
'
Me.WorkspaceManager1.TargetControl = Me
- Me.WorkspaceManager1.TransitionType = PushTransition1
+ Me.WorkspaceManager1.TransitionType = PushTransition2
'
'LabelServiceOnline
'
@@ -223,7 +223,7 @@ Partial Class frmMain
'
'BarButtonItem4
'
- Me.BarButtonItem4.Caption = "Workflow Test"
+ Me.BarButtonItem4.Caption = "Workflow Step"
Me.BarButtonItem4.Id = 24
Me.BarButtonItem4.ImageOptions.Image = CType(resources.GetObject("BarButtonItem4.ImageOptions.Image"), System.Drawing.Image)
Me.BarButtonItem4.ImageOptions.LargeImage = CType(resources.GetObject("BarButtonItem4.ImageOptions.LargeImage"), System.Drawing.Image)
@@ -241,6 +241,7 @@ Partial Class frmMain
Me.RibbonPageGroup3.ItemLinks.Add(Me.BarButtonItem3)
Me.RibbonPageGroup3.ItemLinks.Add(Me.BarButtonItem2)
Me.RibbonPageGroup3.ItemLinks.Add(Me.BarButtonItem4)
+ Me.RibbonPageGroup3.ItemLinks.Add(Me.BarButtonItem5)
Me.RibbonPageGroup3.Name = "RibbonPageGroup3"
Me.RibbonPageGroup3.Text = "DEBUG"
'
@@ -270,10 +271,10 @@ Partial Class frmMain
Me.RibbonStatusBar.ItemLinks.Add(Me.LabelCurrentLanguage)
Me.RibbonStatusBar.ItemLinks.Add(Me.LabelServiceOnline)
Me.RibbonStatusBar.ItemLinks.Add(Me.LabelServiceOffline)
- Me.RibbonStatusBar.Location = New System.Drawing.Point(0, 556)
+ Me.RibbonStatusBar.Location = New System.Drawing.Point(0, 546)
Me.RibbonStatusBar.Name = "RibbonStatusBar"
Me.RibbonStatusBar.Ribbon = Me.RibbonControl
- Me.RibbonStatusBar.Size = New System.Drawing.Size(1139, 21)
+ Me.RibbonStatusBar.Size = New System.Drawing.Size(1139, 31)
'
'DocumentManager
'
@@ -297,7 +298,7 @@ Partial Class frmMain
'
Me.MainNav.Dock = System.Windows.Forms.DockStyle.Bottom
Me.MainNav.Items.AddRange(New DevExpress.XtraBars.Navigation.NavigationBarItem() {Me.NavbarItemHome, Me.NavbarItemSearch, Me.NavbarItemWorkflow})
- Me.MainNav.Location = New System.Drawing.Point(0, 511)
+ Me.MainNav.Location = New System.Drawing.Point(0, 501)
Me.MainNav.Name = "MainNav"
Me.MainNav.Size = New System.Drawing.Size(1139, 45)
Me.MainNav.TabIndex = 4
@@ -318,6 +319,14 @@ Partial Class frmMain
Me.NavbarItemWorkflow.Name = "NavbarItemWorkflow"
Me.NavbarItemWorkflow.Text = "Workflow"
'
+ 'BarButtonItem5
+ '
+ Me.BarButtonItem5.Caption = "Workflow Overview"
+ Me.BarButtonItem5.Id = 25
+ Me.BarButtonItem5.ImageOptions.Image = CType(resources.GetObject("BarButtonItem5.ImageOptions.Image"), System.Drawing.Image)
+ Me.BarButtonItem5.ImageOptions.LargeImage = CType(resources.GetObject("BarButtonItem5.ImageOptions.LargeImage"), System.Drawing.Image)
+ Me.BarButtonItem5.Name = "BarButtonItem5"
+ '
'frmMain
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@@ -377,4 +386,5 @@ Partial Class frmMain
Friend WithEvents RibbonPageGroup1 As DevExpress.XtraBars.Ribbon.RibbonPageGroup
Friend WithEvents BarButtonFormDesigner As DevExpress.XtraBars.BarButtonItem
Friend WithEvents BarButtonItem4 As DevExpress.XtraBars.BarButtonItem
+ Friend WithEvents BarButtonItem5 As DevExpress.XtraBars.BarButtonItem
End Class
diff --git a/GUIs.ClientSuite/frmMain.resx b/GUIs.ClientSuite/frmMain.resx
index ed5110e8..9a7f64cc 100644
--- a/GUIs.ClientSuite/frmMain.resx
+++ b/GUIs.ClientSuite/frmMain.resx
@@ -446,6 +446,26 @@
Ixl2CEPBSIYdwlAwkmGHMBSMZNghDKWWbpVS4o3v1CEMRSNDD5B2gN71YvgpPhq3GLYfdNj1nbYYth90
+O8BevftiO/Wx/Vxj1/qP1v5Vm9f/a6aB8wD5gHzgPVxJoYjMRwnlhd3GhRitUujhAAAAABJRU5ErkJg
gg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAALHRFWHRUaXRsZQBEb2N1bWVu
+ dDtNYXA7U2NoZW1lO0RpYWdyYW07SGllcmFyO05ldE4PKkQAAAB1SURBVDhPzczBDYAwDEPRLsg6DMAS
+ jMC1x24X9CVAbWKgqBcOTwjXTjKzITKclmKK7yEEUGP4HkIANYbvIQRQY/geQgA1hu8hBFBj+B5CUMs5
+ 20G+o/mpBm8eD/A9XQOXtQfmbbUahZ7s9sCX7CcHRsiwn6Ud+yzVdNjXwB0AAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAALHRFWHRUaXRsZQBEb2N1bWVu
+ dDtNYXA7U2NoZW1lO0RpYWdyYW07SGllcmFyO05ldE4PKkQAAADDSURBVFhH7dKxDcIwEAXQLMg6DMAS
+ jEDrku0OHGEJRU+HIwWncfFS/IT/r2CJiFMxHImhXG7P2IEdwlAwkmGHMBSMZNghDAUjGXYIQ8FIhh3C
+ UDCSYYcwFIxk2CEMBSMZdghDwUiGHcJQMJJhhzAUjGTYIQyllm6VUuKN79QhDEUjQw+QdoDe9WL4KT4a
+ txi2H3TY9Z22GLYfdPjvAXr37Yjv1sf1cY9f6j9b+VZvX/2umgfMA+YB84D1cSaGIzEcJ5YXdxoUYrVL
+ o4QAAAAASUVORK5CYII=
diff --git a/GUIs.ClientSuite/frmMain.vb b/GUIs.ClientSuite/frmMain.vb
index 74d30656..8a664370 100644
--- a/GUIs.ClientSuite/frmMain.vb
+++ b/GUIs.ClientSuite/frmMain.vb
@@ -37,11 +37,11 @@ Public Class frmMain
End Sub
Private Sub HandleOnlineChanged(sender As Object, Online As Boolean)
+ SetOnlineLabel(Online)
If Online = False Then
-
+ MessageBox.Show($"Application will be closed now.{vbNewLine}Reason: Service is offline.", "Critical Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Application.Exit()
End If
- SetOnlineLabel(Online)
End Sub
Private Sub FrmMain_Load(sender As Object, e As EventArgs) Handles Me.Load
@@ -222,4 +222,11 @@ Public Class frmMain
}
oForm.Show()
End Sub
+
+ Private Sub BarButtonItem5_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem5.ItemClick
+ Dim oForm As New frmWorkflowOverview() With {
+ .MdiParent = DocumentManager.MdiParent
+ }
+ oForm.Show()
+ End Sub
End Class
\ No newline at end of file
diff --git a/GUIs.ClientSuite/packages.config b/GUIs.ClientSuite/packages.config
index cd1527a3..55fed1f5 100644
--- a/GUIs.ClientSuite/packages.config
+++ b/GUIs.ClientSuite/packages.config
@@ -3,5 +3,6 @@
+
\ No newline at end of file
diff --git a/GUIs.Test.TestGUI/Form1.Designer.vb b/GUIs.Test.TestGUI/Form1.Designer.vb
index e744c1bb..6ac95de9 100644
--- a/GUIs.Test.TestGUI/Form1.Designer.vb
+++ b/GUIs.Test.TestGUI/Form1.Designer.vb
@@ -43,6 +43,9 @@ Partial Class Form1
Me.TextBox1 = New System.Windows.Forms.TextBox()
Me.Label6 = New System.Windows.Forms.Label()
Me.Button4 = New System.Windows.Forms.Button()
+ Me.Button6 = New System.Windows.Forms.Button()
+ Me.ListBox1 = New System.Windows.Forms.ListBox()
+ Me.Button7 = New System.Windows.Forms.Button()
CType(Me.GridControl1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.GridView1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
@@ -228,11 +231,40 @@ Partial Class Form1
Me.Button4.Text = "Test Background Worker Logging"
Me.Button4.UseVisualStyleBackColor = True
'
+ 'Button6
+ '
+ Me.Button6.Location = New System.Drawing.Point(683, 143)
+ Me.Button6.Name = "Button6"
+ Me.Button6.Size = New System.Drawing.Size(75, 23)
+ Me.Button6.TabIndex = 23
+ Me.Button6.Text = "Get Logs"
+ Me.Button6.UseVisualStyleBackColor = True
+ '
+ 'ListBox1
+ '
+ Me.ListBox1.FormattingEnabled = True
+ Me.ListBox1.Location = New System.Drawing.Point(683, 172)
+ Me.ListBox1.Name = "ListBox1"
+ Me.ListBox1.Size = New System.Drawing.Size(355, 303)
+ Me.ListBox1.TabIndex = 24
+ '
+ 'Button7
+ '
+ Me.Button7.Location = New System.Drawing.Point(764, 143)
+ Me.Button7.Name = "Button7"
+ Me.Button7.Size = New System.Drawing.Size(75, 23)
+ Me.Button7.TabIndex = 25
+ Me.Button7.Text = "Clear Logs"
+ Me.Button7.UseVisualStyleBackColor = True
+ '
'Form1
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(1050, 487)
+ Me.Controls.Add(Me.Button7)
+ Me.Controls.Add(Me.ListBox1)
+ Me.Controls.Add(Me.Button6)
Me.Controls.Add(Me.Button4)
Me.Controls.Add(Me.Label6)
Me.Controls.Add(Me.TextBox1)
@@ -284,4 +316,7 @@ Partial Class Form1
Friend WithEvents TextBox1 As TextBox
Friend WithEvents Label6 As Label
Friend WithEvents Button4 As Button
+ Friend WithEvents Button6 As Button
+ Friend WithEvents ListBox1 As ListBox
+ Friend WithEvents Button7 As Button
End Class
diff --git a/GUIs.Test.TestGUI/Form1.vb b/GUIs.Test.TestGUI/Form1.vb
index a41b5a2a..dcde0760 100644
--- a/GUIs.Test.TestGUI/Form1.vb
+++ b/GUIs.Test.TestGUI/Form1.vb
@@ -41,6 +41,7 @@ Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
MyLogger = New LogConfig(LogConfig.PathType.CurrentDirectory, Nothing, "MAIN")
+ MyLogger.Debug = True
Logger = MyLogger.GetLogger()
Dim MySecondLogger = New LogConfig(LogConfig.PathType.CurrentDirectory, Nothing, "MAIN2")
@@ -169,4 +170,21 @@ Public Class Form1
bw1.RunWorkerAsync()
End Sub
+ Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
+ Logger.Error(New ApplicationException("Some Error occurred!"))
+
+ ListBox1.Items.Clear()
+ For Each oLog In MyLogger.Logs
+ ListBox1.Items.Add(oLog)
+ Next
+ End Sub
+
+ Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
+ MyLogger.ClearLogs()
+
+ ListBox1.Items.Clear()
+ For Each oLog In MyLogger.Logs
+ ListBox1.Items.Add(oLog)
+ Next
+ End Sub
End Class
diff --git a/GUIs.Test.ZUGFeRDTest/Form1.Designer.vb b/GUIs.Test.ZUGFeRDTest/Form1.Designer.vb
index 70336604..adc6be79 100644
--- a/GUIs.Test.ZUGFeRDTest/Form1.Designer.vb
+++ b/GUIs.Test.ZUGFeRDTest/Form1.Designer.vb
@@ -29,6 +29,17 @@ Partial Class Form1
Me.Button3 = New System.Windows.Forms.Button()
Me.Button4 = New System.Windows.Forms.Button()
Me.txtMD5Checksum = New System.Windows.Forms.TextBox()
+ Me.Button5 = New System.Windows.Forms.Button()
+ Me.GroupBox1 = New System.Windows.Forms.GroupBox()
+ Me.GroupBox2 = New System.Windows.Forms.GroupBox()
+ Me.GroupBox3 = New System.Windows.Forms.GroupBox()
+ Me.txtPropName = New System.Windows.Forms.TextBox()
+ Me.GroupBox4 = New System.Windows.Forms.GroupBox()
+ Me.Button6 = New System.Windows.Forms.Button()
+ Me.GroupBox1.SuspendLayout()
+ Me.GroupBox2.SuspendLayout()
+ Me.GroupBox3.SuspendLayout()
+ Me.GroupBox4.SuspendLayout()
Me.SuspendLayout()
'
'OpenFileDialog1
@@ -37,7 +48,7 @@ Partial Class Form1
'
'Button1
'
- Me.Button1.Location = New System.Drawing.Point(12, 12)
+ Me.Button1.Location = New System.Drawing.Point(6, 19)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(221, 23)
Me.Button1.TabIndex = 0
@@ -54,55 +65,128 @@ Partial Class Form1
'
'Button2
'
- Me.Button2.Location = New System.Drawing.Point(12, 122)
+ Me.Button2.Location = New System.Drawing.Point(6, 19)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(221, 23)
Me.Button2.TabIndex = 2
- Me.Button2.Text = "Validate Single File"
+ Me.Button2.Text = "Validate PDF"
Me.Button2.UseVisualStyleBackColor = True
'
'Button3
'
- Me.Button3.Location = New System.Drawing.Point(12, 151)
+ Me.Button3.Location = New System.Drawing.Point(6, 48)
Me.Button3.Name = "Button3"
Me.Button3.Size = New System.Drawing.Size(221, 23)
Me.Button3.TabIndex = 3
- Me.Button3.Text = "Load Single File"
+ Me.Button3.Text = "Validate and Serialize PDF"
Me.Button3.UseVisualStyleBackColor = True
'
'Button4
'
- Me.Button4.Location = New System.Drawing.Point(12, 193)
+ Me.Button4.Location = New System.Drawing.Point(6, 19)
Me.Button4.Name = "Button4"
Me.Button4.Size = New System.Drawing.Size(221, 23)
Me.Button4.TabIndex = 4
- Me.Button4.Text = "MD5Chcksum"
+ Me.Button4.Text = "Create MD5 Checksum for PDF"
Me.Button4.UseVisualStyleBackColor = True
'
'txtMD5Checksum
'
Me.txtMD5Checksum.DataBindings.Add(New System.Windows.Forms.Binding("Text", Global.ZUGFeRDTest.My.MySettings.Default, "MD5Cheksum", True, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged))
- Me.txtMD5Checksum.Location = New System.Drawing.Point(12, 222)
+ Me.txtMD5Checksum.Location = New System.Drawing.Point(6, 49)
Me.txtMD5Checksum.Name = "txtMD5Checksum"
- Me.txtMD5Checksum.Size = New System.Drawing.Size(360, 20)
+ Me.txtMD5Checksum.Size = New System.Drawing.Size(348, 20)
Me.txtMD5Checksum.TabIndex = 5
Me.txtMD5Checksum.Text = Global.ZUGFeRDTest.My.MySettings.Default.MD5Cheksum
'
+ 'Button5
+ '
+ Me.Button5.Location = New System.Drawing.Point(6, 48)
+ Me.Button5.Name = "Button5"
+ Me.Button5.Size = New System.Drawing.Size(221, 23)
+ Me.Button5.TabIndex = 6
+ Me.Button5.Text = "Open Input Folder"
+ Me.Button5.UseVisualStyleBackColor = True
+ '
+ 'GroupBox1
+ '
+ Me.GroupBox1.Controls.Add(Me.Button1)
+ Me.GroupBox1.Controls.Add(Me.Button5)
+ Me.GroupBox1.Location = New System.Drawing.Point(12, 12)
+ Me.GroupBox1.Name = "GroupBox1"
+ Me.GroupBox1.Size = New System.Drawing.Size(360, 92)
+ Me.GroupBox1.TabIndex = 7
+ Me.GroupBox1.TabStop = False
+ Me.GroupBox1.Text = "Run Job like in ZUGFeRD Service"
+ '
+ 'GroupBox2
+ '
+ Me.GroupBox2.Controls.Add(Me.Button2)
+ Me.GroupBox2.Controls.Add(Me.Button3)
+ Me.GroupBox2.Location = New System.Drawing.Point(12, 110)
+ Me.GroupBox2.Name = "GroupBox2"
+ Me.GroupBox2.Size = New System.Drawing.Size(360, 90)
+ Me.GroupBox2.TabIndex = 8
+ Me.GroupBox2.TabStop = False
+ Me.GroupBox2.Text = "Run Functions on a single file (needs Breakpoint)"
+ '
+ 'GroupBox3
+ '
+ Me.GroupBox3.Controls.Add(Me.Button4)
+ Me.GroupBox3.Controls.Add(Me.txtMD5Checksum)
+ Me.GroupBox3.Location = New System.Drawing.Point(12, 206)
+ Me.GroupBox3.Name = "GroupBox3"
+ Me.GroupBox3.Size = New System.Drawing.Size(360, 85)
+ Me.GroupBox3.TabIndex = 9
+ Me.GroupBox3.TabStop = False
+ Me.GroupBox3.Text = "Open PDF and calculate Checksum"
+ '
+ 'txtPropName
+ '
+ Me.txtPropName.Location = New System.Drawing.Point(6, 48)
+ Me.txtPropName.Name = "txtPropName"
+ Me.txtPropName.Size = New System.Drawing.Size(348, 20)
+ Me.txtPropName.TabIndex = 10
+ '
+ 'GroupBox4
+ '
+ Me.GroupBox4.Controls.Add(Me.Button6)
+ Me.GroupBox4.Controls.Add(Me.txtPropName)
+ Me.GroupBox4.Location = New System.Drawing.Point(12, 297)
+ Me.GroupBox4.Name = "GroupBox4"
+ Me.GroupBox4.Size = New System.Drawing.Size(360, 122)
+ Me.GroupBox4.TabIndex = 11
+ Me.GroupBox4.TabStop = False
+ Me.GroupBox4.Text = "GroupBox4"
+ '
+ 'Button6
+ '
+ Me.Button6.Location = New System.Drawing.Point(6, 19)
+ Me.Button6.Name = "Button6"
+ Me.Button6.Size = New System.Drawing.Size(221, 23)
+ Me.Button6.TabIndex = 11
+ Me.Button6.Text = "Find and Extract XML Path Value"
+ Me.Button6.UseVisualStyleBackColor = True
+ '
'Form1
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(916, 435)
- Me.Controls.Add(Me.txtMD5Checksum)
- Me.Controls.Add(Me.Button4)
- Me.Controls.Add(Me.Button3)
- Me.Controls.Add(Me.Button2)
+ Me.Controls.Add(Me.GroupBox4)
+ Me.Controls.Add(Me.GroupBox3)
+ Me.Controls.Add(Me.GroupBox2)
+ Me.Controls.Add(Me.GroupBox1)
Me.Controls.Add(Me.ListBox1)
- Me.Controls.Add(Me.Button1)
Me.Name = "Form1"
Me.Text = "Form1"
+ Me.GroupBox1.ResumeLayout(False)
+ Me.GroupBox2.ResumeLayout(False)
+ Me.GroupBox3.ResumeLayout(False)
+ Me.GroupBox3.PerformLayout()
+ Me.GroupBox4.ResumeLayout(False)
+ Me.GroupBox4.PerformLayout()
Me.ResumeLayout(False)
- Me.PerformLayout()
End Sub
@@ -113,4 +197,11 @@ Partial Class Form1
Friend WithEvents Button3 As Button
Friend WithEvents Button4 As Button
Friend WithEvents txtMD5Checksum As TextBox
+ Friend WithEvents Button5 As Button
+ Friend WithEvents GroupBox1 As GroupBox
+ Friend WithEvents GroupBox2 As GroupBox
+ Friend WithEvents GroupBox3 As GroupBox
+ Friend WithEvents txtPropName As TextBox
+ Friend WithEvents GroupBox4 As GroupBox
+ Friend WithEvents Button6 As Button
End Class
diff --git a/GUIs.Test.ZUGFeRDTest/Form1.vb b/GUIs.Test.ZUGFeRDTest/Form1.vb
index b48244f8..e03630b5 100644
--- a/GUIs.Test.ZUGFeRDTest/Form1.vb
+++ b/GUIs.Test.ZUGFeRDTest/Form1.vb
@@ -109,7 +109,11 @@ Public Class Form1
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
My.Settings.Save()
Dim result = checkMD5(txtMD5Checksum.Text)
- MsgBox("Done")
+ If IsNothing(result) Then
+ MsgBox("Could not calculate MD5 Checksum")
+ Else
+ txtMD5Checksum.Text = result
+ End If
End Sub
Public Function checkMD5(ByVal filename As String) As String
Try
@@ -128,6 +132,29 @@ Public Class Form1
Catch ex As Exception
Return Nothing
End Try
-
End Function
+
+ Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
+ Process.Start("\\dd-sto01\DD-STO01-A2\SharedObjects\Public\Projekte\Test\Import\ZUGFerD\Email_in")
+ End Sub
+
+ Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
+ Dim oResult = OpenFileDialog1.ShowDialog()
+
+ If oResult = DialogResult.OK Then
+ Dim oDoc = _zugferd.ValidateZUGFeRDFile(OpenFileDialog1.FileName)
+ Dim oZUGFERD As CrossIndustryDocumentType = _zugferd.SerializeZUGFeRDDocument(oDoc)
+ Dim oPropName As String = txtPropName.Text
+
+ Try
+ Dim oExtractor = New PropertyValues(_logConfig)
+ Dim oValue As List(Of Object) = oExtractor.GetPropValue(oZUGFERD, oPropName)
+ Dim oFinalValue As List(Of Object) = oExtractor.GetFinalPropValue(oValue)
+ Console.WriteLine()
+
+ Catch ex As Exception
+ MsgBox(ex.Message)
+ End Try
+ End If
+ End Sub
End Class
diff --git a/Jobs/EDMI/ZUGFeRD/ImportZUGFeRDFiles.vb b/Jobs/EDMI/ZUGFeRD/ImportZUGFeRDFiles.vb
index 96da49a9..07a9af46 100644
--- a/Jobs/EDMI/ZUGFeRD/ImportZUGFeRDFiles.vb
+++ b/Jobs/EDMI/ZUGFeRD/ImportZUGFeRDFiles.vb
@@ -8,6 +8,7 @@ Imports System.Text.RegularExpressions
Imports System.Xml
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Interfaces
+Imports DigitalData.Modules.Interfaces.Exceptions
Imports DigitalData.Modules.Jobs.Exceptions
Imports DigitalData.Modules.Logging
Imports FirebirdSql.Data.FirebirdClient
@@ -20,6 +21,7 @@ Public Class ImportZUGFeRDFiles
Public Const ZUGFERD_SUCCESS = "ZUGFeRD Success"
Public Const ZUGFERD_EML = "ZUGFeRD Eml"
Public Const ZUGFERD_REJECTED_EML = "ZUGFeRD Eml Rejected"
+ Public Const ZUGFERD_ATTACHMENTS = "ZUGFeRD Attachments"
Private _logger As Logger
Private _logConfig As LogConfig
@@ -226,7 +228,10 @@ Public Class ImportZUGFeRDFiles
Dim oZUGFeRDCount As Integer = 0
' Set the default Move Directory
Dim oMoveDirectory As String = args.SuccessDirectory
+ ' Create file lists
Dim oFileGroupFiles As List(Of FileInfo) = oFileGroup.Value
+ Dim oFileAttachmentFiles As New List(Of FileInfo)
+
Dim oFileGroupId As String = oFileGroup.Key
Dim oMissingProperties As New List(Of String)
Dim oMD5CheckSum As String = String.Empty
@@ -238,6 +243,9 @@ Public Class ImportZUGFeRDFiles
For Each oFile In oFileGroupFiles
Dim oDocument As CrossIndustryDocumentType
+ ' Start a global group counter for each file
+ Dim oGlobalGroupCounter = 0
+
' Clear missing properties for the new file
oMissingProperties = New List(Of String)
oCurrentFileCount += 1
@@ -245,6 +253,7 @@ Public Class ImportZUGFeRDFiles
' Only pdf files are allowed from here on
If Not oFile.Name.EndsWith(".pdf") Then
_logger.Debug("Skipping non-pdf file {0}", oFile.Name)
+ oFileAttachmentFiles.Add(oFile)
Continue For
End If
@@ -252,9 +261,23 @@ Public Class ImportZUGFeRDFiles
Try
oDocument = _zugferd.ExtractZUGFeRDFile(oFile.FullName)
- Catch ex As Exception
- _logger.Warn("File is not a valid ZUGFeRD document! Skipping.")
- Continue For
+ Catch ex As ZUGFeRDExecption
+ Select Case ex.ErrorType
+ Case ZUGFeRDInterface.ErrorType.NoZugferd
+ _logger.Warn("File is not a valid ZUGFeRD document! Skipping.")
+ oFileAttachmentFiles.Add(oFile)
+ Continue For
+
+ Case ZUGFeRDInterface.ErrorType.NoValidZugferd
+ _logger.Warn("File is an Incorrectly formatted ZUGFeRD document!")
+ Throw New InvalidFerdException()
+
+ Case Else
+ _logger.Warn("Unexpected Error occurred while extracting ZUGFeRD Information from file {0}", oFile.FullName)
+ Throw ex
+ End Select
+
+
End Try
oMD5CheckSum = CreateMD5(oFile.FullName)
@@ -298,7 +321,6 @@ Public Class ImportZUGFeRDFiles
Function(Item) Item)
_logger.Debug("Found {0} properties grouped in {1} group(s)", args.PropertyMap.Count - oDefaultProperties.Count, oGroupedProperties.Count)
-
' Iterate through groups to get group scope and group items
For Each oGroup In oGroupedProperties
Dim oGroupScope As String = oGroup.Key
@@ -309,8 +331,20 @@ Public Class ImportZUGFeRDFiles
' get properties as a nested object, see `oPropertyList`
For Each oProperty As KeyValuePair(Of String, XmlItemProperty) In oGroup
- Dim oPropertyValues As List(Of Object) = oPropertyExtractor.GetPropValue(oDocument, oProperty.Key)
+ Dim oPropertyValues As List(Of Object)
+ Try
+ oPropertyValues = oPropertyExtractor.GetPropValue(oDocument, oProperty.Key)
+ Catch ex As Exception
+ _logger.Warn("Unknown error occurred while fetching property {0} in group {1}:", oProperty.Value.Description, oGroupScope)
+ _logger.Error(ex)
+ oPropertyValues = New List(Of Object)
+ End Try
+
+ ' Flatten result value
+ oPropertyValues = oPropertyExtractor.GetFinalPropValue(oPropertyValues)
+
+ ' Add to list
oPropertyList.Add(oProperty.Value, oPropertyValues)
' check the first batch of values to determine the row count
@@ -319,46 +353,6 @@ Public Class ImportZUGFeRDFiles
End If
Next
- ' check for rows that are empty in every column
- ' this happens when a grouped row is not filled
- ' e.g. a row in a invoice that is just a note
- _logger.Debug("Done Fetching Property values.")
- Dim oIndexesToRemove As New List(Of Integer)
-
- For oRowIndex = 0 To oRowCount - 1
- Dim oColumnIsEmpty = False
-
- For Each oRow In oPropertyList
- Dim oValue As List(Of Object) = oRow.Value
- 'Dim oValue As List(Of Object) = oRow.Value.Item(oRowIndex)
- oColumnIsEmpty = oValue.Count = 0
- Next
-
- If oColumnIsEmpty Then
- oIndexesToRemove.Add(oRowIndex)
- End If
- Next
-
- _logger.Debug("Removing {0} empty rows.", oIndexesToRemove)
-
-
- ' order indexes to remove descending to avoid indexOutOfRange errors
- If oIndexesToRemove.Count > 0 Then
- oIndexesToRemove = oIndexesToRemove.
- OrderByDescending(Function(oIndex) oIndex).
- ToList()
- End If
-
- ' now remove all empty rows.
- For Each oIndex In oIndexesToRemove
- For Each oRow In oPropertyList
- oRow.Value.RemoveAt(oIndex)
- Next
- Next
-
- ' decrease row count by rows removed
- oRowCount -= oIndexesToRemove.Count
-
' Structure of oPropertyList
' [ # Propertyname # Row 1 # Row 2
' PositionsMenge: [BilledQuantity1, BilledQuantity2, ...],
@@ -371,21 +365,13 @@ Public Class ImportZUGFeRDFiles
For Each oColumn As KeyValuePair(Of XmlItemProperty, List(Of Object)) In oPropertyList
Dim oTableName As String = oColumn.Key.TableName
Dim oPropertyDescription As String = oColumn.Key.Description
- Dim oPropertyValue = oColumn.Value.Item(oRowIndex)
- Dim oRowCounter = oRowIndex + 1
+ Dim oRowCounter = oRowIndex + oGlobalGroupCounter + 1
+
+ ' Returns nothing if oColumn.Value contains an empty list
+ Dim oPropertyValue = oColumn.Value.ElementAtOrDefault(oRowIndex)
_logger.Debug("Processing property {0}.", oPropertyDescription)
- If TypeOf oPropertyValue Is List(Of Object) Then
- Select Case oPropertyValue.Count
- Case 0
- oPropertyValue = String.Empty
- Case Else
- Dim oList As List(Of Object) = DirectCast(oPropertyValue, List(Of Object))
- oPropertyValue = oList.Item(0)
- End Select
- End If
-
If IsNothing(oPropertyValue) OrElse String.IsNullOrEmpty(oPropertyValue) Then
If oColumn.Key.IsRequired Then
_logger.Warn("Property {0} is empty or not found but was required. Continuing with Empty String.", oPropertyDescription)
@@ -414,30 +400,47 @@ Public Class ImportZUGFeRDFiles
_firebird.ExecuteNonQueryWithConnection(oCommand, oConnection, Firebird.TransactionMode.ExternalTransaction, oTransaction)
Next
Next
+
+ oGlobalGroupCounter += oRowCount
Next
' Iterate through default properties
For Each Item As KeyValuePair(Of String, XmlItemProperty) In oDefaultProperties
- Dim oPropertyValueList As List(Of Object) = oPropertyExtractor.GetPropValue(oDocument, Item.Key)
+ Dim oPropertyValueList As List(Of Object)
Dim oPropertyDescription As String = Item.Value.Description
Dim oPropertyValue As Object = Nothing
- If IsNothing(oPropertyValueList) Then
- oPropertyValue = Nothing
- ElseIf TypeOf oPropertyValueList Is List(Of Object) Then
- Select Case oPropertyValueList.Count
- Case 0
- oPropertyValue = Nothing
- Case Else
- oPropertyValue = oPropertyValueList.First()
+ Try
+ oPropertyValueList = oPropertyExtractor.GetPropValue(oDocument, Item.Key)
+ Catch ex As Exception
+ _logger.Warn("Unknown error occurred while fetching property {0} in group {1}:", oPropertyDescription, Item.Value.GroupScope)
+ _logger.Error(ex)
+ oPropertyValueList = New List(Of Object)
+ End Try
- ' This should hopefully show config errors
- If TypeOf oPropertyValue Is List(Of Object) Then
- _logger.Warn("Property with Description {0} may be configured incorrectly", oPropertyDescription)
+ Try
+ If IsNothing(oPropertyValueList) Then
+ oPropertyValue = Nothing
+ ElseIf TypeOf oPropertyValueList Is List(Of Object) Then
+ Select Case oPropertyValueList.Count
+ Case 0
oPropertyValue = Nothing
- End If
- End Select
- End If
+ Case Else
+ Dim oList As List(Of Object) = DirectCast(oPropertyValueList, List(Of Object))
+ oPropertyValue = oList.Item(0)
+
+ ' This should hopefully show config errors
+ If TypeOf oPropertyValue Is List(Of Object) Then
+ _logger.Warn("Property with Description {0} may be configured incorrectly", oPropertyDescription)
+ oPropertyValue = Nothing
+ End If
+ End Select
+ End If
+ Catch ex As Exception
+ _logger.Warn("Unknown error occurred while processing property {0}:", oPropertyDescription)
+ _logger.Error(ex)
+ oPropertyValue = Nothing
+ End Try
If IsNothing(oPropertyValue) OrElse String.IsNullOrEmpty(oPropertyValue) Then
If Item.Value.IsRequired Then
@@ -493,6 +496,20 @@ Public Class ImportZUGFeRDFiles
Dim oBody = "The invoice attached to your email has already been processed in our system.
"
Dim oEmailData = MoveAndRenameEmailToRejected(args, oFileGroupId)
AddToEmailQueue(oFileGroupId, oBody, oEmailData)
+
+ Catch ex As InvalidFerdException
+ _logger.Error(ex)
+
+ oMoveDirectory = args.ErrorDirectory
+
+ Dim oBody = """
+ Your email contained a ZUGFeRD document but it was incorrectly formatted.
+ Possible reasons include:
+ - Amount value has incorrect format (25,01 instead of 25.01)
+
+ """
+ Dim oEmailData = MoveAndRenameEmailToRejected(args, oFileGroupId)
+ AddToEmailQueue(oFileGroupId, oBody, oEmailData)
Catch ex As TooMuchFerdsException
_logger.Error(ex)
@@ -526,14 +543,16 @@ Public Class ImportZUGFeRDFiles
oConnection.Close()
' Move all files of the current group
- For Each oFile In oFileGroupFiles
- _filesystem.MoveTo(oFile.FullName, oMoveDirectory)
- _logger.Info("Finished processing file {0}", oFile.Name)
- _logger.Info("File moved to {0}", oMoveDirectory)
- Next
-
- _logger.Info("Finished processing file group {0}", oFileGroupId)
- _logger.EndBlock()
+ Try
+ MoveFiles(args, oFileGroupFiles, oFileAttachmentFiles, oMoveDirectory)
+ _logger.Info("Finished processing file group {0}", oFileGroupId)
+ Catch ex As Exception
+ _logger.Warn("Could not move files!")
+ _logger.Error(ex)
+ Throw ex
+ Finally
+ _logger.EndBlock()
+ End Try
End Try
Next
End If
@@ -546,6 +565,25 @@ Public Class ImportZUGFeRDFiles
End Try
End Sub
+ Private Sub MoveFiles(Args As WorkerArgs, Files As List(Of FileInfo), AttachmentFiles As List(Of FileInfo), MoveDirectory As String)
+ For Each oFile In Files
+ Dim oFinalMoveDirectory As String = MoveDirectory
+
+ If AttachmentFiles.Contains(oFile) Then
+ oFinalMoveDirectory = Path.Combine(MoveDirectory, Args.AttachmentsSubDirectory)
+
+ If Not Directory.Exists(oFinalMoveDirectory) Then
+ Directory.CreateDirectory(oFinalMoveDirectory)
+ End If
+ End If
+
+ _filesystem.MoveTo(oFile.FullName, oFinalMoveDirectory)
+ _logger.Info("Finished processing file {0}", oFile.Name)
+ _logger.Info("File moved to {0}", oFinalMoveDirectory)
+ Next
+ End Sub
+
+
Private Function CreateBodyForMissingProperties(OriginalFilename As String, MissingProperties As List(Of String))
Dim oBody = $"The following file is not ZUGFeRD-compliant: {OriginalFilename}
"
diff --git a/Jobs/EDMI/ZUGFeRD/PropertyValues.vb b/Jobs/EDMI/ZUGFeRD/PropertyValues.vb
index 7baabe41..31c6bfc6 100644
--- a/Jobs/EDMI/ZUGFeRD/PropertyValues.vb
+++ b/Jobs/EDMI/ZUGFeRD/PropertyValues.vb
@@ -1,4 +1,5 @@
Imports System.Collections.Generic
+Imports System.Linq
Imports System.Reflection
Imports System.Text.RegularExpressions
Imports DigitalData.Modules.Logging
@@ -59,7 +60,7 @@ Public Class PropertyValues
If IsArray(Obj) And Not oHasIndex Then
Dim oCurrentPart As String = oPart
- Dim oSplitString As String() = New String() {"." & oCurrentPart & "."}
+ Dim oSplitString As String() = New String() {oCurrentPart & "."}
Dim oPathFragments = PropertyName.Split(oSplitString, StringSplitOptions.None)
Dim oResults As New List(Of Object)
@@ -71,10 +72,6 @@ Public Class PropertyValues
For Each oArrayItem In Obj
Dim oResult As List(Of Object) = GetPropValue(oArrayItem, oPathFragments(1))
- 'If Not IsNothing(oResult) AndAlso oResult.Count > 0 Then
- ' oResults.Add(oResult.Item(0))
- 'End If
-
If Not IsNothing(oResult) Then
oResults.Add(oResult)
End If
@@ -87,6 +84,38 @@ Public Class PropertyValues
Return New List(Of Object) From {Obj}
End Function
+ Public Function GetFinalPropValue(List As List(Of Object)) As List(Of Object)
+ Dim oResult As New List(Of Object)
+
+ For Each Item In List
+ Dim oItemValue = DoGetFinalPropValue(Item)
+
+ If Not IsNothing(oItemValue) Then
+ oResult.Add(oItemValue)
+ End If
+ Next
+
+ Return oResult
+ End Function
+
+ Private Function DoGetFinalPropValue(Value As Object) As String
+ If TypeOf Value Is List(Of Object) Then
+ Dim oList = DirectCast(Value, List(Of Object))
+ Dim oCount = oList.Count
+
+ Select Case oCount
+ Case 0
+ Return Nothing
+ Case Else
+ Return DoGetFinalPropValue(oList.First())
+ End Select
+
+ Return DoGetFinalPropValue(Value)
+ Else
+ Return Value.ToString
+ End If
+ End Function
+
Private Function GetIndex(Prop As String) As Integer
If Regex.IsMatch(Prop, _indexPattern) Then
Dim oMatch = _indexRegex.Match(Prop)
diff --git a/Jobs/EDMI/ZUGFeRD/WorkerArgs.vb b/Jobs/EDMI/ZUGFeRD/WorkerArgs.vb
index 68c39324..71b3f456 100644
--- a/Jobs/EDMI/ZUGFeRD/WorkerArgs.vb
+++ b/Jobs/EDMI/ZUGFeRD/WorkerArgs.vb
@@ -6,6 +6,7 @@ Public Class WorkerArgs
Public ErrorDirectory As String
Public OriginalEmailDirectory As String
Public RejectedEmailDirectory As String
+ Public AttachmentsSubDirectory As String
Public PropertyMap As Dictionary(Of String, XmlItemProperty)
Public InsertIntoSQLServer As Boolean
@@ -15,6 +16,7 @@ Public Class WorkerArgs
ErrorDirectory = Nothing
OriginalEmailDirectory = Nothing
RejectedEmailDirectory = Nothing
+ AttachmentsSubDirectory = Nothing
PropertyMap = New Dictionary(Of String, XmlItemProperty)
InsertIntoSQLServer = False
End Sub
diff --git a/Jobs/Exceptions.vb b/Jobs/Exceptions.vb
index f73d2d47..d8be37c0 100644
--- a/Jobs/Exceptions.vb
+++ b/Jobs/Exceptions.vb
@@ -21,6 +21,14 @@ Public Class Exceptions
End Sub
End Class
+ Public Class InvalidFerdException
+ Inherits ApplicationException
+
+ Public Sub New()
+ MyBase.New("ZUGFeRD document found but was not formatted correctly")
+ End Sub
+ End Class
+
Public Class NoFerdsException
Inherits ApplicationException
diff --git a/LoggerDiag/App.config b/LoggerDiag/App.config
new file mode 100644
index 00000000..5534e287
--- /dev/null
+++ b/LoggerDiag/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/LoggerDiag/DummyConfig.vb b/LoggerDiag/DummyConfig.vb
new file mode 100644
index 00000000..8fe9c12d
--- /dev/null
+++ b/LoggerDiag/DummyConfig.vb
@@ -0,0 +1,3 @@
+Public Class DummyConfig
+ Public SomeSetting As String = "Default_Value"
+End Class
diff --git a/Variables/Variables.vbproj b/LoggerDiag/MonoDiag.vbproj
similarity index 55%
rename from Variables/Variables.vbproj
rename to LoggerDiag/MonoDiag.vbproj
index 90fa3e59..c374a4ff 100644
--- a/Variables/Variables.vbproj
+++ b/LoggerDiag/MonoDiag.vbproj
@@ -4,30 +4,34 @@
Debug
AnyCPU
- {836C9ADE-E04E-4E1E-B17A-201E68014790}
- Library
- DigitalData.Modules.Variables
- DigitalData.Modules.Variables
+ {3D437957-B90B-4D8F-9219-6D19B0C90994}
+ WinExe
+ MonoDiag.My.MyApplication
+ MonoDiag
+ MonoDiag
512
- Windows
+ WindowsForms
v4.6.1
+ true
+ AnyCPU
true
full
true
true
bin\Debug\
- DigitalData.Modules.Variables.xml
+ MonoDiag.xml
42016,41999,42017,42018,42019,42032,42036,42020,42021,42022
+ AnyCPU
pdbonly
false
true
true
bin\Release\
- DigitalData.Modules.Variables.xml
+ MonoDiag.xml
42016,41999,42017,42018,42019,42032,42036,42020,42021,42022
@@ -43,8 +47,27 @@
On
+
+
+
+
+
+
+
+
+
+ ..\packages\NLog.4.5.11\lib\net45\NLog.dll
+
+
+
+
+
+
+
+
+
@@ -57,14 +80,22 @@
+
+
-
-
+
+
+ Form
+
+
+ frmMain.vb
+ Form
+
True
@@ -82,6 +113,10 @@
+
+ frmMain.vb
+
+
VbMyResourcesResXFileCodeGenerator
Resources.Designer.vb
@@ -99,6 +134,18 @@
My
Settings.Designer.vb
+
+
+
+
+
+ {44982f9b-6116-44e2-85d0-f39650b1ef99}
+ Config
+
+
+ {903b2d7d-3b80-4be9-8713-7447b704e1b0}
+ Logging
+
\ No newline at end of file
diff --git a/LoggerDiag/My Project/Application.Designer.vb b/LoggerDiag/My Project/Application.Designer.vb
new file mode 100644
index 00000000..a12c37f8
--- /dev/null
+++ b/LoggerDiag/My Project/Application.Designer.vb
@@ -0,0 +1,38 @@
+'------------------------------------------------------------------------------
+'
+' Dieser Code wurde von einem Tool generiert.
+' Laufzeitversion:4.0.30319.42000
+'
+' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+' der Code erneut generiert wird.
+'
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+
+Namespace My
+
+ 'HINWEIS: Diese Datei wird automatisch generiert und darf nicht direkt bearbeitet werden. Wenn Sie Änderungen vornehmen möchten
+ ' oder in dieser Datei Buildfehler auftreten, wechseln Sie zum Projekt-Designer.
+ ' (Wechseln Sie dazu zu den Projekteigenschaften, oder doppelklicken Sie auf den Knoten "Mein Projekt" im
+ ' Projektmappen-Explorer). Nehmen Sie auf der Registerkarte "Anwendung" entsprechende Änderungen vor.
+ '
+ Partial Friend Class MyApplication
+
+ _
+ Public Sub New()
+ MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
+ Me.IsSingleInstance = false
+ Me.EnableVisualStyles = true
+ Me.SaveMySettingsOnExit = true
+ Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
+ End Sub
+
+ _
+ Protected Overrides Sub OnCreateMainForm()
+ Me.MainForm = Global.MonoDiag.frmMain
+ End Sub
+ End Class
+End Namespace
diff --git a/Variables/My Project/Application.myapp b/LoggerDiag/My Project/Application.myapp
similarity index 80%
rename from Variables/My Project/Application.myapp
rename to LoggerDiag/My Project/Application.myapp
index 758895de..739ea6fe 100644
--- a/Variables/My Project/Application.myapp
+++ b/LoggerDiag/My Project/Application.myapp
@@ -1,10 +1,10 @@
- false
+ true
+ frmMain
false
0
true
0
- 1
true
-
+
\ No newline at end of file
diff --git a/Variables/My Project/AssemblyInfo.vb b/LoggerDiag/My Project/AssemblyInfo.vb
similarity index 82%
rename from Variables/My Project/AssemblyInfo.vb
rename to LoggerDiag/My Project/AssemblyInfo.vb
index 4b2458e2..5af86104 100644
--- a/Variables/My Project/AssemblyInfo.vb
+++ b/LoggerDiag/My Project/AssemblyInfo.vb
@@ -8,17 +8,17 @@ Imports System.Runtime.InteropServices
' Werte der Assemblyattribute überprüfen
-
+
-
-
+
+
'Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird.
-
+
' Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
'
diff --git a/Variables/My Project/Resources.Designer.vb b/LoggerDiag/My Project/Resources.Designer.vb
similarity index 95%
rename from Variables/My Project/Resources.Designer.vb
rename to LoggerDiag/My Project/Resources.Designer.vb
index 1c9f8325..b31b1912 100644
--- a/Variables/My Project/Resources.Designer.vb
+++ b/LoggerDiag/My Project/Resources.Designer.vb
@@ -39,7 +39,7 @@ Namespace My.Resources
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
- Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("DigitalData.Modules.Variables.Resources", GetType(Resources).Assembly)
+ Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MonoDiag.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
diff --git a/Variables/My Project/Resources.resx b/LoggerDiag/My Project/Resources.resx
similarity index 100%
rename from Variables/My Project/Resources.resx
rename to LoggerDiag/My Project/Resources.resx
diff --git a/Variables/My Project/Settings.Designer.vb b/LoggerDiag/My Project/Settings.Designer.vb
similarity index 93%
rename from Variables/My Project/Settings.Designer.vb
rename to LoggerDiag/My Project/Settings.Designer.vb
index c9f54ee0..b2d12459 100644
--- a/Variables/My Project/Settings.Designer.vb
+++ b/LoggerDiag/My Project/Settings.Designer.vb
@@ -64,9 +64,9 @@ Namespace My
Friend Module MySettingsProperty
_
- Friend ReadOnly Property Settings() As Global.DigitalData.Modules.Variables.My.MySettings
+ Friend ReadOnly Property Settings() As Global.MonoDiag.My.MySettings
Get
- Return Global.DigitalData.Modules.Variables.My.MySettings.Default
+ Return Global.MonoDiag.My.MySettings.Default
End Get
End Property
End Module
diff --git a/Variables/My Project/Settings.settings b/LoggerDiag/My Project/Settings.settings
similarity index 100%
rename from Variables/My Project/Settings.settings
rename to LoggerDiag/My Project/Settings.settings
diff --git a/LoggerDiag/My Project/licenses.licx b/LoggerDiag/My Project/licenses.licx
new file mode 100644
index 00000000..824a99fc
--- /dev/null
+++ b/LoggerDiag/My Project/licenses.licx
@@ -0,0 +1 @@
+DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v18.1, Version=18.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
diff --git a/LoggerDiag/frmMain.Designer.vb b/LoggerDiag/frmMain.Designer.vb
new file mode 100644
index 00000000..14cf6f4f
--- /dev/null
+++ b/LoggerDiag/frmMain.Designer.vb
@@ -0,0 +1,122 @@
+ _
+Partial Class frmMain
+ Inherits System.Windows.Forms.Form
+
+ 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+ _
+ Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+ Try
+ If disposing AndAlso components IsNot Nothing Then
+ components.Dispose()
+ End If
+ Finally
+ MyBase.Dispose(disposing)
+ End Try
+ End Sub
+
+ 'Wird vom Windows Form-Designer benötigt.
+ Private components As System.ComponentModel.IContainer
+
+ 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+ 'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
+ 'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+ _
+ Private Sub InitializeComponent()
+ Me.GridControlLogs = New DevExpress.XtraGrid.GridControl()
+ Me.GridView1 = New DevExpress.XtraGrid.Views.Grid.GridView()
+ Me.btnRefresh = New System.Windows.Forms.Button()
+ Me.Button1 = New System.Windows.Forms.Button()
+ Me.TextBox1 = New System.Windows.Forms.TextBox()
+ Me.Label1 = New System.Windows.Forms.Label()
+ Me.Button2 = New System.Windows.Forms.Button()
+ CType(Me.GridControlLogs, System.ComponentModel.ISupportInitialize).BeginInit()
+ CType(Me.GridView1, System.ComponentModel.ISupportInitialize).BeginInit()
+ Me.SuspendLayout()
+ '
+ 'GridControlLogs
+ '
+ Me.GridControlLogs.Dock = System.Windows.Forms.DockStyle.Right
+ Me.GridControlLogs.Location = New System.Drawing.Point(251, 0)
+ Me.GridControlLogs.MainView = Me.GridView1
+ Me.GridControlLogs.Name = "GridControlLogs"
+ Me.GridControlLogs.Size = New System.Drawing.Size(888, 679)
+ Me.GridControlLogs.TabIndex = 0
+ Me.GridControlLogs.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.GridView1})
+ '
+ 'GridView1
+ '
+ Me.GridView1.GridControl = Me.GridControlLogs
+ Me.GridView1.Name = "GridView1"
+ '
+ 'btnRefresh
+ '
+ Me.btnRefresh.Location = New System.Drawing.Point(12, 12)
+ Me.btnRefresh.Name = "btnRefresh"
+ Me.btnRefresh.Size = New System.Drawing.Size(233, 35)
+ Me.btnRefresh.TabIndex = 1
+ Me.btnRefresh.Text = "Refresh Logs"
+ Me.btnRefresh.UseVisualStyleBackColor = True
+ '
+ 'Button1
+ '
+ Me.Button1.Location = New System.Drawing.Point(12, 53)
+ Me.Button1.Name = "Button1"
+ Me.Button1.Size = New System.Drawing.Size(233, 32)
+ Me.Button1.TabIndex = 2
+ Me.Button1.Text = "Read Config"
+ Me.Button1.UseVisualStyleBackColor = True
+ '
+ 'TextBox1
+ '
+ Me.TextBox1.Location = New System.Drawing.Point(12, 143)
+ Me.TextBox1.Name = "TextBox1"
+ Me.TextBox1.Size = New System.Drawing.Size(233, 20)
+ Me.TextBox1.TabIndex = 3
+ '
+ 'Label1
+ '
+ Me.Label1.AutoSize = True
+ Me.Label1.Location = New System.Drawing.Point(9, 127)
+ Me.Label1.Name = "Label1"
+ Me.Label1.Size = New System.Drawing.Size(109, 13)
+ Me.Label1.TabIndex = 4
+ Me.Label1.Text = "Value of Test-Setting:"
+ '
+ 'Button2
+ '
+ Me.Button2.Location = New System.Drawing.Point(12, 91)
+ Me.Button2.Name = "Button2"
+ Me.Button2.Size = New System.Drawing.Size(233, 33)
+ Me.Button2.TabIndex = 5
+ Me.Button2.Text = "Save Config"
+ Me.Button2.UseVisualStyleBackColor = True
+ '
+ 'frmMain
+ '
+ Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
+ Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+ Me.ClientSize = New System.Drawing.Size(1139, 679)
+ Me.Controls.Add(Me.Button2)
+ Me.Controls.Add(Me.Label1)
+ Me.Controls.Add(Me.TextBox1)
+ Me.Controls.Add(Me.Button1)
+ Me.Controls.Add(Me.btnRefresh)
+ Me.Controls.Add(Me.GridControlLogs)
+ Me.MinimumSize = New System.Drawing.Size(1155, 718)
+ Me.Name = "frmMain"
+ Me.Text = "Digital Data Diagnose"
+ CType(Me.GridControlLogs, System.ComponentModel.ISupportInitialize).EndInit()
+ CType(Me.GridView1, System.ComponentModel.ISupportInitialize).EndInit()
+ Me.ResumeLayout(False)
+ Me.PerformLayout()
+
+ End Sub
+
+ Friend WithEvents GridControlLogs As DevExpress.XtraGrid.GridControl
+ Friend WithEvents GridView1 As DevExpress.XtraGrid.Views.Grid.GridView
+ Friend WithEvents btnRefresh As Button
+ Friend WithEvents Button1 As Button
+ Friend WithEvents TextBox1 As TextBox
+ Friend WithEvents Label1 As Label
+ Friend WithEvents Button2 As Button
+End Class
diff --git a/LoggerDiag/frmMain.resx b/LoggerDiag/frmMain.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/LoggerDiag/frmMain.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
\ No newline at end of file
diff --git a/LoggerDiag/frmMain.vb b/LoggerDiag/frmMain.vb
new file mode 100644
index 00000000..2fc491b3
--- /dev/null
+++ b/LoggerDiag/frmMain.vb
@@ -0,0 +1,62 @@
+Imports System.IO
+Imports DigitalData.Modules.Config
+Imports DigitalData.Modules.Logging
+
+Public Class frmMain
+ Public LogConfig As LogConfig
+ Public Logger As Logger
+ Public Config As ConfigManager(Of DummyConfig)
+
+
+ Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
+ LogConfig = New LogConfig(LogConfig.PathType.AppData) With {
+ .Debug = True
+ }
+
+ Dim productName As String = My.Application.Info.ProductName
+ Dim companyName As String = My.Application.Info.CompanyName
+
+ Dim appDataDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
+ Dim basePath = Path.Combine(appDataDir, companyName, productName, "Log")
+
+ Logger = LogConfig.GetLogger()
+ Logger.Info("Initializing Config")
+ Logger.Info("Logging Path: {0}", basePath)
+ Logger.Info("UserConfig.xml Path: {0}", Application.UserAppDataPath)
+ Logger.Info("ComputerConfig.xml Path: {0}", Application.CommonAppDataPath)
+
+ Config = New ConfigManager(Of DummyConfig)(LogConfig, Application.UserAppDataPath, Application.CommonAppDataPath)
+
+ RefreshLogs()
+ End Sub
+
+ Private Sub RefreshLogs()
+ GridControlLogs.DataSource = LogConfig.Logs
+ End Sub
+
+ Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnRefresh.Click
+ RefreshLogs()
+ End Sub
+
+ Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
+ Try
+ Logger.Info("Value of TestSetting is: {0}", Config.Config.SomeSetting)
+ TextBox1.Text = Config.Config.SomeSetting
+ RefreshLogs()
+ Catch ex As Exception
+ Logger.Error(ex)
+ RefreshLogs()
+ End Try
+ End Sub
+
+ Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
+ Try
+ Config.Config.SomeSetting = TextBox1.Text
+ Config.Save()
+ RefreshLogs()
+ Catch ex As Exception
+ Logger.Error(ex)
+ RefreshLogs()
+ End Try
+ End Sub
+End Class
diff --git a/LoggerDiag/packages.config b/LoggerDiag/packages.config
new file mode 100644
index 00000000..f89fa324
--- /dev/null
+++ b/LoggerDiag/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/Modules.Config/ConfigManager.vb b/Modules.Config/ConfigManager.vb
index 0791a6f1..96daa001 100644
--- a/Modules.Config/ConfigManager.vb
+++ b/Modules.Config/ConfigManager.vb
@@ -33,6 +33,18 @@ Public Class ConfigManager(Of T)
'''
Public ReadOnly Property Config As T
+ Public ReadOnly Property UserConfigPath As String
+ Get
+ Return _UserPath
+ End Get
+ End Property
+
+ Public ReadOnly Property ComputerConfigPath As String
+ Get
+ Return _ComputerPath
+ End Get
+ End Property
+
'''
''' Creates a new instance of the ConfigManager
'''
@@ -112,7 +124,9 @@ Public Class ConfigManager(Of T)
Dim oType As Type = GetType(T)
Dim oExcludedAttributeTypes = IIf(IsNothing(ExcludedAttributeTypes), New List(Of Type), ExcludedAttributeTypes)
Dim oProperties = oType.GetProperties().
- Where(Function(p) p.CanRead And p.CanWrite).
+ Where(Function(p)
+ Return p.CanRead And p.CanWrite
+ End Function).
Where(Function(p)
For Each oAttributeType As Type In oExcludedAttributeTypes
If Attribute.IsDefined(p, oAttributeType) Then
@@ -164,6 +178,7 @@ Public Class ConfigManager(Of T)
_Logger.Warn("Computer config could not be loaded!")
End Try
Else
+ _Logger.Debug("Computer config does not exist.")
_ForceUserConfig = True
End If
@@ -190,6 +205,8 @@ Public Class ConfigManager(Of T)
_Logger.Error(ex)
_Logger.Warn("User config could not be loaded!")
End Try
+ Else
+ _Logger.Debug("User config does not exist.")
End If
Return Config
@@ -246,6 +263,7 @@ Public Class ConfigManager(Of T)
oFileStream.Flush()
End Using
Catch ex As Exception
+ _Logger.Warn("Could not save config to {0}", Path)
_Logger.Error(ex)
Throw ex
End Try
@@ -273,6 +291,7 @@ Public Class ConfigManager(Of T)
Return oConfig
Catch ex As Exception
+ _Logger.Warn("Could not load config from {0}", Path)
_Logger.Error(ex)
Throw ex
End Try
diff --git a/Modules.Interfaces/ZUGFeRDInterface.vb b/Modules.Interfaces/ZUGFeRDInterface.vb
index 3f2cf8e0..e8b43eff 100644
--- a/Modules.Interfaces/ZUGFeRDInterface.vb
+++ b/Modules.Interfaces/ZUGFeRDInterface.vb
@@ -14,7 +14,8 @@ Public Class ZUGFeRDInterface
Public Enum ErrorType
NoValidFile
- ExtractionFailed
+ NoZugferd
+ NoValidZugferd
End Enum
Public Sub New(LogConfig As LogConfig)
@@ -33,7 +34,7 @@ Public Class ZUGFeRDInterface
Dim oXmlDocument = ValidateZUGFeRDFile(Path)
If IsNothing(oXmlDocument) Then
- Throw New ZUGFeRDExecption(ErrorType.ExtractionFailed, "Datei ist kein gültiges ZUGFeRD Format.")
+ Throw New ZUGFeRDExecption(ErrorType.NoZugferd, "Datei ist keine ZUGFeRD Datei.")
End If
Return SerializeZUGFeRDDocument(oXmlDocument)
@@ -70,7 +71,7 @@ Public Class ZUGFeRDInterface
If Not oProcessOutput.ToLower.Contains(ZUGFERD_CONVERTER_SUCCESS_MESSAGE.ToLower) Then
_logger.Warn("File {0} is not a valid ZUGFeRD File!", Path)
- Throw New ZUGFeRDExecption(ErrorType.NoValidFile, "Datei ist kein gültiges ZUGFeRD Format.")
+ Throw New ZUGFeRDExecption(ErrorType.NoZugferd, "Datei ist keine ZUGFeRD Datei.")
End If
Try
@@ -93,7 +94,7 @@ Public Class ZUGFeRDInterface
Return oSerializer.Deserialize(oReader)
Catch ex As Exception
_logger.Error(ex)
- Throw ex
+ Throw New ZUGFeRDExecption(ErrorType.NoValidZugferd, "Datei ist eine ungültige ZUGFeRD Datei.")
End Try
End Function
End Class
diff --git a/Modules.Logging/LogConfig.vb b/Modules.Logging/LogConfig.vb
index 2fb378e0..c76847f3 100644
--- a/Modules.Logging/LogConfig.vb
+++ b/Modules.Logging/LogConfig.vb
@@ -4,7 +4,7 @@ Imports NLog.Config
Imports NLog.Targets
''' LogConfig
-''' 0.0.0.7
+''' 0.0.1.0
''' 02.10.2018
'''
''' Module that writes file-logs to different locations:
@@ -100,6 +100,7 @@ Public Class LogConfig
Private Const TARGET_ERROR As String = "errorTarget"
Private Const TARGET_DETAIL As String = "detailTarget"
Private Const TARGET_DEBUG As String = "debugTarget"
+ Private Const TARGET_MEMORY As String = "memoryTarget"
Private Const DATE_FORMAT_LONG As String = "${longdate}"
Private Const DATE_FORMAT_DEFAULT As String = "${date:format=yyyy-MM-dd HH\:mm\:ss}"
@@ -110,6 +111,7 @@ Public Class LogConfig
Private Const LOG_FORMAT_DEFAULT As String = LOG_FORMAT_BASE & " >> ${message}"
Private Const LOG_FORMAT_EXCEPTION As String = LOG_FORMAT_BASE & " >> ${exception:format=Message}${newline}${exception:format=StackTrace}"
Private Const LOG_FORMAT_DEBUG As String = LOG_FORMAT_BASE_LONG_DATE & " >> ${message}"
+ Private Const LOG_FORMAT_MEMORY As String = LOG_FORMAT_BASE_LONG_DATE & " >> ${message}${newline}${exception:format=Message}${newline}${exception:format=StackTrace}"
Private Const FOLDER_NAME_LOG = "Log"
Private Const FILE_NAME_ACCESS_TEST = "accessTest.txt"
@@ -158,6 +160,22 @@ Public Class LogConfig
End Set
End Property
+ '''
+ ''' Returns Logs in Memory as List(Of String) if Debug is enabled
+ ''' Returns an empty list if debug is disabled
+ '''
+ ''' A list of log messages
+ Public ReadOnly Property Logs As List(Of String)
+ Get
+ If Debug = False Then
+ Return New List(Of String)
+ End If
+
+ Dim oTarget = config.FindTargetByName(Of MemoryTarget)(TARGET_MEMORY)
+ Return oTarget?.Logs.ToList()
+ End Get
+ End Property
+
'''
''' Initializes a new LogConfig object with a logpath and optinally a filename-suffix.
'''
@@ -239,6 +257,14 @@ Public Class LogConfig
Return LogFactory.GetLogger(Of Logger)(ClassName)
End Function
+ '''
+ ''' Clears the internal log
+ '''
+ Public Sub ClearLogs()
+ Dim oTarget = config.FindTargetByName(Of MemoryTarget)(TARGET_MEMORY)
+ oTarget?.Logs.Clear()
+ End Sub
+
'''
''' Gets the fully qualified name of the class invoking the calling method,
''' including the namespace but Not the assembly.
@@ -288,6 +314,7 @@ Public Class LogConfig
config.AddTarget(TARGET_ERROR, GetErrorLogTarget(basePath))
config.AddTarget(TARGET_DEFAULT, GetDefaultLogTarget(basePath))
config.AddTarget(TARGET_DEBUG, GetDebugLogTarget(basePath))
+ config.AddTarget(TARGET_MEMORY, GetMemoryDebugTarget())
' Add default rules
AddDefaultRules(config)
@@ -333,6 +360,7 @@ Public Class LogConfig
' Add debug rule, if configured
If Debug Then
config.AddRuleForOneLevel(LogLevel.Debug, TARGET_DEBUG)
+ config.AddRuleForAllLevels(TARGET_MEMORY)
End If
' Reload all running loggers
@@ -402,5 +430,17 @@ Public Class LogConfig
Return debugLog
End Function
+
+ Private Function GetMemoryDebugTarget() As MemoryTarget
+ Dim memoryLog As New MemoryTarget() With {
+ .Layout = LOG_FORMAT_MEMORY,
+ .Name = TARGET_MEMORY,
+ .OptimizeBufferReuse = True
+ }
+
+ Return memoryLog
+ End Function
+
+
#End Region
End Class
diff --git a/Modules.Logging/My Project/AssemblyInfo.vb b/Modules.Logging/My Project/AssemblyInfo.vb
index 7df792a5..3f292b18 100644
--- a/Modules.Logging/My Project/AssemblyInfo.vb
+++ b/Modules.Logging/My Project/AssemblyInfo.vb
@@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices
' übernehmen, indem Sie "*" eingeben:
'
-
+
diff --git a/Variables/CurrentApplication.vb b/Variables/CurrentApplication.vb
deleted file mode 100644
index 897b50ec..00000000
--- a/Variables/CurrentApplication.vb
+++ /dev/null
@@ -1,3 +0,0 @@
-Public Class CurrentApplication
- Public IDBServiceOnline As Boolean = False
-End Class
diff --git a/Variables/CurrentUser.vb b/Variables/CurrentUser.vb
deleted file mode 100644
index b8a60f73..00000000
--- a/Variables/CurrentUser.vb
+++ /dev/null
@@ -1,9 +0,0 @@
-Public Class CurrentUser
- Public USER_GUID As String
- Public USER_NAME As String
- Public ReadOnly USER_LOGIN As DateTime
-
- Public Sub New()
- USER_LOGIN = DateTime.Now
- End Sub
-End Class
diff --git a/Variables/My Project/Application.Designer.vb b/Variables/My Project/Application.Designer.vb
deleted file mode 100644
index 8ab460ba..00000000
--- a/Variables/My Project/Application.Designer.vb
+++ /dev/null
@@ -1,13 +0,0 @@
-'------------------------------------------------------------------------------
-'
-' Dieser Code wurde von einem Tool generiert.
-' Laufzeitversion:4.0.30319.42000
-'
-' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
-' der Code erneut generiert wird.
-'
-'------------------------------------------------------------------------------
-
-Option Strict On
-Option Explicit On
-