You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ITSM/.svn/pristine/23/23b952cd4a8b7e3035d3a1a6ac5...

379 lines
19 KiB

Imports C1.Win.C1TrueDBGrid
Imports System
Imports System.Data
Imports System.Data.SqlTypes
Imports System.Data.SqlClient
Namespace TKB.VV.Vertrag
Public Class clsVertragsuebersicht_Strukturen
Dim TreeData As New DataTable
Public fnt_Strikeout As Font
Public fnt_normal As Font
Dim SelectionType As String
''' <summary>
''' Treedaten auselsen
''' </summary>
''' <param name="tree"></param>
''' <param name="SelectionType">Neu: Nur noc Selectiontype "Vertragspartner"</param>
''' <param name="Aktiv">1: Nur aktive Partner
''' 0: Alle partner</param>
''' <param name="suchtype">1: Suche nach Vertragspartner
''' 2: Suche nach Vertragselement</param>
''' <param name="suchstring"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function Get_Struktur(ByRef tree As TreeView, Optional ByVal SelectionType As Integer = 0, Optional ByVal Aktiv As Boolean = True, Optional ByVal suchtype As Integer = 0, Optional ByVal suchstring As String = "", Optional ByVal partnernr As Integer = 0)
Me.TreeData = Get_Treedata(SelectionType, Aktiv, suchtype, suchstring, partnernr)
Select Case SelectionType
Case 0
Me.SelectionType = "Vertragspartner"
Case 1
Me.SelectionType = "Vertragstyp"
Case Else
Me.SelectionType = "Unknown"
End Select
Load_Tree(tree)
End Function
''' <summary>
''' Auslesen der Partner für die Vertragsuebersicht
''' </summary>
''' <param name="Selectiontype">Vertragspartner oder Vertragstyp</param>
''' <param name="aktiv">Aktiv=0</param>
''' <returns></returns>
''' <remarks></remarks>
Private Function Get_Treedata(ByVal Selectiontype As Integer, ByVal aktiv As Boolean, Optional ByVal suchtype As Integer = 0, Optional ByVal suchstring As String = "", Optional ByVal Partnernr As Integer = 0) As DataTable
Dim scmCmdToExecute As SqlCommand = New SqlCommand()
Dim dtToReturn As DataTable = New DataTable()
Dim sdaAdapter As SqlDataAdapter = New SqlDataAdapter(scmCmdToExecute)
scmCmdToExecute.CommandText = "dbo.sp_vertragsuebersicht_get_TreeRoot"
scmCmdToExecute.CommandType = CommandType.StoredProcedure
scmCmdToExecute.Connection = conn.scoDBConnection
Try
scmCmdToExecute.Parameters.Add(New SqlParameter("@mitarbeiternr", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, Globals.clsmitarbeiter.iMitarbeiternr.Value))
scmCmdToExecute.Parameters.Add(New SqlParameter("@SelectionType", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, Selectiontype))
scmCmdToExecute.Parameters.Add(New SqlParameter("@Aktiv", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, aktiv))
scmCmdToExecute.Parameters.Add(New SqlParameter("@Suchtype", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, suchtype))
scmCmdToExecute.Parameters.Add(New SqlParameter("@SuchString", SqlDbType.VarChar, 255, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, suchstring))
scmCmdToExecute.Parameters.Add(New SqlParameter("@partnernr", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, partnernr))
sdaAdapter.Fill(dtToReturn)
Return dtToReturn
Catch ex As Exception
Throw New Exception("clsVertragsuebersicht::" & scmCmdToExecute.CommandText & "::Error occured." & ex.Message, ex)
Finally
scmCmdToExecute.Dispose()
sdaAdapter.Dispose()
End Try
End Function
''' <summary>
''' Treeview laden und je eintrag einen "Dummy-Eintrag" erstellen
''' </summary>
''' <param name="Tree"></param>
''' <returns></returns>
''' <remarks></remarks>
Private Function Load_Tree(ByRef Tree As TreeView)
fnt_Strikeout = New System.Drawing.Font(Tree.Font.FontFamily, Tree.Font.Size, FontStyle.Strikeout)
fnt_normal = New System.Drawing.Font(Tree.Font.FontFamily, Tree.Font.Size, FontStyle.Regular)
Tree.Enabled = False
Tree.Nodes.Clear()
For Each dr As DataRow In Me.TreeData.Rows
Dim tn As New TreeNode
tn.Text = dr.Item("Description")
tn.Tag = New Treenode_Descriptor(Me.SelectionType, dr.Item("KeyValue"), dr.Item("KeyValue"), dr.Item("KeyValue"))
Select Case Me.SelectionType
Case "Vertragspartner"
If dr.Item("aktiv") = True Then
tn.ImageIndex = 0
tn.SelectedImageIndex = 0
tn.StateImageIndex = 0
Else
tn.ImageIndex = 6
tn.SelectedImageIndex = 6
tn.StateImageIndex = 6
End If
Case "Vertragstyp"
tn.ImageIndex = 1
tn.SelectedImageIndex = 1
tn.StateImageIndex = 1
End Select
Tree.Nodes.Add(tn)
Dim subtn As New TreeNode
subtn.Tag = New Treenode_Descriptor("", -99, 0, 0)
tn.Nodes.Add(subtn)
Next
Tree.Enabled = True
End Function
Dim xVertragspartnernr As Integer
''' <summary>
''' Datenstruktur für den Tree lasen
''' </summary>
''' <param name="Node">Parent-Node</param>
''' <returns></returns>
''' <remarks>Abhängig vom Type wird die Struktur nach Vertragspartner oder Vertragstyp aufgebaut</remarks>
Public Function Load_SubStruktur(ByRef Node As TreeNode, ByVal Details As Integer, ByVal Suchstring As String)
Dim x As Treenode_Descriptor = Node.Tag
Dim substrukturdata As New DataTable
Select Case x.Type
Case "Vertragspartner"
Me.xVertragspartnernr = x.Vertragspartnernr
substrukturdata = Get_SubStruktur(0, x.Vertragspartnernr, Details, suchstring)
Case "Vertragstyp"
substrukturdata = Get_SubStruktur(x.Vertragstypnr, 0, Details, suchstring)
End Select
Update_Node(substrukturdata, Node, x.Type, Details)
End Function
''' <summary>
''' Parent-Beziehung herstellen und Struktur abfüllen
''' </summary>
''' <param name="oSourceData"></param>
''' <param name="node"></param>
''' <remarks></remarks>
Private Sub Update_Node(ByVal oSourceData As DataTable, ByRef node As TreeNode, ByVal type As String, ByVal Details As Integer)
If Not (oSourceData Is Nothing) Then
Dim oView As DataView = oSourceData.DefaultView
Dim oTable As DataTable = oView.Table
Dim oDS As DataSet = New DataSet()
oDS.Tables.Add(oTable.Copy())
If oDS.Relations.Contains("SelfRefenceRelation") = False Then
oDS.Relations.Add("SelfRefenceRelation", _
oDS.Tables(0).Columns("Vertragselementnr"), _
oDS.Tables(0).Columns("Parentid"))
End If
oTable.Dispose()
oTable = Nothing
LoadNode(oDS, node, type, Details)
oDS.Dispose()
oDS = Nothing
End If
End Sub
''' <summary>
''' Tree aufbauen
''' </summary>
''' <param name="oDS">Input-Dataset</param>
''' <param name="oNode">Aktueller Node</param>
''' <param name="type">Type Vertragspartner oder Vertragstyp</param>
''' <remarks></remarks>
Private Sub LoadNode(ByVal oDS As DataSet, ByRef oNode As TreeNode, ByVal type As String, ByVal Details As Integer)
'Dim oTreeView As TreeView = New TreeView()
Dim oDataRow As DataRow
For Each oDataRow In oDS.Tables(0).Rows
If Not oDataRow.IsNull("Parentid") Then
If oDataRow.Item("Parentid") = 0 Then
'If oDataRow.IsNull("Parentid") Then
Dim oNode1 As New TreeNode()
oNode1.Text = oDataRow("Bezeichnung").ToString()
Select Case type
Case "Vertragspartner"
oNode1.Tag = New Treenode_Descriptor("Vertragstyp", oDataRow("vertragselementnr").ToString, xVertragspartnernr, oDataRow("vertragstypnr").ToString)
If oDataRow("Aktiv") = 0 Then
oNode1.ImageIndex = 7
oNode1.SelectedImageIndex = 7
oNode1.StateImageIndex = 7
oNode1.NodeFont = Me.fnt_Strikeout
Else
oNode1.NodeFont = Me.fnt_normal
oNode1.ImageIndex = 1
oNode1.SelectedImageIndex = 1
oNode1.StateImageIndex = 1
End If
Case "Vertragstyp"
If oDataRow("aktiv") = True Then
oNode1.Tag = New Treenode_Descriptor("Vertragspartner", oDataRow("vertragselementnr").ToString, xVertragspartnernr, oDataRow("vertragstypnr").ToString)
oNode1.ImageIndex = 0
oNode1.SelectedImageIndex = 0
oNode1.StateImageIndex = 0
Else
oNode1.Tag = New Treenode_Descriptor("Vertragspartner", oDataRow("vertragselementnr").ToString, xVertragspartnernr, oDataRow("vertragstypnr").ToString)
oNode1.ImageIndex = 4
oNode1.SelectedImageIndex = 4
oNode1.StateImageIndex = 4
End If
End Select
oNode.Nodes.Add(oNode1)
RecursivelyLoadNode(oDataRow, oNode1, type, Details)
End If
End If
Next oDataRow
oDS.Dispose()
oDS = Nothing
End Sub
''' <summary>
''' Child-Nodes hinzufügen
''' </summary>
''' <param name="oDataRow"></param>
''' <param name="oNode"></param>
''' <remarks></remarks>
Private Sub RecursivelyLoadNode(ByVal oDataRow As DataRow, ByRef oNode As TreeNode, ByVal type As String, ByVal Details As Integer)
Dim oChildRow As DataRow
For Each oChildRow In oDataRow.GetChildRows("SelfRefenceRelation")
Dim oChildNode As New TreeNode()
oChildNode.Text = oChildRow("Bezeichnung").ToString()
oChildNode.Tag = New Treenode_Descriptor("Vertragselement", oChildRow("Vertragselementnr").ToString(), xVertragspartnernr, oDataRow("vertragstypnr").ToString)
If oChildRow("Aktiv") = 0 Then
oChildNode.ImageIndex = 8
oChildNode.SelectedImageIndex = 8
oChildNode.StateImageIndex = 8
oChildNode.NodeFont = Me.fnt_Strikeout
Else
oChildNode.ImageIndex = 2
oChildNode.SelectedImageIndex = 2
oChildNode.StateImageIndex = 2
oChildNode.NodeFont = Me.fnt_normal
End If
oNode.Nodes.Add(oChildNode)
RecursivelyLoadNode(oChildRow, oChildNode, type, Details)
Next oChildRow
End Sub
''' <summary>
''' Laden der Substruktur
''' </summary>
''' <param name="Vertragspartnernr">Nummer des aktuellen Vertragspartners</param>
''' <returns></returns>
''' <remarks></remarks>
Private Function Get_SubStruktur(ByVal vertragstypnr As Integer, ByVal Vertragspartnernr As Integer, ByVal Details_anzeigen As Integer, ByVal Suchstring As String) As DataTable
Dim scmCmdToExecute As SqlCommand = New SqlCommand()
Dim dtToReturn As DataTable = New DataTable()
Dim sdaAdapter As SqlDataAdapter = New SqlDataAdapter(scmCmdToExecute)
scmCmdToExecute.CommandText = "dbo.sp_vertragsuebersicht_get_struktur"
scmCmdToExecute.CommandType = CommandType.StoredProcedure
scmCmdToExecute.Connection = conn.scoDBConnection
Try
scmCmdToExecute.Parameters.Add(New SqlParameter("@vertragstypnr", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, vertragstypnr))
scmCmdToExecute.Parameters.Add(New SqlParameter("@vertragspartnernr", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, Vertragspartnernr))
scmCmdToExecute.Parameters.Add(New SqlParameter("@mitarbeiternr", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, Globals.clsmitarbeiter.iMitarbeiternr.Value))
scmCmdToExecute.Parameters.Add(New SqlParameter("@Details", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, Details_anzeigen))
scmCmdToExecute.Parameters.Add(New SqlParameter("@Suchstring", SqlDbType.VarChar, 255, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, Suchstring))
sdaAdapter.Fill(dtToReturn)
Return dtToReturn
Catch ex As Exception
Throw New Exception("clsVertragsuebersicht::" & scmCmdToExecute.CommandText & "::Error occured." & ex.Message, ex)
Finally
scmCmdToExecute.Dispose()
sdaAdapter.Dispose()
End Try
End Function
''' <summary>
''' Vertrasgdetail abhängig des gewählten Nodes auslesen
''' </summary>
''' <param name="SelectedTag"></param>
''' <param name="SelNachVertragstyp"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function Update_Vertragsuebersicht(ByVal SelectedTag As Object, Optional ByVal SelNachVertragstyp As Boolean = False, Optional ByVal Suchstring As String = "") As DataTable
Dim x As Treenode_Descriptor = SelectedTag
Select Case x.Type
Case "Vertragspartner"
Return Get_Vertragsdetails(x.Type, 0, x.Vertragspartnernr, suchstring)
Case "Vertragstyp"
If SelNachVertragstyp = True Then
Return Get_Vertragsdetails(x.Type, x.Vertragstypnr, 0, suchstring)
Else
Return Get_Vertragsdetails(x.Type, x.Vertragstypnr, x.Vertragspartnernr, Suchstring)
End If
Case "Vertragselement"
Return Get_Vertragsdetails(x.Type, x.Keyvalue, x.Vertragspartnernr, Suchstring)
End Select
End Function
''' <summary>
''' Laden der Substruktur
''' </summary>
''' <param name="Vertragspartnernr">Nummer des aktuellen Vertragspartners</param>
''' <returns></returns>
''' <remarks></remarks>
Private Function Get_Vertragsdetails(ByVal Elementtyp As String, ByVal EntryRoot As Integer, ByVal Vertragspartnernr As Integer, ByVal Suchstring As String)
Dim scmCmdToExecute As SqlCommand = New SqlCommand()
Dim dtToReturn As DataTable = New DataTable()
Dim sdaAdapter As SqlDataAdapter = New SqlDataAdapter(scmCmdToExecute)
scmCmdToExecute.CommandText = "dbo.sp_vertragsuebersicht_get_Details"
scmCmdToExecute.CommandType = CommandType.StoredProcedure
scmCmdToExecute.Connection = conn.scoDBConnection
Try
scmCmdToExecute.Parameters.Add(New SqlParameter("@Elementtyp", SqlDbType.VarChar, 255, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, Elementtyp))
scmCmdToExecute.Parameters.Add(New SqlParameter("@EntryRoot", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, EntryRoot))
scmCmdToExecute.Parameters.Add(New SqlParameter("@vertragspartnernr", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, Vertragspartnernr))
scmCmdToExecute.Parameters.Add(New SqlParameter("@mitarbeiternr", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, Globals.clsmitarbeiter.iMitarbeiternr.Value))
scmCmdToExecute.Parameters.Add(New SqlParameter("@suchstring", SqlDbType.VarChar, 255, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, Suchstring))
sdaAdapter.Fill(dtToReturn)
Return dtToReturn
Catch ex As Exception
Throw New Exception("clsVertragsuebersicht::" & scmCmdToExecute.CommandText & "::Error occured." & ex.Message, ex)
Finally
scmCmdToExecute.Dispose()
sdaAdapter.Dispose()
End Try
End Function
End Class
''' <summary>
''' Treenode-Descriptor zur Befüllung des Tree-Node-Tags
''' </summary>
''' <remarks>Treenode-Tags werden mit den 2 Elementen (Type und Keyvalue) befüllt:
''' Type: Vertragspartner, Vertragstyp
''' Keyvalue: Primary-Key des Elementes</remarks>
Public Class Treenode_Descriptor
Dim m_type As String
Property Type() As String
Get
Return m_type
End Get
Set(ByVal value As String)
m_type = value
End Set
End Property
Dim m_keyvalue As Integer
Property Keyvalue() As Integer
Get
Return m_keyvalue
End Get
Set(ByVal value As Integer)
m_keyvalue = value
End Set
End Property
Dim m_vertragspartnernr As Integer
Property Vertragspartnernr() As Integer
Get
Return m_vertragspartnernr
End Get
Set(ByVal value As Integer)
m_vertragspartnernr = value
End Set
End Property
Dim m_vertragstypnr As Integer
Property Vertragstypnr() As Integer
Get
Return m_vertragstypnr
End Get
Set(ByVal value As Integer)
m_vertragstypnr = value
End Set
End Property
Sub New(ByVal Type As String, ByVal Keyvalue As Integer, ByVal Vertragspartnernr As Integer, ByVal vertragstypnr As Integer)
Me.Type = Type
Me.Keyvalue = Keyvalue
Me.Vertragspartnernr = Vertragspartnernr
Me.Vertragstypnr = vertragstypnr
End Sub
End Class
End Namespace