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.

556 lines
21 KiB

Imports System
Imports System.Data
Imports System.Data.SqlTypes
Imports System.Data.SqlClient
Public Class frmDokument
#Region "Deklarationen"
Dim Dokument As New DMS.clsDok
Dim DokumentAblageTyp As New TKB.VV.DB.clsLC_Dokumenttyp
Dim DokumentAblageTypen As New DataTable
Dim FormReadonly As Boolean = False
Dim FormDataChanged As Boolean = False
Dim SpaltenTitel As New Utils.Tabellenspalte
Dim Aktuelles_Dokument As Integer
Dim Aktuelles_Element As Integer
Dim Doktype As Integer
''' <summary>
''' Doktype
''' 1: Vertragselement
''' 2: Test-Drehbuch
''' 3: Applikationsdokument
''' 4: Applikationlogbuch
''' </summary>ö
''' <remarks></remarks>
Dim Aktueller_Doktype As Integer
Dim Anzeige As Boolean = False
Private SaveFileName As String = ""
Dim Neuer_Datensatz As Boolean = False
Dim ishyperlink As Boolean = False
Dim hyperlink As String = ""
#End Region
#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
If Me.Dokument.Neuer_Datensatz = True Then Me.Dokument.Delete(Me.Dokument.iDokumentNr.Value)
Me.Dispose()
End If
End Sub
''' <summary>
''' Prüfung, ob Datenänderungen vorgenommen wurden. Beim Speichern werden ebenfalls allfällige Änderungen von C1DokumentAblagoeOrt durchgeführt.
''' Wurden lediglich Änderungen bei C1Dokumentablageort vorgenommen, wird separat gefrat, ob die Änderungen gespeichert werden sollen.
''' </summary>
''' <remarks></remarks>
Private Function Check_Changes() As Boolean
If Me.FormReadonly Then Exit Function
Dim msgres As MsgBoxResult
If Me.FormDataChanged Then
msgres = MsgBox("Möchten Sie die Änderungen speichern?", vbYesNoCancel + MsgBoxStyle.Question)
Select Case msgres
Case MsgBoxResult.Yes
Save_data()
Return True
Case MsgBoxResult.Cancel
Return False
Case MsgBoxResult.No
Return True
End Select
Else
Return True
End If
End Function
#End Region
#Region "Formular"
''' <summary>
'''
''' </summary>
''' <param name="DokumentNr">Optionaler Parameter Dokumentnummer des aktuellen Dokuments</param>
''' <remarks></remarks>
Sub New(ByVal DokumentNr As Integer, ByVal Doktype As Integer, Optional ByVal Elementnr As Integer = -1, Optional ByVal Anzeige As Boolean = False, Optional ByVal CreateNew As Boolean = False)
Me.InitializeComponent()
If CreateNew Then
Me.Aktuelles_Dokument = Me.Dokument.Add_New(Elementnr, DokType)
Me.Neuer_Datensatz = True
Else
Me.Aktuelles_Dokument = DokumentNr
End If
Me.Anzeige = Anzeige
Me.Aktuelles_Element = Elementnr
Me.Doktype = Doktype
End Sub
Sub New(ByVal Produktnr As Integer, ByVal Hyperlink As Boolean, ByVal Link As String)
Me.InitializeComponent()
Me.Aktuelles_Dokument = Me.Dokument.Add_New(Produktnr, 1)
Me.Neuer_Datensatz = True
Me.Anzeige = Anzeige
Me.Aktuelles_Element = Produktnr
Me.Doktype = 1
Me.ishyperlink = True
Me.txtOriginalFilename_incl_path.Text = Link
Me.txtHyperlink.Text = Link
Me.hyperlink = Link
End Sub
Sub New(ByVal DokumentNr As Integer, ByVal Doktype As Integer, Optional ByVal Elementnr As Integer = -1, Optional ByVal Anzeige As Boolean = False, Optional ByVal CreateNew As Boolean = False, Optional ByVal Filename As String = "")
Me.InitializeComponent()
If CreateNew Then
Me.Aktuelles_Dokument = Me.Dokument.Add_New(Elementnr, Doktype)
Me.Neuer_Datensatz = True
Me.Dokument.sBezeichnung = New SqlString(CType(System.IO.Path.GetFileName(Filename), String))
Me.Dokument.sFilename = New SqlString(CType(System.IO.Path.GetFileName(Filename), String))
Me.Dokument.sOriginalFilename_incl_Path = New SqlString(CType(Filename, String))
Me.Dokument.Save_Data()
Me.txtDateiname.Text = System.IO.Path.GetFileName(Filename)
Me.txtFilename.Text = Filename
Else
Me.Aktuelles_Dokument = DokumentNr
End If
Me.Anzeige = Anzeige
Me.Aktuelles_Element = Elementnr
Me.Doktype = Doktype
End Sub
''' <summary>
''' Formular-Load
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub frmDokument_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Anzeige = True Then
Me.TSBtnSuche.Enabled = False
Me.TSBtnSave.Enabled = False
Else
Me.TSBtnSuche.Enabled = True
End If
If Me.TSBtnSave.Enabled = False Or Me.TSBtnSave.Visible = False Then
Me.FormReadonly = True
Me.TSBtnCopy.Enabled = False
Me.TSBtnNew.Enabled = False
Me.TSBtnDelete.Enabled = False
Else
Me.FormReadonly = False
End If
'Dokumenttypen-Laden
Me.Dokument.Get_Dokumenttypen()
Me.cboxDokumenttyp.DataSource = Me.Dokument.Dokumenttypdaten
Me.cboxDokumenttyp.DisplayMember = "Bezeichnung"
Me.cboxDokumenttyp.ValueMember = "Dokumenttypnr"
AddChanges(Me)
Get_Data(Me.Aktuelles_Dokument)
If Dokument.iDokType.Value = 6 Then
Me.txtHyperlink.Text = Me.txtOriginalFilename_incl_path.Text
End If
If Me.Neuer_Datensatz = True Then
Me.Dokument.Neuer_Datensatz = True
Me.Neuer_Datensatz = False
Me.cboxDokumenttyp.SelectedValue = Me.Dokument.Dokumenttypdaten.Rows(0).Item("dokumenttypnr")
End If
Me.txtBezeichnung.Focus()
If ishyperlink = True Then
Me.cboxDokumenttyp.Text = "Hyperlink"
Me.txtHyperlink.Text = hyperlink
Me.cboxDokumenttyp.SelectedValue = 6
Me.pnlDokument.Visible = False
Me.pnlHyperlink.Visible = True
Me.Height = Me.ToolStrip1.Height + Me.Panel1.Height + Me.pnlHyperlink.Height + Me.MenuStrip1.Height + 20
End If
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()
Me.txtMutiert_am.Text = Me.Dokument.daMutiert_am.ToString
Me.FormDataChanged = False
End Sub
''' <summary>
''' Datensatz kopieren
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub TSBtnCopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnCopy.Click
If Me.Check_Changes = False Then Exit Sub
Me.Get_Data(Dokument.Create_Copy(Me.Dokument.iDokumentNr.Value))
Me.Dokument.Neuer_Datensatz = True
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.Check_Changes = False Then Exit Sub
Me.Get_Data(Me.Dokument.Add_New(Me.Aktuelles_Element, Me.Doktype))
Me.txtFilename.Text = ""
Me.Dokument.Neuer_Datensatz = True
Me.txtBezeichnung.Focus()
End Sub
''' <summary>
''' Aktueller Datensatz inaktivieren
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub TSBtnDelete_Click(ByVal senderBeendenToolStripMenuItem As System.Object, ByVal e As System.EventArgs) Handles TSBtnDelete.Click
If MsgBox("Das Dokument wirklich löschen?", vbYesNo + vbQuestion) = MsgBoxResult.Yes Then
Me.Dokument.Delete_Dokument(Me.Dokument.iDokumentNr.Value)
Me.Close()
End If
End Sub
''' <summary>
''' Menu Beenden
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub BeendenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BeendenToolStripMenuItem.Click
Me.TSBtnQuit_Click(sender, e)
End Sub
''' <summary>
''' Vertragspartner suchen
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub TSBtnSuche_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnSuche.Click
If Not Me.FormReadonly Then Check_Changes()
'Dim i As Integer
'If Me.Vertragspartnerdata.Vertragspartner_Suchen(i) = True Then
' Me.Get_Data(i)
'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 CheckBox Then
Dim ctl As CheckBox = c
AddHandler ctl.CheckedChanged, evh
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
''' <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
''' <summary>
''' Handelt das Change-Ereignis eines Datetimepckers und stellt das ausgewählte Datum in das entsprechende Textfeld
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub DateTimePicker_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dtPickerVersionsdatum.ValueChanged
Dim s As String
Dim obj As DateTimePicker = sender
s = obj.Name
s = "txt" + s.Substring(8, s.Length - 8)
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
#End Region
#Region "Daten"
''' <summary>
''' Daten ab DB laden uns ins Form befüllen
''' </summary>
''' <param name="DokumentNr"></param>
''' <remarks></remarks>
Private Sub Get_Data(ByVal Dokumentnr As Integer)
Try
Dokument.Get_Dokumenttypen()
Dokument.Get_Dokument(Dokumentnr)
Me.txtBezeichnung.Text = Dokument.sBezeichnung.Value
Me.cboxDokumenttyp.SelectedValue = Dokument.iDokumenttypNr.Value
Me.txtBeschreibung.Text = Dokument.sBeschreibung.Value
Me.txtVersion.Text = Dokument.sVersion.ToString
Me.txtVersionsdatum.Text = Dokument.daVersionsdatum.ToString
Me.txtDateiname.Text = Dokument.sFilename.Value
If Me.txtDateiname.Text <> "" Then Me.btnDokumentAnzeigen.Enabled = True Else Me.btnDokumentAnzeigen.Enabled = False
Me.txtDateiname.ReadOnly = True
Me.SaveFileName = Me.txtDateiname.Text
Me.txtOriginalFilename_incl_path.Text = Dokument.sOriginalFilename_incl_Path.Value
Me.txtErstellt_am.Text = Dokument.daErstellt_am.ToString
Me.txtMutiert_am.Text = Dokument.daMutiert_am.ToString
Me.txtMutierer.Text = Dokument.iMutierer.Value
Try
Me.cbaktiv.Checked = Dokument.bAktiv.Value = True
Catch ex As Exception
Me.cbaktiv.Checked = True
End Try
If Not Anzeige Then
For Each ctl As ToolStripButton In Me.ToolStrip1.Items
ctl.Enabled = True
Next
End If
Me.FormDataChanged = False
Catch ex As Exception
For Each ctl As ToolStripButton In Me.ToolStrip1.Items
ctl.Enabled = False
Next
Me.TSBtnQuit.Enabled = True
Me.TSBtnSuche.Enabled = True
End Try
Me.FormDataChanged = False
End Sub
''' <summary>
''' Daten ab Form speichern
''' </summary>
''' <remarks></remarks>
Private Sub Save_data()
'Prüfung, ob das Ausgewählte File zur Speicherung vorhanden ist
If Not Me.ishyperlink Then
If Me.txtFilename.Text <> "" And Me.cboxDokumenttyp.Text <> "Hyperlink" Then
If Not IO.File.Exists(Me.txtFilename.Text) Then
MsgBox("Die gewählte Datei ist nicth vorhanden." + vbExclamation)
Exit Sub
End If
End If
End If
If Me.txtFilename.Text <> "" And Me.txtDateiname.Text <> "" And Me.txtDateiname.Text <> Me.SaveFileName And Me.SaveFileName <> "" Then
'If msg.Show_MessageYesNo(272) = MsgBoxResult.No Then
' msg.show_standardmessage(273, MsgBoxStyle.Information)
' Exit Sub
'End If
End If
Dokument.iKeyValue = New SqlInt32(CType(Me.Aktuelles_Element, Int32))
Dokument.iDokumenttypNr = New SqlInt32(CType(Me.cboxDokumenttyp.SelectedValue, Int32))
Dokument.sBezeichnung = New SqlString(CType(Me.txtBezeichnung.Text, String))
Dokument.sBeschreibung = New SqlString(CType(Me.txtBeschreibung.Text, String))
Dokument.sVersion = New SqlString(CType(Me.txtVersion.Text, String))
If IsDate(Me.txtVersionsdatum.Text) Then
Dokument.daVersionsdatum = New SqlDateTime(CType(Me.txtVersionsdatum.Text, DateTime))
Else
Dokument.daVersionsdatum = New SqlDateTime(CType(SqlDateTime.Null, DateTime))
End If
If Me.cboxDokumenttyp.SelectedValue = 6 Then
Me.txtDateiname.Text = Me.txtHyperlink.Text
Me.txtOriginalFilename_incl_path.Text = Me.txtHyperlink.Text
End If
Dokument.sFilename = New SqlString(CType(Me.txtDateiname.Text, String))
Dokument.sOriginalFilename_incl_Path = New SqlString(CType(Me.txtOriginalFilename_incl_path.Text, String))
Dokument.bAktiv = New SqlBoolean(CType(Me.cbaktiv.Checked = True, Boolean))
Dokument.Save_Data()
If Me.cboxDokumenttyp.Text <> "Hyperlink" Then
If Dokument.Save_File(Dokument.iDokumentNr.Value, Me.txtFilename.Text) = False Then
MsgBox("Die Datei konnte nicht gespeichert werden." + vbExclamation)
End If
'Me.Dokument.Dokumentablageort.Save_Data()
Me.SaveFileName = Me.txtDateiname.Text
End If
End Sub
#End Region
''' <summary>
''' Auswahl des zu speichernden Dokumentes
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub brnFileOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles brnFileOpen.Click
Me.OpenFileDialog1.ShowDialog()
If Me.OpenFileDialog1.FileName <> "" Then Me.txtFilename.Text = Me.OpenFileDialog1.FileName
Me.txtOriginalFilename_incl_path.Text = Me.txtFilename.Text
Me.txtDateiname.Text = System.IO.Path.GetFileName(Me.txtFilename.Text)
End Sub
''' <summary>
''' Dokument anzeigen
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub btnDokumentAnzeigen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDokumentAnzeigen.Click
If Trim(Me.Aktuelles_Dokument) = "" Then Exit Sub
Try
Me.Dokument.Show_Doc(Me.Aktuelles_Dokument)
Catch ex As Exception
MsgBox("Die Datei konnte nicht geöffnet werden.", MsgBoxStyle.Exclamation)
End Try
End Sub
''' <summary>
''' Text-Change von Txt-Dateiname
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub txtDateiname_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtDateiname.TextChanged
If Me.txtDateiname.Text <> "" Then Me.btnDokumentAnzeigen.Enabled = True Else Me.btnDokumentAnzeigen.Enabled = False
Me.txtDateiname.ReadOnly = True
End Sub
Private Sub cboxDokumenttyp_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboxDokumenttyp.SelectedIndexChanged
Try
If Me.cboxDokumenttyp.Text = "Hyperlink" Then
Me.pnlDokument.Visible = False
Me.pnlHyperlink.Visible = True
Me.Height = Me.ToolStrip1.Height + Me.Panel1.Height + Me.pnlHyperlink.Height + Me.MenuStrip1.Height + 20
Else
Me.pnlDokument.Visible = True
Me.pnlHyperlink.Visible = False
Me.Height = Me.ToolStrip1.Height + Me.Panel1.Height + Me.pnlDokument.Height + Me.MenuStrip1.Height + 20
End If
Catch
End Try
End Sub
Private Sub txtHyperlink_TextChanged(sender As Object, e As EventArgs) Handles txtHyperlink.TextChanged
Me.txtFilename.Text = Me.txtHyperlink.Text
Me.txtOriginalFilename_incl_path.Text = Me.txtHyperlink.Text
Me.txtDateiname.Text = Me.txtHyperlink.Text
End Sub
End Class