Modules/GUIs.ZooFlow/Globix/ClassValidator.vb
2021-12-13 16:07:41 +01:00

251 lines
9.5 KiB
VB.net

Imports DigitalData.Controls.LookupGrid
Imports DigitalData.GUIs.ZooFlow.Base
Imports DigitalData.GUIs.ZooFlow.Globix.Models
Imports DigitalData.GUIs.ZooFlow.frmGlobix_Index
Imports DigitalData.Modules.EDMI.API
Imports DigitalData.Modules.EDMI.API.EDMIServiceReference
Imports DigitalData.Modules.Logging
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
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
If oControl.Name.StartsWith("lbl") Then
Continue For
End If
' ========================= TEXT BOX =========================
If oControl.Name.StartsWith("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 oControl.Name.StartsWith("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
ElseIf oControl.Name.StartsWith("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
ElseIf oControl.Name.StartsWith("cmb") Then
Dim cmb As 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 oControl.Name.StartsWith("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 oControl.Name.StartsWith("chk") Then
Dim chk As CheckBox = oControl
'result = True
End If
'If TypeOf (oControl) Is Button Then
' Continue For
'End If
'If oControl.Name.StartsWith("lbl") = False And result = False Then
' Logger.Info("Die Überprüfung der manuellen Indices ist fehlerhaft. Bitte informieren Sie den Systembetreuer")
' Return False
'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)
Dim oAttributeValues As New List(Of UserAttributeValue)
For Each oControl As Control In pPanel.Controls
' ========================= TEXTBOX =========================
If oControl.Name.StartsWith("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 oControl.Name.StartsWith("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
})
ElseIf oControl.Name.StartsWith("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
})
ElseIf oControl.Name.StartsWith("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 oControl.Name.StartsWith("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 oControl.Name.StartsWith("chk") Then
Dim chk As CheckBox = 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(ClassStrings.TEXT_MISSING_INPUT, MsgBoxStyle.Exclamation, ClassStrings.TITLE_MISSING_INPUT)
End Sub
End Class