Imports DevExpress.Utils.Extensions Imports DevExpress.XtraSplashScreen Imports DevExpress.XtraCharts Imports DigitalData.GUIs.Common Imports DigitalData.Modules.Base Imports DigitalData.Modules.Config Imports DigitalData.Modules.Database Imports DigitalData.Modules.Logging Imports EnvelopeGenerator.Common Imports EnvelopeGenerator.Common.My Imports DevExpress.Charts.Native Imports DevExpress.XtraGrid.Views.Grid Imports DevExpress.XtraGrid Public Class frmMain Private LogConfig As LogConfig Private Logger As Logger Private Database As MSSQLServer Private ConfigManager As ConfigManager(Of Config) 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") Logger = LogConfig.GetLogger() FormHelper = New FormHelper(LogConfig, Me) TempFiles = New TempFiles(LogConfig) TempFiles.Create() RefreshHelper = New RefreshHelper(ViewEnvelopes, "Id") Try ConfigManager = New ConfigManager(Of Config)(LogConfig, Application.UserAppDataPath) 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 FormHelper.ShowErrorMessage(New ApplicationException("No Database configured. Application will close!"), "Form Load") 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 = True Then Dim ConfigModel = New ConfigModel(State) State.DbConfig = ConfigModel.LoadConfiguration() State.UserId = ConfigModel.GetUserId() End If If Not String.IsNullOrEmpty(State.DbConfig.ExternalProgramName) Then Me.Text = State.DbConfig.ExternalProgramName End If Controller = New EnvelopeListController(State) LoadEnvelopeData() Catch ex As Exception Logger.Error(ex) End Try End Sub Private Sub LoadEnvelopeData() RefreshHelper.SaveViewInfo() LoadEnvelopes() LoadCompletedEnvelopes() RefreshHelper.LoadViewInfo() 'LoadCharts() txtRefreshLabel.Caption = String.Format(txtRefreshLabel.Tag, Now) End Sub Private Sub LoadEnvelopes() GridBuilder = New GridBuilder(ViewEnvelopes) GridBuilder.SetDefaults(ViewEnvelopes) GridBuilder.SetReadOnlyOptions(ViewEnvelopes) GridEnvelopes.DataSource = Controller.ListEnvelopes() End Sub Private Sub LoadCompletedEnvelopes() GridBuilder = New GridBuilder(ViewCompleted) GridBuilder.SetDefaults(ViewCompleted) GridBuilder.SetReadOnlyOptions(ViewCompleted) GridCompleted.DataSource = Controller.ListCompleted() End Sub Private Sub LoadCharts() Dim oChartControl As ChartControl = Controller.GetPieChart() Me.SplitContainerControl1.Panel2.AddControl(oChartControl) End Sub Private Sub btnCreateEnvelope_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnCreateEnvelope.ItemClick Dim oHandle = SplashScreenManager.ShowOverlayForm(Me) Try Dim oForm As New frmEnvelopeEditor() With {.State = State} oForm.ShowDialog() LoadEnvelopeData() Catch ex As Exception Logger.Error(ex) Finally SplashScreenManager.CloseOverlayForm(oHandle) End Try End Sub Private Sub btnEditEnvelope_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnEditEnvelope.ItemClick Dim oSelectedRows = ViewEnvelopes.GetSelectedRows() If oSelectedRows.Count > 0 Then LoadEnvelope(oSelectedRows.First) End If End Sub Private Sub LoadEnvelope(pRowHandle As Integer) Dim oHandle = SplashScreenManager.ShowOverlayForm(Me) Try Dim oEnvelope As Envelope = DirectCast(ViewEnvelopes.GetRow(pRowHandle), Envelope) If oEnvelope.IsAlreadySent Then Exit Sub End If Dim oForm As New frmEnvelopeEditor() With {.State = State, .Envelope = oEnvelope} oForm.ShowDialog() LoadEnvelopeData() Catch ex As Exception Logger.Error(ex) Finally SplashScreenManager.CloseOverlayForm(oHandle) End Try End Sub Private Sub DeleteEnvelope(pRowHandle As Integer) Dim oEnvelope As Envelope = ViewEnvelopes.GetRow(pRowHandle) If MsgBox(Resources.Envelope.Do_you_really_want_to_delete_this_envelope, MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Text) = MsgBoxResult.No Then Exit Sub End If If Controller.DeleteEnvelope(oEnvelope) Then LoadEnvelopeData() Else MsgBox(Resources.Envelope.The_envelope_could_not_be_deleted, MsgBoxStyle.Critical, Text) End If End Sub Private Sub ViewEnvelopes_DoubleClick(sender As Object, e As EventArgs) Handles ViewEnvelopes.DoubleClick Dim oSelectedRows = ViewEnvelopes.GetSelectedRows() If oSelectedRows.Count > 0 Then LoadEnvelope(oSelectedRows.First) End If End Sub Private Sub btnDeleteEnvelope_ItemClick_1(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnDeleteEnvelope.ItemClick Dim oSelectedRows = ViewEnvelopes.GetSelectedRows() If oSelectedRows.Count > 0 Then DeleteEnvelope(oSelectedRows.First) End If End Sub Private Sub frmMain_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing ' Cleanup Methods TempFiles.CleanUp() End Sub Private Sub XtraTabControl1_SelectedPageChanged(sender As Object, e As DevExpress.XtraTab.TabPageChangedEventArgs) Handles XtraTabControl1.SelectedPageChanged Select Case XtraTabControl1.SelectedTabPageIndex Case 1 btnEditEnvelope.Enabled = False Case 0 btnEditEnvelope.Enabled = True End Select End Sub Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick LoadEnvelopeData() End Sub Private Sub ViewEnvelopes_FocusedRowChanged(sender As Object, e As DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs) Handles ViewEnvelopes.FocusedRowChanged Dim oEnvelope As Envelope = ViewEnvelopes.GetRow(ViewEnvelopes.FocusedRowHandle) If oEnvelope.IsAlreadySent Then btnEditEnvelope.Enabled = False Else btnEditEnvelope.Enabled = True End If End Sub Private Sub ViewEnvelopes_CustomDrawCell(sender As Object, e As DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs) Handles ViewEnvelopes.CustomDrawCell If e.RowHandle < 0 Then Exit Sub End If Dim oEnvelope As Envelope = ViewEnvelopes.GetRow(e.RowHandle) If oEnvelope.Status = Common.Constants.EnvelopeStatus.EnvelopePartlySigned Then e.Appearance.BackColor = ColorTranslator.FromHtml(Common.Constants.GREEN_300) End If If oEnvelope.Status = Common.Constants.EnvelopeStatus.EnvelopeQueued Or oEnvelope.Status = Common.Constants.EnvelopeStatus.EnvelopeSent Then e.Appearance.BackColor = ColorTranslator.FromHtml(Common.Constants.ORANGE_300) End If End Sub Private Sub ViewReceivers_CustomDrawCell(sender As Object, e As DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs) Handles ViewReceivers.CustomDrawCell If e.RowHandle < 0 Then Exit Sub End If Dim oView As GridView = DirectCast(sender, GridView) Dim oReceiver As EnvelopeReceiver = oView.GetRow(e.RowHandle) If (oReceiver Is Nothing) Then Exit Sub End If If oReceiver.Status = Common.Constants.ReceiverStatus.Signed Then e.Appearance.BackColor = ColorTranslator.FromHtml(Common.Constants.GREEN_300) Else e.Appearance.BackColor = ColorTranslator.FromHtml(Common.Constants.RED_300) End If End Sub Private Sub RefreshTimer_Tick(sender As Object, e As EventArgs) Handles RefreshTimer.Tick LoadEnvelopeData() End Sub Private Sub btnContactReceiver_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnContactReceiver.ItemClick Dim oView As GridView = GridEnvelopes.FocusedView If oView.Name = ViewReceivers.Name Then Console.Write("") Dim oReceiver As EnvelopeReceiver = oView.GetRow(oView.FocusedRowHandle) Process.Start($"mailto:{oReceiver.Email}") Else MsgBox("Bitte wählen Sie einen Empfänger aus dem Reiter Empfänger aus.", MsgBoxStyle.Information, Text) End If End Sub End Class