269 lines
10 KiB
VB.net
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
|