Imports System.Data.SqlTypes Imports System.Data.SqlClient '''Servicekatalog-Verwaltung '''TKB.VV.SLA.clsServiceKatalogDaten '''TKB.VV.SLA.clsServiceKatalogSLATree '''TKB.VV.Utils.Tabellenspalte '''TKB.VV.Utils.MySecurity '''TKB.VV.Utils.MyMessage '''TKB.VV.Sysadmin.DomainTable '''TKB.VV.SLA.clsServiceKatalogTree '''TKB.VV.SLA '''TKB.VV.Sysadmin '''TKB.VV.Utils Public Class frmServicekatalog #Region "Deklarationen" Dim Treeviewdata As New TKB.VV.SLA.clsServiceKatalogTree Dim SLATreeviewdata As New TKB.VV.SLA.clsServiceKatalogSLATree Dim Servicekatalogdaten As New TKB.VV.SLA.clsServiceKatalogDaten Dim SpaltenTitel As New TKB.VV.Utils.Tabellenspalte Dim ServiceKatalogSLAKatalog As TKB.VV.Sysadmin.DomainTable Dim sec As New TKB.VV.Utils.MySecurity Dim msg As New TKB.VV.Utils.MyMessage Dim FormReadonly As Boolean = False Dim FormDataChanged As Boolean = False Dim ForSelect As Boolean = False Dim ServiceKatalognr As Integer = 0 Dim Vertragsleistungsnr As Integer = 0 Dim Neuer_Datensatz As Boolean = False #End Region #Region "Formular" ''' ''' Constructor New ''' ''' Optional ServicekatalogNr = -1 ''' Optional Readonly = false ''' Optional SelectLeistung = falöse ''' Optional Vertragsleistungsnr = 0 ''' Die otionalen Paramter Servicekatalognr, SelectLeistung und Vertragsleistungsnummer werden benötigt, um entweder ein ''' Leistungselement aus dem Vertragselement anzuzeigen bzw. ein Leistungselement auszuwählen Sub New(Optional ByVal Servicekatalognr As Integer = -1, Optional ByVal FormReadonly As Boolean = False, Optional ByVal SelectLeistung As Boolean = False, Optional ByVal Vertragsleistungsnr As Integer = 0, Optional CreateNew as Boolean=False) InitializeComponent() Me.ServiceKatalognr = Servicekatalognr Me.Vertragsleistungsnr = Vertragsleistungsnr Me.FormReadonly = FormReadonly If CreateNew Then Me.Neuer_Datensatz = True End If Me.ForSelect = SelectLeistung If Me.ForSelect = True Then Me.FormReadonly = True End Sub ''' ''' Schliessen des Formulares ''' ''' ''' ''' Private Sub frmServicekatalog_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing If Me.Neuer_Datensatz = True Then Globals.MyEventHanlder.Keine_Leistung_Selektiert(Me.Vertragsleistungsnr) End If If Me.FormReadonly = True Then Exit Sub check_changes() End Sub ''' ''' Formular aufbauen ''' ''' ''' ''' Ist der Paramter SelectLeistung = True, werden die Update-Funktionen des Formulars unterdrückt, dafür werden die Funktionen für die Leistungsauswahl aktiviert Private Sub frmServicekatalog_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Treeviewdata.Load_Tree(Me.treeServiceKatalog, Me.cbselaktiv.CheckState) 'Treeviewdata.Set_Images(Me.treeServiceKatalog) SLATreeviewdata.Load_Tree(Me.TreeSLA) Load_Securitylevel() sec.Set_Form_Security(Me) Me.TSBtnSelect.Visible = False Me.MenuSplitter.Visible = False Me.LeistungÜbernehmenToolStripMenuItem.Visible = False If Me.FormReadonly Then Me.TSBtnSave.Visible = False Me.TSBtnSelect.Visible = False Me.TSBtnCopy.Visible = False Me.TSBtnNew.Visible = False Me.TSBtnDelete.Visible = False Me.MenuSplitter.Visible = False Me.LeistungÜbernehmenToolStripMenuItem.Visible = False End If If Me.ForSelect = True Then Me.TSBtnSelect.Visible = True Me.TSBtnNew.Visible = True Me.TSBtnSelect.Visible = True Me.TSBtnCopy.Visible = False 'Me.TSBtnNew.Visible = False Me.TSBtnDelete.Visible = False Me.MenuSplitter.Visible = True Me.LeistungÜbernehmenToolStripMenuItem.Visible = True End If If Me.TSBtnSave.Enabled = False Or Me.TSBtnSave.Visible = False Then Me.FormReadonly = True Me.ctxMenuTreeServiceKatalog.Enabled = False If Me.ForSelect = True Then Me.LeistungÜbernehmenToolStripMenuItem.Enabled = True End If Else Me.FormReadonly = False End If If Me.ServiceKatalognr <> -1 Then Me.treeServiceKatalog.Enabled = False Me.treeServiceKatalog.SelectedNode = FindNode(Me.treeServiceKatalog.Nodes, ServiceKatalognr, "") Me.treeServiceKatalog.Enabled = True End If If Me.FormReadonly Then sec.Set_Form_Readonly(Me) End Sub ''' ''' Suchen eines Knoten Treeview ''' ''' Nodes des TreeView ''' Tag.Keyvalue ''' Node.Text als Suchbegriff ''' ''' Public Function FindNode(ByVal _nodeCollection As TreeNodeCollection, ByVal SearchVal As Integer, ByVal SearchString As String) As TreeNode Dim tmpNode As TreeNode For Each _child As TreeNode In _nodeCollection If _child.Tag = SearchVal Then Return _child tmpNode = FindNode(_child.Nodes, SearchVal, SearchString) If Not tmpNode Is Nothing Then Return tmpNode End If Next Return Nothing End Function ''' ''' Laden der Securitylevel-Daten in die Combobox ''' ''' Private Sub Load_Securitylevel() Dim seclevel As New TKB.VV.DB.clsSecurityLevel Dim secleveldata As New DataTable seclevel.cpMainConnectionProvider = Globals.conn Globals.conn.OpenConnection() secleveldata = seclevel.SelectAll Globals.conn.CloseConnection(True) Me.cboxSecurityLevel.DataSource = secleveldata Me.cboxSecurityLevel.DisplayMember = "Bezeichnung" Me.cboxSecurityLevel.ValueMember = "SecurityLevelNr" seclevel.Dispose() End Sub Private Sub Show_Data(ByVal Servicekatalognr As Integer) Me.Servicekatalogdaten.Get_Data(Servicekatalognr) Me.txtBezeichnung_intern.Text = Me.Servicekatalogdaten.sBezeichnung_intern.Value Me.txtBezeichnung_extern.Text = Me.Servicekatalogdaten.sBezeichnung_extern.Value Me.txtBemerkung.Text = Me.Servicekatalogdaten.sBemerkung.Value Me.txtmutiert_am.Text = Me.Servicekatalogdaten.daMutiert_am.ToString Me.txterstellt_am.Text = Me.Servicekatalogdaten.daErstellt_am.ToString Me.txtMutierer.Text = Me.Servicekatalogdaten.iMutierer.Value Me.cbaktiv.Checked = Me.Servicekatalogdaten.bAktiv.Value = True Me.cbextern.Checked = Me.Servicekatalogdaten.bExtern.Value = True Me.cboxSecurityLevel.SelectedValue = Me.Servicekatalogdaten.iSecurityLevelNr.Value Me.FormDataChanged = False If Me.Servicekatalogdaten.iParentID > 0 Then Me.cboxSecurityLevel.Enabled = False Else Me.cboxSecurityLevel.Enabled = True Refresh_SLATable() End Sub ''' ''' Prüfung, ob Verbindungstabelle geändert wurde. ''' ''' Private Sub check_changes() If Me.FormReadonly Then Exit Sub Dim msgres As MsgBoxResult If Me.ServiceKatalogSLAKatalog.Tabledata.HasChanges Then msgres = msg.Show_MessageYesNo(5) If msgres = MsgBoxResult.Yes Then Me.ServiceKatalogSLAKatalog.Save_Data() End If End If If Me.FormDataChanged Then msgres = msg.Show_MessageYesNo(3) If msgres = MsgBoxResult.Yes Then save_katalogdata() End If End If End Sub Private Sub NeuerKatalogToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NeuerKatalogToolStripMenuItem.Click Dim Katalogname As String = InputBox("Katalogname", "Neuer Katalog") If Katalogname <> "" Then Dim key As Integer = Me.Servicekatalogdaten.Insert_Katalogelement(Katalogname, 0) Treeviewdata.Load_Tree(Me.treeServiceKatalog, Me.cbselaktiv.CheckState) End If End Sub Private Sub NeueLeistungToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NeueLeistungToolStripMenuItem.Click Dim Katalogname As String = InputBox("Leistungsname", "Neue Leistung") If Katalogname <> "" Then Dim key As Integer = Me.Servicekatalogdaten.Insert_Katalogelement(Katalogname, Me.treeServiceKatalog.SelectedNode.Tag) Treeviewdata.Load_Tree(Me.treeServiceKatalog, Me.cbselaktiv.CheckState) End If End Sub Private Sub save_katalogdata() If Me.Servicekatalogdaten.bAktiv.Value = True And Me.cbaktiv.Checked = False Then If msg.Show_MessageYesNo(700) = MsgBoxResult.No Then Exit Sub End If Me.Servicekatalogdaten.sBezeichnung_intern = New SqlString(CType(Me.txtBezeichnung_intern.Text, String)) Me.Servicekatalogdaten.sBezeichnung_extern = New SqlString(CType(Me.txtBezeichnung_extern.Text, String)) Me.Servicekatalogdaten.sBemerkung = New SqlString(CType(Me.txtBemerkung.Text, String)) Me.Servicekatalogdaten.daMutiert_am = New SqlDateTime(CType(Now, DateTime)) Me.Servicekatalogdaten.iMutierer = New SqlInt32(CType(Globals.clsmitarbeiter.iMitarbeiternr.Value, Int32)) Me.Servicekatalogdaten.bAktiv = New SqlBoolean(CType(Me.cbaktiv.Checked, Boolean)) Me.Servicekatalogdaten.bExtern = New SqlBoolean(CType(Me.cbextern.Checked, Boolean)) Me.Servicekatalogdaten.iSecurityLevelNr = New SqlInt32(CType(Me.cboxSecurityLevel.SelectedValue, Int32)) Me.Servicekatalogdaten.Save_Data() If Me.cbaktiv.Checked Then Me.treeServiceKatalog.SelectedNode.NodeFont = Me.Treeviewdata.fnt_normal Else Me.Servicekatalogdaten.Delete_Servicekatalog() Me.treeServiceKatalog.SelectedNode.NodeFont = Me.Treeviewdata.fnt_Strikeout Delete_all_Childs(Me.treeServiceKatalog.SelectedNode.Nodes) End If End Sub Private Sub Delete_all_Childs(ByVal nodes As TreeNodeCollection) For Each tn As TreeNode In nodes Me.Servicekatalogdaten.Delete_Servicekatalog(tn.Tag) tn.NodeFont = Me.Treeviewdata.fnt_Strikeout Delete_all_Childs(tn.Nodes) Next End Sub Private Sub txtBezeichnung_intern_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtBezeichnung_intern.TextChanged, txtBezeichnung_extern.TextChanged, txtBemerkung.TextChanged, cbaktiv.CheckedChanged, cboxSecurityLevel.TextChanged, cbextern.CheckedChanged, cboxSecurityLevel.TextUpdate If sender.name = "cbaktiv" Then Try If cbaktiv.Checked = True And Me.treeServiceKatalog.SelectedNode.Parent.NodeFont.Strikeout = True Then Me.cbaktiv.Checked = False msg.show_standardmessage(601, MsgBoxStyle.Critical) Exit Sub End If Catch End Try End If Me.FormDataChanged = True End Sub #End Region #Region "TreeServiceKatalog" Private Sub treeServiceKatalog_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles treeServiceKatalog.AfterSelect Show_Data(Me.treeServiceKatalog.SelectedNode.Tag) Refresh_Details() End Sub Private Sub treeServiceKatalog_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles treeServiceKatalog.MouseDown Try check_changes() Dim selectPoint As New System.Drawing.Point() Dim mouseEvents As MouseEventArgs mouseEvents = e selectPoint.Y = mouseEvents.Y selectPoint.X = mouseEvents.X Me.treeServiceKatalog.SelectedNode = Me.treeServiceKatalog.GetNodeAt(selectPoint) If IsNothing(Me.treeServiceKatalog.SelectedNode) Then Me.NeueLeistungToolStripMenuItem.Enabled = False Else If Me.TSBtnSave.Enabled = True Then Me.NeueLeistungToolStripMenuItem.Enabled = True End If Catch ex As Exception MsgBox(ex.Message) End Try End Sub 'Public Function FindNode(ByVal _nodeCollection As TreeNodeCollection, ByVal SearchVal As Integer, ByVal SearchString As String) As TreeNode ' Dim tmpNode As TreeNode ' For Each _child As TreeNode In _nodeCollection ' If _child.Tag = SearchVal Then Return _child ' tmpNode = FindNode(_child.Nodes, SearchVal, SearchString) ' If Not tmpNode Is Nothing Then ' Return tmpNode ' End If ' Next ' Return Nothing 'End Function #End Region #Region "SLA" Private Sub Refresh_SLATable() Try check_changes() Me.ServiceKatalogSLAKatalog.dispose() Catch End Try Dim keyvalue As String = "" keyvalue = Me.treeServiceKatalog.SelectedNode.Tag Me.C1DatenSLA.Enabled = False Me.ServiceKatalogSLAKatalog = New TKB.VV.Sysadmin.DomainTable("servicekatalog_slakatalog", keyvalue, Globals.clsmitarbeiter.iMitarbeiternr.Value) Me.C1DatenSLA.DataSource = ServiceKatalogSLAKatalog.Tabledata Me.C1DatenSLA.DataMember = ServiceKatalogSLAKatalog.Tabledata.Tables(0).TableName Me.SpaltenTitel.Spaltentitel_aktualisieren(Me.C1DatenSLA, "servicekatalog_slakatalog", Me.ServiceKatalogSLAKatalog.Tabledata) Me.C1DatenSLA.Enabled = True End Sub ''' ''' Bei inaktiven Einträgen Schrift "grau" setzen und durchstreichen ''' ''' ''' ''' Private Sub C1Vertragselemente_FetchRowStyle(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FetchRowStyleEventArgs) Handles C1DatenSLA.FetchRowStyle Try If Me.C1DatenSLA.Columns("aktiv").CellValue(e.Row) = False Then Dim FNT As Font = e.CellStyle.Font e.CellStyle.Font = New Font(FNT, FontStyle.Strikeout) e.CellStyle.ForeColor = Color.Gray End If Catch End Try End Sub #End Region #Region "SLA" Private Sub TreeSLA_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles TreeSLA.DoubleClick If TreeSLA.SelectedNode.Tag <> 0 And Not Me.FormReadonly Then Me.ServiceKatalogSLAKatalog.Insert_Bottom_Table("ServiceKatalognr", Me.treeServiceKatalog.SelectedNode.Tag, "slakatalognr", Me.TreeSLA.SelectedNode.Tag) Me.ServiceKatalogSLAKatalog.Save_Data() Refresh_SLATable() End If End Sub #End Region #Region "Toolstrip" ''' ''' Schliessen-Button ''' ''' ''' ''' Private Sub TSBtnQuit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnQuit.Click Me.Close() End Sub ''' ''' Save Button ''' ''' ''' ''' Private Sub TSBtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnSave.Click If Me.FormDataChanged Then save_katalogdata() Me.FormDataChanged = False End If End Sub #End Region #Region "Menu" Private Sub BeendenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BeendenToolStripMenuItem.Click Me.Close() End Sub #End Region ''' ''' Gewählter Servicekatalog übergeben ''' ''' ''' ''' Private Sub TSBtnSelect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnSelect.Click Me.Neuer_Datensatz = False Globals.MyEventHanlder.Leistung_Selektiert(Me.Vertragsleistungsnr, Me.treeServiceKatalog.SelectedNode.Tag) Me.Close() End Sub ''' ''' Context-Menueintrag im ctxMenuTreeServicekatalog für die Übernahme der Leistung ''' ''' ''' ''' Private Sub LeistungÜbernehmenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LeistungÜbernehmenToolStripMenuItem.Click TSBtnSelect_Click(sender, e) End Sub ''' ''' Register-Wechsel im TabControl ''' ''' ''' ''' Private Sub tabctrlDetails_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles tabctrlDetails.SelectedIndexChanged Refresh_Details() End Sub ''' ''' Registerlaschen in TabCtrlDetails aktualisieren ''' ''' Private Sub Refresh_Details() Select Case Me.tabctrlDetails.SelectedTab.Text Case "Vertragsbeziehungen" Refresh_Vertragsbeziehungen() Case Else End Select End Sub #Region "Vertragsbeziehungen" ''' ''' Services aktualiseren ''' ''' Private Sub Refresh_Vertragsbeziehungen() Dim filtertext As String = "none" Try filtertext = Me.C1Vertragsbeziehungen.Columns("Aktiv").FilterText Catch ex As Exception End Try Dim bm As Integer = 0 bm = Me.C1Vertragsbeziehungen.Bookmark Me.C1Vertragsbeziehungen.Enabled = False Me.Servicekatalogdaten.Get_Vertragsbeziehungen(Me.C1Vertragsbeziehungen, Me.treeServiceKatalog.SelectedNode.Tag) Me.SpaltenTitel.Spaltentitel_aktualisieren(Me.C1Vertragsbeziehungen, "Vertragsleistung_Servicekatalog", Me.Servicekatalogdaten.Vertragsbeziehungen.Tabledata) sec.Set_Form_Security(Me) If filtertext <> "none" Then Me.C1Vertragsbeziehungen.Columns("Aktiv").FilterText = filtertext Try Me.C1Vertragsbeziehungen.Bookmark = bm Catch ex As Exception End Try Me.C1Vertragsbeziehungen.Enabled = True End Sub #End Region Private Sub TSBtnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnDelete.Click If msg.Show_MessageYesNo(510) = MsgBoxResult.Yes Then Me.cbaktiv.Checked = False Me.save_katalogdata() 'Dim i As Integer = Me.treeServiceKatalog.SelectedNode.Tag 'Me.Servicekatalogdaten.Delete_Servicekatalog(Me.treeServiceKatalog.SelectedNode.Tag) 'Me.treeServiceKatalog.SelectedNode.NodeFont = Me.Treeviewdata.fnt_Strikeout 'Me.Delete_all_Childs(Me.treeServiceKatalog.SelectedNode.Nodes) 'Treeviewdata.Load_Tree(Me.treeServiceKatalog) 'Treeviewdata.Set_Images(Me.treeServiceKatalog) 'Me.treeServiceKatalog.SelectedNode = FindNode(Me.treeServiceKatalog.Nodes, i, "") 'Me.treeServiceKatalog.SelectedNode.NodeFont = Me.Treeviewdata.fnt_Strikeout End If End Sub Private Sub BtnAddSLA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAddSLA.Click TreeSLA_DoubleClick(sender, e) End Sub Private Sub cbselaktiv_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbselaktiv.CheckStateChanged Treeviewdata.Load_Tree(Me.treeServiceKatalog, Me.cbselaktiv.CheckState) End Sub Private Sub C1Vertragsbeziehungen_FetchRowStyle(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FetchRowStyleEventArgs) Handles C1Vertragsbeziehungen.FetchRowStyle Try If Me.C1Vertragsbeziehungen.Columns("aktiv").CellValue(e.Row) = False Then Dim FNT As Font = e.CellStyle.Font e.CellStyle.Font = New Font(FNT, FontStyle.Strikeout) e.CellStyle.ForeColor = Color.Gray End If Catch End Try End Sub ''' ''' Neuer Service erfassen ''' ''' ''' ''' Private Sub TSBtnNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnNew.Click Dim f As New frmServicekatalog f.ShowDialog() frmServicekatalog_Load(sender, e) End Sub End Class