Monorepo/GUIs.ZooFlow/Modules/Globix/ClassValidator.vb

269 lines
10 KiB
VB.net

Imports DevExpress.XtraEditors
Imports DigitalData.Controls.LookupGrid
Imports DigitalData.GUIs.ZooFlow.Globix.Models
Imports DigitalData.GUIs.GlobalIndexer.ControlCreator
Imports DigitalData.Modules.EDMI.API
Imports DigitalData.Modules.EDMI.API.EDMIServiceReference
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Base
Imports DigitalData.GUIs.Common
Public Class ClassValidator
Inherits BaseClass
Private ReadOnly Client As Client
Private ReadOnly ManualIndexes As List(Of ManualIndex)
Public Sub New(pLogConfig As LogConfig, pClient As Client, pManualIndexes As List(Of ManualIndex))
MyBase.New(pLogConfig)
Client = pClient
ManualIndexes = pManualIndexes
End Sub
Public Function GetControlMeta(pControl As Control) As ControlMeta
Dim oMeta As ControlMeta = Nothing
If TypeOf pControl.Tag Is ControlMeta Then
oMeta = DirectCast(pControl.Tag, ControlMeta)
End If
Return oMeta
End Function
Function ValidateControls(pPanel As Panel, pDocType As DocType) As Boolean
Try
Logger.Debug("Starting [ValidateControls]")
Dim result As Boolean = True
For Each oControl As Control In pPanel.Controls
Dim oMeta As ControlMeta = GetControlMeta(oControl)
' Labels do not need to validated
If TypeOf oControl Is Label Then
Continue For
End If
' ========================= TEXT BOX =========================
If oMeta.ControlType = "txt" Then
Dim oTextBox As DevExpress.XtraEditors.TextEdit = oControl
If oTextBox.Text = "" Then
Dim oIndexName = GetIndexName(oTextBox, "txt")
Dim oOptional = TestIsIndexOptional(pDocType, oIndexName)
If oOptional = False Then
ShowValidationMessage()
oTextBox.Focus()
Return False
End If
End If
End If
' ========================= LOOKUP =========================
If oMeta.ControlType = "cmbMulti" Then
Dim oLookup = DirectCast(oControl, LookupControl3)
Dim oValues As List(Of String) = oLookup.Properties.SelectedValues
If oValues.Count = 0 Then
Dim oIndexName = GetIndexName(oLookup, "cmbMulti")
Dim oOptional = TestIsIndexOptional(pDocType, oIndexName)
If oOptional = False Then
ShowValidationMessage()
oLookup.Focus()
Return False
End If
End If
End If
If oMeta.ControlType = "cmbSingle" Then
Dim cmbSingle As TextBox = oControl
If cmbSingle.Text = "" Then
Dim oIndexName = GetIndexName(cmbSingle, "cmbSingle")
Dim oOptional = TestIsIndexOptional(pDocType, oIndexName)
If oOptional = False Then
ShowValidationMessage()
cmbSingle.Focus()
Return False
End If
End If
End If
If oMeta.ControlType = "cmb" Then
Dim cmb As Windows.Forms.ComboBox = oControl
If cmb.Text = "" Then
Dim oIndexName = GetIndexName(cmb, "cmb")
Dim oOptional = TestIsIndexOptional(pDocType, oIndexName)
If oOptional = False Then
ShowValidationMessage()
cmb.Focus()
Return False
End If
End If
End If
' ========================= DATE PICKER =========================
If oMeta.ControlType = "dtp" Then
Dim dtp As DevExpress.XtraEditors.DateEdit = oControl
Dim oIndexName As String = GetIndexName(dtp, "dtp")
If dtp.Text = String.Empty Then
Dim oOptional = TestIsIndexOptional(pDocType, oIndexName)
If oOptional = False Then
ShowValidationMessage()
dtp.Focus()
Return False
End If
End If
End If
' ========================= CHECK BOX =========================
If oMeta.ControlType = "chk" Then
'TODO: Implement Itermediate state and then validation for checkbox
Dim chk As CheckEdit = oControl
'result = True
End If
Next
Return True
Catch ex As Exception
Logger.Warn("Unvorhergesehener Fehler in ValidateControls")
Logger.Error(ex.Message)
Return False
End Try
End Function
Function GetControlValues(pPanel As Panel) As List(Of UserAttributeValue)
Dim oAttributeValues As New List(Of UserAttributeValue)
For Each oControl As Control In pPanel.Controls
Dim oMeta As ControlMeta = GetControlMeta(oControl)
' Labels do not have values
If TypeOf oControl Is Label Then
Continue For
End If
' ========================= TEXTBOX =========================
If oMeta.ControlType = "txt" Then
Dim oTextBox As DevExpress.XtraEditors.TextEdit = oControl
Dim oIndexName = GetIndexName(oTextBox, "txt")
' TODO: What to do when value is emmpty? send an empty value or skip the control?
'If oTextBox.Text = "" Then
'End If
oAttributeValues.Add(New UserAttributeValue With {
.Name = oIndexName,
.Values = WrapIndexValue(oTextBox.Text),
.ControlName = oTextBox.Name
})
End If
' ========================= LOOKUP =========================
If oMeta.ControlType = "cmbMulti" Then
Dim oLookup = DirectCast(oControl, LookupControl3)
Dim oValues As List(Of String) = oLookup.Properties.SelectedValues
Dim oIndexName = GetIndexName(oLookup, "cmbMulti")
If oValues.Count = 0 Then
End If
oAttributeValues.Add(New UserAttributeValue With {
.Name = oIndexName,
.Values = WrapIndexValue(oValues),
.ControlName = oLookup.Name
})
End If
If oMeta.ControlType = "cmbSingle" Then
Dim cmbSingle As TextBox = oControl
Dim oIndexName = GetIndexName(cmbSingle, "cmbSingle")
If cmbSingle.Text = "" Then
End If
oAttributeValues.Add(New UserAttributeValue With {
.Name = oIndexName,
.Values = WrapIndexValue(cmbSingle.Text),
.ControlName = cmbSingle.Name
})
End If
If oMeta.ControlType = "cmb" Then
Dim cmb As ComboBox = oControl
Dim oIndexName = GetIndexName(cmb, "cmb")
If cmb.Text = "" Then
End If
oAttributeValues.Add(New UserAttributeValue With {
.Name = oIndexName,
.Values = WrapIndexValue(cmb.Text),
.ControlName = cmb.Name
})
End If
' ========================= DATE PICKER =========================
If oMeta.ControlType = "dtp" Then
Dim dtp As DevExpress.XtraEditors.DateEdit = oControl
Dim oIndexName As String = GetIndexName(dtp, "dtp")
oAttributeValues.Add(New UserAttributeValue With {
.Name = oIndexName,
.Values = WrapIndexValue(dtp.EditValue.ToString),
.ControlName = dtp.Name
})
End If
' ========================= CHECK BOX =========================
If oMeta.ControlType = "chk" Then
Dim chk As CheckEdit = oControl
Dim oIndexName As String = GetIndexName(chk, "chk")
oAttributeValues.Add(New UserAttributeValue With {
.Name = oIndexName,
.Values = WrapIndexValue(chk.Checked.ToString),
.ControlName = chk.Name
})
End If
Next
Return oAttributeValues
End Function
Private Function GetIndexName(pControl As Control, pPrefix As String) As String
Dim oIndexName = Replace(pControl.Name, pPrefix, "")
Return oIndexName
End Function
Private Function WrapIndexValue(pValue As String) As String()
Return New List(Of String) From {pValue}.ToArray
End Function
Private Function WrapIndexValue(pValues As List(Of String)) As String()
Return pValues.ToArray
End Function
Private Function TestIsIndexOptional(pDocType As DocType, pIndexName As String) As Boolean
Dim oIsOptional As Boolean = ManualIndexes.
Where(Function(index) index.DocTypeId = pDocType.Guid And index.Name = pIndexName).
Select(Function(index) index.IsOptional).
FirstOrDefault()
Return oIsOptional
End Function
Private Sub ShowValidationMessage()
'MsgBox(ClassConstants.TEXT_MISSING_INPUT, MsgBoxStyle.Exclamation, ClassConstants.TITLE_MISSING_INPUT)
Dim oMsgBox As New frmDialog(ClassConstants.TEXT_MISSING_INPUT, ClassConstants.TITLE_MISSING_INPUT, frmDialog.DialogType.Warning)
oMsgBox.ShowDialog()
End Sub
End Class