RecordOrganizer/app/DD-Record-Organizer/ClassNodeNavigation.vb

419 lines
18 KiB
VB.net

Imports System.Data.SqlClient
Imports DevExpress.Utils
Public Class ClassNodeNavigation
Public Shared NODE_CONFIGURABLE_ID As Integer
Public Shared MyTreeView As TreeView
Public Shared Datatable_Nodes As DataTable
Public Shared TREEVIEW_IMAGELIST As ImageList
Public Shared IMAGE_COLLECTION As ImageCollection
Public Shared Function CreateNodeProcedure(RECORD_ID As Integer, NODE_CONFIG_ID As Integer, NODE_CAPTION As String, NODE_ID1 As String, NODE_PARENT_ID As String, ADDED_WHO As String)
Try
Dim connection As New SqlConnection
connection.ConnectionString = MyConnectionString
Using cmd As New SqlCommand("PRPMO_CREATE_NODE", connection)
cmd.CommandType = CommandType.StoredProcedure
'@pNODE_PARENT_ID INT, @pADDED_WHO
cmd.Parameters.AddWithValue("@pRECORD_ID", RECORD_ID)
cmd.Parameters.AddWithValue("@pNODE_CONFIG_ID", NODE_CONFIG_ID)
cmd.Parameters.AddWithValue("@pNODE_CAPTION", NODE_CAPTION)
cmd.Parameters.AddWithValue("@pNODE_ID1", NODE_ID1)
cmd.Parameters.AddWithValue("@pNODE_PARENT_ID", NODE_PARENT_ID)
cmd.Parameters.AddWithValue("@pADDED_WHO", ADDED_WHO)
cmd.Parameters.Add("@pRESULT", SqlDbType.Int)
cmd.Parameters("@pRESULT").Direction = ParameterDirection.Output
connection.Open()
cmd.ExecuteNonQuery()
connection.Close()
Dim GUID As Integer = cmd.Parameters("@pRESULT").Value
Return GUID
End Using
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error in CreateNodeProcedure: ")
LOGGER.Warn("Error in CreateNodeProcedure: " & ex.Message)
Return 0
End Try
End Function
Public Shared Function CREATE_IMAGE_COLL(DT_IMAGELIST As DataTable)
IMAGE_COLLECTION = New ImageCollection
For Each row As DataRow In DT_IMAGELIST.Rows
Try
Dim bimage = row.Item("NODE_IMAGE")
If Not IsDBNull(bimage) Then
Dim Node_image = ByteArrayToBitmap(bimage)
IMAGE_COLLECTION.AddImage(Node_image, row.Item("GUID")) 'row.Item("GUID").ToString & "#" & row.Item("ENTITY_ID")
End If
Catch ex As Exception
End Try
Next
End Function
Public Shared Function Return_Node(PARENT_ID As Integer, ParentNode As TreeNode)
Dim expression As String
expression = "PARENT_GUID = " & PARENT_ID 'Einschränkung auf Type und Parent_Guid
Dim foundRows() As DataRow
foundRows = Datatable_Nodes.Select(expression)
Dim q As Integer
For q = 0 To foundRows.GetUpperBound(0)
Dim ID9 = foundRows(q)("GUID")
Dim LevelEntity9 = foundRows(q)("ENTITY_ID")
Dim controlID9 = foundRows(q)("CONTROL_ID")
Dim nodetext9 = foundRows(q)("NODE_CAPTION")
Dim RECORD_ID = foundRows(q)("RECORD_ID")
Dim NODE_CONFIG_ID = foundRows(q)("NODE_CONFIG_ID")
' Node erstellen..
Dim NEW_NODE As TreeNode
NEW_NODE = New TreeNode(nodetext9)
ClassNodeNavigation.Check_NODE_CONFIG_ID(LevelEntity9, NEW_NODE)
NEW_NODE.Tag = ClassNodeNavigation.CreateNODE_TAG(LevelEntity9, ID9, RECORD_ID, NODE_CONFIG_ID)
Dim index = 0
For Each img As String In TREEVIEW_IMAGELIST.Images.Keys
If img.Replace("LEVEL#ENTITY", "") = "6" & LevelEntity9.ToString Then
Exit For
End If
index += 1
Next
NEW_NODE.ImageIndex = index
NEW_NODE.SelectedImageIndex = index
' ..und einfügen
ParentNode.Nodes.Add(NEW_NODE)
Next '
End Function
Public Shared Sub Check_NODE_CONFIG_ID(ENTITY_ID As Integer, myTreeNode As TreeNode)
Try
If myTreeNode Is Nothing Then
Exit Sub
End If
Dim NODE_ID
Dim NODE_CONFIG_ID
Dim staticListItems = myTreeNode.Tag.Split("#")
LOGGER.Debug($"SUB CNCID.myTreeNode.Tag [{myTreeNode.Tag.ToString}]", False)
If staticListItems(0).Contains("NODE-TYPE") Or staticListItems(0).Contains("CONFIG_NODE") Then
' NODE_ID = staticListItems(0).ToString.Replace("NODE-TYPE-", "")
NODE_ID = Return_NODEID_forTag(myTreeNode.Tag)
NODE_CONFIG_ID = Return_NODE_CONFIG_ID_forTag(myTreeNode.Tag)
LOGGER.Debug($"SUB CNCID.Checking nodeconfig on NODE_ID [{NODE_ID.ToString}] and NODE_CONFIG_ID [{NODE_CONFIG_ID.ToString}]", False)
Else
LOGGER.Debug($"Attention no NODE-TYPE in staticListItems(0) [{staticListItems(0).ToString}]", False)
End If
If NODE_CONFIGURABLE_NODES_DT.Rows.Count > 0 And IsNumeric(NODE_ID) Then
'Prüfen ob es für dieses Level einen konfigurierbaren Knoten gibt
Dim oTable As DataTable = NODE_CONFIGURABLE_NODES_DT
' Get rows with PARENT_ID = NODE_ID
Dim result() As DataRow = oTable.Select("PARENT_NODE = " & NODE_CONFIG_ID)
Dim count As Integer
Dim ID
' Loop.
For Each row As DataRow In result
count += 1
ID = row.Item("GUID")
CURRENT_NODE_IMAGE = row.Item("NODE_IMAGE")
If count = 2 Then Exit For
Next
'Dim result = (From form In NODE_CONFIGURABLE_NODES_DT.AsEnumerable()
' Select form
' Where form.Item("PARENT_NODE") = NODE_ID).Single()
If Not IsNothing(ID) Then
LOGGER.Debug($"SUB CNCID.We have a NODE_CONFIGURABLE_ID [{ID.ToString}]!!", False)
ClassNodeNavigation.NODE_CONFIGURABLE_ID = ID
CURRENT_NODE_CONFIGURABLE_ID = ID
Else
LOGGER.Debug($"SUB CNCID.NODE_CONFIGURABLE_ID is nothing!!", False)
' LOGGER.Debug("CURRENT_NODE_CONFIGURABLE_ID would be nothing...", False)
CURRENT_NODE_CONFIGURABLE_ID = 0
End If
Else
If IsNumeric(NODE_ID) = False Then
LOGGER.Debug("SUB CNCID.NODE_ID is not numeric", False)
Else
LOGGER.Debug("SUB CNCID.NO NODE_CONFIGURABLE_NODES_DT", False)
End If
CURRENT_NODE_CONFIGURABLE_ID = 0
End If
Catch ex As Exception
LOGGER.Debug("SUB CNCID.CURRENT_NODE_CONFIGURABLE_ID would be nothing(1)...", False)
ClassNodeNavigation.NODE_CONFIGURABLE_ID = 0
CURRENT_NODE_CONFIGURABLE_ID = 0
End Try
End Sub
Public Shared Function CreateNODE_TAG(Entity As Integer, IDNode As String, Record As Object, NODE_CONFIG_ID As Integer)
Dim vType, TagString As String
Try
If NODE_CONFIGURABLE_ID = NODE_CONFIG_ID Then
vType = "CONFIG_NODE-" & NODE_CONFIG_ID.ToString
Else
vType = "NODE-TYPE-" & NODE_CONFIG_ID.ToString
End If
If Not IsDBNull(Record) Then
TagString = vType & "#" & Entity & "#NODE_ID-" & IDNode & "#RECORD-ID" & Record.ToString
Else
TagString = vType & "#" & Entity & "#NODE_ID-" & IDNode
End If
Return TagString
Catch ex As Exception
LOGGER.Warn("Unexpected Error in CreateNODE_TAG (NodeNavigation): " & ex.Message)
MsgBox("Error in CreateNODE_TAG (NodeNavigation):" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
TagString = "ERROR NODETAG_CREATION"
Return TagString
End Try
End Function
Public Shared Function CreateTreeViewNodes(DT_TREEVIEW_NODES As DataTable, TREEVIEW_IMAGELIST As ImageList)
Try
Dim sw As New SW("CreateTreeViewNodes")
Dim mytrv As New TreeView
Dim ENTITY_ID As Integer
Dim expression As String
expression = "PARENT_GUID = 0"
Dim MAIN_NODES() As DataRow
'Use the Select method to find all rows matching the filter.
MAIN_NODES = DT_TREEVIEW_NODES.Select(expression, "SEQUENCE, NODE_CAPTION")
' For each row create a Node
For i = 0 To MAIN_NODES.GetUpperBound(0)
If ENTITY_ID <> MAIN_NODES(i)("ENTITY_ID") Then
ENTITY_ID = MAIN_NODES(i)("ENTITY_ID")
ClassNodeNavigation.Check_NODE_CONFIG_ID(MAIN_NODES(i)("ENTITY_ID"), Nothing)
End If
Dim NODE_Tag = CreateNODE_TAG(MAIN_NODES(i)("ENTITY_ID"), MAIN_NODES(i)("GUID"), MAIN_NODES(i)("RECORD_ID"), MAIN_NODES(i)("NODE_CONFIG_ID"))
Dim MAIN_NODE = New TreeNode(MAIN_NODES(i)("NODE_CAPTION")) '"NODE_CAPTION"
MAIN_NODE.Tag = NODE_Tag
Dim index As Integer = 0
For Each img As String In TREEVIEW_IMAGELIST.Images.Keys
If img = MAIN_NODES(i)("NODE_CONFIG_ID") Then ' & "#" & MAIN_NODES(i)("ENTITY_ID")
Exit For
End If
index += 1
Next
MAIN_NODE.ImageIndex = index
MAIN_NODE.SelectedImageIndex = index
'New Font(fontfamily, fontsize, CType(fontstyle, FontStyle))
Dim fontfamily, backcolor As String
Dim fontstyle, fontcolor, fontsize As Integer
fontfamily = MAIN_NODES(i)("FONT_FAMILY").ToString
fontsize = CInt(MAIN_NODES(i)("FONT_SIZE"))
fontstyle = MAIN_NODES(i)("FONT_STYLE")
fontcolor = MAIN_NODES(i)("FONT_COLOR")
backcolor = MAIN_NODES(i)("BACK_COLOR")
MAIN_NODE.NodeFont = New Font(fontfamily, fontsize, CType(fontstyle, FontStyle))
MAIN_NODE.ForeColor = IntToColor(fontcolor)
Try
If backcolor <> String.Empty Then
MAIN_NODE.BackColor = Color.FromName(backcolor)
End If
Catch ex As Exception
LOGGER.Warn("Unexpected Error in Formatting NodeColor (CreateTreViewNodes): " & ex.Message)
End Try
MAIN_NODE = CheckSubNodes(DT_TREEVIEW_NODES, MAIN_NODES(i)("GUID"), TREEVIEW_IMAGELIST, MAIN_NODE, MAIN_NODES(i)("EXPAND_NODE"))
'Add the node
mytrv.Nodes.Add(MAIN_NODE)
Next
sw.Done()
Return mytrv
Catch ex As System.Exception
LOGGER.Warn("Unexpected Error in CreateTreeViewNodes (NodeNavigation-CreateTreViewNodes): " & ex.Message)
MsgBox("Error in CreateTreeViewNodes (NodeNavigation):" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
Return Nothing
End Try
End Function
Private Shared Function CheckSubNodes(DT_TREEVIEW_NODES As DataTable, PARENT_GUID As Integer, TREEVIEW_IMAGELIST As ImageList, MY_NODE As TreeNode, EXPAND As Boolean)
Dim ENTITY_ID As Integer
Dim expression As String
expression = "PARENT_GUID = " & PARENT_GUID.ToString
Dim SUB_NODE_ROW() As DataRow
' Use the Select method to find all rows matching the filter.
SUB_NODE_ROW = DT_TREEVIEW_NODES.Select(expression, "SEQUENCE, NODE_CAPTION")
' For each row create a Node
For i = 0 To SUB_NODE_ROW.GetUpperBound(0)
If ENTITY_ID <> SUB_NODE_ROW(i)("ENTITY_ID") Then
ENTITY_ID = SUB_NODE_ROW(i)("ENTITY_ID")
ClassNodeNavigation.Check_NODE_CONFIG_ID(SUB_NODE_ROW(i)("ENTITY_ID"), MY_NODE)
End If
Dim NODE_Tag = CreateNODE_TAG(SUB_NODE_ROW(i)("ENTITY_ID"), SUB_NODE_ROW(i)("GUID"), SUB_NODE_ROW(i)("RECORD_ID"), SUB_NODE_ROW(i)("NODE_CONFIG_ID"))
If SUB_NODE_ROW(i)("NODE_CAPTION").ToString.Contains("Neuer") Then
Console.WriteLine(SUB_NODE_ROW(i)("NODE_CAPTION"))
End If
Dim SUB_NODE = New TreeNode(SUB_NODE_ROW(i)("NODE_CAPTION"))
SUB_NODE.Tag = NODE_Tag
Dim index As Integer = 0
For Each imgkey As String In TREEVIEW_IMAGELIST.Images.Keys
If SUB_NODE_ROW(i)("NODE_CONFIG_ID") = "34" Then
Console.WriteLine(SUB_NODE_ROW(i)("NODE_CONFIG_ID"))
End If
Dim NODE_CONFIG_ID = SUB_NODE_ROW(i)("NODE_CONFIG_ID")
If imgkey = SUB_NODE_ROW(i)("NODE_CONFIG_ID") Then '& "#" & SUB_NODE_ROW(i)("ENTITY_ID")
'found the key for this node
Exit For
End If
index += 1
Next
SUB_NODE.ImageIndex = index
SUB_NODE.SelectedImageIndex = index
Dim fontfamily, backcolor As String
Dim fontstyle, fontcolor, fontsize As Integer
fontfamily = SUB_NODE_ROW(i)("FONT_FAMILY").ToString
fontsize = CInt(SUB_NODE_ROW(i)("FONT_SIZE"))
fontstyle = SUB_NODE_ROW(i)("FONT_STYLE")
fontcolor = SUB_NODE_ROW(i)("FONT_COLOR")
backcolor = SUB_NODE_ROW(i)("BACK_COLOR")
SUB_NODE.NodeFont = New Font(fontfamily, fontsize, CType(fontstyle, FontStyle))
SUB_NODE.ForeColor = IntToColor(fontcolor)
Try
If backcolor <> String.Empty Then
SUB_NODE.BackColor = Color.FromName(backcolor)
Dim icolor = SUB_NODE.BackColor
End If
Catch ex As Exception
LOGGER.Warn("Unexpected Error in Formatting NodeColor (Subnodes): " & ex.Message)
End Try
CheckSubNodes(DT_TREEVIEW_NODES, SUB_NODE_ROW(i)("GUID"), TREEVIEW_IMAGELIST, SUB_NODE, SUB_NODE_ROW(i)("EXPAND_NODE"))
'Add the node
MY_NODE.Nodes.Add(SUB_NODE)
'If EXPAND = True Then
' MY_NODE.ExpandAll()
'End If
Next
Return MY_NODE
End Function
Private Shared Function FindNode(tncoll As TreeNodeCollection, PARENT_GUID As Integer) As TreeNode
Try
Dim tnFound As TreeNode
For Each tnCurr As TreeNode In tncoll
If tnCurr.Tag.ToString.Contains("#NODE_ID-" & PARENT_GUID) Then
Return tnCurr
End If
tnFound = FindNode(tnCurr.Nodes, PARENT_GUID)
If tnFound IsNot Nothing Then
Return tnFound
End If
Next
Return Nothing
Catch ex As Exception
LOGGER.Warn("Unexpected Error in FindNode (NodeNavigation): " & ex.Message)
MsgBox("Error in FindNode (NodeNavigation):" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
Return Nothing
End Try
End Function
Public Shared Function Return_ENTITY_FOR_TAG(NodeString As String)
If IsNumeric(NodeString) Then
Return NodeString
Else
Try
Dim staticListItems = NodeString.Split("#")
Return staticListItems(1)
Catch ex As Exception
LOGGER.Warn("Unexpected Error in Return_ENTITY_FOR_TAG ('" & NodeString & "'): " & ex.Message)
Return 0
End Try
End If
End Function
Public Shared Function Return_RECORD_forTag(NodeString As String)
Dim sw As New SW("Return_RECORD_forTag")
If IsNumeric(NodeString) Then
Return NodeString
Else
Dim staticListItems = NodeString.Split("#")
If staticListItems(3).Contains("RECORD-ID") Then
Try
Dim _RECORD = staticListItems(3).ToString.Replace("RECORD-ID", "")
If IsNumeric(_RECORD) Then
sw.Done()
Return _RECORD
Else
sw.Done()
Return 0
End If
Catch ex As Exception
sw.Done()
LOGGER.Warn("Unexpected Error in Return_RECORD_forTag ('" & NodeString & "'): " & ex.Message)
Return 0
End Try
Else
sw.Done()
Return 0
End If
End If
End Function
Public Shared Function Return_NODEID_forTag(NodeString As String)
'If NODE_CONFIGURABLE_ID = NODE_CONFIG_ID Then
' vType = "CONFIG_NODE-" & NODE_CONFIG_ID.ToString
'Else
' vType = "NODE-TYPE-" & NODE_CONFIG_ID.ToString
'End If
'If Not IsDBNull(Record) Then
' TagString = vType & "#" & Entity & "#" & "NODE_ID-" & IDNode & "#RECORD-ID" & Record.ToString
'Else
' TagString = vType & "#" & Entity & "#" & "NODE_ID-" & IDNode
'End If
If IsNumeric(NodeString) Then
Return NodeString
Else
Dim staticListItems = NodeString.Split("#")
If staticListItems(2).Contains("NODE_ID") Then
Return staticListItems(2).ToString.Replace("NODE_ID-", "")
Else
Return 0
End If
End If
End Function
Public Shared Function Return_NODE_CONFIG_ID_forTag(NodeString As String)
'If NODE_CONFIGURABLE_ID = NODE_CONFIG_ID Then
' vType = "CONFIG_NODE-" & NODE_CONFIG_ID.ToString
'Else
' vType = "NODE-TYPE-" & NODE_CONFIG_ID.ToString
'End If
'If Not IsDBNull(Record) Then
' TagString = vType & "#" & Entity & "#" & "NODE_ID-" & IDNode & "#RECORD-ID" & Record.ToString
'Else
' TagString = vType & "#" & Entity & "#" & "NODE_ID-" & IDNode
'End If
'NODE-TYPE-17#5#NODE_ID-2
If IsNumeric(NodeString) Then
Return NodeString
Else
Dim staticListItems = NodeString.Split("#")
If staticListItems(0).Contains("NODE-TYPE") Then
Return staticListItems(0).ToString.Replace("NODE-TYPE-", "")
ElseIf staticListItems(0).Contains("CONFIG_NODE") Then
Return staticListItems(0).ToString.Replace("CONFIG_NODE-", "")
Else
Return 0
End If
End If
End Function
End Class