diff --git a/EnvelopeGenerator.Common/Entities/EmailTemplate.vb b/EnvelopeGenerator.Common/Entities/EmailTemplate.vb index e7a14aa8..cdd94a84 100644 --- a/EnvelopeGenerator.Common/Entities/EmailTemplate.vb +++ b/EnvelopeGenerator.Common/Entities/EmailTemplate.vb @@ -25,8 +25,8 @@ Public Class EmailTemplate Private Sub InitSubjectTemplates() _DocumentReceivedSubjectTemplate = "Dokument erhalten: ''" _DocumentSignedSubjectTemplate = "Dokument unterschrieben: ''" - _DocumentDeletedSubjectTemplate = "Dokument zurückgezogen: ''" - _DocumentCompletedSubjectTemplate = "Dokument abgeschlossen: ''" + _DocumentDeletedSubjectTemplate = "Vorgang zurückgezogen: ''" + _DocumentCompletedSubjectTemplate = "Vorgang abgeschlossen: ''" End Sub Private Sub InitBodyTemplates() diff --git a/EnvelopeGenerator.Form/Controllers/BaseController.vb b/EnvelopeGenerator.Form/Controllers/BaseController.vb index 2aa8e6a7..39dff0f4 100644 --- a/EnvelopeGenerator.Form/Controllers/BaseController.vb +++ b/EnvelopeGenerator.Form/Controllers/BaseController.vb @@ -2,6 +2,8 @@ Imports DigitalData.Modules.Base Imports EnvelopeGenerator.Common Imports System.Data.SqlClient +Imports DevExpress.DocumentView +Imports System.Transactions Public MustInherit Class BaseController Inherits BaseClass @@ -45,6 +47,10 @@ Public MustInherit Class BaseController End If If pEnvelope.IsAlreadySent Then + If DeleteDocumentsFromDisk(pEnvelope) = False Then + Return False + End If + Return ActionService.DeleteEnvelope(pEnvelope) Else Return DeleteEnvelopeFromDisk(pEnvelope) @@ -114,13 +120,26 @@ Public MustInherit Class BaseController Return False End Try + If DeleteDocumentFromDisk(pDocument) = False Then + Return False + End If + + Return True + End Function + + Public Function DeleteDocumentsFromDisk(pEnvelope As Envelope) As Boolean + Return pEnvelope.Documents. + Select(Function(d) DeleteDocumentFromDisk(d)). + All(Function(r) r = True) + End Function + + Public Function DeleteDocumentFromDisk(pDocument As EnvelopeDocument) As Boolean Try IO.File.Delete(pDocument.Filepath) + Return True Catch ex As Exception Logger.Error(ex) Return False End Try - - Return True End Function End Class diff --git a/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj b/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj index 5627f32f..c8b4e78e 100644 --- a/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj +++ b/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj @@ -148,6 +148,12 @@ Form + + frmSplashScreen.vb + + + Form + @@ -183,6 +189,9 @@ frmMain.vb + + frmSplashScreen.vb + VbMyResourcesResXFileCodeGenerator diff --git a/EnvelopeGenerator.Form/My Project/Application.Designer.vb b/EnvelopeGenerator.Form/My Project/Application.Designer.vb index 8fa106f6..bcb21872 100644 --- a/EnvelopeGenerator.Form/My Project/Application.Designer.vb +++ b/EnvelopeGenerator.Form/My Project/Application.Designer.vb @@ -32,7 +32,7 @@ Namespace My _ Protected Overrides Sub OnCreateMainForm() - Me.MainForm = Global.EnvelopeGenerator.Form.frmMain + Me.MainForm = Global.EnvelopeGenerator.Form.frmSplashScreen End Sub End Class End Namespace diff --git a/EnvelopeGenerator.Form/frmMain.Designer.vb b/EnvelopeGenerator.Form/frmMain.Designer.vb index 069fe655..9cb46ef1 100644 --- a/EnvelopeGenerator.Form/frmMain.Designer.vb +++ b/EnvelopeGenerator.Form/frmMain.Designer.vb @@ -75,7 +75,6 @@ Partial Class frmMain Me.GridColumn3 = New DevExpress.XtraGrid.Columns.GridColumn() Me.GridColumn4 = New DevExpress.XtraGrid.Columns.GridColumn() Me.GridColumn5 = New DevExpress.XtraGrid.Columns.GridColumn() - Me.GridColumn6 = New DevExpress.XtraGrid.Columns.GridColumn() Me.GridColumn7 = New DevExpress.XtraGrid.Columns.GridColumn() Me.RefreshTimer = New System.Windows.Forms.Timer(Me.components) CType(Me.SplitContainerControl1, System.ComponentModel.ISupportInitialize).BeginInit() @@ -136,6 +135,12 @@ Partial Class frmMain 'GridEnvelopes ' resources.ApplyResources(Me.GridEnvelopes, "GridEnvelopes") + Me.GridEnvelopes.EmbeddedNavigator.AllowHtmlTextInToolTip = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.AllowHtmlTextInToolTip"), DevExpress.Utils.DefaultBoolean) + Me.GridEnvelopes.EmbeddedNavigator.Anchor = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.Anchor"), System.Windows.Forms.AnchorStyles) + Me.GridEnvelopes.EmbeddedNavigator.BackgroundImageLayout = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.BackgroundImageLayout"), System.Windows.Forms.ImageLayout) + Me.GridEnvelopes.EmbeddedNavigator.ImeMode = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.ImeMode"), System.Windows.Forms.ImeMode) + Me.GridEnvelopes.EmbeddedNavigator.TextLocation = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.TextLocation"), DevExpress.XtraEditors.NavigatorButtonsTextLocation) + Me.GridEnvelopes.EmbeddedNavigator.ToolTipIconType = CType(resources.GetObject("GridEnvelopes.EmbeddedNavigator.ToolTipIconType"), DevExpress.Utils.ToolTipIconType) GridLevelNode1.LevelTemplate = Me.ViewReceivers GridLevelNode1.RelationName = "Receivers" GridLevelNode2.LevelTemplate = Me.ViewHistory @@ -232,6 +237,7 @@ Partial Class frmMain Me.ViewEnvelopes.Name = "ViewEnvelopes" Me.ViewEnvelopes.OptionsBehavior.Editable = False Me.ViewEnvelopes.OptionsBehavior.ReadOnly = True + Me.ViewEnvelopes.OptionsView.ShowIndicator = False ' 'colEnvelopeId ' @@ -266,6 +272,8 @@ Partial Class frmMain 'RibbonControl ' Me.RibbonControl.ExpandCollapseItem.Id = 0 + Me.RibbonControl.ExpandCollapseItem.ImageOptions.ImageIndex = CType(resources.GetObject("RibbonControl.ExpandCollapseItem.ImageOptions.ImageIndex"), Integer) + Me.RibbonControl.ExpandCollapseItem.ImageOptions.LargeImageIndex = CType(resources.GetObject("RibbonControl.ExpandCollapseItem.ImageOptions.LargeImageIndex"), Integer) Me.RibbonControl.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl.ExpandCollapseItem, Me.RibbonControl.SearchEditItem, Me.btnCreateEnvelope, Me.btnEditEnvelope, Me.btnDeleteEnvelope, Me.BarButtonItem1, Me.txtRefreshLabel, Me.btnShowDocument, Me.btnContactReceiver, Me.txtEnvelopeIdLabel}) resources.ApplyResources(Me.RibbonControl, "RibbonControl") Me.RibbonControl.MaxItemId = 10 @@ -281,6 +289,8 @@ Partial Class frmMain ' resources.ApplyResources(Me.btnCreateEnvelope, "btnCreateEnvelope") Me.btnCreateEnvelope.Id = 1 + Me.btnCreateEnvelope.ImageOptions.ImageIndex = CType(resources.GetObject("btnCreateEnvelope.ImageOptions.ImageIndex"), Integer) + Me.btnCreateEnvelope.ImageOptions.LargeImageIndex = CType(resources.GetObject("btnCreateEnvelope.ImageOptions.LargeImageIndex"), Integer) Me.btnCreateEnvelope.ImageOptions.SvgImage = CType(resources.GetObject("btnCreateEnvelope.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) Me.btnCreateEnvelope.Name = "btnCreateEnvelope" ' @@ -288,6 +298,8 @@ Partial Class frmMain ' resources.ApplyResources(Me.btnEditEnvelope, "btnEditEnvelope") Me.btnEditEnvelope.Id = 2 + Me.btnEditEnvelope.ImageOptions.ImageIndex = CType(resources.GetObject("btnEditEnvelope.ImageOptions.ImageIndex"), Integer) + Me.btnEditEnvelope.ImageOptions.LargeImageIndex = CType(resources.GetObject("btnEditEnvelope.ImageOptions.LargeImageIndex"), Integer) Me.btnEditEnvelope.ImageOptions.SvgImage = CType(resources.GetObject("btnEditEnvelope.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) Me.btnEditEnvelope.Name = "btnEditEnvelope" ' @@ -295,6 +307,8 @@ Partial Class frmMain ' resources.ApplyResources(Me.btnDeleteEnvelope, "btnDeleteEnvelope") Me.btnDeleteEnvelope.Id = 4 + Me.btnDeleteEnvelope.ImageOptions.ImageIndex = CType(resources.GetObject("btnDeleteEnvelope.ImageOptions.ImageIndex"), Integer) + Me.btnDeleteEnvelope.ImageOptions.LargeImageIndex = CType(resources.GetObject("btnDeleteEnvelope.ImageOptions.LargeImageIndex"), Integer) Me.btnDeleteEnvelope.ImageOptions.SvgImage = CType(resources.GetObject("btnDeleteEnvelope.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) Me.btnDeleteEnvelope.Name = "btnDeleteEnvelope" ' @@ -302,6 +316,8 @@ Partial Class frmMain ' resources.ApplyResources(Me.BarButtonItem1, "BarButtonItem1") Me.BarButtonItem1.Id = 5 + Me.BarButtonItem1.ImageOptions.ImageIndex = CType(resources.GetObject("BarButtonItem1.ImageOptions.ImageIndex"), Integer) + Me.BarButtonItem1.ImageOptions.LargeImageIndex = CType(resources.GetObject("BarButtonItem1.ImageOptions.LargeImageIndex"), Integer) Me.BarButtonItem1.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem1.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) Me.BarButtonItem1.Name = "BarButtonItem1" ' @@ -309,15 +325,19 @@ Partial Class frmMain ' resources.ApplyResources(Me.txtRefreshLabel, "txtRefreshLabel") Me.txtRefreshLabel.Id = 6 + Me.txtRefreshLabel.ImageOptions.ImageIndex = CType(resources.GetObject("txtRefreshLabel.ImageOptions.ImageIndex"), Integer) + Me.txtRefreshLabel.ImageOptions.LargeImageIndex = CType(resources.GetObject("txtRefreshLabel.ImageOptions.LargeImageIndex"), Integer) Me.txtRefreshLabel.ImageOptions.SvgImage = CType(resources.GetObject("txtRefreshLabel.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) Me.txtRefreshLabel.Name = "txtRefreshLabel" Me.txtRefreshLabel.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph - Me.txtRefreshLabel.Tag = "Aktualisiert: {0}" + Me.txtRefreshLabel.Tag = "Refreshed: {0}" ' 'btnShowDocument ' resources.ApplyResources(Me.btnShowDocument, "btnShowDocument") Me.btnShowDocument.Id = 7 + Me.btnShowDocument.ImageOptions.ImageIndex = CType(resources.GetObject("btnShowDocument.ImageOptions.ImageIndex"), Integer) + Me.btnShowDocument.ImageOptions.LargeImageIndex = CType(resources.GetObject("btnShowDocument.ImageOptions.LargeImageIndex"), Integer) Me.btnShowDocument.ImageOptions.SvgImage = CType(resources.GetObject("btnShowDocument.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) Me.btnShowDocument.Name = "btnShowDocument" ' @@ -325,6 +345,8 @@ Partial Class frmMain ' resources.ApplyResources(Me.btnContactReceiver, "btnContactReceiver") Me.btnContactReceiver.Id = 8 + Me.btnContactReceiver.ImageOptions.ImageIndex = CType(resources.GetObject("btnContactReceiver.ImageOptions.ImageIndex"), Integer) + Me.btnContactReceiver.ImageOptions.LargeImageIndex = CType(resources.GetObject("btnContactReceiver.ImageOptions.LargeImageIndex"), Integer) Me.btnContactReceiver.ImageOptions.SvgImage = CType(resources.GetObject("btnContactReceiver.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) Me.btnContactReceiver.Name = "btnContactReceiver" ' @@ -332,10 +354,12 @@ Partial Class frmMain ' resources.ApplyResources(Me.txtEnvelopeIdLabel, "txtEnvelopeIdLabel") Me.txtEnvelopeIdLabel.Id = 9 + Me.txtEnvelopeIdLabel.ImageOptions.ImageIndex = CType(resources.GetObject("txtEnvelopeIdLabel.ImageOptions.ImageIndex"), Integer) + Me.txtEnvelopeIdLabel.ImageOptions.LargeImageIndex = CType(resources.GetObject("txtEnvelopeIdLabel.ImageOptions.LargeImageIndex"), Integer) Me.txtEnvelopeIdLabel.ImageOptions.SvgImage = CType(resources.GetObject("txtEnvelopeIdLabel.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) Me.txtEnvelopeIdLabel.Name = "txtEnvelopeIdLabel" Me.txtEnvelopeIdLabel.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph - Me.txtEnvelopeIdLabel.Tag = "Umschlag-ID: {0}" + Me.txtEnvelopeIdLabel.Tag = "Envelope-ID: {0}" ' 'RibbonPage1 ' @@ -382,6 +406,12 @@ Partial Class frmMain 'GridCompleted ' resources.ApplyResources(Me.GridCompleted, "GridCompleted") + Me.GridCompleted.EmbeddedNavigator.AllowHtmlTextInToolTip = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.AllowHtmlTextInToolTip"), DevExpress.Utils.DefaultBoolean) + Me.GridCompleted.EmbeddedNavigator.Anchor = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.Anchor"), System.Windows.Forms.AnchorStyles) + Me.GridCompleted.EmbeddedNavigator.BackgroundImageLayout = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.BackgroundImageLayout"), System.Windows.Forms.ImageLayout) + Me.GridCompleted.EmbeddedNavigator.ImeMode = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.ImeMode"), System.Windows.Forms.ImeMode) + Me.GridCompleted.EmbeddedNavigator.TextLocation = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.TextLocation"), DevExpress.XtraEditors.NavigatorButtonsTextLocation) + Me.GridCompleted.EmbeddedNavigator.ToolTipIconType = CType(resources.GetObject("GridCompleted.EmbeddedNavigator.ToolTipIconType"), DevExpress.Utils.ToolTipIconType) GridLevelNode3.LevelTemplate = Me.ViewReceiversCompleted GridLevelNode3.RelationName = "Receivers" GridLevelNode4.LevelTemplate = Me.ViewHistoryCompleted @@ -463,7 +493,7 @@ Partial Class frmMain ' 'ViewCompleted ' - Me.ViewCompleted.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.GridColumn3, Me.GridColumn4, Me.GridColumn5, Me.GridColumn6, Me.GridColumn7}) + Me.ViewCompleted.Columns.AddRange(New DevExpress.XtraGrid.Columns.GridColumn() {Me.GridColumn3, Me.GridColumn4, Me.GridColumn5, Me.GridColumn7}) Me.ViewCompleted.GridControl = Me.GridCompleted Me.ViewCompleted.Name = "ViewCompleted" Me.ViewCompleted.OptionsBehavior.Editable = False @@ -488,12 +518,6 @@ Partial Class frmMain Me.GridColumn5.FieldName = "Title" Me.GridColumn5.Name = "GridColumn5" ' - 'GridColumn6 - ' - resources.ApplyResources(Me.GridColumn6, "GridColumn6") - Me.GridColumn6.FieldName = "Subject" - Me.GridColumn6.Name = "GridColumn6" - ' 'GridColumn7 ' resources.ApplyResources(Me.GridColumn7, "GridColumn7") @@ -564,7 +588,6 @@ Partial Class frmMain Friend WithEvents GridColumn3 As DevExpress.XtraGrid.Columns.GridColumn Friend WithEvents GridColumn4 As DevExpress.XtraGrid.Columns.GridColumn Friend WithEvents GridColumn5 As DevExpress.XtraGrid.Columns.GridColumn - Friend WithEvents GridColumn6 As DevExpress.XtraGrid.Columns.GridColumn Friend WithEvents GridColumn7 As DevExpress.XtraGrid.Columns.GridColumn Friend WithEvents ColName As DevExpress.XtraGrid.Columns.GridColumn Friend WithEvents ColSignedDate As DevExpress.XtraGrid.Columns.GridColumn diff --git a/EnvelopeGenerator.Form/frmMain.en.resx b/EnvelopeGenerator.Form/frmMain.en.resx index 5fb52c24..5e0fef9d 100644 --- a/EnvelopeGenerator.Form/frmMain.en.resx +++ b/EnvelopeGenerator.Form/frmMain.en.resx @@ -117,6 +117,15 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Type + + + Title + + + Added When + New Envelope @@ -183,16 +192,392 @@ IC8+DQogIDwvZz4NCjwvc3ZnPgs= - - Title + + Reload Data - - Subject + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 + LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl + dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAFwCAAAC77u/ + PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi + IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv + MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh + Y2U9InByZXNlcnZlIiBpZD0iUmVmcmVzaF9BbGxfUGl2b3RfVGFibGUiIHN0eWxlPSJlbmFibGUtYmFj + a2dyb3VuZDpuZXcgMCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5HcmVlbntm + aWxsOiMwMzlDMjM7fQo8L3N0eWxlPg0KICA8cGF0aCBkPSJNMzAsMnYxMmgtMC4yaC00SDE4bDUtNWMt + MS44LTEuOC00LjMtMy03LTNjLTQuOCwwLTguOSwzLjQtOS44LDhoLTRDMy4xLDcuMiw4LjksMiwxNiwy + ICBjMy45LDAsNy40LDEuNiw5LjksNC4xTDMwLDJ6IE0xNiwyNmMtMi44LDAtNS4yLTEuMS03LTNsNS01 + SDYuMmgtNEgydjEybDQuMS00LjFjMi41LDIuNSw2LDQuMSw5LjksNC4xYzcuMSwwLDEyLjktNS4yLDEz + LjgtMTJoLTQgIEMyNC45LDIyLjYsMjAuOCwyNiwxNiwyNnoiIGNsYXNzPSJHcmVlbiIgLz4NCjwvc3Zn + Pgs= + - - Added When + + Refreshed: {0} - + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 + LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl + dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAC4DAAAC77u/ + PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi + IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv + MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh + Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg + MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z + ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLkdyZWVue2ZpbGw6IzAz + OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9Cgkuc3Qwe29wYWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNp + dHk6MC41O30KPC9zdHlsZT4NCiAgPGcgaWQ9IlJlZnJlc2hfMV8iPg0KICAgIDxwYXRoIGQ9Ik0yNC41 + LDcuNUMyMi4zLDUuMywxOS4zLDQsMTYsNEMxMC4xLDQsNS4xLDguMyw0LjIsMTRoNC4xYzAuOS0zLjQs + NC02LDcuNy02YzIuMiwwLDQuMiwwLjksNS42LDIuNEwxOCwxNCAgIGg1LjdoNC4xSDI4VjRMMjQuNSw3 + LjV6IiBjbGFzcz0iR3JlZW4iIC8+DQogICAgPHBhdGggZD0iTTE2LjIsMjRjLTIuMiwwLTQuMi0wLjkt + NS42LTIuNGwzLjYtMy42SDguNEg0LjRINC4ydjEwbDMuNS0zLjVjMi4yLDIuMiw1LjIsMy41LDguNSwz + LjUgICBDMjIuMSwyOCwyNywyMy43LDI4LDE4aC00LjFDMjMsMjEuNCwxOS45LDI0LDE2LjIsMjR6IiBj + bGFzcz0iR3JlZW4iIC8+DQogIDwvZz4NCjwvc3ZnPgs= + + + + Show Document + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 + LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl + dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAJYEAAAC77u/ + PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi + IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv + MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh + Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg + MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ + LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5HcmVlbntmaWxsOiMwMzlD + MjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh + Y2l0eTowLjc1O30KPC9zdHlsZT4NCiAgPGcgaWQ9IkRvY3VtZW50UERGIj4NCiAgICA8cGF0aCBkPSJN + MjIsMjR2NEgyVjJoMTR2NWMwLDAuNiwwLjQsMSwxLDFoNXY0aDJWN2wtNy03SDFDMC40LDAsMCwwLjQs + MCwxdjI4YzAsMC42LDAuNCwxLDEsMWgyMmMwLjYsMCwxLTAuNCwxLTEgICB2LTVIMjJ6IiBjbGFzcz0i + QmxhY2siIC8+DQogICAgPHBhdGggZD0iTTE5LjIsMTZjMC4zLDAuNSwwLjQsMS4xLDAuNCwxLjljMCww + LjktMC4yLDEuNS0wLjUsMmMtMC4zLDAuNS0wLjcsMC43LTEuMywwLjdoLTAuNnYtNS4zaDAuNiAgIEMx + OC40LDE1LjMsMTguOSwxNS42LDE5LjIsMTZ6IE0xMi4xLDE1LjNoLTAuNXYyLjZoMC41YzAuNywwLDEu + MS0wLjQsMS4xLTEuM2MwLTAuNC0wLjEtMC44LTAuMy0xQzEyLjYsMTUuNCwxMi40LDE1LjMsMTIuMSwx + NS4zeiAgICBNMzAsMTJ2MTJINlYxMkgzMHogTTE0LjgsMTYuNWMwLTAuOC0wLjItMS41LTAuNi0xLjlj + LTAuNC0wLjQtMS0wLjctMS44LTAuN0gxMHY4aDEuNnYtMi43aDAuNmMwLjgsMCwxLjQtMC4zLDEuOS0w + LjggICBDMTQuNSwxOCwxNC44LDE3LjMsMTQuOCwxNi41eiBNMjEuMiwxNy45YzAtMi42LTEuMS0zLjkt + My40LTMuOWgtMi4xdjhoMi4yYzEuMSwwLDEuOS0wLjQsMi41LTEuMUMyMC45LDIwLjIsMjEuMiwxOS4y + LDIxLjIsMTcuOXogICAgTTI2LDE0aC0zLjd2OGgxLjZ2LTMuMWgydi0xLjNoLTJ2LTIuMkgyNlYxNHoi + IGNsYXNzPSJSZWQiIC8+DQogIDwvZz4NCjwvc3ZnPgs= + + + + Contact Receiver + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 + LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl + dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAANkDAAAC77u/ + PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi + IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv + MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh + Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg + MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ + LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5HcmVlbntmaWxsOiMwMzlD + MjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh + Y2l0eTowLjU7fQoJLnN0MXtkaXNwbGF5Om5vbmU7fQoJLnN0MntkaXNwbGF5OmlubGluZTtmaWxsOiMw + MzlDMjM7fQoJLnN0M3tkaXNwbGF5OmlubGluZTtmaWxsOiNEMTFDMUM7fQoJLnN0NHtkaXNwbGF5Omlu + bGluZTtmaWxsOiM3MjcyNzI7fQo8L3N0eWxlPg0KICA8Zz4NCiAgICA8cGF0aCBkPSJNMzEsMkg5Qzgu + NSwyLDgsMi41LDgsM3Y5aDJWNGgyMHYxNmgtOHYyaDljMC41LDAsMS0wLjUsMS0xVjNDMzIsMi41LDMx + LjUsMiwzMSwyeiIgY2xhc3M9IkJsYWNrIiAvPg0KICAgIDxwYXRoIGQ9Ik0xMCwyNC4zbDEwLTZWMjlj + MCwwLjUtMC41LDEtMSwxSDFjLTAuNSwwLTEtMC41LTEtMVYxOC4zTDEwLDI0LjN6IE0xOSwxNEgxYy0w + LjUsMC0xLDAuNS0xLDF2MWwxMCw2bDEwLTYgICB2LTFDMjAsMTQuNSwxOS41LDE0LDE5LDE0eiIgY2xh + c3M9IlllbGxvdyIgLz4NCiAgICA8cG9seWdvbiBwb2ludHM9IjI4LDEwIDI0LDEwIDI0LDYgMjIsNiAy + MiwxMCAxOCwxMCAxOCwxMiAyMiwxMiAyMiwxNiAyNCwxNiAyNCwxMiAyOCwxMiAgIiBjbGFzcz0iR3Jl + ZW4iIC8+DQogIDwvZz4NCjwvc3ZnPgs= + + + + Envelope-ID: {0} + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 + LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl + dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAKUCAAAC77u/ + PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi + IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv + MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh + Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg + MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z + ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLkdyZWVue2ZpbGw6IzAz + OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9Cgkuc3Qwe29wYWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNp + dHk6MC41O30KPC9zdHlsZT4NCiAgPGcgaWQ9IkVudmVsb3BlQ2xvc2UiPg0KICAgIDxwYXRoIGQ9Ik0x + NiwxNmwxMi02LjlWOWMwLTAuNS0wLjUtMS0xLTFINUM0LjUsOCw0LDguNSw0LDl2MC4xTDE2LDE2eiIg + Y2xhc3M9IlllbGxvdyIgLz4NCiAgICA8cGF0aCBkPSJNMTYsMTguM0w0LDExLjRWMjNjMCwwLjUsMC41 + LDEsMSwxaDIyYzAuNSwwLDEtMC41LDEtMVYxMS40TDE2LDE4LjN6IiBjbGFzcz0iWWVsbG93IiAvPg0K + ICA8L2c+DQo8L3N2Zz4L + + + + Data + + + Functions + + + Open Envelopes + + Type + + Added When + + + Completed Envelopes + + + + + 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 + + \ No newline at end of file diff --git a/EnvelopeGenerator.Form/frmMain.resx b/EnvelopeGenerator.Form/frmMain.resx index 7695e14b..1380fde6 100644 --- a/EnvelopeGenerator.Form/frmMain.resx +++ b/EnvelopeGenerator.Form/frmMain.resx @@ -134,6 +134,27 @@ Fill + + + True + + + None + + + None + + + NoControl + + + + None + + + + Application + Status @@ -244,7 +265,7 @@ 1 - 119 + 193 Titel @@ -256,7 +277,7 @@ 2 - 352 + 575 Erstellt am @@ -268,12 +289,23 @@ 3 - 118 + 196 + + + 0 + + + 0 Neuer Umschlag - + + 0 + + + 0 + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 @@ -296,6 +328,12 @@ Umschlag laden + + 0 + + + 0 + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 @@ -317,6 +355,12 @@ Umschlag löschen + + 0 + + + 0 + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 @@ -339,6 +383,12 @@ Daten Aktualisieren + + 0 + + + 0 + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 @@ -360,6 +410,12 @@ Aktualisiert: {0} + + 0 + + + 0 + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 @@ -384,6 +440,12 @@ Dokument anzeigen + + 0 + + + 0 + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 @@ -414,6 +476,12 @@ Empfänger kontaktieren + + 0 + + + 0 + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 @@ -441,6 +509,12 @@ Umschlag-ID: {0} + + 0 + + + 0 + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 @@ -553,6 +627,24 @@ Fill + + True + + + None + + + None + + + NoControl + + + None + + + Application + Status @@ -632,7 +724,7 @@ 0 - 158 + 120 Status @@ -644,7 +736,7 @@ 1 - 115 + 195 Titel @@ -656,19 +748,7 @@ 2 - 338 - - - Betreff - - - True - - - 3 - - - 338 + 574 Erstellt am @@ -677,10 +757,10 @@ True - 4 + 3 - 112 + 195 1086, 494 @@ -793,7 +873,7 @@ iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL - DwAACw8BkvkDpQAAOB1JREFUeF7t3Qe0ZFWZ9vEmJxEkKQiIoowBTKCCiIgiIqAgCOMYRxHU0RkZM0ZQ + DAAACwwBP0AiyAAAOB1JREFUeF7t3Qe0ZFWZ9vEmJxEkKQiIoowBTKCCiIgiIqAgCOMYRxHU0RkZM0ZQ RxlHRxBFHQxEExj5UAwkUTHMpyISDARJkgRFAYnf97wN3dD007fr3lvhfff+/9f6rTXjbW7XqT5Ve9ep c/aZQ2NvRXmE7CivlnfLx+QLcqKcIefJpXLNnW6W/4fuzPv3v0p+Iz+S4+Rweb+8Up4pD5flhIiIErSa bCP/JofKj+UKcW/0wGzdKjFJOEbeJbvI/YSIiEbYsrKFvE6+IpeIe5MGxu18OUpeJRsKERHNoqVkc9lf @@ -1293,12 +1373,6 @@ DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - GridColumn6 - - - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - GridColumn7 diff --git a/EnvelopeGenerator.Form/frmMain.vb b/EnvelopeGenerator.Form/frmMain.vb index c70e17bc..11672e27 100644 --- a/EnvelopeGenerator.Form/frmMain.vb +++ b/EnvelopeGenerator.Form/frmMain.vb @@ -11,90 +11,38 @@ Imports EnvelopeGenerator.Common.My Imports DevExpress.Charts.Native Imports DevExpress.XtraGrid.Views.Grid Imports DevExpress.XtraGrid +Imports System.Globalization +Imports System.Threading Public Class frmMain - Private LogConfig As LogConfig - Private Logger As Logger - Private Database As MSSQLServer - Private ConfigManager As ConfigManager(Of Config) + Private ReadOnly LogConfig As LogConfig + Private ReadOnly Logger As Logger Private TempFiles As TempFiles - Private FormHelper As FormHelper Private GridBuilder As GridBuilder Private RefreshHelper As RefreshHelper Private State As State Private Controller As EnvelopeListController - Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load - Dim oLogPath = IO.Path.Combine(Application.LocalUserAppDataPath, "Log") - LogConfig = New LogConfig(LogConfig.PathType.CustomPath, oLogPath, CompanyName:="Digital Data", ProductName:="Envelope Generator") + Public Sub New(pState As State) + ' Dieser Aufruf ist für den Designer erforderlich. + InitializeComponent() + + ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. + State = pState + LogConfig = pState.LogConfig Logger = LogConfig.GetLogger() - FormHelper = New FormHelper(LogConfig, Me) + End Sub + + Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load TempFiles = New TempFiles(LogConfig) TempFiles.Create() + RefreshHelper = New RefreshHelper(ViewEnvelopes, "Id") - Try - ConfigManager = New ConfigManager(Of Config)(LogConfig, Application.UserAppDataPath, Application.CommonAppDataPath, Application.StartupPath) + Controller = New EnvelopeListController(State) - If ConfigManager.Config.ConnectionString = String.Empty Then - Dim oSQLConfig As New frmSQLConfig(LogConfig) - If oSQLConfig.ShowDialog() = DialogResult.OK Then - ConfigManager.Config.ConnectionString = oSQLConfig.ConnectionString - ConfigManager.Save() - Application.Restart() - Else - Throw New ApplicationException("No Database configured. Application will close!") - End If - End If - - Dim oConnectionString = MSSQLServer.DecryptConnectionString(ConfigManager.Config.ConnectionString) - Database = New MSSQLServer(LogConfig, oConnectionString) - - State = New State With { - .UserId = 0, - .Config = ConfigManager.Config, - .DbConfig = New DbConfig(), - .LogConfig = LogConfig, - .Database = Database - } - - If Database.DBInitialized = False Then - Throw New ApplicationException("Could not connect to the database. Application will close!") - End If - - Dim ConfigModel = New ConfigModel(State) - State.DbConfig = ConfigModel.LoadConfiguration() - - Dim oUserModel = New UserModel(State) - State.UserId = oUserModel.SelectUserId() - - Dim oUser = oUserModel.SelectUser() - oUser = oUserModel.CheckUserLogin(oUser) - - If oUser.HasAccess = False Then - Throw New ApplicationException("User is not activated for this module. Please contact your administrator. Application will close!") - End If - - If Not String.IsNullOrEmpty(State.DbConfig.ExternalProgramName) Then - Text = State.DbConfig.ExternalProgramName - End If - - Controller = New EnvelopeListController(State) - - LoadEnvelopeData() - - Catch ex As ApplicationException - Logger.Error(ex) - MsgBox(ex.Message, MsgBoxStyle.Critical, Text) - Application.Exit() - - Catch ex As Exception - Logger.Error(ex) - MsgBox($"Unexpected error: {ex.Message}", MsgBoxStyle.Critical, Text) - Application.Exit() - - End Try + LoadEnvelopeData() End Sub Private Sub LoadEnvelopeData() diff --git a/EnvelopeGenerator.Form/frmSplashScreen.Designer.vb b/EnvelopeGenerator.Form/frmSplashScreen.Designer.vb new file mode 100644 index 00000000..60ae79f0 --- /dev/null +++ b/EnvelopeGenerator.Form/frmSplashScreen.Designer.vb @@ -0,0 +1,38 @@ + _ +Partial Class frmSplashScreen + 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.SuspendLayout() + ' + 'frmSplashScreen + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(800, 450) + Me.Name = "frmSplashScreen" + Me.Opacity = 0R + Me.Text = "frmSplashScreen" + Me.ResumeLayout(False) + + End Sub +End Class diff --git a/EnvelopeGenerator.Form/frmSplashScreen.resx b/EnvelopeGenerator.Form/frmSplashScreen.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/EnvelopeGenerator.Form/frmSplashScreen.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/EnvelopeGenerator.Form/frmSplashScreen.vb b/EnvelopeGenerator.Form/frmSplashScreen.vb new file mode 100644 index 00000000..0a394668 --- /dev/null +++ b/EnvelopeGenerator.Form/frmSplashScreen.vb @@ -0,0 +1,92 @@ +Imports DevExpress.XtraBars.Docking +Imports System.Globalization +Imports System.Threading +Imports DigitalData.GUIs.Common +Imports DigitalData.Modules.Config +Imports DigitalData.Modules.Database +Imports DigitalData.Modules.Logging +Imports EnvelopeGenerator.Common + +Public Class frmSplashScreen + Private LogConfig As LogConfig + Private Logger As Logger + Private Database As MSSQLServer + Private ConfigManager As ConfigManager(Of Config) + + + Private State As State + + Private Sub frmSplashScreen_Load(sender As Object, e As EventArgs) Handles MyBase.Load + Dim oLogPath = IO.Path.Combine(Application.LocalUserAppDataPath, "Log") + LogConfig = New LogConfig(LogConfig.PathType.CustomPath, oLogPath, CompanyName:="Digital Data", ProductName:="Envelope Generator") + Logger = LogConfig.GetLogger() + + Try + ConfigManager = New ConfigManager(Of Config)(LogConfig, Application.UserAppDataPath, Application.CommonAppDataPath, Application.StartupPath) + + If ConfigManager.Config.ConnectionString = String.Empty Then + Dim oSQLConfig As New frmSQLConfig(LogConfig) + If oSQLConfig.ShowDialog() = DialogResult.OK Then + ConfigManager.Config.ConnectionString = oSQLConfig.ConnectionString + ConfigManager.Save() + Application.Restart() + Else + Throw New ApplicationException("No Database configured. Application will close!") + End If + End If + + Dim oConnectionString = MSSQLServer.DecryptConnectionString(ConfigManager.Config.ConnectionString) + Database = New MSSQLServer(LogConfig, oConnectionString) + + State = New State With { + .UserId = 0, + .Config = ConfigManager.Config, + .DbConfig = New DbConfig(), + .LogConfig = LogConfig, + .Database = Database + } + + If Database.DBInitialized = False Then + Throw New ApplicationException("Could not connect to the database. Application will close!") + End If + + Dim ConfigModel = New ConfigModel(State) + State.DbConfig = ConfigModel.LoadConfiguration() + + Dim oUserModel = New UserModel(State) + State.UserId = oUserModel.SelectUserId() + + Dim oUser = oUserModel.SelectUser() + oUser = oUserModel.CheckUserLogin(oUser) + + Dim oCultureInfo As CultureInfo + oCultureInfo = New CultureInfo(oUser.Language) + Thread.CurrentThread.CurrentCulture = oCultureInfo + Thread.CurrentThread.CurrentUICulture = oCultureInfo + CultureInfo.DefaultThreadCurrentCulture = oCultureInfo + CultureInfo.DefaultThreadCurrentUICulture = oCultureInfo + + If oUser.HasAccess = False Then + Throw New ApplicationException("User is not activated for this module. Please contact your administrator. Application will close!") + End If + + If Not String.IsNullOrEmpty(State.DbConfig.ExternalProgramName) Then + Text = State.DbConfig.ExternalProgramName + End If + + Dim oForm As New frmMain(State) + oForm.Show() + + Catch ex As ApplicationException + Logger.Error(ex) + MsgBox(ex.Message, MsgBoxStyle.Critical, Text) + Application.Exit() + + Catch ex As Exception + Logger.Error(ex) + MsgBox($"Unexpected error: {ex.Message}", MsgBoxStyle.Critical, Text) + Application.Exit() + + End Try + End Sub +End Class \ No newline at end of file