2016-01-05 15:49:45 +01:00

549 lines
24 KiB
VB.net

Imports DevExpress.XtraScheduler
Imports System.IO
Imports WINDREAMLib
Public Class frmFormInput
#Region "+++++ Konstanten +++++"
'Private akt_ctrl As Control
Private thisformid As Integer = Nothing
Private SelectedRecordID As Integer = 0
Private SelectedFormID As Integer = Nothing
Private m_Moving As Boolean = False
Private insert = False
Private DocView As Boolean = False
Private _windream As New ClassWindream
'Private Shared _Instance As frmFormInput = Nothing
'Public Shared Function Instance() As frmFormInput
' If _Instance Is Nothing OrElse _Instance.IsDisposed = True Then
' _Instance = New frmFormInput
' End If
' _Instance.BringToFront()
' Return _Instance
'End Function
#End Region
Public Sub SetFormTitles(title As String)
Me.Text = title
' BindingNavigatorCountItem.Text = BindingNavigatorCountItem.Text.Replace("Datensätzen", title)
End Sub
#Region "+++++ Form Events +++++"
Public Sub LoadOverview_Grid()
Try
'Load Input Grid
Dim _sqlGrid As String = "SELECT SQL_COMMAND FROM TBPMO_FORM_SQL WHERE FORM_ID = " & thisformid
Dim _sql = ClassDatabase.Execute_Scalar(_sqlGrid)
If (Not IsDBNull(_sql)) Then
Dim dt As DataTable = ClassDatabase.Return_Datatable(_sql)
If dt Is Nothing = False Then
'BindingSource for Navigator
Me.BindingSourceDGV.DataSource = dt
'bind Datatable to bindingsource
Me.dgvInput.DataSource = Me.BindingSourceDGV
'Me.dgvOverview.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells)
End If
Else
MsgBox("No entries for actual Form. Pleas insert the first values.", MsgBoxStyle.Exclamation)
End If
Catch ex As Exception
MsgBox("Error in Load Overview Grid:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub frmLevel_Designer_Load(sender As Object, e As EventArgs) Handles Me.Load
Try
Me.VWPMO_CONTROL_SCREENTableAdapter.Connection.ConnectionString = MyConnectionString
Me.TBPMO_RECORDTableAdapter.Connection.ConnectionString = MyConnectionString
thisformid = CURRENT_FORM_ID
Me.VWPMO_CONTROL_SCREENTableAdapter.Fill(Me.DD_DMSDataSet.VWPMO_CONTROL_SCREEN, thisformid)
CtrlBuilder = New ClassControlBuilder(pnlView, ttTooltip)
CtrlCommandUI = New ClassControlCommandsUI(CtrlBuilder,
ContextMenuStrip1,
AddressOf NewEditAppointment,
AddressOf OpenFormData)
If ClassDatabase.Init = True Then
LoadOverview_Grid()
LoadFormProperties()
CtrlCommandUI.LoadControls(CURRENT_FORM_ID)
' FocusedRow_Change ruft bereits LoadControlValues auf
FocusedRow_Change()
End If
ClassWindowLocation.LoadFormLocationSize(Me, thisformid, CURRENT_SCREEN_ID)
Catch ex As System.Exception
System.Windows.Forms.MessageBox.Show(ex.Message)
End Try
End Sub
#End Region
#Region "+++++ Layout +++++"
Private Sub frmFormInput_Shown(sender As Object, e As EventArgs) Handles Me.Shown
LoadLayout()
End Sub
Private Sub frmLevel_Designer_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
Try
SaveLayout()
ClassWindowLocation.SaveFormLocationSize(Me, thisformid, CURRENT_SCREEN_ID)
My.Settings.Save()
'frmForm_Overview.Instance.Show()
'frmTool_ControlProperties.Instance.Close()
'frmTool_ControlDesigner.Instance.Close()
Catch ex As Exception
End Try
End Sub
Public Sub LoadLayout()
Try
'DataGridView Layout laden
Dim XMLPath = System.IO.Path.Combine(Application.UserAppDataPath(), "SCREEN" & CURRENT_SCREEN_ID & "-FORM" & thisformid & "-UserLayout.xml")
dgvInput.MainView.RestoreLayoutFromXml(XMLPath)
'Splitter Layout laden
Dim LayoutPath = Path.Combine(Application.UserAppDataPath(), "SCREEN" & CURRENT_SCREEN_ID & "-FORM" & thisformid & "-SplitterLayout.xml")
Dim layout As ClassLayout = New ClassLayout(LayoutPath)
Dim settings As System.Collections.Generic.List(Of ClassSetting)
settings = layout.Load()
If settings.Count = 0 Then
settings.Add(New ClassSetting("SplitContainerMain", SplitContainerMain.SplitterDistance))
settings.Add(New ClassSetting("SplitContainerDetails", SplitContainerDetails.SplitterDistance))
layout.Save(settings)
End If
For Each s As ClassSetting In settings
Select Case s._name
Case "SplitContainerMain"
SplitContainerMain.SplitterDistance = Integer.Parse(s._value)
Case "SplitContainerDetails"
SplitContainerDetails.SplitterDistance = Integer.Parse(s._value)
End Select
Next
Catch notFoundEx As System.IO.FileNotFoundException
ClassLogger.Add("Layout added for Screen " & CURRENT_SCREEN_ID & ", Form " & thisformid)
Catch ex As Exception
MsgBox("Error while loading Layout!" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Public Sub SaveLayout()
Try
'DataGridView Layout speichern
Dim XMLPath = System.IO.Path.Combine(Application.UserAppDataPath(), "SCREEN" & CURRENT_SCREEN_ID & "-FORM" & thisformid & "-UserLayout.xml")
dgvInput.MainView.SaveLayoutToXml(XMLPath)
'Splitter Layout speichern
Dim LayoutPath = Path.Combine(Application.UserAppDataPath(), "SCREEN" & CURRENT_SCREEN_ID & "-FORM" & thisformid & "-SplitterLayout.xml")
Dim layout As ClassLayout = New ClassLayout(LayoutPath)
Dim settings As System.Collections.Generic.List(Of ClassSetting) = New System.Collections.Generic.List(Of ClassSetting)
settings.Add(New ClassSetting("SplitContainerMain", SplitContainerMain.SplitterDistance))
settings.Add(New ClassSetting("SplitContainerDetails", SplitContainerDetails.SplitterDistance))
layout.Save(settings)
Catch ex As Exception
MsgBox("Error while saving Layout!" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
#End Region
#Region "+++++ Load Funktionen +++++"
Public Sub LoadFormProperties()
'Dim NAME_SQL As String = "SELECT NAME FROM TBPMO_FORM WHERE GUID = " & CURRENT_FORM_ID
Dim TITLE_SQL As String = "SELECT FORM_TITLE FROM TBPMO_FORM_VIEW WHERE FORM_ID = " & thisformid
'Dim name = ClassDatabase.Execute_Scalar(NAME_SQL)
Dim title = ClassDatabase.Execute_Scalar(TITLE_SQL)
DocView = ClassDatabase.Execute_Scalar("SELECT DOCUMENT_VIEW FROM TBPMO_FORM_VIEW WHERE FORM_ID = " & thisformid)
If DocView = True Then
If _windream.Init = True Then
Me.SplitContainerDetails.Panel2Collapsed = False
End If
Else
Me.SplitContainerDetails.Panel2Collapsed = True
End If
'SetFormName(name)
SetFormTitles(title)
End Sub
Private Sub Load_Value(recID As Integer, CONTROLID As Integer, control As Control)
Try
Dim sq = "SELECT * FROM VWPMO_VALUES WHERE RECORD_ID = " & recID & " and CONTROL_ID = " & CONTROLID
Dim DT As DataTable = ClassDatabase.Return_Datatable(sq)
Dim result = DT.Rows(0).Item("VALUE")
Select Case DT.Rows(0).Item("CONTROL_TYPE_ID")
Case 2 ' TextBox
Dim textbox As TextBox = DirectCast(control, TextBox)
textbox.Text = result
Case 10 ' CheckBox
Dim checkbox As CheckBox = DirectCast(control, CheckBox)
checkbox.Checked = CBool(result)
Case 3 ' ComboBox
Dim combobox As ComboBox = DirectCast(control, ComboBox)
combobox.SelectedIndex = combobox.FindStringExact(result)
Case 4 'DateTimePicker
Dim datepicker As DevExpress.XtraEditors.DateEdit = DirectCast(control, DevExpress.XtraEditors.DateEdit)
datepicker.DateTime = Date.Parse(result)
Case Else
' MsgBox(DT.Rows(0).Item("CONTROL_TYPE_ID"))
End Select
Catch ex As Exception
MsgBox("Error in Load_Value:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Function Return_SearchPAttern(ByVal content As String)
Select Case content
Case "Form-ID (Entity)"
Return thisformid
Case "Record-ID"
Return SelectedRecordID
End Select
End Function
Private Sub load_Documents()
Try
If DocView Then
Dim SQL = "SELECT WINDREAM_SEARCH,SEARCH_PATTERN1,SEARCH_PATTERN2,SEARCH_PATTERN3,SEARCH_PATTERN4,SEARCH_PATTERN5 FROM TBPMO_FORM_VIEW WHERE FORM_ID = " & thisformid & " and SCREEN_ID = " & CURRENT_SCREEN_ID
Dim DT As DataTable = ClassDatabase.Return_Datatable(SQL)
If DT.Rows.Count = 1 Then
If Not IsDBNull(DT.Rows(0).Item(0)) Then
Dim WD_Suche = DT.Rows(0).Item(0)
Dim SP1 = DT.Rows(0).Item(1)
Dim SP2 = DT.Rows(0).Item(2)
Dim SP3 = DT.Rows(0).Item(3)
Dim SP4 = DT.Rows(0).Item(4)
Dim SP5 = DT.Rows(0).Item(5)
'Eine tempfile generieren
Dim tempFilename1 = My.Computer.FileSystem.GetTempFileName()
'Nur den Filenamen ohne Erweiterung
Dim tempName = Path.GetFileNameWithoutExtension(tempFilename1)
'tempfile lsöchen
If My.Computer.FileSystem.FileExists(tempFilename1) Then
My.Computer.FileSystem.DeleteFile(tempFilename1)
End If
Try
Dim temppath = Path.GetTempPath
Dim fileContents As String
fileContents = My.Computer.FileSystem.ReadAllText(WD_Suche)
fileContents.Replace("Í", "Ö")
If SP1.ToString <> String.Empty Then
SP1 = Return_SearchPAttern(SP1.ToString)
fileContents = fileContents.Replace("%pattern1%", SP1)
fileContents = fileContents.Replace("471101", SP1)
End If
If SP2.ToString <> String.Empty Then
SP2 = Return_SearchPAttern(SP2.ToString)
fileContents = fileContents.Replace("%pattern2%", SP2)
fileContents = fileContents.Replace("471101", SP2)
End If
If SP3.ToString <> String.Empty Then
SP3 = Return_SearchPAttern(SP3.ToString)
fileContents = fileContents.Replace("%pattern3%", SP3)
fileContents = fileContents.Replace("471102", SP3)
End If
If SP4.ToString <> String.Empty Then
SP4 = Return_SearchPAttern(SP4.ToString)
fileContents = fileContents.Replace("%pattern4%", SP4)
fileContents = fileContents.Replace("471103", SP4)
End If
If SP5.ToString <> String.Empty Then
SP5 = Return_SearchPAttern(SP5.ToString)
fileContents = fileContents.Replace("%pattern5%", SP5)
fileContents = fileContents.Replace("471105", SP5)
End If
'Die windream File zusammensetzen
Dim newfilename = temppath & tempName & ".wdf"
My.Computer.FileSystem.WriteAllText(newfilename, fileContents, False)
' XML-Datei initialisieren
Dim xml As New System.Xml.XmlDocument()
' XML-Datei öffnen und laden
xml.Load(newfilename)
xml.Save(newfilename)
TEMP_FILES.Add(newfilename)
Dim windreamSucheErgebnisse As WMObjects = Me._windream.GetSearchDocuments(newfilename)
If Not IsNothing(windreamSucheErgebnisse) AndAlso windreamSucheErgebnisse.Count > 0 Then
AxObjectListControl.SetIconMode(True)
AxObjectListControl.RemoveAllColumnHeader()
Me.tslblAnzahl_Dokumente.Text = windreamSucheErgebnisse.Count & " gefundene Dateien"
Dim param As New List(Of String)
'The file name
param.Add("szLongName")
'The size
param.Add("dwCreationDate")
param.Add("dwCreation_Time")
Me.AxObjectListControl.SetSession(_windream.oSession, "foo", "bar")
'Change the satus icon
'ICON STATES:
Me.AxObjectListControl.SetStatusIcon(0)
'Change the icon
Me.AxObjectListControl.SetStatusIcon(2)
'Add all search params
For Each spar As String In param
'You need to use the column name here
'Please note that some attributes or indices will not be displayed
'Try not to add the same header twice, it will throw cause problems if you do that
Me.AxObjectListControl.AddColumnHeader(spar, 200)
Next
'Execute the search
Dim results As WMObjects = windreamSucheErgebnisse
'Set the contents without displaying them
AxObjectListControl.SetContentsEx(results)
'Change the icon
AxObjectListControl.SetStatusIcon(5)
'Display the results...
'The Previous Object Count
Dim poc As Integer = 0
'Display new objects, as long as the objectcount changes after displaying the objects
Do Until (poc <> AxObjectListControl.GetObjectCount)
poc = AxObjectListControl.GetObjectCount
'If you want, you can display more items at a time
'But do not display to many at a time or the user interface could freeze
'Maybe try 50
AxObjectListControl.DisplayResults(5)
Loop
AxObjectListControl.SetStatusIcon(3)
End If
If My.Computer.FileSystem.FileExists(newfilename) Then
My.Computer.FileSystem.DeleteFile(newfilename)
End If
Catch ex As Exception
MsgBox("Error in execute-windreamSearch:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End If
End If
End If
Catch ex As Exception
MsgBox("Error in load_Documents:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
#End Region
#Region "+++++ Mouse/Key Events +++++"
Private Sub Control_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
End Sub
Private Sub Control_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
End Sub
Private Sub Control_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
End Sub
#End Region
Sub OpenFormData(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Dim ctrl As Control = sender
Cursor = Cursors.WaitCursor
ClassFunctionCommandsUI.OpenFormData(ctrl.Name, thisformid)
Cursor = Cursors.Default
End Sub
Sub NewEditAppointment(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Dim ctrl As Control = sender
ClassFunctionCommandsUI.NewEditAppointment(ctrl.Name, thisformid, SelectedRecordID, pnlView.Controls)
End Sub
Private Sub FocusedRow_Change()
Try
If gvMainView.Columns.Count = 0 Then
Exit Sub
End If
Dim RecordID
If gvMainView.RowCount > 0 Then
RecordID = gvMainView.GetFocusedRowCellValue(gvMainView.Columns(0).FieldName)
If RecordID Is Nothing Then
Exit Sub
End If
End If
Dim CONTROL_ID As Integer
If RecordID Is Nothing = False Then
If (Not IsDBNull(RecordID)) Then
' TODO: AUCH IN CONTSTRUCTOR
' TODO: Doppelte einträge bei INSERT und UPDATE fixen
' TODO: FormID wird falsch oder nicht gesetzt
SelectedRecordID = RecordID
' SelectedFormID = RowView.Item(1)
RefreshRecordByID(SelectedRecordID)
ClassControlValues.LoadControlValuesNeu(SelectedRecordID, CURRENT_PARENTID, thisformid, pnlView.Controls)
End If
load_Documents()
End If
Catch ex As Exception
MsgBox("Error in FocusedRow_Change:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub ToolStrip_Notice(text As String)
If text.Length > 0 Then
tsstat_lbl.Text = text
tsstat_lbl.Visible = True
Else
tsstat_lbl.Visible = False
End If
End Sub
Private Sub RefreshRecordByID(RECORD_ID As Integer)
Try
Me.TBPMO_RECORDTableAdapter.Fill(Me.DD_DMSDataSet.TBPMO_RECORD, CType(RECORD_ID, Integer))
Catch ex As System.Exception
System.Windows.Forms.MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub BindingNavigatorDeleteItem_Click(sender As Object, e As EventArgs)
Dim result As MsgBoxResult
result = MessageBox.Show("Möchten Sie den Datensatz wirklich löschen?", "Bestätigung erforderlich:", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If result = MsgBoxResult.Yes Then
Dim sql As String = "DELETE FROM TBPMO_CONTROL_VALUE WHERE RECORD_ID = " & SelectedRecordID
If ClassDatabase.Execute_non_Query(sql) = True Then ' Delete der Controls erfolgreich ausgeführt, jetzt der Record
sql = "DELETE FROM TBPMO_RECORD WHERE GUID = " & SelectedRecordID
If ClassDatabase.Execute_non_Query(sql) = True Then
LoadOverview_Grid()
ToolStrip_Notice("Der Datensatz wurde erfolgreich gelöscht - " & Now)
End If
End If
End If
End Sub
Private Sub tsbtnrefresh_Click(sender As Object, e As EventArgs) Handles tsbtnrefresh.Click
LoadOverview_Grid()
End Sub
Private Sub tsButtonAdd_Click(sender As Object, e As EventArgs) Handles tsButtonAdd.Click
'CtrlCommandUI.LoadControls(thisformid)
ClassControlValues.LoadDefaultValues(thisformid, SelectedRecordID, pnlView.Controls)
'Das Flag INSERT nach LoadControls setzen
CtrlCommandUI.IsInsert = True
End Sub
Private Sub tsButtonSave_Click(sender As Object, e As EventArgs) Handles tsButtonSave.Click
SelectedRecordID = 0
If gvMainView.Columns.Count > 0 Then
Dim RecordID = gvMainView.GetFocusedRowCellValue(gvMainView.Columns("Record-ID").FieldName)
If RecordID Is Nothing And gvMainView.RowCount > 0 Then
Exit Sub
Else
If Not RecordID = Nothing Then
SelectedRecordID = RecordID
End If
End If
End If
Dim ResultMessage = CtrlCommandUI.SaveRecord(SelectedRecordID, thisformid)
LoadOverview_Grid()
If SelectedRecordID > 0 Then
Refresh_CreatedChangedRecordByID(SelectedRecordID)
End If
'Refresh_CreatedChangedRecordByID(thisrecordID)
ToolStrip_Notice(ResultMessage)
'tsstatus_Detail_show(True, ResultMessage)
End Sub
Private Sub tsButtonDelete_Click(sender As Object, e As EventArgs) Handles tsButtonDelete.Click
Dim result As MsgBoxResult
result = MessageBox.Show("Möchten Sie den Datensatz wirklich löschen?", "Bestätigung erforderlich:", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If result = MsgBoxResult.Yes Then
If CtrlCommandUI.DeleteRecord(SelectedRecordID) = True Then
LoadOverview_Grid()
ToolStrip_Notice("Der Datensatz wurde erfolgreich gelöscht - " & Now)
End If
End If
End Sub
Sub tserstellt_Detail_show(vis As Boolean, txt As String)
Me.tserstellt_Detail.Text = txt
tserstellt_Detail.Visible = vis
End Sub
Public Sub Refresh_CreatedChangedRecordByID(RECORD_ID As Integer)
Try
Dim result = ClassDatabase.Execute_Scalar("select 'Added by ' + ADDED_WHO + ' when ' + CONVERT(VARCHAR(16),ADDED_WHEN,20) + ', Changed by ' + COALESCE(CHANGED_WHO,'') + ' when ' + COALESCE(CONVERT(VARCHAR(16),CHANGED_WHEN,20),'') FROM TBPMO_RECORD WHERE GUID = " & RECORD_ID)
If IsDBNull(result) Or IsNothing(result) Then
'Me.tserstellt_Details.Text = ""
tserstellt_Detail_show(False, "")
Else
'Me.tserstellt_Details.Text = result.ToString
tserstellt_Detail_show(True, result.ToString)
End If
Catch ex As System.Exception
MsgBox("Error in Refresh_CreatedChangedRecordByID:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub gvMainView_FocusedRowChanged(sender As Object, e As DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs) Handles gvMainView.FocusedRowChanged
FocusedRow_Change()
End Sub
Private Sub StammdatenEditierenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles StammdatenEditierenToolStripMenuItem.Click
Dim MenuItem = DirectCast(sender, ToolStripMenuItem)
Dim ContextMenu As ContextMenuStrip = MenuItem.Owner
Dim SourceControl As Control = ContextMenu.SourceControl
Dim MasterDataId As Integer = SourceControl.Tag
CURRENT_MASTER_FORM_ID = MasterDataId
frmQuickInput.ShowDialog()
End Sub
Private Sub LäscheAlleFilterEtcToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles LäscheAlleFilterEtcToolStripMenuItem.Click
gvMainView.ClearColumnsFilter()
gvMainView.ClearGrouping()
gvMainView.ClearSelection()
End Sub
Private Sub dgvInput_Click(sender As Object, e As EventArgs) Handles dgvInput.Click
End Sub
End Class