2023-12-05 15:40:16 +01:00

259 lines
9.4 KiB
VB.net

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
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 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()
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()
LoadEnvelopes()
LoadCompletedEnvelopes()
'LoadCharts()
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 = Color.LightGreen
End If
If oEnvelope.Status = Common.Constants.EnvelopeStatus.EnvelopeQueued Or oEnvelope.Status = Common.Constants.EnvelopeStatus.EnvelopeSent Then
e.Appearance.BackColor = Color.LightGoldenrodYellow
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 oDetailView As GridView = ViewEnvelopes.GetDetailView(ViewEnvelopes.FocusedRowHandle, 0)
'Dim oRow = oDetailView.GetDataRow(e.RowHandle)
'Dim oReceiver As EnvelopeReceiver = ViewReceivers.GetRow(e.RowHandle)
'If e.Column.FieldName = "Status" Then
' e.Appearance.BackColor = Color.LightSalmon
'End If
'Dim oReceiver As EnvelopeReceiver = ViewReceivers.GetRow(e.RowHandle)
'If (oReceiver Is Nothing) Then
' Exit Sub
'End If
'If oReceiver.Status = Common.Constants.ReceiverStatus.Signed Then
' e.Appearance.BackColor = Color.LightGreen
'Else
' e.Appearance.BackColor = Color.LightSalmon
'End If
End Sub
Private Sub GridEnvelopes_ViewRegistered(sender As Object, e As DevExpress.XtraGrid.ViewOperationEventArgs) Handles GridEnvelopes.ViewRegistered
If (e.View.IsDetailView = False) Then
Exit Sub
End If
AddHandler DirectCast(e.View, GridView).CustomDrawCell, AddressOf ViewReceivers_CustomDrawCell
End Sub
End Class