Files
ITSM/___Archiv/ITSM - Kopie/Vertragsverwaltung/LifeCycle/frmLifeCycle.vb
2021-04-20 09:35:24 +02:00

520 lines
20 KiB
VB.net

Imports System
Imports System.Data
Imports System.Data.SqlTypes
Imports System.Data.SqlClient
Public Class frmLifeCycle
Dim clslc As New TKB.VV.Lifecycle.clslifeCycle
Dim Produkt As New TKB.VV.Lifecycle.clsProdukt
Dim msg As New TKB.VV.Utils.MyMessage
Dim FormReadonly As Boolean = False
Dim FormDataChanged As Boolean = False
Dim IsNewProdukt As Boolean = False
Dim SpaltenTitel As New TKB.VV.Utils.Tabellenspalte
Dim sec As New TKB.VV.Utils.MySecurity
Dim WithEvents evh As Generic_Event_Handler = Globals.Generic_Event_Handler
#Region "Closing / Check_Changes"
''' <summary>
''' Schliessen des Formulars
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub FormularClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If Me.FormReadonly = True Then Exit Sub
If Check_Changes() = False Then
e.Cancel = True
Else
Produkt.Dispose()
Me.Dispose()
End If
End Sub
''' <summary>
''' Prüfung, ob Datenänderungen vorgenommen wurden.
''' </summary>
''' <remarks></remarks>
Private Function Check_Changes() As Boolean
If Me.FormReadonly Then
Return True
Exit Function
End If
Dim msgres As MsgBoxResult
If Me.FormDataChanged Then
msgres = msg.Show_MessageYesNoCancel(3)
Select Case msgres
Case MsgBoxResult.Yes
Save_data()
Return True
Case MsgBoxResult.Cancel
Return False
Case MsgBoxResult.No
Me.FormDataChanged = False
Return True
End Select
Else
Return True
End If
End Function
#End Region
#Region "Formular"
Sub New()
InitializeComponent()
Me.CtlPhasen1.Connectionstring = Globals.sConnectionString
End Sub
Private Sub dtPicker_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles dtAbgeloestAm.Leave, _
dtEntscheidungsterminNachfolgeprodukt.Leave, dtNaechsteUeberpruefung.Leave
Dim s As String
Dim obj As DateTimePicker = sender
s = obj.Name
End Sub
#End Region
#Region "Buttons/Menu"
''' <summary>
''' Formular schliessen
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub TSBtnQuit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnQuit.Click
Me.Close()
End Sub
''' <summary>
''' Sicherungs-Button betätigt
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub TSBtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnSave.Click
Me.Save_data()
CtlPhasen1.Save_Phasen()
Me.TreeStruktur.SelectedNode.Text = Produkt.sBezeichnung.Value
' Me.txtmutiert_am.Text = Me.Applikation.daMutiert_am.ToString
Me.FormDataChanged = False
TreeStruktur.Nodes.Sort()
End Sub
''' <summary>
''' Neuer Datensatz erstellen
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub TSBtnNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnNew.Click
If Me.TreeStruktur.SelectedNode.Tag < 1 Then
msg.show_standardmessage(896, MsgBoxStyle.Critical)
Exit Sub
End If
If Me.Check_Changes = False Then Exit Sub
Me.Get_Data(Me.Produkt.Add_New)
Me.IsNewProdukt = True
End Sub
''' <summary>
''' Aktueller Datensatz inaktivieren
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub TSBtnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnDelete.Click
If Me.TreeStruktur.SelectedNode.Tag < 1 Then
msg.show_standardmessage(896, MsgBoxStyle.Critical)
Exit Sub
End If
If msg.Show_MessageYesNo(295) = MsgBoxResult.Yes Then
Me.Produkt.Delete_Produkt(Me.TreeStruktur.SelectedNode.Tag)
'TSBtnSuche_Click(sender, e)
Me.TreeStruktur.SelectedNode = Me.TreeStruktur.Nodes(0)
'Me.Close()
End If
End Sub
#End Region
#Region "Eventhandler ChangeEreignisse"
''' <summary>
''' Allg Eventhandler für Chanage-Ereignise festlegen
''' </summary>
''' <param name="Container"></param>
''' <remarks></remarks>
Private Sub AddChanges(ByVal Container As Control)
Dim l As New List(Of Control)
Me.GetControl(Me, "*", l)
Dim evh As EventHandler = AddressOf ChangesMade
For Each c As Control In l
If TypeOf c Is TextBox Then
Dim ctl As TextBox = c
AddHandler ctl.TextChanged, evh
End If
If TypeOf c Is MaskedTextBox Then
Dim ctl As MaskedTextBox = c
AddHandler ctl.TextChanged, evh
End If
If TypeOf c Is ComboBox Then
Dim ctl As ComboBox = c
AddHandler ctl.SelectedValueChanged, evh
End If
If TypeOf c Is RichTextBox Then
Dim ctl As RichTextBox = c
AddHandler ctl.TextChanged, evh
End If
If TypeOf c Is CheckBox Then
If c.Name <> "cboxNurAktive" Then
Dim ctl As CheckBox = c
AddHandler ctl.CheckedChanged, evh
End If
End If
If TypeOf c Is DateTimePicker Then
Dim ctl As DateTimePicker = c
AddHandler ctl.ValueChanged, evh
End If
If TypeOf c Is CheckedListBox Then
Dim ctl As CheckedListBox = c
AddHandler ctl.ItemCheck, AddressOf ChecketListBoxChange
End If
Next
End Sub
''' <summary>
''' Envent-Handler für Change-Ereignisse
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub ChangesMade(ByVal sender As Object, ByVal e As System.EventArgs)
Me.FormDataChanged = True
Dim objtype As System.Type = sender.GetType
If objtype.Name = "MaskedTextBox" Then
Dim o As MaskedTextBox = sender
If o.Text = "01.01.1900" Then o.Text = " . . "
End If
End Sub
Private Sub ChecketListBoxChange(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemCheckEventArgs)
Me.FormDataChanged = True
End Sub
''' <summary>
''' Sucht in den Base-Controls sämtliche Controls mit dem Namen in "Key" (Wildcards * möglich) und listet
''' die gefundnen Controls in der Liste L zur weiteren Bearbeitung
''' </summary>
''' <param name="BaseControl">Base-Contrlo (z.B. aktuelles Formular</param>
''' <param name="Key">Schlüssel welcher gesucht werden soll</param>
''' <param name="L">Liste der gefundenen Objekte</param>
''' <returns>True wenn eines oder mehr Controls gefunden wurden, false wenn kein Control gefunden wurde.
''' </returns>
''' <remarks></remarks>
Private Function GetControl(ByVal BaseControl As Control, ByVal Key As String, ByRef L As List(Of Control), Optional ByVal ReturnAtFirstElement As Boolean = False) As Boolean
If L Is Nothing Then L = New List(Of Control)
Dim Gut As Boolean
Dim ReturnFlag As Boolean = False
If Key IsNot Nothing Then Key = Key.ToLower
If BaseControl.HasChildren = True Then
For Each ctl As Control In BaseControl.Controls
Gut = False
If Key Is Nothing Then
Gut = True
Else
If ctl.Name.Length >= Key.Length Then
Key = Key.ToLower
If Key.StartsWith("*") Then
If Key.Substring(1) = ctl.Name.ToLower.Substring(ctl.Name.Length - (Key.Length - 1), Key.Length - 1) Then Gut = True
ElseIf Key.EndsWith("*") Then
If Key.Substring(0, Key.Length - 1) = ctl.Name.ToLower.Substring(0, Key.Length - 1) Then Gut = True
Else
If Key = ctl.Name.ToLower Then Gut = True
End If
End If
End If
If Gut = True Then
L.Add(ctl)
If ReturnAtFirstElement = True Then ReturnFlag = True
End If
If ReturnFlag = False Then
Call GetControl(ctl, Key, L)
End If
Next
End If
If L.Count - 1 > -1 Then
Return True
Else
Return False
End If
End Function
#End Region
#Region "Daten"
''' <summary>
''' Daten ab DB laden uns ins Form befüllen
''' </summary>
''' <param name="Vertragselementnr"></param>
''' <remarks></remarks>
Private Sub Get_Data(ByVal Produktnr As Integer)
Try
Produkt.Get_Produkt(Produktnr)
If Produkt.bIstStruktur = True Then
Me.GrpStammdaten.Visible = False
Me.GrpLifeCycle.Visible = False
Me.GrpDokumente.Visible = False
Me.GrpBilder.Visible = False
Me.GrpAenderungsnachweis.Visible = False
Me.GrpAblösung.Visible = False
Exit Sub
Else
Me.GrpStammdaten.Visible = True
Me.GrpLifeCycle.Visible = True
Me.GrpDokumente.Visible = True
Me.GrpBilder.Visible = True
Me.GrpAenderungsnachweis.Visible = True
Me.GrpAblösung.Visible = True
End If
Me.txtProduktname.Text = Produkt.sBezeichnung.Value
Me.txtBemerkung.Text = Produkt.sBeschreibung.Value
Me.txtVersion.Text = Produkt.sVersion.Value
Try
Me.txtAbgeloestdurch.Text = Produkt.sAbgeloest_durch.Value
Catch ex As Exception
Me.txtAbgeloestdurch.Text = ""
End Try
If Produkt.daAbgeloest_am.IsNull Then
Me.txtAbgeloestam.Text = "01.01.1900"
Else
Me.txtAbgeloestam.Text = Produkt.daAbgeloest_am.ToString
End If
If Produkt.daEntscheidungstermin.IsNull Then
Me.txtEntscheidungsterminNachfolgeprodukt.Text = "01.01.1900"
Else
Me.txtEntscheidungsterminNachfolgeprodukt.Text = Produkt.daEntscheidungstermin.ToString
End If
If Produkt.daNächste_Ueberprüfung.IsNull Then
Me.txtNaechsteUeberpruefung.Text = "01.01.1900"
Else
Me.txtNaechsteUeberpruefung.Text = Produkt.daNächste_Ueberprüfung.ToString
End If
Me.cbboxProdukttyp.SelectedValue = Produkt.iProdukttypNr.Value
If Produkt.iStatusNr = 0 Then Me.cbEingesetzt.Checked = False Else Me.cbEingesetzt.Checked = True
Me.txterstellt_am.Text = Produkt.daErstellt_am.ToString
Me.txtmutiert_am.Text = Produkt.daMutiert_am.ToString
Me.txtmutierer.Text = Produkt.MutiererText
Me.CtlPhasen1.Produktnr = Me.Produkt.iLC_ProduktNr.Value
Try
Me.LCDOkumente.ProduktNr = Me.Produkt.iLC_ProduktNr.Value
Catch
End Try
sec.Set_Form_Security(Me)
Me.FormDataChanged = False
Catch ex As Exception
MsgBox(ex.Message)
Try
For Each ctl As ToolStripButton In Me.ToolStrip1.Items
ctl.Enabled = False
Next
Catch
End Try
Me.TSBtnQuit.Enabled = True
End Try
Me.FormDataChanged = False
End Sub
Private Sub Set_Checkedlistbox(ByRef clb As CheckedListBox, ByRef data As DataTable)
Dim i As Integer
For i = 0 To clb.Items.Count - 1
clb.SetItemCheckState(i, CheckState.Unchecked)
Next
Dim chk As Integer = 0
Dim ii As Integer
Dim oc As CheckedListBox.ObjectCollection = clb.Items
For i = 0 To data.Rows.Count - 1
For ii = 0 To oc.Count - 1
If oc.Item(ii).item(0) = data.Rows(i).Item(2) Then
clb.SetItemCheckState(ii, CheckState.Checked)
End If
Next
Next
End Sub
''' <summary>
''' Daten ab Form speichern
''' </summary>
''' <remarks></remarks>
Private Sub Save_data()
Produkt.sBeschreibung = New SqlTypes.SqlString(CType(Me.txtBemerkung.Text, String))
Produkt.sBezeichnung = New SqlTypes.SqlString(CType(Me.txtProduktname.Text, String))
Produkt.sVersion = New SqlTypes.SqlString(CType(Me.txtVersion.Text, String))
Produkt.sAbgeloest_durch = New SqlTypes.SqlString(CType(Me.txtAbgeloestdurch.Text, String))
If IsDate(Me.txtAbgeloestam.Text) Then
Produkt.daAbgeloest_am = New SqlTypes.SqlDateTime(CType(Me.txtAbgeloestam.Text, DateTime))
Else
Produkt.daAbgeloest_am = New SqlTypes.SqlDateTime(CType(SqlDateTime.Null, DateTime))
End If
If IsDate(Me.txtEntscheidungsterminNachfolgeprodukt.Text) Then
Produkt.daEntscheidungstermin = New SqlTypes.SqlDateTime(CType(Me.txtEntscheidungsterminNachfolgeprodukt.Text, DateTime))
Else
Produkt.daEntscheidungstermin = New SqlTypes.SqlDateTime(CType(SqlDateTime.Null, DateTime))
End If
If IsDate(Me.txtNaechsteUeberpruefung.Text) Then
Produkt.daNächste_Ueberprüfung = New SqlTypes.SqlDateTime(CType(Me.txtNaechsteUeberpruefung.Text, DateTime))
Else
Produkt.daNächste_Ueberprüfung = New SqlTypes.SqlDateTime(CType(SqlDateTime.Null, DateTime))
End If
If Me.cbEingesetzt.Checked Then
Produkt.iStatusNr = New SqlTypes.SqlInt32(CType(1, Int32))
Else
Produkt.iStatusNr = New SqlTypes.SqlInt32(CType(0, Int32))
End If
Produkt.iProdukttypNr = New SqlTypes.SqlInt32(CType(Me.cbboxProdukttyp.SelectedValue, Int32))
Produkt.Save_Data()
Me.FormDataChanged = False
End Sub
Private Function Get_CheckedItems(ByRef clb As CheckedListBox) As String
Dim i As Integer = 0
Dim s As String = ""
For i = 1 To clb.CheckedItems.Count
s = s + clb.CheckedItems(i).ToString
Next
Return s
End Function
#End Region
Private Sub frmLifeCycle_Load(sender As Object, e As EventArgs) Handles MyBase.Load
clslc.Load_Treestrukutr(Me.TreeStruktur)
Me.cbboxProdukttyp.DataSource = clslc.Produkttypen
Me.cbboxProdukttyp.DisplayMember = "Bezeichnung"
Me.cbboxProdukttyp.ValueMember = "LC_Produkttypnr"
AddChanges(Me)
TreeStruktur.Nodes.Sort()
Me.CtlPhasen1.Connectionstring = Globals.sConnectionString
Me.CtlPhasen1.Mitarbeiternr = Globals.clsmitarbeiter.iMitarbeiternr.Value
Me.LCDOkumente.ConnectionString = Globals.sConnectionString
Me.LCDOkumente.Mitarbeiternr = Globals.clsmitarbeiter.iMitarbeiternr
Me.LCDOkumente.Doktype = 1
Me.LCDOkumente.TempFilePath = Globals.clsapplication.sTmp_filepath.ToString
Try
Me.LCDOkumente.ProduktNr = Me.TreeStruktur.SelectedNode.Tag
Catch
End Try
End Sub
Private Sub TreeStruktur_AfterNodeDrop(sender As Object, e As DevComponents.AdvTree.TreeDragDropEventArgs) Handles TreeStruktur.AfterNodeDrop
For Each n As DevComponents.AdvTree.Node In e.Nodes
Produkt.Get_Produkt(n.Tag)
Produkt.iLC_ProduktNr_Parent = New SqlInt32(CType(e.NewParentNode.Tag, Int32))
Produkt.Save_Data()
e.NewParentNode.Nodes.Sort()
Next
Me.TreeStruktur.SelectedNode = clslc.FindNode(Me.TreeStruktur.Nodes, e.Node.Tag, e.Node.Tag)
End Sub
Private Sub TreeStruktur_Click(sender As Object, e As EventArgs) Handles TreeStruktur.Click
Me.Cursor = Cursors.WaitCursor
Try
Me.GrpBilder.Enabled = False
Get_Data(Me.TreeStruktur.SelectedNode.Tag)
Me.LCDOkumente.ProduktNr = Me.TreeStruktur.SelectedNode.Tag
Application.DoEvents()
If Me.GrpBilder.Visible = True Then
Me.GrpBilder.Enabled = True
Me.CtlPictures1.Connectionstring = Globals.sConnectionString
Me.CtlPictures1.Produktnr = Me.Produkt.iLC_ProduktNr.Value
Me.CtlPictures1.Mitarbeiternr = Globals.clsmitarbeiter.iMitarbeiternr.Value
Me.CtlPictures1.TempfilePath = Globals.clsapplication.sTmp_filepath
Me.CtlPictures1.Refresh()
End If
Catch
End Try
Me.Cursor = Cursors.Default
End Sub
Private Sub DateTimePicker_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _
dtAbgeloestAm.ValueChanged, dtEntscheidungsterminNachfolgeprodukt.ValueChanged, dtNaechsteUeberpruefung.ValueChanged
Dim s As String
Dim obj As DateTimePicker = sender
s = obj.Name
s = "txt" + s.Substring(2, s.Length - 2)
Dim l As New List(Of Control)
Dim txtb As MaskedTextBox
GetControl(Me, s, l)
For Each ctl As Control In l
txtb = CType(ctl, MaskedTextBox)
txtb.Text = obj.Value
Next
End Sub
Private Sub frmLifeCycle_Resize(sender As Object, e As EventArgs) Handles Me.Resize
Me.GrpBilder.Height = Me.ClientSize.Height - Me.GrpDokumente.Height - Me.GrpLifeCycle.Height - 30
End Sub
Private Sub NeuesElementToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NeuesElementToolStripMenuItem.Click
Produkt.Add_New(Me.TreeStruktur.SelectedNode.Tag)
Produkt.bIstStruktur = New SqlBoolean(CType(False, Boolean))
Produkt.sBezeichnung = New SqlString(CType("Neues Element", String))
Produkt.iImageindex = New SqlInt32(CType(Me.TreeStruktur.SelectedNode.ImageIndex, Int32))
Produkt.Save_Data()
Dim NewNode As New DevComponents.AdvTree.Node
NewNode.Text = "Neues Element"
NewNode.ImageIndex = Produkt.iImageindex.Value
NewNode.Tag = Produkt.iLC_ProduktNr.Value
Me.TreeStruktur.SelectedNode.Nodes.Add(NewNode)
If NewNode.Parent.Expanded = False Then NewNode.Parent.Expand()
TreeStruktur.SelectedNode = clslc.FindNode(TreeStruktur.Nodes, NewNode.Tag, NewNode.Tag)
Get_Data(NewNode.Tag)
End Sub
#Region "EVH"
Private Sub evh_Icon_Changed(keyvalue As Integer, Iconid As Integer) Handles evh.Icon_Changed
Try
Dim foundnode As DevComponents.AdvTree.Node
foundnode = Me.clslc.FindNode(Me.TreeStruktur.Nodes, keyvalue, keyvalue)
foundnode.ImageIndex = Iconid
Catch
End Try
End Sub
Private Function get_Icon(ByVal node As DevComponents.AdvTree.Node, Optional newNode As Boolean = False) As Integer
If node.ImageIndex > 20 Then Return node.ImageIndex
If node.Nodes.Count > 0 And node.ImageIndex < 10 Then
Return node.ImageIndex + 10
End If
Return node.ImageIndex
End Function
#End Region
End Class