diff --git a/EnvelopeGenerator.Common/Entities/State.vb b/EnvelopeGenerator.Common/Entities/State.vb index b3a52da3..0668cb61 100644 --- a/EnvelopeGenerator.Common/Entities/State.vb +++ b/EnvelopeGenerator.Common/Entities/State.vb @@ -3,6 +3,7 @@ Imports DigitalData.Modules.Logging Public Class State Public Property UserId As Integer + Public Property User As User Public Property Config As Config Public Property DbConfig As DbConfig Public Property LogConfig As LogConfig diff --git a/EnvelopeGenerator.Common/Helpers.vb b/EnvelopeGenerator.Common/Helpers.vb index d3c400c1..f40ea949 100644 --- a/EnvelopeGenerator.Common/Helpers.vb +++ b/EnvelopeGenerator.Common/Helpers.vb @@ -1,4 +1,6 @@ Imports System.Drawing +Imports System.IO +Imports System.Threading Imports DevExpress.Utils.Svg Imports EnvelopeGenerator.Common.Constants @@ -94,4 +96,16 @@ Public Class Helpers Return False End Try End Function + + Public Shared Async Function CopyFileAsync(sourceFile As String, destinationFile As String) As Task + Dim fileOptions = IO.FileOptions.Asynchronous Or IO.FileOptions.SequentialScan + Dim bufferSize = 4096 + + Using sourceStream = New FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize, fileOptions) + + Using destinationStream = New FileStream(destinationFile, FileMode.CreateNew, FileAccess.Write, FileShare.None, bufferSize, fileOptions) + Await sourceStream.CopyToAsync(destinationStream, bufferSize).ConfigureAwait(False) + End Using + End Using + End Function End Class diff --git a/EnvelopeGenerator.Common/Models/EnvelopeModel.vb b/EnvelopeGenerator.Common/Models/EnvelopeModel.vb index d4c1a2ee..bfcf9256 100644 --- a/EnvelopeGenerator.Common/Models/EnvelopeModel.vb +++ b/EnvelopeGenerator.Common/Models/EnvelopeModel.vb @@ -167,8 +167,8 @@ Public Class EnvelopeModel oSql += " [CONTRACT_TYPE] = @CONTRACT_TYPE, " oSql += " [LANGUAGE] = @LANGUAGE, " oSql += " [CERTIFICATION_TYPE] = @CERTIFICATION_TYPE, " - oSql += " [EXPIRES_DAYS] = @EXPIRES_DAYS, " - oSql += " [EXPIRES_WARNING_DAYS] = @EXPIRES_WARNING_DAYS, " + oSql += " [EXPIRES_WHEN_DAYS] = @EXPIRES_WHEN_DAYS, " + oSql += " [EXPIRES_WARNING_WHEN_DAYS] = @EXPIRES_WARNING_WHEN_DAYS, " oSql += " [FIRST_REMINDER_DAYS] = @FIRST_REMINDER_DAYS, " oSql += " [FINAL_EMAIL_TO_CREATOR] = @FINAL_EMAIL_TO_CREATOR, " oSql += " [FINAL_EMAIL_TO_RECEIVERS] = @FINAL_EMAIL_TO_RECEIVERS, " @@ -188,8 +188,8 @@ Public Class EnvelopeModel oCommand.Parameters.Add("CONTRACT_TYPE", SqlDbType.Int).Value = pEnvelope.ContractType oCommand.Parameters.Add("LANGUAGE", SqlDbType.NVarChar).Value = pEnvelope.Language oCommand.Parameters.Add("CERTIFICATION_TYPE", SqlDbType.Int).Value = pEnvelope.CertificationType - oCommand.Parameters.Add("EXPIRES_DAYS", SqlDbType.Int).Value = pEnvelope.ExpiresWhenDays - oCommand.Parameters.Add("EXPIRES_WARNING_DAYS", SqlDbType.Int).Value = pEnvelope.ExpiresWarningWhenDays + oCommand.Parameters.Add("EXPIRES_WHEN_DAYS", SqlDbType.Int).Value = pEnvelope.ExpiresWhenDays + oCommand.Parameters.Add("EXPIRES_WARNING_WHEN_DAYS", SqlDbType.Int).Value = pEnvelope.ExpiresWarningWhenDays oCommand.Parameters.Add("FIRST_REMINDER_DAYS", SqlDbType.Int).Value = pEnvelope.FirstReminderDays oCommand.Parameters.Add("FINAL_EMAIL_TO_CREATOR", SqlDbType.Int).Value = pEnvelope.FinalEmailToCreator oCommand.Parameters.Add("FINAL_EMAIL_TO_RECEIVERS", SqlDbType.Int).Value = pEnvelope.FinalEmailToReceivers diff --git a/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb b/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb index 9cf11049..fcf00d65 100644 --- a/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb +++ b/EnvelopeGenerator.Form/Controllers/EnvelopeEditorController.vb @@ -149,12 +149,14 @@ Public Class EnvelopeEditorController End Try End Function - Public Function CreateDocument(pDocumentFilePath As String) As EnvelopeDocument + Public Async Function CreateDocument(pDocumentFilePath As String) As Threading.Tasks.Task(Of EnvelopeDocument) Try Dim oFileInfo = New FileInfo(pDocumentFilePath) Dim oTempFiles As New TempFiles(State.LogConfig) Dim oTempFilePath = Path.Combine(oTempFiles.TempPath, Guid.NewGuid().ToString + oFileInfo.Extension) - File.Copy(oFileInfo.FullName, oTempFilePath, True) + + Await Helpers.CopyFileAsync(oFileInfo.FullName, oTempFilePath) + 'File.Copy(oFileInfo.FullName, oTempFilePath, True) Dim oFileInfoTemp = New FileInfo(oTempFilePath) diff --git a/EnvelopeGenerator.Form/DD_signFLOW_Preloader.png b/EnvelopeGenerator.Form/DD_signFLOW_Preloader.png new file mode 100644 index 00000000..db9a2cff Binary files /dev/null and b/EnvelopeGenerator.Form/DD_signFLOW_Preloader.png differ diff --git a/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj b/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj index 4707b327..73d27104 100644 --- a/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj +++ b/EnvelopeGenerator.Form/EnvelopeGenerator.Form.vbproj @@ -227,6 +227,7 @@ + PreserveNewest diff --git a/EnvelopeGenerator.Form/frmEnvelopeEditor.vb b/EnvelopeGenerator.Form/frmEnvelopeEditor.vb index 43f84f81..ce8a5a7b 100644 --- a/EnvelopeGenerator.Form/frmEnvelopeEditor.vb +++ b/EnvelopeGenerator.Form/frmEnvelopeEditor.vb @@ -28,25 +28,33 @@ Partial Public Class frmEnvelopeEditor InitializeComponent() End Sub - Private Sub btnNewFile_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnNewFile.ItemClick + Private Async Sub btnNewFile_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnNewFile.ItemClick + Dim oHandle = SplashScreenManager.ShowOverlayForm(Me) - ' prüfen ob es schon eine Datei gibt - If Documents.Count > 0 Then - MsgBox(Resources.Envelope.Only_one_file_is_allowed, MsgBoxStyle.Information, Text) - Return - End If - - If OpenFileDialog1.ShowDialog() = DialogResult.OK Then - Dim oDocument = Controller.CreateDocument(OpenFileDialog1.FileName) - - If oDocument IsNot Nothing Then - Documents.Add(oDocument) - Else - MsgBox(Resources.Envelope.Document_Could_Not_Be_Saved, MsgBoxStyle.Critical, Text) + Try + ' prüfen ob es schon eine Datei gibt + If Documents.Count > 0 Then + MsgBox(Resources.Envelope.Only_one_file_is_allowed, MsgBoxStyle.Information, Text) + Return End If - End If - RibbonPageGroupAddSignature_Enabled() + If OpenFileDialog1.ShowDialog() = DialogResult.OK Then + Dim oDocument = Await Controller.CreateDocument(OpenFileDialog1.FileName) + + If oDocument IsNot Nothing Then + Documents.Add(oDocument) + Else + MsgBox(Resources.Envelope.Document_Could_Not_Be_Saved, MsgBoxStyle.Critical, Text) + End If + End If + + Catch ex As Exception + Logger.Error(ex) + Finally + SplashScreenManager.CloseOverlayForm(oHandle) + + RibbonPageGroupAddSignature_Enabled() + End Try End Sub Private Sub frmEditor_Load(sender As Object, e As EventArgs) Handles Me.Load diff --git a/EnvelopeGenerator.Form/frmMain.Designer.vb b/EnvelopeGenerator.Form/frmMain.Designer.vb index 3f82cc18..9e8d361c 100644 --- a/EnvelopeGenerator.Form/frmMain.Designer.vb +++ b/EnvelopeGenerator.Form/frmMain.Designer.vb @@ -55,10 +55,13 @@ Partial Class frmMain Me.btnShowDocument = New DevExpress.XtraBars.BarButtonItem() Me.btnContactReceiver = New DevExpress.XtraBars.BarButtonItem() Me.txtEnvelopeIdLabel = New DevExpress.XtraBars.BarStaticItem() + Me.btnOpenLogDirectory = New DevExpress.XtraBars.BarButtonItem() Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage() Me.RibbonPageEnvelopeActions = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonPageGroup2 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() + Me.RibbonPage2 = New DevExpress.XtraBars.Ribbon.RibbonPage() + Me.RibbonPageGroup3 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RibbonStatusBar = New DevExpress.XtraBars.Ribbon.RibbonStatusBar() Me.XtraTabPage2 = New DevExpress.XtraTab.XtraTabPage() Me.GridCompleted = New DevExpress.XtraGrid.GridControl() @@ -274,13 +277,13 @@ Partial Class frmMain 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}) + 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, Me.btnOpenLogDirectory}) resources.ApplyResources(Me.RibbonControl, "RibbonControl") - Me.RibbonControl.MaxItemId = 10 + Me.RibbonControl.MaxItemId = 12 Me.RibbonControl.Name = "RibbonControl" - Me.RibbonControl.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1}) + Me.RibbonControl.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1, Me.RibbonPage2}) Me.RibbonControl.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False] - Me.RibbonControl.ShowPageHeadersMode = DevExpress.XtraBars.Ribbon.ShowPageHeadersMode.Hide + Me.RibbonControl.ShowPageHeadersMode = DevExpress.XtraBars.Ribbon.ShowPageHeadersMode.Show Me.RibbonControl.ShowToolbarCustomizeItem = False Me.RibbonControl.StatusBar = Me.RibbonStatusBar Me.RibbonControl.Toolbar.ShowCustomizeItem = False @@ -361,6 +364,13 @@ Partial Class frmMain Me.txtEnvelopeIdLabel.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph Me.txtEnvelopeIdLabel.Tag = "Envelope-ID: {0}" ' + 'btnOpenLogDirectory + ' + resources.ApplyResources(Me.btnOpenLogDirectory, "btnOpenLogDirectory") + Me.btnOpenLogDirectory.Id = 10 + Me.btnOpenLogDirectory.ImageOptions.SvgImage = CType(resources.GetObject("btnOpenLogDirectory.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage) + Me.btnOpenLogDirectory.Name = "btnOpenLogDirectory" + ' 'RibbonPage1 ' Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageEnvelopeActions, Me.RibbonPageGroup1, Me.RibbonPageGroup2}) @@ -389,6 +399,18 @@ Partial Class frmMain Me.RibbonPageGroup2.Name = "RibbonPageGroup2" resources.ApplyResources(Me.RibbonPageGroup2, "RibbonPageGroup2") ' + 'RibbonPage2 + ' + Me.RibbonPage2.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup3}) + Me.RibbonPage2.Name = "RibbonPage2" + resources.ApplyResources(Me.RibbonPage2, "RibbonPage2") + ' + 'RibbonPageGroup3 + ' + Me.RibbonPageGroup3.ItemLinks.Add(Me.btnOpenLogDirectory) + Me.RibbonPageGroup3.Name = "RibbonPageGroup3" + resources.ApplyResources(Me.RibbonPageGroup3, "RibbonPageGroup3") + ' 'RibbonStatusBar ' Me.RibbonStatusBar.ItemLinks.Add(Me.txtRefreshLabel) @@ -615,4 +637,7 @@ Partial Class frmMain Friend WithEvents ColHistoryUserReferenceCompleted As DevExpress.XtraGrid.Columns.GridColumn Friend WithEvents ColHistoryDateCompleted As DevExpress.XtraGrid.Columns.GridColumn Friend WithEvents txtEnvelopeIdLabel As DevExpress.XtraBars.BarStaticItem + Friend WithEvents btnOpenLogDirectory As DevExpress.XtraBars.BarButtonItem + Friend WithEvents RibbonPage2 As DevExpress.XtraBars.Ribbon.RibbonPage + Friend WithEvents RibbonPageGroup3 As DevExpress.XtraBars.Ribbon.RibbonPageGroup End Class diff --git a/EnvelopeGenerator.Form/frmMain.resx b/EnvelopeGenerator.Form/frmMain.resx index cab348a5..78e7454e 100644 --- a/EnvelopeGenerator.Form/frmMain.resx +++ b/EnvelopeGenerator.Form/frmMain.resx @@ -123,7 +123,7 @@ - 0, 132 + 0, 160 Fill @@ -532,6 +532,27 @@ Y2xhc3M9IlllbGxvdyIgLz4NCiAgICA8cGF0aCBkPSJNMTYsMTguM0w0LDExLjRWMjNjMCwwLjUsMC41 LDEsMSwxaDIyYzAuNSwwLDEtMC41LDEtMVYxMS40TDE2LDE4LjN6IiBjbGFzcz0iWWVsbG93IiAvPg0K ICA8L2c+DQo8L3N2Zz4L + + + + Öffne Log Verzeichnis + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40 + LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl + dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAJQCAAAC77u/ + PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi + IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv + MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh + Y2U9InByZXNlcnZlIiBpZD0iT3BlbiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMzIg + MzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJLnN0 + MHtvcGFjaXR5OjAuNzU7fQo8L3N0eWxlPg0KICA8ZyBjbGFzcz0ic3QwIj4NCiAgICA8cGF0aCBkPSJN + Mi4yLDI1LjJsNS41LTEyYzAuMy0wLjcsMS0xLjIsMS44LTEuMkgyNlY5YzAtMC42LTAuNC0xLTEtMUgx + MlY1YzAtMC42LTAuNC0xLTEtMUgzQzIuNCw0LDIsNC40LDIsNXYyMCAgIGMwLDAuMiwwLDAuMywwLjEs + MC40QzIuMSwyNS4zLDIuMiwyNS4zLDIuMiwyNS4yeiIgY2xhc3M9IlllbGxvdyIgLz4NCiAgPC9nPg0K + ICA8cGF0aCBkPSJNMzEuMywxNEg5LjZMNCwyNmgyMS44YzAuNSwwLDEuMS0wLjMsMS4zLTAuN0wzMiwx + NC43QzMyLjEsMTQuMywzMS44LDE0LDMxLjMsMTR6IiBjbGFzcz0iWWVsbG93IiAvPg0KPC9zdmc+Cw== @@ -549,8 +570,14 @@ Start + + Verzeichnisse + + + Einstellungen + - 1088, 132 + 1088, 160 0, 659 @@ -583,7 +610,7 @@ 2 - 1086, 494 + 1086, 466 2 @@ -601,7 +628,7 @@ 0 - 1086, 494 + 1086, 466 Offene Umschläge @@ -619,7 +646,7 @@ 0 - 1088, 517 + 1088, 489 3 @@ -763,7 +790,7 @@ 195 - 1086, 494 + 1086, 466 3 @@ -781,7 +808,7 @@ 0 - 1086, 494 + 1086, 466 Abgeschlossene Umschläge @@ -841,7 +868,7 @@ 1 - 1088, 527 + 1088, 499 5 @@ -873,7 +900,7 @@ iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL - DgAACw4BQL7hQQAAEV9JREFUeF7tnT/LJUsRh+9H2A/hB1gT4zUxNjJ1E0PhgpnRmpm5iaGwBiYKgomC + DAAACwwBP0AiyAAAEV9JREFUeF7tnT/LJUsRh+9H2A/hB1gT4zUxNjJ1E0PhgpnRmpm5iaGwBiYKgomC ICwKYiSLRoLiBgZq4g00MXmd394z67zz1jln/nRVV3c/BQ/c7Xveme453b/uquqe88nDw0NKfvSFLz6b eDHxauLNxNuJ9xMPAIlRH1VfVZ9V31Uffmb18QyYhTXQQ5p4OaEHx0CH3lCfVt9WH08jCGZhFHoQE59O vJuwHhpAr6jPVxcDs9CbqdFaFkkNrQcDMBoaCy+sseKNWejF1EgpHst7ABuNjZfW2PHCLCyNGnVpnNVo @@ -1106,6 +1133,12 @@ DevExpress.XtraBars.BarStaticItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + btnOpenLogDirectory + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + RibbonPage1 @@ -1130,6 +1163,18 @@ DevExpress.XtraBars.Ribbon.RibbonPageGroup, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + RibbonPage2 + + + DevExpress.XtraBars.Ribbon.RibbonPage, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + RibbonPageGroup3 + + + DevExpress.XtraBars.Ribbon.RibbonPageGroup, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + ViewReceiversCompleted diff --git a/EnvelopeGenerator.Form/frmMain.vb b/EnvelopeGenerator.Form/frmMain.vb index 7e00e2e5..fa4ba0b3 100644 --- a/EnvelopeGenerator.Form/frmMain.vb +++ b/EnvelopeGenerator.Form/frmMain.vb @@ -315,4 +315,12 @@ Public Class frmMain txtEnvelopeIdLabel.Caption = String.Format(txtEnvelopeIdLabel.Tag, oEnvelope.Id) End Sub + + Private Sub btnOpenLogDirectory_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnOpenLogDirectory.ItemClick + Try + Process.Start(LogConfig.LogDirectory) + Catch ex As Exception + Logger.Error(ex) + End Try + End Sub End Class \ No newline at end of file diff --git a/EnvelopeGenerator.Form/frmSplashScreen.Designer.vb b/EnvelopeGenerator.Form/frmSplashScreen.Designer.vb index 4341c701..c16578d9 100644 --- a/EnvelopeGenerator.Form/frmSplashScreen.Designer.vb +++ b/EnvelopeGenerator.Form/frmSplashScreen.Designer.vb @@ -22,19 +22,95 @@ Partial Class frmSplashScreen 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. _ Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmSplashScreen)) + Me.PictureEdit1 = New DevExpress.XtraEditors.PictureEdit() + Me.lblCopyright = New System.Windows.Forms.Label() + Me.lblVersion = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.lblStatus = New System.Windows.Forms.Label() + CType(Me.PictureEdit1.Properties, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' + 'PictureEdit1 + ' + Me.PictureEdit1.Dock = System.Windows.Forms.DockStyle.Top + Me.PictureEdit1.EditValue = CType(resources.GetObject("PictureEdit1.EditValue"), Object) + Me.PictureEdit1.Location = New System.Drawing.Point(0, 0) + Me.PictureEdit1.Name = "PictureEdit1" + Me.PictureEdit1.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder + Me.PictureEdit1.Properties.ShowCameraMenuItem = DevExpress.XtraEditors.Controls.CameraMenuItemVisibility.[Auto] + Me.PictureEdit1.Size = New System.Drawing.Size(800, 204) + Me.PictureEdit1.TabIndex = 0 + ' + 'lblCopyright + ' + Me.lblCopyright.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.lblCopyright.AutoSize = True + Me.lblCopyright.Location = New System.Drawing.Point(137, 226) + Me.lblCopyright.Name = "lblCopyright" + Me.lblCopyright.RightToLeft = System.Windows.Forms.RightToLeft.No + Me.lblCopyright.Size = New System.Drawing.Size(68, 13) + Me.lblCopyright.TabIndex = 9 + Me.lblCopyright.Tag = "Copyright {0}" + Me.lblCopyright.Text = "Copyright {0}" + ' + 'lblVersion + ' + Me.lblVersion.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.lblVersion.AutoSize = True + Me.lblVersion.Location = New System.Drawing.Point(12, 226) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(91, 13) + Me.lblVersion.TabIndex = 8 + Me.lblVersion.Tag = "Version {0}.{1:00}" + Me.lblVersion.Text = "Version {0}.{1:00}" + ' + 'pbStatus + ' + Me.pbStatus.Dock = System.Windows.Forms.DockStyle.Bottom + Me.pbStatus.Location = New System.Drawing.Point(0, 280) + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(800, 23) + Me.pbStatus.TabIndex = 6 + ' + 'lblStatus + ' + Me.lblStatus.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.lblStatus.AutoSize = True + Me.lblStatus.BackColor = System.Drawing.SystemColors.Control + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(12, 253) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(47, 15) + Me.lblStatus.TabIndex = 7 + Me.lblStatus.Text = "{Status}" + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' 'frmSplashScreen ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(365, 204) + Me.ClientSize = New System.Drawing.Size(800, 303) + Me.Controls.Add(Me.lblCopyright) + Me.Controls.Add(Me.lblVersion) + Me.Controls.Add(Me.lblStatus) + Me.Controls.Add(Me.pbStatus) + Me.Controls.Add(Me.PictureEdit1) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None Me.Name = "frmSplashScreen" - Me.Opacity = 0R Me.ShowIcon = False Me.ShowInTaskbar = False - Me.Text = "frmSplashScreen" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "signFLOW" + CType(Me.PictureEdit1.Properties, System.ComponentModel.ISupportInitialize).EndInit() Me.ResumeLayout(False) + Me.PerformLayout() End Sub + + Friend WithEvents PictureEdit1 As DevExpress.XtraEditors.PictureEdit + Friend WithEvents lblCopyright As Label + Friend WithEvents lblVersion As Label + Friend WithEvents pbStatus As ProgressBar + Friend WithEvents lblStatus As Label End Class diff --git a/EnvelopeGenerator.Form/frmSplashScreen.resx b/EnvelopeGenerator.Form/frmSplashScreen.resx index 1af7de15..4d9d3568 100644 --- a/EnvelopeGenerator.Form/frmSplashScreen.resx +++ b/EnvelopeGenerator.Form/frmSplashScreen.resx @@ -117,4 +117,331 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 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 + AElFTkSuQmCC + + \ No newline at end of file diff --git a/EnvelopeGenerator.Form/frmSplashScreen.vb b/EnvelopeGenerator.Form/frmSplashScreen.vb index 744034da..b19a1912 100644 --- a/EnvelopeGenerator.Form/frmSplashScreen.vb +++ b/EnvelopeGenerator.Form/frmSplashScreen.vb @@ -6,6 +6,7 @@ Imports DigitalData.Modules.Config Imports DigitalData.Modules.Database Imports DigitalData.Modules.Logging Imports EnvelopeGenerator.Common +Imports System.ComponentModel Public Class frmSplashScreen Private LogConfig As LogConfig @@ -13,83 +14,125 @@ Public Class frmSplashScreen Private Database As MSSQLServer Private ConfigManager As ConfigManager(Of Config) - - Private State As State + Private WithEvents Worker As New BackgroundWorker() With {.WorkerReportsProgress = True} Private Sub frmSplashScreen_Load(sender As Object, e As EventArgs) Handles MyBase.Load + lblVersion.Text = String.Format("Version {0}", My.Application.Info.Version.ToString) + lblCopyright.Text = My.Application.Info.Copyright + Me.BringToFront() + End Sub + + Private Sub Worker_DoWork(sender As Object, e As DoWorkEventArgs) Handles Worker.DoWork + + Dim oState As State = DirectCast(e.Argument, State) + + Worker.ReportProgress(20, "Initialize Database") + Thread.Sleep(300) + + Dim oConnectionString = MSSQLServer.DecryptConnectionString(oState.Config.ConnectionString) + Database = New MSSQLServer(oState.LogConfig, oConnectionString) + + oState = New State With { + .UserId = 0, + .Config = oState.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 + + Worker.ReportProgress(40, "Initialize Confguration") + Thread.Sleep(300) + + Dim ConfigModel = New ConfigModel(oState) + oState.DbConfig = ConfigModel.LoadConfiguration() + + Worker.ReportProgress(60, "Initialize User") + Thread.Sleep(300) + + Dim oUserModel = New UserModel(oState) + oState.UserId = oUserModel.SelectUserId() + + Dim oUser = oUserModel.SelectUser() + + Worker.ReportProgress(80, "Initialize Rights") + Thread.Sleep(300) + + ' This checks for module access and admin rights + oUserModel.CheckUserLogin(oUser) + + Worker.ReportProgress(100, "Starting Application") + Thread.Sleep(300) + + oState.User = oUser + + e.Result = oState + End Sub + + Private Sub Worker_ProgressChanged(sender As Object, e As ProgressChangedEventArgs) Handles Worker.ProgressChanged + pbStatus.Value = e.ProgressPercentage + lblStatus.Text = e.UserState.ToString() + End Sub + + Private Sub Worker_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles Worker.RunWorkerCompleted + If e.Error IsNot Nothing Then + Logger.Error(e.Error) + MsgBox(e.Error.Message, MsgBoxStyle.Critical, Text) + Application.Exit() + End If + + Dim oState As State = DirectCast(e.Result, State) + + Dim oCultureInfo As CultureInfo + oCultureInfo = New CultureInfo(oState.user.Language) + Thread.CurrentThread.CurrentCulture = oCultureInfo + Thread.CurrentThread.CurrentUICulture = oCultureInfo + CultureInfo.DefaultThreadCurrentCulture = oCultureInfo + CultureInfo.DefaultThreadCurrentUICulture = oCultureInfo + + If oState.User.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(oState.DbConfig.ExternalProgramName) Then + Text = oState.DbConfig.ExternalProgramName + End If + + Dim oForm As New frmMain(oState) + oForm.ShowDialog() + + ' Close this form after frmMain is closed + Close() + End Sub + + Private Sub frmSplashScreen_Shown(sender As Object, e As EventArgs) Handles Me.Shown Dim oLogPath = IO.Path.Combine(Application.LocalUserAppDataPath, "Log") LogConfig = New LogConfig(LogConfig.PathType.CustomPath, oLogPath, CompanyName:="Digital Data", ProductName:="Envelope Generator") Logger = LogConfig.GetLogger() + ConfigManager = New ConfigManager(Of Config)(LogConfig, Application.UserAppDataPath, Application.CommonAppDataPath, Application.StartupPath) - 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() - 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 + MsgBox("Database configured. Application will restart.", MsgBoxStyle.Critical, Text) + Application.Restart() + Else + MsgBox("No Database configured. Application will close!", MsgBoxStyle.Critical, Text) + Application.Exit() 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.ShowDialog() - - ' Close this form after frmMain is closed - Close() - - 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 + Worker.RunWorkerAsync(New State() With { + .LogConfig = LogConfig, + .Config = ConfigManager.Config + }) End Sub + + End Class \ No newline at end of file