Modules/GUIs.ZooFlow/Search/Test/frmFlowSearch2.vb
2022-05-16 15:52:49 +02:00

190 lines
7.1 KiB
VB.net

Imports DevExpress.XtraEditors.Controls
Imports DevExpress.XtraGrid.Views.Tile
Imports DevExpress.XtraSplashScreen
Imports DigitalData.GUIs.ZooFlow.ClassConstants
Imports DigitalData.Modules.Logging
Public Class frmFlowSearch2
Private ReadOnly LogConfig As LogConfig = My.LogConfig
Private ReadOnly Logger = My.LogConfig.GetLogger()
Private SearchRunner As SearchRunner
Private Sub frmFlowSearch2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SearchRunner = New SearchRunner(My.LogConfig, My.Application.GetEnvironment, "FlowSearch") With {
.BaseSearchSQL = LoadBaseSQL()
}
TextEdit1.MaskBox.AutoCompleteSource = AutoCompleteSource.CustomSource
TextEdit1.MaskBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend
TextEdit1.MaskBox.AutoCompleteCustomSource = LoadAutoSuggest()
RadioGroup1.Properties.Items.AddRange(LoadDateConstraints.ToArray)
GridControl1.DataSource = LoadPredefinedSearches()
End Sub
Private Function LoadBaseSQL() As String
Dim oSQL = ""
For Each oRow As DataRow In My.Tables.DTIDB_COMMON_SQL.Rows
If oRow.Item("TITLE") = SQLCMD_FLOW_SEARCH_BASE Then
oSQL = oRow.Item("SQL_COMMAND")
oSQL = oSQL.Replace("@USER_ID", My.Application.User.UserId)
oSQL = oSQL.Replace("@LANG_CODE", My.Application.User.Language)
End If
Next
Return oSQL
End Function
Private Function LoadAutoSuggest() As AutoCompleteStringCollection
Dim oCollection As New AutoCompleteStringCollection
Dim oSql = $"EXEC PRIDB_SEARCH_AUTOSUGGEST '{My.Application.User.Language}',{My.Application.User.UserId}"
Dim oTable As DataTable = My.Database.GetDatatableIDB(oSql)
If oTable Is Nothing Then
Return New AutoCompleteStringCollection()
End If
For Each oRow As DataRow In oTable.Rows
oCollection.Add(oRow.Item("TERM"))
Next
Return oCollection
End Function
Private Function LoadDateConstraints() As List(Of RadioGroupItem)
Return New List(Of RadioGroupItem) From {
New RadioGroupItem(SearchRunner.CREATED_TODAY, "Heute"),
New RadioGroupItem(SearchRunner.CREATED_TOMORROW, "Gestern"),
New RadioGroupItem(SearchRunner.CREATED_LAST_7_DAYS, "Letzte 7 Tage"),
New RadioGroupItem(SearchRunner.CREATED_MONTH_CURR, "Dieser Monat"),
New RadioGroupItem(SearchRunner.CREATED_LAST_7_DAYS, "Letzter Monat"),
New RadioGroupItem(SearchRunner.CREATED_YEAR_CURRENT, "Dieses Jahr"),
New RadioGroupItem(SearchRunner.CREATED_YEAR_LAST, "Letztes Jahr"),
New RadioGroupItem("NOTHING", "Keine Einschränkung")
}
End Function
Private Function LoadPredefinedSearches() As List(Of PredefinedSearch)
Return New List(Of PredefinedSearch) From {
New PredefinedDateSearch() With {
.Name = "Heute",
.Description = "Dokumente, die heute abgelegt wurden",
.DateConstraint = SearchRunner.DateConstraint.Today
},
New PredefinedDateSearch() With {
.Name = "Gestern",
.Description = "Dokumente, die gestern abgelegt wurden",
.DateConstraint = SearchRunner.DateConstraint.Yesterday
},
New PredefinedDateSearch() With {
.Name = "Letzte Woche",
.Description = "Dokumente, die in den letzten 7 Tagen abgelegt wurden",
.DateConstraint = SearchRunner.DateConstraint.Last7Days
},
New PredefinedDateSearch() With {
.Name = "Dieser Monat",
.Description = "Dokumente, die in diesem Monat abgelegt wurden",
.DateConstraint = SearchRunner.DateConstraint.CurrentMonth
},
New PredefinedDateSearch() With {
.Name = "Letzter Monat",
.Description = "Dokumente, die im letzten Monat abgelegt wurden",
.DateConstraint = SearchRunner.DateConstraint.LastMonth
}
}
End Function
Private Async Sub TextEdit1_KeyUp(sender As Object, e As KeyEventArgs) Handles TextEdit1.KeyUp
If e.KeyCode = Keys.Enter Then
Await RunSearch()
End If
End Sub
Private Async Sub TextEdit1_ButtonClick(sender As Object, e As DevExpress.XtraEditors.Controls.ButtonPressedEventArgs) Handles TextEdit1.ButtonClick
If e.Button.Tag = "SEARCH" Then
Await RunSearch()
End If
End Sub
Private Async Function RunSearch() As Threading.Tasks.Task
Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
Try
Dim oDateFrom = DateEditFrom.EditValue
Dim oDateTo = DateEditTo.EditValue
If CheckEdit1.IsOn = False Then
oDateTo = Nothing
End If
SearchRunner.SetDateConstraint()
Await SearchRunner.Run(TextEdit1.EditValue, oDateFrom, oDateTo)
Catch ex As Exception
MsgBox(ex.Message)
Finally
SplashScreenManager.CloseOverlayForm(oHandle)
End Try
End Function
Private Sub RadioGroup1_EditValueChanged(sender As Object, e As EventArgs) Handles RadioGroup1.EditValueChanged
Dim oIndex = RadioGroup1.SelectedIndex
Dim oItem As RadioGroupItem = RadioGroup1.Properties.Items.Item(oIndex)
Dim oSearchConstraintString As String = oItem.Value
Dim oDateConstraint = SearchRunner.ConstantToDateConstraint(oSearchConstraintString)
If oDateConstraint <> SearchRunner.DateConstraint.Undefined Then
SearchRunner.SetDateConstraint(oDateConstraint)
End If
End Sub
Friend Class PredefinedSearch
Public Property Name As String
Public Property Description As String
Public Property Count As Integer = 0
Public ReadOnly Property DisplayName As String
Get
Return $"{Name} ({Count})"
End Get
End Property
End Class
Friend Class PredefinedSQLSearch
Public Property SQLCommand As String
End Class
Friend Class PredefinedDateSearch
Inherits PredefinedSearch
Public DateConstraint As SearchRunner.DateConstraint
End Class
Private Async Sub TileView1_ItemClick(sender As Object, e As TileViewItemClickEventArgs) Handles TileView1.ItemClick
Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
Try
Dim oSearch = TileView1.GetRow(TileView1.FocusedRowHandle)
If TypeOf oSearch Is PredefinedDateSearch Then
Dim oDateSearch As PredefinedDateSearch = oSearch
SearchRunner.SetDateConstraint(oDateSearch.DateConstraint)
End If
Await SearchRunner.Run()
Catch ex As Exception
Finally
SplashScreenManager.CloseOverlayForm(oHandle)
End Try
End Sub
Private Sub CheckEdit1_Properties_EditValueChanged(sender As Object, e As EventArgs) Handles CheckEdit1.Properties.EditValueChanged
DateEditTo.Enabled = CheckEdit1.IsOn
End Sub
End Class