diff --git a/3rdparty/lib/Commandline/CommandLine.dll b/3rdparty/lib/Commandline/CommandLine.dll new file mode 100644 index 0000000..d5497ef Binary files /dev/null and b/3rdparty/lib/Commandline/CommandLine.dll differ diff --git a/app/DD-Record-Organiser/ApplicationEvents.vb b/app/DD-Record-Organiser/ApplicationEvents.vb index 37d74c5..ac89f5a 100644 --- a/app/DD-Record-Organiser/ApplicationEvents.vb +++ b/app/DD-Record-Organiser/ApplicationEvents.vb @@ -8,9 +8,9 @@ ' StartupNextInstance: Wird beim Starten einer Einzelinstanzanwendung ausgelöst, wenn diese bereits aktiv ist. ' NetworkAvailabilityChanged: Wird beim Herstellen oder Trennen der Netzwerkverbindung ausgelöst. Partial Friend Class MyApplication - - - + Private Sub MyApplication_StartupNextInstance(sender As Object, e As ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance + ClassJumpRecord.ParseArgs() + End Sub End Class End Namespace \ No newline at end of file diff --git a/app/DD-Record-Organiser/ClassControlBuilder.vb b/app/DD-Record-Organiser/ClassControlBuilder.vb index 8c2eab6..25a8524 100644 --- a/app/DD-Record-Organiser/ClassControlBuilder.vb +++ b/app/DD-Record-Organiser/ClassControlBuilder.vb @@ -103,6 +103,7 @@ Public Class ClassControlBuilder Case "ComboBox" Dim combo As ComboBox = CType(control, ComboBox) AddHandler combo.SelectedValueChanged, AddressOf RecordChanged + AddHandler combo.TextChanged, AddressOf RecordChanged AddHandler combo.GotFocus, AddressOf OnComboBoxFocus AddHandler combo.LostFocus, AddressOf OnComboBoxLostFocus Case "RadioButton" diff --git a/app/DD-Record-Organiser/ClassControlCommandsUI.vb b/app/DD-Record-Organiser/ClassControlCommandsUI.vb index 2739025..3c71f27 100644 --- a/app/DD-Record-Organiser/ClassControlCommandsUI.vb +++ b/app/DD-Record-Organiser/ClassControlCommandsUI.vb @@ -466,7 +466,7 @@ Public Class ClassControlCommandsUI For Each ctrl As Control In controls Dim CONTROL_ID As Integer = ctrl.Tag 'GetControlID_for_RecordID(ctrl.Name, RecordID) If LogErrorsOnly = False Then ClassLogger.Add(">> CONTROL_ID: " & CONTROL_ID, False) - Dim CONTROL_VALUE As String = Nothing + Dim CONTROL_VALUE As String = GetControlValue(ctrl) If TypeOf ctrl Is PictureBox Then Dim id As Integer = ctrl.Tag 'GetControlID_for_Name(ctrl.Name, FormID) @@ -474,36 +474,19 @@ Public Class ClassControlCommandsUI Continue For End If - ' Neues Control - If CONTROL_ID = -1 Then - CONTROL_VALUE = GetControlValue(ctrl) + If TypeOf ctrl Is GroupBox Then + Dim ctrls As Control.ControlCollection = DirectCast(ctrl, GroupBox).Controls + UpdateAllControls(FormID, RecordID, ctrls) + Continue For + End If - ' Kein Bekanntes Control oder Groupbox - If IsNothing(CONTROL_VALUE) Then - If TypeOf ctrl Is GroupBox Then - Dim ctrls As Control.ControlCollection = DirectCast(ctrl, GroupBox).Controls + Dim ValueExists = ClassDatabase.Execute_Scalar(String.Format("SELECT RECORD_ID FROM VWPMO_VALUES WHERE RECORD_ID = {0} AND CONTROL_ID = {1}", RecordID, CONTROL_ID)) - UpdateAllControls(FormID, RecordID, ctrls) - End If - Else - Dim ctrlid As Integer = GetControlID_for_Name(ctrl.Name, FormID) - If LogErrorsOnly = False Then ClassLogger.Add(">> InsertControlValue: " & CONTROL_ID & "|" & RecordID & "|" & CONTROL_VALUE, False) - InsertControlValue(ctrlid, RecordID, CONTROL_VALUE) - End If - Else ' Control Updaten - If ctrl.Tag = 556 Then - Console.WriteLine("CheckedLB") - End If - CONTROL_VALUE = GetControlValue(ctrl) - ' Kein Bekanntes Control oder Groupbox - If IsNothing(CONTROL_VALUE) Then - If TypeOf ctrl Is GroupBox Then - Dim ctrls As Control.ControlCollection = DirectCast(ctrl, GroupBox).Controls - UpdateAllControls(FormID, RecordID, ctrls) - End If - Else - UpdateControlValue(CONTROL_ID, RecordID, CONTROL_VALUE) - End If + If ValueExists Then ' Control Updaten + UpdateControlValue(CONTROL_ID, RecordID, CONTROL_VALUE) + Else ' Neues Control + If LogErrorsOnly = False Then ClassLogger.Add(">> InsertControlValue: " & CONTROL_ID & "|" & RecordID & "|" & CONTROL_VALUE, False) + InsertControlValue(CONTROL_ID, RecordID, CONTROL_VALUE) End If Next Catch ex As Exception @@ -640,8 +623,20 @@ Public Class ClassControlCommandsUI ClassLogger.Add("Unerwarteter Fehler in Insert ConvertValue to Format'" & FORMAT_TYPE & "': " & ex.Message, True) End Try - Dim SQL = "INSERT INTO TBPMO_CONTROL_VALUE (CONTROL_ID, RECORD_ID, VALUE, ADDED_WHO) VALUES (" & ControlID & ", " & RecordID & ", '" & Value & "', '" & AddedWho & "')" - Return ClassDatabase.Execute_non_Query(SQL, True) + Using conn As New SqlClient.SqlConnection(MyConnectionString) + Dim cmd As New SqlClient.SqlCommand("INSERT INTO TBPMO_CONTROL_VALUE (CONTROL_ID, RECORD_ID, VALUE, ADDED_WHO) VALUES (@CONTROL_ID, @RECORD_ID, @VALUE, @ADDED_WHO)", conn) + cmd.Parameters.Add("@VALUE", SqlDbType.NVarChar).Value = Value + cmd.Parameters.Add("@ADDED_WHO", SqlDbType.VarChar).Value = AddedWho + cmd.Parameters.Add("@CONTROL_ID", SqlDbType.Int).Value = ControlID + cmd.Parameters.Add("@RECORD_ID", SqlDbType.Int).Value = RecordID + + conn.Open() + cmd.ExecuteNonQuery() + Return True + End Using + + 'Dim SQL = "INSERT INTO TBPMO_CONTROL_VALUE (CONTROL_ID, RECORD_ID, VALUE, ADDED_WHO) VALUES (" & ControlID & ", " & RecordID & ", '" & Value & "', '" & AddedWho & "')" + 'Return ClassDatabase.Execute_non_Query(SQL, True) Catch ex As Exception ClassLogger.Add("Unerwarteter Fehler in InsertControlValue: " & ex.Message, True) Return False @@ -666,8 +661,20 @@ Public Class ClassControlCommandsUI ClassLogger.Add("Unerwarteter Fehler in Update ConvertValue to Format'" & FORMAT_TYPE & "': " & ex.Message, True) End Try - Dim SQL As String = "UPDATE TBPMO_CONTROL_VALUE SET VALUE = '" & Value & "', CHANGED_WHO = '" & CHANGED_WHO & "' WHERE CONTROL_ID = " & ControlID & " AND RECORD_ID = " & RecordID - Return ClassDatabase.Execute_non_Query(SQL, True) + Using conn As New SqlClient.SqlConnection(MyConnectionString) + Dim cmd As New SqlClient.SqlCommand("UPDATE TBPMO_CONTROL_VALUE SET VALUE = @VALUE, CHANGED_WHO = @CHANGED_WHO WHERE CONTROL_ID = @CONTROL_ID AND RECORD_ID = @RECORD_ID", conn) + cmd.Parameters.Add("@VALUE", SqlDbType.NVarChar).Value = Value + cmd.Parameters.Add("@CHANGED_WHO", SqlDbType.VarChar).Value = CHANGED_WHO + cmd.Parameters.Add("@CONTROL_ID", SqlDbType.Int).Value = ControlID + cmd.Parameters.Add("@RECORD_ID", SqlDbType.Int).Value = RecordID + + conn.Open() + cmd.ExecuteNonQuery() + Return True + End Using + + 'Dim SQL As String = "UPDATE TBPMO_CONTROL_VALUE SET VALUE = '" & Value & "', CHANGED_WHO = '" & CHANGED_WHO & "' WHERE CONTROL_ID = " & ControlID & " AND RECORD_ID = " & RecordID + 'Return ClassDatabase.Execute_non_Query(Sql, True) Catch ex As Exception ClassLogger.Add("Unerwarteter Fehler in UpdateControlValue: " & ex.Message, True) diff --git a/app/DD-Record-Organiser/ClassControlLoader.vb b/app/DD-Record-Organiser/ClassControlLoader.vb new file mode 100644 index 0000000..e7cc5d9 --- /dev/null +++ b/app/DD-Record-Organiser/ClassControlLoader.vb @@ -0,0 +1,283 @@ +Namespace ControlLoader + + Public Class _BaseControl + + Public Shared Function ReplaceSqlCommandPlaceholders(sqlCommand As String, recordId As Integer, parentRecordId As Integer) + sqlCommand = sqlCommand.Replace("@RECORD_ID", recordId) + sqlCommand = sqlCommand.Replace("@RECORDID", recordId) + sqlCommand = sqlCommand.Replace("@PARENTRECORD_ID", parentRecordId) + sqlCommand = sqlCommand.Replace("@PARENTRECORDID", parentRecordId) + + Return sqlCommand + End Function + + Public Shared Function LoadAutoValue(control As Windows.Forms.Label, RecordId As Integer, ParentRecordId As Integer) + Dim AutoValue As String = String.Empty + Dim ControlId As Integer = control.Tag + Dim SQL As String = ClassDatabase.Execute_Scalar(String.Format("SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE GUID = {0}", ControlId)) + SQL = ReplaceSqlCommandPlaceholders(SQL, RecordId, ParentRecordId) + + If SQL = "" Or IsDBNull(SQL) Then + Return control.Text + End If + + AutoValue = ClassDatabase.Execute_Scalar(SQL) + + If String.IsNullOrEmpty(AutoValue) Or IsDBNull(AutoValue) Then + SQL = String.Format("SELECT CONTROL_TEXT FROM TBPMO_CONTROL_SCREEN WHERE CONTROL_ID = {0}", ControlId) + Dim value = ClassDatabase.Execute_Scalar(SQL) + Return value + Else + Return AutoValue + End If + + End Function + + End Class + + Public Class _ListControl : Inherits _BaseControl + Public Shared Function _GetDynamicValue(controlId As Integer, formId As Integer, recordId As Integer, parentRecordId As Integer) As DynamicValue + Dim returnValue As DynamicValue + + returnValue.StaticList = CheckForStaticList(controlId, recordId) + returnValue.DataTable = CheckForSqlCommand(controlId, formId, recordId, parentRecordId) + + Return returnValue + End Function + + Private Shared Function CheckForStaticList(controlId As Integer, recordId As Integer) As List(Of String) + Try + Dim SQL As String = String.Format("SELECT VALUE FROM VWPMO_VALUES WHERE CONTROL_ID = {0} AND RECORD_ID = {1}", controlId, recordId) + Dim staticList As String = ClassDatabase.Execute_Scalar(SQL) + + If IsNothing(staticList) Then + Return Nothing + Else + Return New List(Of String)(staticList.Split(";")) + End If + Catch ex As Exception + MsgBox("Error in CheckForStaticList: " & vbNewLine & ex.Message) + Return Nothing + End Try + End Function + + Private Shared Function CheckForSqlCommand(controlId As Integer, formId As Integer, recordId As Integer, parentRecordId As Integer) As DataTable + Try + Dim SQL As String = String.Format("SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE GUID = {0}", controlId) + Dim SqlCommand As String = ClassDatabase.Execute_Scalar(SQL) + + If SqlCommand Is Nothing Or SqlCommand = String.Empty Then + Return Nothing + End If + + If SqlCommand.Contains("@") Then + SqlCommand = ReplaceSqlCommandPlaceholders(SqlCommand, recordId, parentRecordId) + End If + + Dim CachedDataTable As DataTable = ClassControlValueCache.LoadFromCache(formId, controlId) + Dim FinalDataTable As DataTable + If CachedDataTable Is Nothing Then + FinalDataTable = ClassDatabase.Return_Datatable(SqlCommand) + ClassControlValueCache.SaveToCache(formId, controlId, FinalDataTable) + Else + FinalDataTable = CachedDataTable + End If + + Return FinalDataTable + Catch ex As Exception + MsgBox("Error in CheckForSqlCommand: " & vbNewLine & ex.Message) + Return Nothing + End Try + End Function + + + End Class + + Public Structure DynamicValue + Public StaticList As List(Of String) + Public DataTable As DataTable + End Structure + + Public Class Label : Inherits _BaseControl + + Public Shared Sub LoadValue(control As Windows.Forms.Label, recordId As Integer, parentRecordId As Integer, value As String) + Dim autoValue = LoadAutoValue(control, recordId, parentRecordId) + + If IsNothing(autoValue) Then + control.Text = value + Else + control.Text = autoValue + End If + End Sub + + End Class + + Public Class Checkbox : Inherits _BaseControl + + Public Shared Sub LoadValue(control As Windows.Forms.CheckBox, value As String) + Dim result As Boolean = False + Boolean.TryParse(value, result) + control.Checked = result + End Sub + + End Class + + Public Class RadioButton : Inherits _BaseControl + + Public Shared Sub LoadValue(control As Windows.Forms.RadioButton, value As String) + Dim result As Boolean = False + Boolean.TryParse(value, result) + control.Checked = result + End Sub + + End Class + + Public Class TextBox : Inherits _BaseControl + + Public Shared Sub LoadValue(control As Windows.Forms.TextBox, value As String) + control.Text = value + End Sub + + End Class + + Public Class DateTimePicker : Inherits _BaseControl + + Public Shared Sub LoadValue(control As DevExpress.XtraEditors.DateEdit, value As String) + If String.IsNullOrWhiteSpace(value) Or value = "00:00:00" Then + control.DateTime = DateTime.MinValue + Else + control.DateTime = DateTime.Parse(value) + End If + End Sub + + End Class + + Public Class Combobox : Inherits _ListControl + + Public Shared Sub LoadValue(control As Windows.Forms.ComboBox, value As String) + control.Text = value + End Sub + + Public Shared Sub LoadList(control As Windows.Forms.ComboBox, formId As Integer, recordId As Integer, parentRecordId As Integer) + Try + Dim dynamic As DynamicValue = _GetDynamicValue(control.Tag, formId, recordId, parentRecordId) + + If dynamic.StaticList IsNot Nothing Then + control.DataSource = dynamic.StaticList + End If + + If dynamic.DataTable IsNot Nothing AndAlso dynamic.DataTable.Rows.Count > 0 Then + Dim dt As DataTable = dynamic.DataTable + + control.DataSource = dt + If dt.Columns.Count = 1 Then + control.DisplayMember = dt.Columns(0).ColumnName + control.ValueMember = dt.Columns(0).ColumnName + ElseIf dt.Columns.Count = 2 Then + control.DisplayMember = dt.Columns(1).ColumnName + control.ValueMember = dt.Columns(0).ColumnName + End If + + CalculateDropdownWidth(control, dt) + End If + Catch ex As Exception + MsgBox("Error in Combobox.LoadList:" & vbNewLine & ex.Message) + End Try + End Sub + + Private Shared Sub CalculateDropdownWidth(control As Windows.Forms.ComboBox, dt As DataTable) + Const WIDEST_WIDTH As Integer = 300 + Dim FinalWidth As Integer = WIDEST_WIDTH + For Each row As DataRow In dt.Rows + 'Die Breite der Dropdown-List anpassen + Using g As Graphics = control.CreateGraphics() + Dim valueWidth As Integer = g.MeasureString(row.Item(1).ToString(), control.Font).Width + If valueWidth + 30 > FinalWidth Then + FinalWidth = valueWidth + 30 + End If + g.Dispose() + End Using + Next + + If FinalWidth > WIDEST_WIDTH Then + control.DropDownWidth = Math.Max(FinalWidth, control.Width) + End If + End Sub + + End Class + + Public Class CheckedListBox : Inherits _ListControl + + Public Shared Sub LoadValue(control As DevExpress.XtraEditors.CheckedListBoxControl, value As String) + If IsNothing(value) Then + Exit Sub + End If + + Dim values() As String = value.Split(";") + + For Each v As String In values + Dim pos = control.FindStringExact(v) + If pos >= 0 Then + control.SetItemCheckState(pos, CheckState.Checked) + End If + Next + End Sub + + Public Shared Sub LoadList(control As DevExpress.XtraEditors.CheckedListBoxControl, formId As Integer, recordId As Integer, parentRecordId As Integer) + Try + Dim dynamic As DynamicValue = _GetDynamicValue(control.Tag, formId, recordId, parentRecordId) + + If dynamic.StaticList IsNot Nothing Then + control.DataSource = dynamic.StaticList + End If + + If dynamic.DataTable IsNot Nothing AndAlso dynamic.DataTable.Rows.Count > 0 Then + Dim dt As DataTable = dynamic.DataTable + + control.DataSource = dt + If dt.Columns.Count = 1 Then + control.DisplayMember = dt.Columns(0).ColumnName + control.ValueMember = dt.Columns(0).ColumnName + ElseIf dt.Columns.Count = 2 Then + control.DisplayMember = dt.Columns(1).ColumnName + control.ValueMember = dt.Columns(0).ColumnName + End If + End If + + Catch ex As Exception + MsgBox("Error in CheckedListBox.LoadList:" & vbNewLine & ex.Message) + End Try + End Sub + + End Class + + Public Class ListBox : Inherits _ListControl + + Public Shared Sub LoadValue(control As DevExpress.XtraEditors.ListBoxControl, value As String) + control.SelectedIndex = control.FindStringExact(value) + End Sub + + Public Shared Sub LoadList(control As DevExpress.XtraEditors.ListBoxControl, formId As Integer, recordId As Integer, parentRecordId As Integer) + Dim dynamic As DynamicValue = _GetDynamicValue(control.Tag, formId, recordId, parentRecordId) + + If dynamic.StaticList IsNot Nothing Then + control.DataSource = dynamic.StaticList + End If + + If dynamic.DataTable IsNot Nothing AndAlso dynamic.DataTable.Rows.Count > 0 Then + Dim dt As DataTable = dynamic.DataTable + + control.DataSource = dt + If dt.Columns.Count = 1 Then + control.DisplayMember = dt.Columns(0).ColumnName + control.ValueMember = dt.Columns(0).ColumnName + ElseIf dt.Columns.Count = 2 Then + control.DisplayMember = dt.Columns(1).ColumnName + control.ValueMember = dt.Columns(0).ColumnName + End If + End If + End Sub + + End Class + +End Namespace diff --git a/app/DD-Record-Organiser/ClassControlValues.vb b/app/DD-Record-Organiser/ClassControlValues.vb index 92daf3f..1d6272b 100644 --- a/app/DD-Record-Organiser/ClassControlValues.vb +++ b/app/DD-Record-Organiser/ClassControlValues.vb @@ -1,616 +1,224 @@ Imports DevExpress.XtraEditors.Controls Public Class ClassControlValues - Private Shared Function LoadControlAutoValue(ControlID As Integer, RecordID As Integer, control As Control) As String + 'Private Shared Function LoadControlAutoValue(ControlID As Integer, RecordID As Integer, control As Control) As String - If TypeOf control Is Label Then - 'If ControlID = 320 Then - ' MsgBox("") - 'End If - ' Dim SQL As String = "SELECT CONTROL_TYPE_ID FROM TBPMO_CONTROL WHERE GUID = " & ControlID - ' Dim type As Integer = ClassDatabase.Execute_Scalar(SQL) - Dim SQL - ' Wenn kein/leerer Wert gefunden, suche nach einem SQL Command für Automatischen Wert - 'If type = 1 Then - Dim autoValue - SQL = "SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE GUID = " & ControlID - Dim result = ClassDatabase.Execute_Scalar(SQL) - result = result.Replace("@FORM_ID", CURRENT_FORM_ID) - result = result.Replace("@RECORD_ID", CURRENT_RECORD_ID) - result = result.Replace("@RECORDID", CURRENT_RECORD_ID) - result = result.Replace("@PARENTRECORD_ID", CURRENT_PARENTID) - ' Wenn das SQL Command leer ist, hat dieses Control kein SQL Command - ' Gib den ursprünlichen Text zurück - If result = "" Then - Return control.Text - Else - autoValue = ClassDatabase.Execute_Scalar(result) + ' If TypeOf control Is Label Then + ' Dim SQL = "SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE GUID = " & ControlID + ' Dim autoValue + ' Dim result = ClassDatabase.Execute_Scalar(SQL) + ' result = result.Replace("@FORM_ID", CURRENT_FORM_ID) + ' result = result.Replace("@RECORD_ID", CURRENT_RECORD_ID) + ' result = result.Replace("@RECORDID", CURRENT_RECORD_ID) + ' result = result.Replace("@PARENTRECORD_ID", CURRENT_PARENTID) + ' ' Wenn das SQL Command leer ist, hat dieses Control kein SQL Command + ' ' Gib den ursprünlichen Text zurück + ' If result = "" Then + ' Return control.Text + ' Else + ' autoValue = ClassDatabase.Execute_Scalar(result) - ' Wenn das SQL Command DBNull zurück gibt, - ' Überschreibe den alten Wert mit " " (Leerzeichen) - If IsDBNull(autoValue) Then - SQL = "SELECT CONTROL_TEXT FROM TBPMO_CONTROL_SCREEN WHERE CONTROL_ID = " & ControlID - Dim value = ClassDatabase.Execute_Scalar(SQL) - Return value - Else - Return autoValue - End If - End If - 'End If + ' ' Wenn das SQL Command DBNull zurück gibt, + ' ' Überschreibe den alten Wert mit " " (Leerzeichen) + ' If IsDBNull(autoValue) Then + ' SQL = "SELECT CONTROL_TEXT FROM TBPMO_CONTROL_SCREEN WHERE CONTROL_ID = " & ControlID + ' Dim value = ClassDatabase.Execute_Scalar(SQL) + ' Return value + ' Else + ' Return autoValue + ' End If + ' End If + ' 'End If - 'Return Nothing - Else - Return Nothing - End If + ' 'Return Nothing + ' Else + ' Return Nothing + ' End If - End Function + 'End Function - Public Shared Sub LoadControlValue(RecordID As Integer, ControlID As Integer, control As Control) - Try - ' Dim DT1 As DataTable = ClassDatabase.Return_Datatable() - Dim DT As DataTable = ClassDatabase.Return_Datatable("SELECT * FROM VWPMO_VALUES WHERE RECORD_ID = " & RecordID & " and CONTROL_ID = " & ControlID, "LaodControlValue: ReturnValues") - If DT.Rows.Count = 0 Then - Dim autoValue = LoadControlAutoValue(ControlID, RecordID, control) + 'Public Shared Sub LoadControlValue(RecordID As Integer, ControlID As Integer, control As Control) + ' Try + ' ' Dim DT1 As DataTable = ClassDatabase.Return_Datatable() + ' Dim DT As DataTable = ClassDatabase.Return_Datatable("SELECT * FROM VWPMO_VALUES WHERE RECORD_ID = " & RecordID & " and CONTROL_ID = " & ControlID, "LaodControlValue: ReturnValues") + ' If DT.Rows.Count = 0 Then + ' Dim autoValue = LoadControlAutoValue(ControlID, RecordID, control) - If Not String.IsNullOrEmpty(autoValue) Then - control.Text = autoValue - End If + ' If Not String.IsNullOrEmpty(autoValue) Then + ' control.Text = autoValue + ' End If - Exit Sub - End If + ' Exit Sub + ' End If - Dim result = DT.Rows(0).Item("VALUE") - '22.06.2015 - If Not IsDBNull(result) Then - Select Case DT.Rows(0).Item("CONTROL_TYPE_ID") - Case 1 'Label - Dim label As Label = DirectCast(control, Label) - Dim autoValue As String = LoadControlAutoValue(ControlID, RecordID, control) - If Not IsNothing(autoValue) Then - label.Text = autoValue - End If - 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 11 'RadioButton - Dim radio As RadioButton = DirectCast(control, RadioButton) - radio.Checked = CBool(result) - Case 3 ' ComboBox - Dim cmbbox As ComboBox = DirectCast(control, System.Windows.Forms.ComboBox) - cmbbox.Text = result - 'If LogErrorsOnly = False Then ClassLogger.Add(">> control ComboBox", False) - 'Dim cmbSql As String = "SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE GUID = " & ControlID - 'cmbSql = ClassDatabase.Execute_Scalar(cmbSql) - 'If Not (cmbSql Is Nothing Or cmbSql = String.Empty) Then - ' If cmbSql.ToString.Contains("@") Then - ' cmbSql = cmbSql.ToString.Replace("@RECORDID", CURRENT_RECORD_ID) - ' cmbSql = cmbSql.ToString.Replace("@RECORD_ID", CURRENT_RECORD_ID) - ' cmbSql = cmbSql.ToString.Replace("@PARENTRECORD_ID", CURRENT_PARENTID) - ' If LogErrorsOnly = False Then ClassLogger.Add(">> SQL Combobox: " & cmbSql, False) - ' End If - ' If LogErrorsOnly = False Then ClassLogger.Add(">> SQL Combobox: " & cmbSql, False) + ' Dim result = DT.Rows(0).Item("VALUE") + ' '22.06.2015 + ' If Not IsDBNull(result) Then + ' Select Case DT.Rows(0).Item("CONTROL_TYPE_ID") + ' Case 1 'Label + ' Dim label As Label = DirectCast(control, Label) + ' Dim autoValue As String = LoadControlAutoValue(ControlID, RecordID, control) + ' If Not IsNothing(autoValue) Then + ' label.Text = autoValue + ' End If + ' 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 11 'RadioButton + ' Dim radio As RadioButton = DirectCast(control, RadioButton) + ' radio.Checked = CBool(result) + ' Case 3 ' ComboBox + ' Dim cmbbox As ComboBox = DirectCast(control, System.Windows.Forms.ComboBox) + ' cmbbox.Text = result + ' 'If LogErrorsOnly = False Then ClassLogger.Add(">> control ComboBox", False) + ' 'Dim cmbSql As String = "SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE GUID = " & ControlID + ' 'cmbSql = ClassDatabase.Execute_Scalar(cmbSql) + ' 'If Not (cmbSql Is Nothing Or cmbSql = String.Empty) Then + ' ' If cmbSql.ToString.Contains("@") Then + ' ' cmbSql = cmbSql.ToString.Replace("@RECORDID", CURRENT_RECORD_ID) + ' ' cmbSql = cmbSql.ToString.Replace("@RECORD_ID", CURRENT_RECORD_ID) + ' ' cmbSql = cmbSql.ToString.Replace("@PARENTRECORD_ID", CURRENT_PARENTID) + ' ' If LogErrorsOnly = False Then ClassLogger.Add(">> SQL Combobox: " & cmbSql, False) + ' ' End If + ' ' If LogErrorsOnly = False Then ClassLogger.Add(">> SQL Combobox: " & cmbSql, False) - ' 'SQL-Command vorhanden also Ausführen des SQL - ' Dim DT_ComboBox As DataTable = ClassDatabase.Return_Datatable(cmbSql, "LoadControlValues: Combobox") - ' If DT_ComboBox Is Nothing = False Then - ' cmbbox.DataSource = DT_ComboBox - ' Select Case DT_ComboBox.Columns.Count - ' Case 2 - ' cmbbox.DisplayMember = DT_ComboBox.Columns(1).ColumnName - ' cmbbox.ValueMember = DT_ComboBox.Columns(0).ColumnName - ' Case 1 - ' cmbbox.DisplayMember = DT_ComboBox.Columns(0).ColumnName - ' cmbbox.ValueMember = DT_ComboBox.Columns(0).ColumnName - ' End Select + ' ' 'SQL-Command vorhanden also Ausführen des SQL + ' ' Dim DT_ComboBox As DataTable = ClassDatabase.Return_Datatable(cmbSql, "LoadControlValues: Combobox") + ' ' If DT_ComboBox Is Nothing = False Then + ' ' cmbbox.DataSource = DT_ComboBox + ' ' Select Case DT_ComboBox.Columns.Count + ' ' Case 2 + ' ' cmbbox.DisplayMember = DT_ComboBox.Columns(1).ColumnName + ' ' cmbbox.ValueMember = DT_ComboBox.Columns(0).ColumnName + ' ' Case 1 + ' ' cmbbox.DisplayMember = DT_ComboBox.Columns(0).ColumnName + ' ' cmbbox.ValueMember = DT_ComboBox.Columns(0).ColumnName + ' ' End Select - ' End If - 'End If - ''combobox.DataSource = Nothing - 'If cmbbox.SelectedIndex = -1 Then - ' cmbbox.DataSource = Nothing - ' cmbbox.Text = result - 'Else - ' cmbbox.SelectedIndex = cmbbox.FindStringExact(result) - 'End If - Case 4 'DateTimePicker - Dim datepicker As DevExpress.XtraEditors.DateEdit = DirectCast(control, DevExpress.XtraEditors.DateEdit) + ' ' End If + ' 'End If + ' ''combobox.DataSource = Nothing + ' 'If cmbbox.SelectedIndex = -1 Then + ' ' cmbbox.DataSource = Nothing + ' ' cmbbox.Text = result + ' 'Else + ' ' cmbbox.SelectedIndex = cmbbox.FindStringExact(result) + ' 'End If + ' Case 4 'DateTimePicker + ' Dim datepicker As DevExpress.XtraEditors.DateEdit = DirectCast(control, DevExpress.XtraEditors.DateEdit) - If result = "" Or result = "00:00:00" Then - datepicker.DateTime = DateTime.MinValue - Else - datepicker.DateTime = Date.Parse(result) - End If - Case 13 ' Listbox - Dim listbox As DevExpress.XtraEditors.ListBoxControl = DirectCast(control, DevExpress.XtraEditors.ListBoxControl) - listbox.SelectedIndex = listbox.FindStringExact(result) - Case Else - If LogErrorsOnly = False Then ClassLogger.Add(">> Sub LoadControlValue - Control-Type nicht berücksichtigt: " & DT.Rows(0).Item("CONTROL_TYPE_ID"), False) - 'MsgBox(DT.Rows(0).Item("CONTROL_TYPE_ID")) - End Select - Else - ClassLogger.Add(" >> Achtung, der Value für Control-ID: " & ControlID & " ist DBNull", False) - End If + ' If result = "" Or result = "00:00:00" Then + ' datepicker.DateTime = DateTime.MinValue + ' Else + ' datepicker.DateTime = Date.Parse(result) + ' End If + ' Case 13 ' Listbox + ' Dim listbox As DevExpress.XtraEditors.ListBoxControl = DirectCast(control, DevExpress.XtraEditors.ListBoxControl) + ' listbox.SelectedIndex = listbox.FindStringExact(result) + ' Case Else + ' If LogErrorsOnly = False Then ClassLogger.Add(">> Sub LoadControlValue - Control-Type nicht berücksichtigt: " & DT.Rows(0).Item("CONTROL_TYPE_ID"), False) + ' 'MsgBox(DT.Rows(0).Item("CONTROL_TYPE_ID")) + ' End Select + ' Else + ' ClassLogger.Add(" >> Achtung, der Value für Control-ID: " & ControlID & " ist DBNull", False) + ' End If - Catch ex As Exception - MsgBox("Error in LoadControlValue:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) - End Try - End Sub + ' Catch ex As Exception + ' MsgBox("Error in LoadControlValue:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) + ' End Try + 'End Sub #Region "#### ClassControlValues REWRITE ####" - Public Shared Sub LoadControlValuesNeu(RecordId As Integer, FormId As Integer, controls As Control.ControlCollection) - - ClearControlValues(controls) + Public Shared Sub LoadControlValuesNeu(RecordId As Integer, ParentRecordId As Integer, FormId As Integer, controls As Control.ControlCollection) Try - ' Dim SQL As String = String.Format("SELECT * FROM VWPMO_VALUES WHERE VALUE <> '' AND RECORD_ID = {0}", RecordId) - ' Dim DT_ControlValues As DataTable = ClassDatabase.Return_Datatable(SQL, "LoadControlValues") + Dim SQL As String = String.Format("SELECT * FROM VWPMO_VALUES WHERE VALUE <> '' AND RECORD_ID = {0}", RecordId) + Dim DT_ControlValues As DataTable = ClassDatabase.Return_Datatable(SQL, "LoadControlValues") + If controls.Count = 0 Then ClassLogger.Add("the control-Collection in LoadControlValuesNeu is empty!", True) End If + + ' Zuerst alle Controls leeren + ClearControlValues(controls) + For Each control As Control In controls Dim ControlId As Integer = CInt(control.Tag) - Dim SQL1 As String = String.Format("SELECT VALUE FROM VWPMO_VALUES WHERE CONTROL_ID = {0} AND VALUE <> '' AND RECORD_ID = {1}", ControlId, RecordId) - Dim value = ClassDatabase.Execute_Scalar(SQL1) - '' Wert per LINQ aus DT_ControlValues suchen der zur aktuellen controlId passt - 'Dim value = (From row In DT_ControlValues.AsEnumerable() - ' Where row.Item("CONTROL_ID") = ControlId - ' Select row.Item("VALUE")).SingleOrDefault() + ' Wert per LINQ aus DT_ControlValues suchen der zur aktuellen controlId passt + Dim value = (From row In DT_ControlValues.AsEnumerable() + Where row.Item("CONTROL_ID") = ControlId + Select row.Item("VALUE")).SingleOrDefault() - If Not IsNothing(value) Then - ' Continue For - If TypeOf control Is GroupBox Then - Dim groupbox As GroupBox = DirectCast(control, GroupBox) - LoadControlValuesNeu(RecordId, FormId, groupbox.Controls) - Else - LoadControlValueNeu(RecordId, ControlId, control, value) - End If + If TypeOf control Is GroupBox Then + Dim groupbox As GroupBox = DirectCast(control, GroupBox) + LoadControlValuesNeu(RecordId, ParentRecordId, FormId, groupbox.Controls) Else - If TypeOf control Is DevExpress.XtraEditors.CheckedListBoxControl Then - If LogErrorsOnly = False Then ClassLogger.Add(">> control DevExpress.XtraEditors.CheckedListBoxControl", False) - Dim chklbx As DevExpress.XtraEditors.CheckedListBoxControl - chklbx = DirectCast(control, DevExpress.XtraEditors.CheckedListBoxControl) - - Dim chklbSql As String = "SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE GUID = " & ControlId - ' chklbSql = ClassDatabase.Execute_Scalar(chklbSql) - ' If Not (chklbSql Is Nothing Or chklbSql = String.Empty) Then - ' If chklbSql.ToString.Contains("@") Then - ' chklbSql = chklbSql.ToString.Replace("@RECORDID", CURRENT_RECORD_ID) - ' chklbSql = chklbSql.ToString.Replace("@RECORD_ID", CURRENT_RECORD_ID) - ' chklbSql = chklbSql.ToString.Replace("@PARENTRECORD_ID", CURRENT_PARENTID) - ' If LogErrorsOnly = False Then ClassLogger.Add(">> SQL CheckedListBox: " & chklbSql, False) - ' 'SQL-Command vorhanden also Ausführen des SQL - ' Dim DT_ListBox As DataTable = ClassDatabase.Return_Datatable(chklbSql, "LoadControlValues: CheckedListBox") - ' If DT_ListBox Is Nothing = False Then - ' chklbx.DataSource = DT_ListBox - ' Select Case DT_ListBox.Columns.Count - ' Case 2 - ' chklbx.DisplayMember = DT_ListBox.Columns(1).ColumnName - ' chklbx.ValueMember = DT_ListBox.Columns(0).ColumnName - ' Case 1 - ' chklbx.DisplayMember = DT_ListBox.Columns(0).ColumnName - ' chklbx.ValueMember = DT_ListBox.Columns(0).ColumnName - ' End Select - - ' End If - ' End If - - ' ElseIf (chklbSql = String.Empty) Then - ' ' Wenn keine SQL Command ein leerer String ist, - ' ' lade das Control ohne Datenbank, da es wahrscheinlich eine Static List ist - ' chklbSql = "SELECT VALUE FROM VWPMO_VALUES WHERE CONTROL_ID = " & CONTROL_ID & " AND RECORD_ID = " & RecordID - ' Dim result As String = ClassDatabase.Execute_Scalar(chklbSql) - - ' If Not IsNothing(result) Then - ' If result.ToString <> String.Empty Then - ' Dim entries() As String = result.Split(";") - ' For Each entry As String In entries - ' Dim position = chklbx.FindStringExact(entry) - ' chklbx.SetItemCheckState(position, CheckState.Checked) - ' Next - ' End If - ' End If - - ' Continue For - ' Else - ' If LogErrorsOnly = False Then ClassLogger.Add(">> chklbSql is nothing", False) - ' End If - - ' chklbx.UnCheckAll() - ' 'Recorddatensätze durchlaufen und überprüfen ob angehakt?? - ' Dim index As Integer = 0 - ' For i As Integer = 0 To chklbx.ItemCount - 1 - ' Dim item = chklbx.GetItem(i) - ' Dim row As DataRowView = CType(item, DataRowView) - ' If CInt(row(0)) > 0 Then - ' 'Überprüfen ob es den Record gibt - ' Dim SQL = "SELECT COUNT(*) FROM TBPMO_RECORD_CONNECT WHERE RECORD1_ID = " & CURRENT_RECORD_ID & " AND RECORD2_ID = " & CInt(row(0)) - ' If ClassDatabase.Execute_Scalar(SQL) = 1 Then - ' chklbx.SetItemChecked(i, True) - ' End If - ' End If - - ' Next - ElseIf TypeOf control Is Label Then - LoadControlValueNeu(RecordId, ControlId, control, value) - End If + LoadControlValueNeu(RecordId, ParentRecordId, ControlId, control, value) End If - - Next Catch ex As Exception MsgBox("Error in LoadControlValuesNeu:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try - + End Sub - Private Shared Sub LoadControlValueNeu(recordId As Integer, controlId As Integer, control As Control, value As Object) + Private Shared Sub LoadControlValueNeu(recordId As Integer, parentRecordId As Integer, controlId As Integer, control As Control, value As Object) Try Select Case control.GetType() Case GetType(TextBox) Dim textbox As TextBox = DirectCast(control, TextBox) - textbox.Text = value + ControlLoader.TextBox.LoadValue(textbox, value) + Case GetType(Label) Dim label As Label = DirectCast(control, Label) - Dim autoValue As String = LoadControlAutoValue(controlId, recordId, control) + ControlLoader.Label.LoadValue(label, recordId, parentRecordId, value) - If IsNothing(autoValue) Then - label.Text = value - Else - label.Text = autoValue - End If Case GetType(ComboBox) Dim combobox As ComboBox = DirectCast(control, ComboBox) - combobox.Text = value + ControlLoader.Combobox.LoadValue(combobox, value) + Case GetType(CheckBox) Dim checkbox As CheckBox = DirectCast(control, CheckBox) - checkbox.Checked = Boolean.Parse(value) + ControlLoader.Checkbox.LoadValue(checkbox, value) + Case GetType(RadioButton) Dim radiobutton As RadioButton = DirectCast(control, RadioButton) - radiobutton.Checked = Boolean.Parse(value) + ControlLoader.RadioButton.LoadValue(radiobutton, value) + Case GetType(DevExpress.XtraEditors.DateEdit) Dim datepicker As DevExpress.XtraEditors.DateEdit = DirectCast(control, DevExpress.XtraEditors.DateEdit) - If value = String.Empty Or value = "00:00:00" Then - datepicker.DateTime = DateTime.MinValue - Else - datepicker.DateTime = DateTime.Parse(value) - End If + ControlLoader.DateTimePicker.LoadValue(datepicker, value) + Case GetType(DevExpress.XtraEditors.ListBoxControl) Dim listbox As DevExpress.XtraEditors.ListBoxControl = DirectCast(control, DevExpress.XtraEditors.ListBoxControl) - listbox.SelectedIndex = listbox.FindStringExact(value) - Case GetType(PictureBox) - LoadImage(recordId, controlId, control) + ControlLoader.ListBox.LoadValue(listbox, value) + Case GetType(DevExpress.XtraEditors.CheckedListBoxControl) - Dim chklbx As DevExpress.XtraEditors.CheckedListBoxControl - chklbx = DirectCast(control, DevExpress.XtraEditors.CheckedListBoxControl) - If Not IsNothing(value) Then - If value.ToString <> String.Empty Then - Dim entries() As String = value.Split(";") - For Each entry As String In entries - Dim position = chklbx.FindStringExact(entry) - chklbx.SetItemCheckState(position, CheckState.Checked) - Next - End If - End If + Dim checkedlistbox As DevExpress.XtraEditors.CheckedListBoxControl = DirectCast(control, DevExpress.XtraEditors.CheckedListBoxControl) + ControlLoader.CheckedListBox.LoadValue(checkedlistbox, value) + + Case GetType(PictureBox) + Dim picturebox = DirectCast(control, PictureBox) + LoadImage(recordId, controlId, picturebox) + Case Else - If LogErrorsOnly = False Then ClassLogger.Add(">> Sub LoadControlValueNeu - Control-Type is not being worked: " & GetType(Control).ToString(), False) + If LogErrorsOnly = False Then ClassLogger.Add(">> Sub LoadControlValue - Control-Type nicht berücksichtigt: " & GetType(Control).ToString(), False) End Select Catch ex As Exception - MsgBox("Error in LoadControlValueNeu:" & vbNewLine & ex.Message) + MsgBox("Error in LoadControlValue:" & vbNewLine & ex.Message) End Try + End Sub - 'Private Shared Function CheckForStaticList(controlId As Integer, recordId As Integer) - ' Try - ' Dim SQL As String = String.Format("SELECT VALUE FROM VWPMO_VALUES WHERE CONTROL_ID = {0} AND RECORD_ID = {1}", controlId, recordId) - ' Dim staticList As String = ClassDatabase.Execute_Scalar(SQL) - - ' If IsNothing(staticList) Then - ' Return Nothing - ' Else - ' Return staticList - ' End If - ' Catch ex As Exception - ' MsgBox("Error in CheckForStaticList: " & vbNewLine & ex.Message) - ' End Try - 'End Function - - 'Private Shared Function CheckForSqlCommand(controlId As Integer) As DataTable - ' Try - ' Dim SQL As String = String.Format("SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE GUID = {0}", controlId) - ' Dim SqlCommand As String = ClassDatabase.Execute_Scalar(SQL) - - ' If SqlCommand Is Nothing Or SqlCommand = String.Empty Then - ' Return Nothing - ' End If - - ' If SqlCommand.Contains("@") Then - ' SqlCommand = ReplaceSqlCommandPlaceholders(SqlCommand) - ' End If - - ' Return ClassDatabase.Return_Datatable(SqlCommand) - ' Catch ex As Exception - ' MsgBox("Error in CheckForSqlCommand: " & vbNewLine & ex.Message) - ' End Try - 'End Function - - 'Private Shared Function ReplaceSqlCommandPlaceholders(sqlCommand As String) - ' sqlCommand = sqlCommand.Replace("@RECORD_ID", CURRENT_RECORD_ID) - ' sqlCommand = sqlCommand.Replace("@RECORDID", CURRENT_RECORD_ID) - ' sqlCommand = sqlCommand.Replace("PARENTRECORD_ID", CURRENT_PARENTID) - ' sqlCommand = sqlCommand.Replace("PARENTRECORDID", CURRENT_PARENTID) - - ' Return sqlCommand - 'End Function #End Region - - 'Public Shared Sub LoadControlValues(RecordID As Integer, FormID As Integer, controls As Control.ControlCollection) - ' Try - ' Dim CONTROL_ID As Integer - - ' ClearControlValues(controls) - - ' For Each control As Control In controls - ' 'Überhaupt Columns in Grid? - ' CONTROL_ID = GetControlID_for_RecordID(control.Name, RecordID) - ' If CONTROL_ID = -1 Then - ' CONTROL_ID = GetControlID_for_Name(control.Name, FormID) - ' End If - ' If LogErrorsOnly = False Then ClassLogger.Add(">> CONTROL_ID:" & CONTROL_ID, False) - ' ClearControlValue(control) - ' If TypeOf control Is ComboBox Then - ' LoadControlValue_forControl(RecordID, FormID, DirectCast(control, ComboBox), CONTROL_ID) - ' 'LoadControlValues(RecordID, FormID, DirectCast(control, ComboBox).Controls) - ' ElseIf TypeOf control Is GroupBox Then - ' 'LoadControlValue_forControl(RecordID, FormID, DirectCast(control, GroupBox), CONTROL_ID) - ' LoadControlValues(RecordID, FormID, DirectCast(control, GroupBox).Controls) - ' ElseIf TypeOf control Is PictureBox Then - ' LoadImage(RecordID, CONTROL_ID, control) - ' Else - ' LoadControlValue(RecordID, CONTROL_ID, control) - ' End If - ' ''EINE CheckedListBoxControl - ' 'If TypeOf control Is DevExpress.XtraEditors.CheckedListBoxControl Then - ' ' If LogErrorsOnly = False Then ClassLogger.Add(">> control DevExpress.XtraEditors.CheckedListBoxControl", False) - ' ' Dim chklbx As DevExpress.XtraEditors.CheckedListBoxControl - ' ' chklbx = DirectCast(control, DevExpress.XtraEditors.CheckedListBoxControl) - - ' ' Dim chklbSql As String = "SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE GUID = " & CONTROL_ID - ' ' chklbSql = ClassDatabase.Execute_Scalar(chklbSql) - ' ' If Not (chklbSql Is Nothing Or chklbSql = String.Empty) Then - ' ' If chklbSql.ToString.Contains("@") Then - ' ' chklbSql = chklbSql.ToString.Replace("@RECORDID", CURRENT_RECORD_ID) - ' ' chklbSql = chklbSql.ToString.Replace("@RECORD_ID", CURRENT_RECORD_ID) - ' ' chklbSql = chklbSql.ToString.Replace("@PARENTRECORD_ID", CURRENT_PARENTID) - ' ' If LogErrorsOnly = False Then ClassLogger.Add(">> SQL CheckedListBox: " & chklbSql, False) - ' ' 'SQL-Command vorhanden also Ausführen des SQL - ' ' Dim DT_ListBox As DataTable = ClassDatabase.Return_Datatable(chklbSql, "LoadControlValues: CheckedListBox") - ' ' If DT_ListBox Is Nothing = False Then - ' ' chklbx.DataSource = DT_ListBox - ' ' Select Case DT_ListBox.Columns.Count - ' ' Case 2 - ' ' chklbx.DisplayMember = DT_ListBox.Columns(1).ColumnName - ' ' chklbx.ValueMember = DT_ListBox.Columns(0).ColumnName - ' ' Case 1 - ' ' chklbx.DisplayMember = DT_ListBox.Columns(0).ColumnName - ' ' chklbx.ValueMember = DT_ListBox.Columns(0).ColumnName - ' ' End Select - - ' ' End If - ' ' End If - - ' ' ElseIf (chklbSql = String.Empty) Then - ' ' ' Wenn keine SQL Command ein leerer String ist, - ' ' ' lade das Control ohne Datenbank, da es wahrscheinlich eine Static List ist - ' ' chklbSql = "SELECT VALUE FROM VWPMO_VALUES WHERE CONTROL_ID = " & CONTROL_ID & " AND RECORD_ID = " & RecordID - ' ' Dim result As String = ClassDatabase.Execute_Scalar(chklbSql) - - ' ' If Not IsNothing(result) Then - ' ' If result.ToString <> String.Empty Then - ' ' Dim entries() As String = result.Split(";") - ' ' For Each entry As String In entries - ' ' Dim position = chklbx.FindStringExact(entry) - ' ' chklbx.SetItemCheckState(position, CheckState.Checked) - ' ' Next - ' ' End If - ' ' End If - - ' ' Continue For - ' ' Else - ' ' If LogErrorsOnly = False Then ClassLogger.Add(">> chklbSql is nothing", False) - ' ' End If - - ' ' chklbx.UnCheckAll() - ' ' 'Recorddatensätze durchlaufen und überprüfen ob angehakt?? - ' ' Dim index As Integer = 0 - ' ' For i As Integer = 0 To chklbx.ItemCount - 1 - ' ' Dim item = chklbx.GetItem(i) - ' ' Dim row As DataRowView = CType(item, DataRowView) - ' ' If CInt(row(0)) > 0 Then - ' ' 'Überprüfen ob es den Record gibt - ' ' Dim SQL = "SELECT COUNT(*) FROM TBPMO_RECORD_CONNECT WHERE RECORD1_ID = " & CURRENT_RECORD_ID & " AND RECORD2_ID = " & CInt(row(0)) - ' ' If ClassDatabase.Execute_Scalar(SQL) = 1 Then - ' ' chklbx.SetItemChecked(i, True) - ' ' End If - ' ' End If - - ' ' Next - ' 'ElseIf TypeOf control Is DevExpress.XtraEditors.ListBoxControl Then - ' ' If LogErrorsOnly = False Then ClassLogger.Add(">> control DevExpress.XtraEditors.ListBoxControl", False) - ' ' Dim lbx As DevExpress.XtraEditors.ListBoxControl - ' ' lbx = DirectCast(control, DevExpress.XtraEditors.ListBoxControl) - ' ' Dim lbSql As String = "SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE GUID = " & CONTROL_ID - ' ' lbSql = ClassDatabase.Execute_Scalar(lbSql) - ' ' If Not (lbSql Is Nothing Or lbSql = String.Empty) Then - ' ' If lbSql.ToString.Contains("@") Then - ' ' lbSql = lbSql.ToString.Replace("@RECORDID".ToUpper, CURRENT_RECORD_ID) - ' ' lbSql = lbSql.ToString.Replace("@RECORD_ID".ToUpper, CURRENT_RECORD_ID) - ' ' lbSql = lbSql.ToString.Replace("@PARENTRECORD_ID".ToUpper, CURRENT_PARENTID) - ' ' If LogErrorsOnly = False Then ClassLogger.Add(">> SQL ListBox: " & lbSql, False) - ' ' 'SQL-Command vorhanden also Ausführen des SQL - ' ' Dim DT_ListBox As DataTable = ClassDatabase.Return_Datatable(lbSql, "LoadControlValues: ListBoxControl") - ' ' If DT_ListBox Is Nothing = False Then - ' ' lbx.DataSource = DT_ListBox - ' ' Select Case DT_ListBox.Columns.Count - ' ' Case 2 - ' ' lbx.DisplayMember = DT_ListBox.Columns(1).ColumnName - ' ' lbx.ValueMember = DT_ListBox.Columns(0).ColumnName - ' ' Case 1 - ' ' lbx.DisplayMember = DT_ListBox.Columns(0).ColumnName - ' ' lbx.ValueMember = DT_ListBox.Columns(0).ColumnName - ' ' End Select - ' ' If DT_ListBox.Columns.Count > 1 Then - - ' ' End If - - ' ' Else - ' ' If LogErrorsOnly = False Then ClassLogger.Add(">> DT_ListBox is nothing", False) - ' ' End If - ' ' Else - ' ' If LogErrorsOnly = False Then ClassLogger.Add(">> lbSql.ToString NOT Contains(@)", False) - ' ' End If - ' ' ElseIf (lbSql = String.Empty) Then - ' ' ' Wenn keine SQL Command ein leerer String ist, - ' ' ' lade das Control ohne Datenbank, da es wahrscheinlich eine Static List ist - ' ' LoadControlValue(RecordID, CONTROL_ID, control) - ' ' Continue For - ' ' Else - ' ' If LogErrorsOnly = False Then ClassLogger.Add(">> lbSql is nothing", False) - ' ' End If - ' 'ElseIf CONTROL_ID <> -1 Then - ' ' 'If LogErrorsOnly = False Then ClassLogger.Add(">> LoadControlValues CONTROL_ID: " & CONTROL_ID, False) - ' ' LoadControlValue(RecordID, CONTROL_ID, control) - ' 'End If - ' Next - ' Catch ex As Exception - ' MsgBox("Unexpected Error in LoadControlValues:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) - ' End Try - - 'End Sub - 'Public Shared Sub LoadControlValue_forControl(RecordID As Integer, FormID As Integer, control As System.Windows.Forms.Control, CONTROL_ID As Integer) - ' Try - ' 'EINE CheckedListBoxControl - ' If TypeOf control Is DevExpress.XtraEditors.CheckedListBoxControl Then - ' If LogErrorsOnly = False Then ClassLogger.Add(">> control DevExpress.XtraEditors.CheckedListBoxControl", False) - ' Dim chklbx As DevExpress.XtraEditors.CheckedListBoxControl - ' chklbx = DirectCast(control, DevExpress.XtraEditors.CheckedListBoxControl) - - ' Dim chklbSql As String = "SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE GUID = " & CONTROL_ID - ' chklbSql = ClassDatabase.Execute_Scalar(chklbSql) - ' If Not (chklbSql Is Nothing Or chklbSql = String.Empty) Then - ' If chklbSql.ToString.Contains("@") Then - ' chklbSql = chklbSql.ToString.Replace("@RECORDID", CURRENT_RECORD_ID) - ' chklbSql = chklbSql.ToString.Replace("@RECORD_ID", CURRENT_RECORD_ID) - ' chklbSql = chklbSql.ToString.Replace("@PARENTRECORD_ID", CURRENT_PARENTID) - ' If LogErrorsOnly = False Then ClassLogger.Add(">> SQL CheckedListBox: " & chklbSql, False) - ' 'SQL-Command vorhanden also Ausführen des SQL - ' Dim DT_ListBox As DataTable = ClassDatabase.Return_Datatable(chklbSql, "LoadControlValue_forControl: CheckedListBox") - ' If DT_ListBox Is Nothing = False Then - ' chklbx.DataSource = DT_ListBox - ' Select Case DT_ListBox.Columns.Count - ' Case 2 - ' chklbx.DisplayMember = DT_ListBox.Columns(1).ColumnName - ' chklbx.ValueMember = DT_ListBox.Columns(0).ColumnName - ' Case 1 - ' chklbx.DisplayMember = DT_ListBox.Columns(0).ColumnName - ' chklbx.ValueMember = DT_ListBox.Columns(0).ColumnName - ' End Select - - ' End If - ' End If - ' ElseIf (chklbSql = String.Empty) Then - ' ' Wenn keine SQL Command ein leerer String ist, - ' ' lade das Control ohne Datenbank, da es wahrscheinlich eine Static List ist - ' chklbSql = "SELECT VALUE FROM VWPMO_VALUES WHERE CONTROL_ID = " & CONTROL_ID & " AND RECORD_ID = " & RecordID - ' Dim result As String = ClassDatabase.Execute_Scalar(chklbSql) - - ' If Not IsNothing(result) Then - ' If result.ToString <> String.Empty Then - ' Dim entries() As String = result.Split(";") - ' For Each entry As String In entries - ' Dim position = chklbx.FindStringExact(entry) - ' chklbx.SetItemCheckState(position, CheckState.Checked) - ' Next - ' End If - ' End If - ' Else - ' If LogErrorsOnly = False Then ClassLogger.Add(">> chklbSql is nothing", False) - ' End If - - ' chklbx.UnCheckAll() - ' 'Recorddatensätze durchlaufen und überprüfen ob angehakt?? - ' Dim index As Integer = 0 - ' For i As Integer = 0 To chklbx.ItemCount - 1 - ' Dim item = chklbx.GetItem(i) - ' Dim row As DataRowView = CType(item, DataRowView) - ' If CInt(row(0)) > 0 Then - ' 'Überprüfen ob es den Record gibt - ' Dim SQL = "SELECT COUNT(*) FROM TBPMO_RECORD_CONNECT WHERE RECORD1_ID = " & CURRENT_RECORD_ID & " AND RECORD2_ID = " & CInt(row(0)) - ' If ClassDatabase.Execute_Scalar(SQL) = 1 Then - ' chklbx.SetItemChecked(i, True) - ' End If - ' End If - - ' Next - ' ElseIf TypeOf control Is DevExpress.XtraEditors.ListBoxControl Then - ' If LogErrorsOnly = False Then ClassLogger.Add(">> control DevExpress.XtraEditors.ListBoxControl", False) - ' Dim lbx As DevExpress.XtraEditors.ListBoxControl - ' lbx = DirectCast(control, DevExpress.XtraEditors.ListBoxControl) - ' Dim lbSql As String = "SELECT SQL_COMMAND_1 FROM TBPMO_CONTROL WHERE GUID = " & CONTROL_ID - ' lbSql = ClassDatabase.Execute_Scalar(lbSql) - ' If Not (lbSql Is Nothing Or lbSql = String.Empty) Then - ' If lbSql.ToString.Contains("@") Then - ' lbSql = lbSql.ToString.Replace("@RECORDID".ToUpper, CURRENT_RECORD_ID) - ' lbSql = lbSql.ToString.Replace("@RECORD_ID".ToUpper, CURRENT_RECORD_ID) - ' lbSql = lbSql.ToString.Replace("@PARENTRECORD_ID".ToUpper, CURRENT_PARENTID) - ' If LogErrorsOnly = False Then ClassLogger.Add(">> SQL ListBox: " & lbSql, False) - ' 'SQL-Command vorhanden also Ausführen des SQL - ' Dim DT_ListBox As DataTable = ClassDatabase.Return_Datatable(lbSql, "LoadControlValue_forControl: ListBoxControl") - ' If DT_ListBox Is Nothing = False Then - ' lbx.DataSource = DT_ListBox - ' Select Case DT_ListBox.Columns.Count - ' Case 2 - ' lbx.DisplayMember = DT_ListBox.Columns(1).ColumnName - ' lbx.ValueMember = DT_ListBox.Columns(0).ColumnName - ' Case 1 - ' lbx.DisplayMember = DT_ListBox.Columns(0).ColumnName - ' lbx.ValueMember = DT_ListBox.Columns(0).ColumnName - ' End Select - ' If DT_ListBox.Columns.Count > 1 Then - - ' End If - - ' Else - ' If LogErrorsOnly = False Then ClassLogger.Add(">> DT_ListBox is nothing", False) - ' End If - ' Else - ' If LogErrorsOnly = False Then ClassLogger.Add(">> lbSql.ToString NOT Contains(@)", False) - ' End If - ' ElseIf (lbSql = String.Empty) Then - ' ' Wenn keine SQL Command ein leerer String ist, - ' ' lade das Control ohne Datenbank, da es wahrscheinlich eine Static List ist - ' LoadControlValue(RecordID, CONTROL_ID, control) - ' Else - ' If LogErrorsOnly = False Then ClassLogger.Add(">> lbSql is nothing", False) - ' End If - ' ElseIf CONTROL_ID <> -1 Then - ' 'If LogErrorsOnly = False Then ClassLogger.Add(">> LoadControlValue_forControl CONTROL_ID: " & CONTROL_ID, False) - ' LoadControlValue(RecordID, CONTROL_ID, control) - ' End If - - ' Catch ex As Exception - ' MsgBox("Unexpected Error in LoadControlValue_forControl:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) - ' End Try - - 'End Sub - - Public Shared Sub LoadControlValuesList(RecordID As Integer, FormID As Integer, controls As Control.ControlCollection) + Public Shared Sub LoadControlValuesList(RecordID As Integer, ParentRecordId As Integer, FormID As Integer, controls As Control.ControlCollection) Try If controls.Count = 0 Then MsgBox("Control.ControlCollection is unexpected empty!", MsgBoxStyle.Exclamation) @@ -641,7 +249,7 @@ Public Class ClassControlValues 'Dim DT_Combobox As DataTable = ClassDatabase.Return_Datatable(SQL2) ' Zuerst versuchen, DataTable aus dem Cache zu laden - Dim DT_Combobox As DataTable = ClassControlValueCache.LoadFromCache(FormID, controlId) + Dim DT_Combobox As DataTable = ClassControlValueCache.LoadFromCache(FormID, ControlId) ' Wenn DataTable nicht im Cache vorhanden, aus der Datenbank laden If IsNothing(DT_Combobox) Then DT_Combobox = ClassDatabase.Return_Datatable(SQL2) @@ -653,7 +261,7 @@ Public Class ClassControlValues Combobox.DisplayMember = DT_Combobox.Columns(1).ColumnName Combobox.ValueMember = DT_Combobox.Columns(0).ColumnName - ClassControlValueCache.SaveToCache(FormID, controlId, DT_Combobox) + ClassControlValueCache.SaveToCache(FormID, ControlId, DT_Combobox) End If Dim iWidestWidth As Integer = 300 @@ -672,8 +280,8 @@ Public Class ClassControlValues Combobox.DropDownWidth = Math.Max(iWidestWidth, Combobox.Width) End If - LoadControlValue(RecordID, ControlId, Ctrl) - 'LoadControlValueNeu(RecordID, ControlId, Ctrl, "") + 'LoadControlValue(RecordID, ControlId, Ctrl) + LoadControlValueNeu(RecordID, ParentRecordId, ControlId, Ctrl, "") End If swInner.Stop() @@ -717,6 +325,7 @@ Public Class ClassControlValues End If End Sub +#Region "ClearControlValue" Public Shared Sub ClearControlValues(controls As Control.ControlCollection) For Each control In controls If control.GetType().Name = "GroupBox" Then @@ -729,60 +338,58 @@ Public Class ClassControlValues End Sub Public Shared Sub ClearControlValue(control As Control) - Dim type = control.GetType().Name - - Select Case type - Case "TextBox" + Select Case control.GetType() + Case GetType(TextBox) DirectCast(control, TextBox).Text = String.Empty - Case "ComboBox" + + Case GetType(ComboBox) Dim combo As ComboBox = DirectCast(control, ComboBox) combo.SelectedIndex = -1 combo.Text = String.Empty - Case "CheckBox" + + Case GetType(CheckBox) DirectCast(control, CheckBox).Checked = False - Case "RadioButton" + + Case GetType(RadioButton) DirectCast(control, RadioButton).Checked = False - Case "DateEdit" + + Case GetType(DevExpress.XtraEditors.DateEdit) DirectCast(control, DevExpress.XtraEditors.DateEdit).DateTime = Now - Case "PictureBox" + + Case GetType(PictureBox) DirectCast(control, PictureBox).BackgroundImage = Nothing - Case "CheckedListBoxControl" + + Case GetType(DevExpress.XtraEditors.CheckedListBoxControl) Dim chklbx As DevExpress.XtraEditors.CheckedListBoxControl = DirectCast(control, DevExpress.XtraEditors.CheckedListBoxControl) - 'If IsNothing(chklbx.DataSource) Then chklbx.UnCheckAll() - 'End If - 'Case "ListBoxControl" - ' Dim lbx As DevExpress.XtraEditors.ListBoxControl - ' lbx = DirectCast(control, DevExpress.XtraEditors.ListBoxControl) - ' lbx.DataSource = Nothing - Case Else + + Case GetType(DevExpress.XtraEditors.ListBoxControl) + Dim lb As DevExpress.XtraEditors.ListBoxControl = DirectCast(control, DevExpress.XtraEditors.ListBoxControl) + lb.SelectedIndex = -1 End Select End Sub +#End Region +#Region "LoadDefaultValue" Public Shared Sub LoadDefaultValues(FormID As Integer, RecordID As Integer, controls As Control.ControlCollection) - Dim CONTROL_ID As Integer + '' Zuerst alle Controls leeren + 'ClearControlValues(controls) - ' Zuerst alle Controls leeren - ClearControlValues(controls) Dim i = 0 For Each control As Control In controls - CONTROL_ID = control.Tag ' GetControlID_for_Name(control.Name, FormID) + Dim CONTROL_ID = control.Tag ' GetControlID_for_Name(control.Name, FormID) If Not (TypeOf control Is Label) Then i += 1 End If + If TypeOf control Is GroupBox Then LoadDefaultValues(FormID, RecordID, DirectCast(control, GroupBox).Controls) - ElseIf TypeOf control Is DevExpress.XtraEditors.CheckedListBoxControl Then - Dim chklbx As DevExpress.XtraEditors.CheckedListBoxControl - chklbx = DirectCast(control, DevExpress.XtraEditors.CheckedListBoxControl) - chklbx.UnCheckAll() End If - If CONTROL_ID <> -1 Then - LoadDefaultValue(CONTROL_ID, RecordID, control) - End If + LoadDefaultValue(CONTROL_ID, RecordID, control) + 'Den Focus auf das erste Steuerelement setzen If i = 1 Then control.Focus() @@ -793,57 +400,64 @@ Public Class ClassControlValues Public Shared Sub LoadDefaultValue(ControlID As Integer, RecordID As Integer, control As Control) Try - Dim SQL = "SELECT * FROM VWPMO_CONTROL_SCREEN WHERE CONTROL_ID = " & ControlID - Dim DT As DataTable = ClassDatabase.Return_Datatable(SQL) - Dim result = DT.Rows(0).Item("CONTROL_DEF_VALUE") + Dim SQL = String.Format("SELECT CONTROL_DEF_VALUE FROM VWPMO_CONTROL_SCREEN WHERE CONTROL_ID = {0}", ControlID) + Dim autoValue = ClassDatabase.Execute_Scalar(SQL) - Select Case DT.Rows(0).Item("CTRLTYPE_ID") - Case 2 ' TextBox + 'Dim SQL = "SELECT * FROM VWPMO_CONTROL_SCREEN WHERE CONTROL_ID = " & ControlID + 'Dim DT As DataTable = ClassDatabase.Return_Datatable(SQL) + 'Dim result = DT.Rows(0).Item("CONTROL_DEF_VALUE") + + Select Case control.GetType() + Case GetType(TextBox) Dim textbox As TextBox = DirectCast(control, TextBox) - If IsDBNull(result) Then + If IsDBNull(autoValue) Then textbox.Text = "" Else - Dim vorgabe = result + Dim vorgabe = autoValue 'Wenn der Default Wert über einen Select kommt If vorgabe.ToString.ToLower.StartsWith("select") Then - vorgabe = result.Replace("@FORM_ID", CURRENT_FORM_ID) + vorgabe = autoValue.Replace("@FORM_ID", CURRENT_FORM_ID) vorgabe = vorgabe.Replace("@RECORD_ID", CURRENT_RECORD_ID) vorgabe = vorgabe.Replace("@RECORDID", CURRENT_RECORD_ID) vorgabe = vorgabe.Replace("@PARENTRECORD_ID", CURRENT_PARENTID) - result = ClassDatabase.Execute_Scalar(vorgabe.ToString, True) + autoValue = ClassDatabase.Execute_Scalar(vorgabe.ToString, True) If IsNothing(vorgabe) Then textbox.Text = "" End If End If - textbox.Text = result - + textbox.Text = autoValue End If - Case 10 ' CheckBox + + Case GetType(CheckBox) Dim checkbox As CheckBox = DirectCast(control, CheckBox) - checkbox.Checked = StrToBool(result) - Case 11 'RadioButton + checkbox.Checked = StrToBool(autoValue) + + Case GetType(RadioButton) Dim radio As RadioButton = DirectCast(control, RadioButton) - radio.Checked = StrToBool(result) - Case 3 ' ComboBox + radio.Checked = StrToBool(autoValue) + + Case GetType(ComboBox) Dim combobox As ComboBox = DirectCast(control, ComboBox) - If IsDBNull(result) Then + If IsDBNull(autoValue) Then combobox.SelectedIndex = -1 Else - combobox.SelectedIndex = combobox.FindStringExact(result) + combobox.SelectedIndex = combobox.FindStringExact(autoValue) End If - Case 4 'DateTimePicker + Case GetType(DevExpress.XtraEditors.DateEdit) Dim datepicker As DevExpress.XtraEditors.DateEdit = DirectCast(control, DevExpress.XtraEditors.DateEdit) - If IsDBNull(result) OrElse result = "" OrElse result = "False" Then - result = Now + If IsDBNull(autoValue) OrElse autoValue = "" OrElse autoValue = "False" Then + autoValue = Now End If - datepicker.DateTime = result + datepicker.DateTime = autoValue End Select - Catch ex As Exception MsgBox("Unexpected Error in LoadDefaultValue:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try End Sub +#End Region + + Public Shared Function Get_Control_Value_for_ID(Control_ID As Integer, Record_ID As Integer) Try Return ClassDatabase.Execute_Scalar("SELECT VALUE FROM TBPMO_CONTROL_VALUE WHERE CONTROL_ID = " & Control_ID & " AND RECORD_ID = " & Record_ID, True) diff --git a/app/DD-Record-Organiser/ClassInit.vb b/app/DD-Record-Organiser/ClassInit.vb index 25c7cd2..e56dc2e 100644 --- a/app/DD-Record-Organiser/ClassInit.vb +++ b/app/DD-Record-Organiser/ClassInit.vb @@ -28,7 +28,6 @@ Public Class ClassInit If dbResult = False Then Throw New Exception("Find more information in the logfile.") End If - Return True Catch ex As Exception MsgBox("Unexpected Error in Init Database:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) Return False @@ -47,7 +46,7 @@ Public Class ClassInit Catch ex As Exception MsgBox("Unexpected Error in Init windream:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try - + End Sub @@ -127,7 +126,7 @@ Public Class ClassInit USERS_LOGGED_IN = CInt(anzahl) If LogErrorsOnly = False Then ClassLogger.Add(" >> Anzahl Angemeldete User: " & anzahl.ToString, False) '#### - + If LICENSE_COUNT < USERS_LOGGED_IN And LICENSE_EXPIRED = False Then MsgBox("Die Anzahl der aktuell angemeldeten User (" & USERS_LOGGED_IN.ToString & ") überschreitet die Anzahl der aktuellen Lizenzen!" & vbNewLine & "Anzahl der Lizenzen: " & LICENSE_COUNT.ToString & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!", MsgBoxStyle.Critical, "Achtung:") ClassLogger.Add(" >> Die Anzahl der aktuell angemeldeten User (" & USERS_LOGGED_IN.ToString & ") überschreitet die Anzahl der Lizenzen (" & LICENSE_COUNT & ") für Record-Organizer!", False) diff --git a/app/DD-Record-Organiser/ClassJumpRecord.vb b/app/DD-Record-Organiser/ClassJumpRecord.vb new file mode 100644 index 0000000..b29d180 --- /dev/null +++ b/app/DD-Record-Organiser/ClassJumpRecord.vb @@ -0,0 +1,62 @@ +Imports CommandLine +Imports CommandLine.Text +Imports System.Text.RegularExpressions + +Public Class ClassJumpRecord + Private Shared ProtocolRegex As New Regex("pmo://(?\d+)-(?\d+)") + 'Aufruf: PMO.exe --data pmo://10-60 + + Class Options + <[Option]("d", "data")> + Public Property data As String + End Class + + Public Shared Sub ParseArgs() + Try + Dim args() As String = Environment.GetCommandLineArgs() + Dim options As New Options() + Dim constructorId As Integer + Dim recordId As Integer + + If args.Length <> 3 Then + Exit Sub + End If + + If (Parser.Default.ParseArguments(args, options)) Then + Dim data As String = options.data + Dim match = ProtocolRegex.Match(data) + + If Not match.Success Then + Exit Sub + End If + + constructorId = match.Groups("constructorId").Value + recordId = match.Groups("recordId").Value + + JumpToRecord(constructorId, recordId) + Else + Exit Sub + End If + Catch ex As Exception + MsgBox("Error in ParseArgs:" & vbNewLine & ex.Message) + Exit Sub + End Try + End Sub + + Private Shared Sub JumpToRecord(constructorId As Integer, recordId As Integer) + Try + Dim constructorIdExists As Boolean = ClassDatabase.Execute_Scalar(String.Format("SELECT CONSTRUCT_ID FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = {0}", constructorId)) + Dim recordIdExists As Boolean = ClassDatabase.Execute_Scalar(String.Format("SELECT GUID FROM TBPMO_RECORD WHERE GUID = {0}", recordId)) + + If constructorIdExists = False Or recordIdExists = False Then + MsgBox("Das angegebene Formular konnte nicht geöffnet werden. Grund: Die ConstructorID oder die RecordID wurde nicht gefunden." & vbNewLine & "constructorId: " & constructorId & ", recordId: " & recordId, MsgBoxStyle.Exclamation, "URL Handler") + Exit Sub + End If + + OpenFormConstructor(constructorId, recordId) + Catch ex As Exception + MsgBox("Error in JumpToRecord:" & vbNewLine & ex.Message) + Exit Sub + End Try + End Sub +End Class diff --git a/app/DD-Record-Organiser/DD-Record-Organiser.vbproj b/app/DD-Record-Organiser/DD-Record-Organiser.vbproj index c288f1f..1e32710 100644 --- a/app/DD-Record-Organiser/DD-Record-Organiser.vbproj +++ b/app/DD-Record-Organiser/DD-Record-Organiser.vbproj @@ -78,6 +78,9 @@ ..\..\3rdparty\lib\Windream\AxInterop.OBJECTLISTCONTROLLib.dll True + + ..\..\3rdparty\lib\Commandline\CommandLine.dll + False True @@ -243,9 +246,11 @@ + + frmAbout.vb diff --git a/app/DD-Record-Organiser/ModuleHelperMethods.vb b/app/DD-Record-Organiser/ModuleHelperMethods.vb index 39f3acf..6bc034e 100644 --- a/app/DD-Record-Organiser/ModuleHelperMethods.vb +++ b/app/DD-Record-Organiser/ModuleHelperMethods.vb @@ -211,23 +211,8 @@ frm3.Show() End Sub - Public Sub OpenFormConstructor(id As Integer) - CURRENT_CONSTRUCTOR_ID = id - Dim frm As New frmForm_Constructor() - Dim activeChild As Form = MAIN_FORM.ActiveMdiChild - If activeChild IsNot Nothing Then - activeChild.WindowState = FormWindowState.Normal - End If - - frm.MdiParent = MAIN_FORM - frm.Show() - ' frm = frmForm_Constructor.Instance() - - End Sub - - ' TODO: NUR FÜR WINDREAM CON!!! - Public Sub OpenFormConstructorDemo(id As Integer) + Public Sub OpenFormConstructor(id As Integer, Optional recordId As Integer = -1) Try CURRENT_CONSTRUCTOR_ID = id Dim frm As New frmForm_Constructor_Main_2() @@ -238,6 +223,11 @@ activeChild.WindowState = FormWindowState.Normal End If + If recordId <> -1 Then + ' Wenn JUMP_RECORD_ID gesetzt wurde, wird zu diesem Record gesprungen + JUMP_RECORD_ID = recordId + End If + frm.MdiParent = MAIN_FORM frm.Show() Catch ex As Exception @@ -245,7 +235,6 @@ MsgBox("Fehler beim Laden des Formulars, bitte erneut versuchen") End Try End Sub - ' TODO: NUR FÜR WINDREAM CON!!! Public Sub OpenTaskmanagement() Dim frm As New frmTaskmanagement diff --git a/app/DD-Record-Organiser/My Project/AssemblyInfo.vb b/app/DD-Record-Organiser/My Project/AssemblyInfo.vb index d8f6a6c..18566a4 100644 --- a/app/DD-Record-Organiser/My Project/AssemblyInfo.vb +++ b/app/DD-Record-Organiser/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - + diff --git a/app/DD-Record-Organiser/Resources/magifier_zoom_out.png b/app/DD-Record-Organiser/Resources/magifier_zoom_out.png new file mode 100644 index 0000000..81f2819 Binary files /dev/null and b/app/DD-Record-Organiser/Resources/magifier_zoom_out.png differ diff --git a/app/DD-Record-Organiser/Resources/page_red.png b/app/DD-Record-Organiser/Resources/page_red.png new file mode 100644 index 0000000..0b18247 Binary files /dev/null and b/app/DD-Record-Organiser/Resources/page_red.png differ diff --git a/app/DD-Record-Organiser/frmCustomAppointment.vb b/app/DD-Record-Organiser/frmCustomAppointment.vb index 39f72b4..c4d3a38 100644 --- a/app/DD-Record-Organiser/frmCustomAppointment.vb +++ b/app/DD-Record-Organiser/frmCustomAppointment.vb @@ -100,7 +100,7 @@ Partial Public Class frmCustomAppointment ' TODO: FormId und ConstructId herausfinden - OpenFormConstructorDemo(constructId) + OpenFormConstructor(constructId) Me.Close() End If End Sub diff --git a/app/DD-Record-Organiser/frmForm_Constructor.vb b/app/DD-Record-Organiser/frmForm_Constructor.vb index 00ab45d..8b914a4 100644 --- a/app/DD-Record-Organiser/frmForm_Constructor.vb +++ b/app/DD-Record-Organiser/frmForm_Constructor.vb @@ -1119,8 +1119,8 @@ Public Class frmForm_Constructor Load_Entity_Data_Only() Search_RowHandle(CURRENT_RECORD_ID) 'Die Daten auf dem Panel laden - ClassControlValues.LoadControlValuesNeu(CURRENT_RECORD_ID, CURRENT_FORM_ID, CtrlBuilder.AllControls) - ClassControlValues.LoadControlValuesList(CURRENT_RECORD_ID, CURRENT_FORM_ID, CtrlBuilder.AllControls) + ClassControlValues.LoadControlValuesNeu(CURRENT_RECORD_ID, CURRENT_PARENTID,CURRENT_FORM_ID, CtrlBuilder.AllControls) + ClassControlValues.LoadControlValuesList(CURRENT_RECORD_ID, CURRENT_PARENTID, CURRENT_FORM_ID, CtrlBuilder.AllControls) pnlDetails.Enabled = True End If Catch ex As Exception @@ -1645,8 +1645,8 @@ Public Class frmForm_Constructor If EDIT_STATE = "none" Then 'TabPageDetails.Text = "Detaileingabe zu '" & ACT_EBENE_STRING & "' - Record(" & SelectedRecordID & ")" 'Die Daten auf dem Panel laden - ClassControlValues.LoadControlValuesNeu(SelectedRecordID, CURRENT_FORM_ID, CtrlBuilder.AllControls) - ClassControlValues.LoadControlValuesList(SelectedRecordID, CURRENT_FORM_ID, CtrlBuilder.AllControls) + ClassControlValues.LoadControlValuesNeu(SelectedRecordID, CURRENT_PARENTID, CURRENT_FORM_ID, CtrlBuilder.AllControls) + ClassControlValues.LoadControlValuesList(SelectedRecordID, CURRENT_PARENTID, CURRENT_FORM_ID, CtrlBuilder.AllControls) 'Load_Control_Values(CtrlBuilder.AllControls) 'Refresh_Treeview_SelectedData() RECORD_CHANGED = False @@ -2361,8 +2361,8 @@ Public Class frmForm_Constructor Select Case TCDetails.SelectedTabPageIndex Case 0 If RECORD_NEEDS_REFRESH = True Then - ClassControlValues.LoadControlValuesNeu(SelectedRecordID, CURRENT_FORM_ID, CtrlBuilder.AllControls) - ClassControlValues.LoadControlValuesList(SelectedRecordID, CURRENT_FORM_ID, CtrlBuilder.AllControls) + ClassControlValues.LoadControlValuesNeu(SelectedRecordID, CURRENT_PARENTID, CURRENT_FORM_ID, CtrlBuilder.AllControls) + ClassControlValues.LoadControlValuesList(SelectedRecordID, CURRENT_PARENTID, CURRENT_FORM_ID, CtrlBuilder.AllControls) UpdRECORD_NEEDS_REFRESH(False) End If diff --git a/app/DD-Record-Organiser/frmForm_Constructor_Main.vb b/app/DD-Record-Organiser/frmForm_Constructor_Main.vb index 713daa5..6ddc4a3 100644 --- a/app/DD-Record-Organiser/frmForm_Constructor_Main.vb +++ b/app/DD-Record-Organiser/frmForm_Constructor_Main.vb @@ -822,7 +822,7 @@ Public Class frmForm_Constructor_Main Load_Entity_Data_Only() Get_Grid_Row_Handle(CURRENT_RECORD_ID) 'Die Daten auf dem Panel laden - ClassControlValues.LoadControlValuesNeu(CURRENT_RECORD_ID, CURRENT_FORM_ID, CtrlBuilder.AllControls) + ClassControlValues.LoadControlValuesNeu(CURRENT_RECORD_ID, CURRENT_PARENTID, CURRENT_FORM_ID, CtrlBuilder.AllControls) pnlDetails.Enabled = True End If @@ -859,7 +859,7 @@ Public Class frmForm_Constructor_Main Me.tsButtonEditMode.Text = "Bearbeiten beenden" 'Funktion zum Vollständigen load der Inhalte - ClassControlValues.LoadControlValuesList(SELECTED_RECORD_ID, CURRENT_FORM_ID, CtrlBuilder.AllControls) + ClassControlValues.LoadControlValuesList(SELECTED_RECORD_ID, CURRENT_PARENTID, CURRENT_FORM_ID, CtrlBuilder.AllControls) Else RECORD_ENABLED = False Me.pnlDetails.Enabled = False @@ -1521,7 +1521,7 @@ Public Class frmForm_Constructor_Main If EDIT_STATE = EditState.None Then 'TabPageDetails.Text = "Detaileingabe zu '" & ACT_EBENE_STRING & "' - Record(" & SelectedRecordID & ")" 'Die Daten auf dem Panel laden - ClassControlValues.LoadControlValuesNeu(SELECTED_RECORD_ID, CURRENT_FORM_ID, CtrlBuilder.AllControls) + ClassControlValues.LoadControlValuesNeu(SELECTED_RECORD_ID, CURRENT_PARENTID, CURRENT_FORM_ID, CtrlBuilder.AllControls) 'Load_Control_Values(CtrlBuilder.AllControls) 'Refresh_Treeview_SelectedData() RECORD_CHANGED = False diff --git a/app/DD-Record-Organiser/frmForm_Constructor_Main_2.Designer.vb b/app/DD-Record-Organiser/frmForm_Constructor_Main_2.Designer.vb index 8d6a5b1..8e4f7b9 100644 --- a/app/DD-Record-Organiser/frmForm_Constructor_Main_2.Designer.vb +++ b/app/DD-Record-Organiser/frmForm_Constructor_Main_2.Designer.vb @@ -175,6 +175,7 @@ Partial Class frmForm_Constructor_Main_2 ' Me.grvwGrid.Appearance.EvenRow.BackColor = System.Drawing.Color.Aqua Me.grvwGrid.Appearance.EvenRow.Options.UseBackColor = True + Me.grvwGrid.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.None Me.grvwGrid.GridControl = Me.GridControlMain Me.grvwGrid.GroupPanelText = "Ziehen Sie Spaltenüberschriften in diesen Bereich um nach diesen gruppieren zu la" & _ "ssen" @@ -185,6 +186,9 @@ Partial Class frmForm_Constructor_Main_2 Me.grvwGrid.OptionsBehavior.CopyToClipboardWithColumnHeaders = False Me.grvwGrid.OptionsBehavior.Editable = False Me.grvwGrid.OptionsBehavior.ReadOnly = True + Me.grvwGrid.OptionsSelection.EnableAppearanceFocusedCell = False + Me.grvwGrid.OptionsSelection.EnableAppearanceFocusedRow = False + Me.grvwGrid.OptionsSelection.EnableAppearanceHideSelection = False Me.grvwGrid.OptionsView.ColumnAutoWidth = False Me.grvwGrid.OptionsView.EnableAppearanceEvenRow = True Me.grvwGrid.OptionsView.EnableAppearanceOddRow = True diff --git a/app/DD-Record-Organiser/frmForm_Constructor_Main_2.vb b/app/DD-Record-Organiser/frmForm_Constructor_Main_2.vb index d144beb..cae2164 100644 --- a/app/DD-Record-Organiser/frmForm_Constructor_Main_2.vb +++ b/app/DD-Record-Organiser/frmForm_Constructor_Main_2.vb @@ -612,11 +612,11 @@ Public Class frmForm_Constructor_Main_2 If GRID_TYPE = GridType.Grid Then If IsTopFirstRow Then IsTopFirstRow = False - grvwGrid.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus - grvwGrid.OptionsBehavior.Editable = Not IsTopFirstRow - grvwGrid.OptionsSelection.EnableAppearanceFocusedCell = Not IsTopFirstRow - grvwGrid.OptionsSelection.EnableAppearanceFocusedRow = Not IsTopFirstRow - grvwGrid.OptionsSelection.EnableAppearanceHideSelection = Not IsTopFirstRow + 'grvwGrid.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus + 'grvwGrid.OptionsBehavior.Editable = Not IsTopFirstRow + 'grvwGrid.OptionsSelection.EnableAppearanceFocusedCell = Not IsTopFirstRow + 'grvwGrid.OptionsSelection.EnableAppearanceFocusedRow = Not IsTopFirstRow + 'grvwGrid.OptionsSelection.EnableAppearanceHideSelection = Not IsTopFirstRow End If ElseIf GRID_TYPE = GridType.Carousel Then If IsTopFirstRow Then @@ -999,7 +999,7 @@ Public Class frmForm_Constructor_Main_2 Lock_RecordControls(False) tsButtonShowWorkflowTasks.Enabled = True ClassControlValues.LoadDefaultValues(CURRENT_FORM_ID, SELECTED_RECORD_ID, pnlDetails.Controls) - ClassControlValues.LoadControlValuesList(SELECTED_RECORD_ID, CURRENT_FORM_ID, CtrlBuilder.AllControls) + 'ClassControlValues.LoadControlValuesList(SELECTED_RECORD_ID, CURRENT_FORM_ID, CtrlBuilder.AllControls) ' Im gegensatz zu EnableEditMode muss hier nur der save button enabled werden tsButtonSave.Enabled = True @@ -1197,7 +1197,7 @@ Public Class frmForm_Constructor_Main_2 Me.tsButtonSave.Enabled = True Me.tsButtonEditMode.Text = "Bearbeiten beenden" 'Funktion zum Vollständigen load der Inhalte - ClassControlValues.LoadControlValuesList(SELECTED_RECORD_ID, CURRENT_FORM_ID, CtrlBuilder.AllControls) + ClassControlValues.LoadControlValuesList(SELECTED_RECORD_ID, CURRENT_PARENTID, CURRENT_FORM_ID, CtrlBuilder.AllControls) RECORD_ENABLED = True pnlDetails.Focus() 'If RECORD_ENABLED = False Then @@ -1524,9 +1524,12 @@ Public Class frmForm_Constructor_Main_2 ' column.MinWidth = 100 'Next + ' Wenn rows existieren, erste row laden und recordid auslesen Dim firstRow As System.Data.DataRowView = GridControlMain.MainView.GetRow(0) - Dim firstRecordId As Integer = firstRow.Row.Item("Record-ID") - ClassControlValues.LoadControlValuesList(firstRecordId, CURRENT_FORM_ID, CtrlBuilder.MasterPanel.Controls) + If Not IsNothing(firstRow) Then + Dim firstRecordId As Integer = firstRow.Row.Item("Record-ID") + ClassControlValues.LoadControlValuesList(firstRecordId, CURRENT_PARENTID, CURRENT_FORM_ID, CtrlBuilder.MasterPanel.Controls) + End If 'Zurücksetzen ENTITY_LOADED = True @@ -1556,7 +1559,7 @@ Public Class frmForm_Constructor_Main_2 CURRENT_RECORD_ID = Grid_RecordID 'Daten zu Record in jedem Fall laden 'ClassControlValues.LoadControlValues(SELECTED_RECORD_ID, CURRENT_FORM_ID, CtrlBuilder.AllControls) - ClassControlValues.LoadControlValuesNeu(SELECTED_RECORD_ID, CURRENT_FORM_ID, CtrlBuilder.AllControls) + ClassControlValues.LoadControlValuesNeu(SELECTED_RECORD_ID, CURRENT_PARENTID, CURRENT_FORM_ID, CtrlBuilder.AllControls) ' Laden der Daten bedeutet nicht dass Daten vom Benutzer geändert wurden! RECORD_CHANGED = False Update_Record_Label(Grid_RecordID) @@ -1683,48 +1686,80 @@ Public Class frmForm_Constructor_Main_2 End Sub Sub Lock_RecordControls(state As Boolean) - For Each Control As System.Windows.Forms.Control In pnlDetails.Controls - If (Control.GetType() Is GetType(TextBox)) Then - Dim txt As TextBox = CType(Control, TextBox) - txt.ReadOnly = state - End If - If (Control.GetType() Is GetType(System.Windows.Forms.ComboBox)) Then - Dim cbobx As System.Windows.Forms.ComboBox = CType(Control, System.Windows.Forms.ComboBox) - If state = True Then - cbobx.Enabled = False - Else - cbobx.Enabled = True - End If - End If - If (Control.GetType() Is GetType(DevExpress.XtraEditors.DateEdit)) Then - Dim dtp As DevExpress.XtraEditors.DateEdit = CType(Control, DevExpress.XtraEditors.DateEdit) - If state = True Then - dtp.Enabled = False - Else - dtp.Enabled = True - End If + Lock_Record_Controls_Recursive(state, pnlDetails.Controls) + End Sub - End If - If (Control.GetType() Is GetType(DevExpress.XtraEditors.CheckedListBoxControl)) Then - Dim chlb As DevExpress.XtraEditors.CheckedListBoxControl = CType(Control, DevExpress.XtraEditors.CheckedListBoxControl) - If state = True Then - chlb.Enabled = False - Else - chlb.Enabled = True - End If + Sub Lock_Record_Controls_Recursive(state As Boolean, controls As System.Windows.Forms.Control.ControlCollection) + For Each Control As System.Windows.Forms.Control In controls - End If - If (Control.GetType() Is GetType(Button)) Then - Dim btn As Button = CType(Control, Button) - If state = True Then - btn.Enabled = False - Else - btn.Enabled = True - End If - End If + Select Case Control.GetType() + Case GetType(Windows.Forms.GroupBox) + Lock_Record_Controls_Recursive(state, DirectCast(Control, GroupBox).Controls) + + Case GetType(Windows.Forms.TextBox) + Dim txt As TextBox = CType(Control, TextBox) + txt.ReadOnly = state + + Case GetType(Windows.Forms.CheckBox) + Dim chk As CheckBox = CType(Control, CheckBox) + If state = True Then + chk.Enabled = False + Else + chk.Enabled = True + End If + + Case GetType(Windows.Forms.RadioButton) + Dim rb As RadioButton = CType(Control, RadioButton) + If state = True Then + rb.Enabled = False + Else + rb.Enabled = True + End If + + Case GetType(Windows.Forms.ComboBox) + Dim cbobx As System.Windows.Forms.ComboBox = CType(Control, System.Windows.Forms.ComboBox) + If state = True Then + cbobx.Enabled = False + Else + cbobx.Enabled = True + End If + + Case GetType(DevExpress.XtraEditors.DateEdit) + Dim dtp As DevExpress.XtraEditors.DateEdit = CType(Control, DevExpress.XtraEditors.DateEdit) + If state = True Then + dtp.Enabled = False + Else + dtp.Enabled = True + End If + + Case GetType(DevExpress.XtraEditors.CheckedListBoxControl) + Dim chlb As DevExpress.XtraEditors.CheckedListBoxControl = CType(Control, DevExpress.XtraEditors.CheckedListBoxControl) + If state = True Then + chlb.Enabled = False + Else + chlb.Enabled = True + End If + + Case GetType(DevExpress.XtraEditors.ListBoxControl) + Dim lb As DevExpress.XtraEditors.ListBoxControl = CType(Control, DevExpress.XtraEditors.ListBoxControl) + If state = True Then + lb.Enabled = False + Else + lb.Enabled = True + End If + + Case GetType(Windows.Forms.Button) + Dim btn As Button = CType(Control, Button) + If state = True Then + btn.Enabled = False + Else + btn.Enabled = True + End If + End Select Next End Sub + Private Sub Check_Record_Changed() If EDIT_STATE <> EditState.None Then Update_Status_Label(False, "") @@ -2034,7 +2069,7 @@ Public Class frmForm_Constructor_Main_2 If TCDetails.SelectedTabPage.Text.StartsWith("Detail") Or TCDetails.SelectedTabPage.Text.StartsWith("Kopf") Then 'Daten zu Record in jedem Fall laden 'ClassControlValues.LoadControlValues(SELECTED_RECORD_ID, CURRENT_FORM_ID, CtrlBuilder.AllControls) - ClassControlValues.LoadControlValuesNeu(SELECTED_RECORD_ID, CURRENT_FORM_ID, CtrlBuilder.AllControls) + ClassControlValues.LoadControlValuesNeu(SELECTED_RECORD_ID, CURRENT_PARENTID, CURRENT_FORM_ID, CtrlBuilder.AllControls) End If If TCDetails.SelectedTabPage.Text.ToLower.StartsWith("wieder") Then tsButtonEditMode.Enabled = False diff --git a/app/DD-Record-Organiser/frmForm_Input.vb b/app/DD-Record-Organiser/frmForm_Input.vb index 131f17c..c2933aa 100644 --- a/app/DD-Record-Organiser/frmForm_Input.vb +++ b/app/DD-Record-Organiser/frmForm_Input.vb @@ -409,7 +409,7 @@ Public Class frmFormInput ' SelectedFormID = RowView.Item(1) RefreshRecordByID(SelectedRecordID) - ClassControlValues.LoadControlValuesNeu(SelectedRecordID, thisformid, pnlView.Controls) + ClassControlValues.LoadControlValuesNeu(SelectedRecordID, CURRENT_PARENTID, thisformid, pnlView.Controls) End If load_Documents() End If diff --git a/app/DD-Record-Organiser/frmMain.Designer.vb b/app/DD-Record-Organiser/frmMain.Designer.vb index 845b0b0..c3221e0 100644 --- a/app/DD-Record-Organiser/frmMain.Designer.vb +++ b/app/DD-Record-Organiser/frmMain.Designer.vb @@ -58,7 +58,6 @@ Partial Class frmMain Me.pageHome = New DevExpress.XtraBars.Ribbon.RibbonPage() Me.RibbonPageGroup2 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.groupQuickAccess = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() - Me.groupQuickAccessDemo = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.pageForms = New DevExpress.XtraBars.Ribbon.RibbonPage() Me.pageAdmin = New DevExpress.XtraBars.Ribbon.RibbonPage() Me.RibbonPageGroupProgram = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() @@ -341,7 +340,7 @@ Partial Class frmMain ' 'pageHome ' - Me.pageHome.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup2, Me.groupQuickAccess, Me.groupQuickAccessDemo}) + Me.pageHome.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup2, Me.groupQuickAccess}) Me.pageHome.Image = Global.DD_Record_Organiser.My.Resources.Resources.HomeHS Me.pageHome.Name = "pageHome" Me.pageHome.Text = "Home" @@ -354,17 +353,10 @@ Partial Class frmMain Me.RibbonPageGroup2.ShowCaptionButton = False Me.RibbonPageGroup2.Text = "Kalender" ' - 'groupQuickAccess - ' - Me.groupQuickAccess.AllowTextClipping = False - Me.groupQuickAccess.Name = "groupQuickAccess" - Me.groupQuickAccess.Text = "Schnellstart" - Me.groupQuickAccess.Visible = False - ' 'groupQuickAccessDemo ' - Me.groupQuickAccessDemo.Name = "groupQuickAccessDemo" - Me.groupQuickAccessDemo.Text = "Schnellstart " + Me.groupQuickAccess.Name = "groupQuickAccessDemo" + Me.groupQuickAccess.Text = "Schnellstart " ' 'pageForms ' @@ -514,14 +506,13 @@ Partial Class frmMain Friend WithEvents BarButtonItem12 As DevExpress.XtraBars.BarButtonItem Friend WithEvents RibbonPageGroupTask As DevExpress.XtraBars.Ribbon.RibbonPageGroup Friend WithEvents pageHome As DevExpress.XtraBars.Ribbon.RibbonPage - Friend WithEvents groupQuickAccess As DevExpress.XtraBars.Ribbon.RibbonPageGroup Friend WithEvents BarButtonItem13 As DevExpress.XtraBars.BarButtonItem Friend WithEvents BarButtonItem14 As DevExpress.XtraBars.BarButtonItem Friend WithEvents RibbonPageGroup1 As DevExpress.XtraBars.Ribbon.RibbonPageGroup Friend WithEvents BarButtonItem15 As DevExpress.XtraBars.BarButtonItem Friend WithEvents BarButtonItem16 As DevExpress.XtraBars.BarButtonItem Friend WithEvents BarButtonItem17 As DevExpress.XtraBars.BarButtonItem - Friend WithEvents groupQuickAccessDemo As DevExpress.XtraBars.Ribbon.RibbonPageGroup + Friend WithEvents groupQuickAccess As DevExpress.XtraBars.Ribbon.RibbonPageGroup Friend WithEvents TimerClose3Minutes As System.Windows.Forms.Timer End Class diff --git a/app/DD-Record-Organiser/frmMain.vb b/app/DD-Record-Organiser/frmMain.vb index 6bc76f5..d2405b0 100644 --- a/app/DD-Record-Organiser/frmMain.vb +++ b/app/DD-Record-Organiser/frmMain.vb @@ -24,6 +24,10 @@ Public Class frmMain LabelMachine.Caption = My.Computer.Name Load_Connection_Dep_Data() + + 'Wenn Argumente übergeben wurden, wird Formular geladen und zu record gesprungen + ClassJumpRecord.ParseArgs() + Catch ex As Exception MsgBox("Error in Load Form:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try @@ -106,6 +110,8 @@ Public Class frmMain Dim SQL As String = "SELECT * FROM TBPMO_MENU_FORM" Dim dtRootMenu As DataTable = ClassDatabase.Return_Datatable(SQL) + pageForms.Groups.Clear() + If dtRootMenu.Rows.Count <> 0 Then For Each row As DataRow In dtRootMenu.Rows @@ -155,6 +161,41 @@ Public Class frmMain Dim dt As DataTable = ClassDatabase.Return_Datatable(SQL2) Dim image2 As Bitmap = LoadNoImage() + 'Do While 0 < groupQuickAccess.ItemLinks.Count + ' groupQuickAccess.ItemLinks.Remove(groupQuickAccess.ItemLinks(0)) + 'Loop + + 'If dt.Rows.Count <> 0 Then + + ' For Each row As DataRow In dt.Rows + ' If Not IsDBNull(row.Item("MENU_IMG")) Then + ' Dim bimg() As Byte = row.Item("MENU_IMG") + ' Dim bitmap As Bitmap = ByteArrayToBitmap(bimg) + ' image2 = bitmap + ' End If + + ' Dim title As String = row.Item("FORM_TITLE") + ' Dim index As Integer = row.Item("SEQUENCE_MENU") + ' Dim tag As Integer = row.Item("GUID") + ' Dim item As New BarButtonItem(ribbonMain.Manager, title) + ' item.RibbonStyle = RibbonItemStyles.Large + ' item.Caption = title + ' item.Tag = tag + ' item.Glyph = image2 + + ' AddHandler item.ItemClick, AddressOf ToolbarButtonItemClick + + ' groupQuickAccess.ItemLinks.Add(item) + + ' Next + + 'End If + + + Do While 0 < groupQuickAccess.ItemLinks.Count + groupQuickAccess.ItemLinks.Remove(groupQuickAccess.ItemLinks(0)) + Loop + If dt.Rows.Count <> 0 Then For Each row As DataRow In dt.Rows @@ -174,42 +215,14 @@ Public Class frmMain item.Glyph = image2 AddHandler item.ItemClick, AddressOf ToolbarButtonItemClick - groupQuickAccess.ItemLinks.Add(item) Next End If - - ' TODO: NUR FÜR WINDREAM CON!!! - If dt.Rows.Count <> 0 Then - - For Each row As DataRow In dt.Rows - If Not IsDBNull(row.Item("MENU_IMG")) Then - Dim bimg() As Byte = row.Item("MENU_IMG") - Dim bitmap As Bitmap = ByteArrayToBitmap(bimg) - image2 = bitmap - End If - - Dim title As String = row.Item("FORM_TITLE") - Dim index As Integer = row.Item("SEQUENCE_MENU") - Dim tag As Integer = row.Item("GUID") - Dim item As New BarButtonItem(ribbonMain.Manager, title) - item.RibbonStyle = RibbonItemStyles.Large - item.Caption = title - item.Tag = tag - item.Glyph = image2 - - AddHandler item.ItemClick, AddressOf ToolbarButtonItemClickDemo - groupQuickAccessDemo.ItemLinks.Add(item) - - Next - - End If - ' TODO: NUR FÜR WINDREAM CON!!! End Sub - + Private Sub BarButtonItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Dim formId As Integer = Integer.Parse(e.Item.Tag) @@ -218,16 +231,6 @@ Public Class frmMain Cursor = Cursors.Default End Sub - ' TODO: NUR FÜR WINDREAM CON!!! - Private Sub ToolbarButtonItemClickDemo(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) - Dim formId As Integer = Integer.Parse(e.Item.Tag) - - Cursor = Cursors.WaitCursor - OpenFormConstructorDemo(formId) - Cursor = Cursors.Default - End Sub - ' TODO: NUR FÜR WINDREAM CON!!! - Private Sub ToolbarButtonItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Dim formId As Integer = Integer.Parse(e.Item.Tag) diff --git a/app/DD-Record-Organiser/frmScanFiles.Designer.vb b/app/DD-Record-Organiser/frmScanFiles.Designer.vb new file mode 100644 index 0000000..85412b4 --- /dev/null +++ b/app/DD-Record-Organiser/frmScanFiles.Designer.vb @@ -0,0 +1,466 @@ + _ +Partial Class frmScanFiles + Inherits System.Windows.Forms.Form + + 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Wird vom Windows Form-Designer benötigt. + Private components As System.ComponentModel.IContainer + + 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. + 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. + 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmScanFiles)) + Me.ListView1 = New System.Windows.Forms.ListView() + Me.ColumnHeader2 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ImageList1 = New System.Windows.Forms.ImageList(Me.components) + Me.Panel1 = New System.Windows.Forms.Panel() + Me.PdfViewer1 = New DevExpress.XtraPdfViewer.PdfViewer() + Me.StatusStrip2 = New System.Windows.Forms.StatusStrip() + Me.pdfstatuslblPageNumber = New System.Windows.Forms.ToolStripStatusLabel() + Me.ToolStripDropDownButton1 = New System.Windows.Forms.ToolStripDropDownButton() + Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl() + Me.PdfFileOpenBarItem1 = New DevExpress.XtraPdfViewer.Bars.PdfFileOpenBarItem() + Me.PdfFileSaveAsBarItem1 = New DevExpress.XtraPdfViewer.Bars.PdfFileSaveAsBarItem() + Me.PdfFilePrintBarItem1 = New DevExpress.XtraPdfViewer.Bars.PdfFilePrintBarItem() + Me.PdfPreviousPageBarItem1 = New DevExpress.XtraPdfViewer.Bars.PdfPreviousPageBarItem() + Me.PdfNextPageBarItem1 = New DevExpress.XtraPdfViewer.Bars.PdfNextPageBarItem() + Me.PdfFindTextBarItem1 = New DevExpress.XtraPdfViewer.Bars.PdfFindTextBarItem() + Me.PdfZoomOutBarItem1 = New DevExpress.XtraPdfViewer.Bars.PdfZoomOutBarItem() + Me.PdfZoomInBarItem1 = New DevExpress.XtraPdfViewer.Bars.PdfZoomInBarItem() + Me.PdfExactZoomListBarSubItem1 = New DevExpress.XtraPdfViewer.Bars.PdfExactZoomListBarSubItem() + Me.PdfZoom10CheckItem1 = New DevExpress.XtraPdfViewer.Bars.PdfZoom10CheckItem() + Me.PdfZoom25CheckItem1 = New DevExpress.XtraPdfViewer.Bars.PdfZoom25CheckItem() + Me.PdfZoom50CheckItem1 = New DevExpress.XtraPdfViewer.Bars.PdfZoom50CheckItem() + Me.PdfZoom75CheckItem1 = New DevExpress.XtraPdfViewer.Bars.PdfZoom75CheckItem() + Me.PdfZoom100CheckItem1 = New DevExpress.XtraPdfViewer.Bars.PdfZoom100CheckItem() + Me.PdfZoom125CheckItem1 = New DevExpress.XtraPdfViewer.Bars.PdfZoom125CheckItem() + Me.PdfZoom150CheckItem1 = New DevExpress.XtraPdfViewer.Bars.PdfZoom150CheckItem() + Me.PdfZoom200CheckItem1 = New DevExpress.XtraPdfViewer.Bars.PdfZoom200CheckItem() + Me.PdfZoom400CheckItem1 = New DevExpress.XtraPdfViewer.Bars.PdfZoom400CheckItem() + Me.PdfZoom500CheckItem1 = New DevExpress.XtraPdfViewer.Bars.PdfZoom500CheckItem() + Me.PdfSetActualSizeZoomModeCheckItem1 = New DevExpress.XtraPdfViewer.Bars.PdfSetActualSizeZoomModeCheckItem() + Me.PdfSetPageLevelZoomModeCheckItem1 = New DevExpress.XtraPdfViewer.Bars.PdfSetPageLevelZoomModeCheckItem() + Me.PdfSetFitWidthZoomModeCheckItem1 = New DevExpress.XtraPdfViewer.Bars.PdfSetFitWidthZoomModeCheckItem() + Me.PdfSetFitVisibleZoomModeCheckItem1 = New DevExpress.XtraPdfViewer.Bars.PdfSetFitVisibleZoomModeCheckItem() + Me.PdfExportFormDataBarItem1 = New DevExpress.XtraPdfViewer.Bars.PdfExportFormDataBarItem() + Me.PdfImportFormDataBarItem1 = New DevExpress.XtraPdfViewer.Bars.PdfImportFormDataBarItem() + Me.PdfRibbonPage1 = New DevExpress.XtraPdfViewer.Bars.PdfRibbonPage() + Me.PdfFileRibbonPageGroup1 = New DevExpress.XtraPdfViewer.Bars.PdfFileRibbonPageGroup() + Me.PdfNavigationRibbonPageGroup1 = New DevExpress.XtraPdfViewer.Bars.PdfNavigationRibbonPageGroup() + Me.PdfZoomRibbonPageGroup1 = New DevExpress.XtraPdfViewer.Bars.PdfZoomRibbonPageGroup() + Me.PdfFormDataRibbonPage1 = New DevExpress.XtraPdfViewer.Bars.PdfFormDataRibbonPage() + Me.PdfFormDataBarPageGroup1 = New DevExpress.XtraPdfViewer.Bars.PdfFormDataBarPageGroup() + Me.btnrefresh = New System.Windows.Forms.Button() + Me.PdfBarController1 = New DevExpress.XtraPdfViewer.Bars.PdfBarController() + Me.PdfBarController2 = New DevExpress.XtraPdfViewer.Bars.PdfBarController() + Me.btndelete = New System.Windows.Forms.Button() + Me.ImageListBoxControl1 = New DevExpress.XtraEditors.ImageListBoxControl() + Me.Panel1.SuspendLayout() + Me.StatusStrip2.SuspendLayout() + CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.PdfBarController1, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.PdfBarController2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.ImageListBoxControl1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'ListView1 + ' + Me.ListView1.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader2}) + Me.ListView1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.ListView1.FullRowSelect = True + Me.ListView1.GridLines = True + Me.ListView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable + Me.ListView1.LargeImageList = Me.ImageList1 + Me.ListView1.Location = New System.Drawing.Point(12, 12) + Me.ListView1.MultiSelect = False + Me.ListView1.Name = "ListView1" + Me.ListView1.Size = New System.Drawing.Size(319, 209) + Me.ListView1.SmallImageList = Me.ImageList1 + Me.ListView1.TabIndex = 0 + Me.ListView1.UseCompatibleStateImageBehavior = False + Me.ListView1.View = System.Windows.Forms.View.Details + ' + 'ColumnHeader2 + ' + Me.ColumnHeader2.Text = "Datei - Drag and Drop fähig" + Me.ColumnHeader2.Width = 315 + ' + 'ImageList1 + ' + Me.ImageList1.ImageStream = CType(resources.GetObject("ImageList1.ImageStream"), System.Windows.Forms.ImageListStreamer) + Me.ImageList1.TransparentColor = System.Drawing.Color.Transparent + Me.ImageList1.Images.SetKeyName(0, "doc_pdf.png") + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.Controls.Add(Me.PdfViewer1) + Me.Panel1.Controls.Add(Me.StatusStrip2) + Me.Panel1.Controls.Add(Me.RibbonControl1) + Me.Panel1.Location = New System.Drawing.Point(337, 12) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(591, 553) + Me.Panel1.TabIndex = 3 + ' + 'PdfViewer1 + ' + Me.PdfViewer1.Dock = System.Windows.Forms.DockStyle.Fill + Me.PdfViewer1.Location = New System.Drawing.Point(0, 140) + Me.PdfViewer1.Name = "PdfViewer1" + Me.PdfViewer1.Size = New System.Drawing.Size(591, 391) + Me.PdfViewer1.TabIndex = 5 + ' + 'StatusStrip2 + ' + Me.StatusStrip2.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.pdfstatuslblPageNumber, Me.ToolStripDropDownButton1}) + Me.StatusStrip2.Location = New System.Drawing.Point(0, 531) + Me.StatusStrip2.Name = "StatusStrip2" + Me.StatusStrip2.Size = New System.Drawing.Size(591, 22) + Me.StatusStrip2.TabIndex = 3 + Me.StatusStrip2.Text = "StatusStrip2" + ' + 'pdfstatuslblPageNumber + ' + Me.pdfstatuslblPageNumber.Font = New System.Drawing.Font("Segoe UI Semibold", 9.0!, CType((System.Drawing.FontStyle.Bold Or System.Drawing.FontStyle.Italic), System.Drawing.FontStyle), System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.pdfstatuslblPageNumber.Image = Global.DD_Record_Organiser.My.Resources.Resources.page_red + Me.pdfstatuslblPageNumber.Name = "pdfstatuslblPageNumber" + Me.pdfstatuslblPageNumber.Size = New System.Drawing.Size(50, 17) + Me.pdfstatuslblPageNumber.Text = "Page" + ' + 'ToolStripDropDownButton1 + ' + Me.ToolStripDropDownButton1.Image = Global.DD_Record_Organiser.My.Resources.Resources.magifier_zoom_out + Me.ToolStripDropDownButton1.ImageTransparentColor = System.Drawing.Color.Magenta + Me.ToolStripDropDownButton1.Name = "ToolStripDropDownButton1" + Me.ToolStripDropDownButton1.Size = New System.Drawing.Size(153, 20) + Me.ToolStripDropDownButton1.Text = "Seitenansicht Minimal" + ' + 'RibbonControl1 + ' + Me.RibbonControl1.ExpandCollapseItem.Id = 0 + Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.PdfFileOpenBarItem1, Me.PdfFileSaveAsBarItem1, Me.PdfFilePrintBarItem1, Me.PdfPreviousPageBarItem1, Me.PdfNextPageBarItem1, Me.PdfFindTextBarItem1, Me.PdfZoomOutBarItem1, Me.PdfZoomInBarItem1, Me.PdfExactZoomListBarSubItem1, Me.PdfZoom10CheckItem1, Me.PdfZoom25CheckItem1, Me.PdfZoom50CheckItem1, Me.PdfZoom75CheckItem1, Me.PdfZoom100CheckItem1, Me.PdfZoom125CheckItem1, Me.PdfZoom150CheckItem1, Me.PdfZoom200CheckItem1, Me.PdfZoom400CheckItem1, Me.PdfZoom500CheckItem1, Me.PdfSetActualSizeZoomModeCheckItem1, Me.PdfSetPageLevelZoomModeCheckItem1, Me.PdfSetFitWidthZoomModeCheckItem1, Me.PdfSetFitVisibleZoomModeCheckItem1, Me.PdfExportFormDataBarItem1, Me.PdfImportFormDataBarItem1}) + Me.RibbonControl1.Location = New System.Drawing.Point(0, 0) + Me.RibbonControl1.MaxItemId = 26 + Me.RibbonControl1.Name = "RibbonControl1" + Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.PdfRibbonPage1, Me.PdfFormDataRibbonPage1}) + Me.RibbonControl1.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonControlStyle.Office2010 + Me.RibbonControl1.Size = New System.Drawing.Size(591, 140) + Me.RibbonControl1.ToolbarLocation = DevExpress.XtraBars.Ribbon.RibbonQuickAccessToolbarLocation.Above + ' + 'PdfFileOpenBarItem1 + ' + Me.PdfFileOpenBarItem1.Id = 1 + Me.PdfFileOpenBarItem1.ItemShortcut = New DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.O)) + Me.PdfFileOpenBarItem1.Name = "PdfFileOpenBarItem1" + ' + 'PdfFileSaveAsBarItem1 + ' + Me.PdfFileSaveAsBarItem1.Id = 2 + Me.PdfFileSaveAsBarItem1.ItemShortcut = New DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.S)) + Me.PdfFileSaveAsBarItem1.Name = "PdfFileSaveAsBarItem1" + ' + 'PdfFilePrintBarItem1 + ' + Me.PdfFilePrintBarItem1.Id = 3 + Me.PdfFilePrintBarItem1.ItemShortcut = New DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.P)) + Me.PdfFilePrintBarItem1.Name = "PdfFilePrintBarItem1" + ' + 'PdfPreviousPageBarItem1 + ' + Me.PdfPreviousPageBarItem1.Id = 4 + Me.PdfPreviousPageBarItem1.Name = "PdfPreviousPageBarItem1" + ' + 'PdfNextPageBarItem1 + ' + Me.PdfNextPageBarItem1.Id = 5 + Me.PdfNextPageBarItem1.Name = "PdfNextPageBarItem1" + ' + 'PdfFindTextBarItem1 + ' + Me.PdfFindTextBarItem1.Id = 6 + Me.PdfFindTextBarItem1.ItemShortcut = New DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.F)) + Me.PdfFindTextBarItem1.Name = "PdfFindTextBarItem1" + ' + 'PdfZoomOutBarItem1 + ' + Me.PdfZoomOutBarItem1.Id = 7 + Me.PdfZoomOutBarItem1.Name = "PdfZoomOutBarItem1" + ' + 'PdfZoomInBarItem1 + ' + Me.PdfZoomInBarItem1.Id = 8 + Me.PdfZoomInBarItem1.Name = "PdfZoomInBarItem1" + ' + 'PdfExactZoomListBarSubItem1 + ' + Me.PdfExactZoomListBarSubItem1.Id = 9 + Me.PdfExactZoomListBarSubItem1.LinksPersistInfo.AddRange(New DevExpress.XtraBars.LinkPersistInfo() {New DevExpress.XtraBars.LinkPersistInfo(Me.PdfZoom10CheckItem1, True), New DevExpress.XtraBars.LinkPersistInfo(Me.PdfZoom25CheckItem1), New DevExpress.XtraBars.LinkPersistInfo(Me.PdfZoom50CheckItem1), New DevExpress.XtraBars.LinkPersistInfo(Me.PdfZoom75CheckItem1), New DevExpress.XtraBars.LinkPersistInfo(Me.PdfZoom100CheckItem1), New DevExpress.XtraBars.LinkPersistInfo(Me.PdfZoom125CheckItem1), New DevExpress.XtraBars.LinkPersistInfo(Me.PdfZoom150CheckItem1), New DevExpress.XtraBars.LinkPersistInfo(Me.PdfZoom200CheckItem1), New DevExpress.XtraBars.LinkPersistInfo(Me.PdfZoom400CheckItem1), New DevExpress.XtraBars.LinkPersistInfo(Me.PdfZoom500CheckItem1), New DevExpress.XtraBars.LinkPersistInfo(Me.PdfSetActualSizeZoomModeCheckItem1, True), New DevExpress.XtraBars.LinkPersistInfo(Me.PdfSetPageLevelZoomModeCheckItem1), New DevExpress.XtraBars.LinkPersistInfo(Me.PdfSetFitWidthZoomModeCheckItem1), New DevExpress.XtraBars.LinkPersistInfo(Me.PdfSetFitVisibleZoomModeCheckItem1)}) + Me.PdfExactZoomListBarSubItem1.Name = "PdfExactZoomListBarSubItem1" + Me.PdfExactZoomListBarSubItem1.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionInMenu + ' + 'PdfZoom10CheckItem1 + ' + Me.PdfZoom10CheckItem1.Id = 10 + Me.PdfZoom10CheckItem1.Name = "PdfZoom10CheckItem1" + ' + 'PdfZoom25CheckItem1 + ' + Me.PdfZoom25CheckItem1.Id = 11 + Me.PdfZoom25CheckItem1.Name = "PdfZoom25CheckItem1" + ' + 'PdfZoom50CheckItem1 + ' + Me.PdfZoom50CheckItem1.Id = 12 + Me.PdfZoom50CheckItem1.Name = "PdfZoom50CheckItem1" + ' + 'PdfZoom75CheckItem1 + ' + Me.PdfZoom75CheckItem1.Id = 13 + Me.PdfZoom75CheckItem1.Name = "PdfZoom75CheckItem1" + ' + 'PdfZoom100CheckItem1 + ' + Me.PdfZoom100CheckItem1.Id = 14 + Me.PdfZoom100CheckItem1.Name = "PdfZoom100CheckItem1" + ' + 'PdfZoom125CheckItem1 + ' + Me.PdfZoom125CheckItem1.Id = 15 + Me.PdfZoom125CheckItem1.Name = "PdfZoom125CheckItem1" + ' + 'PdfZoom150CheckItem1 + ' + Me.PdfZoom150CheckItem1.Id = 16 + Me.PdfZoom150CheckItem1.Name = "PdfZoom150CheckItem1" + ' + 'PdfZoom200CheckItem1 + ' + Me.PdfZoom200CheckItem1.Id = 17 + Me.PdfZoom200CheckItem1.Name = "PdfZoom200CheckItem1" + ' + 'PdfZoom400CheckItem1 + ' + Me.PdfZoom400CheckItem1.Id = 18 + Me.PdfZoom400CheckItem1.Name = "PdfZoom400CheckItem1" + ' + 'PdfZoom500CheckItem1 + ' + Me.PdfZoom500CheckItem1.Id = 19 + Me.PdfZoom500CheckItem1.Name = "PdfZoom500CheckItem1" + ' + 'PdfSetActualSizeZoomModeCheckItem1 + ' + Me.PdfSetActualSizeZoomModeCheckItem1.Id = 20 + Me.PdfSetActualSizeZoomModeCheckItem1.Name = "PdfSetActualSizeZoomModeCheckItem1" + ' + 'PdfSetPageLevelZoomModeCheckItem1 + ' + Me.PdfSetPageLevelZoomModeCheckItem1.Id = 21 + Me.PdfSetPageLevelZoomModeCheckItem1.Name = "PdfSetPageLevelZoomModeCheckItem1" + ' + 'PdfSetFitWidthZoomModeCheckItem1 + ' + Me.PdfSetFitWidthZoomModeCheckItem1.Id = 22 + Me.PdfSetFitWidthZoomModeCheckItem1.Name = "PdfSetFitWidthZoomModeCheckItem1" + ' + 'PdfSetFitVisibleZoomModeCheckItem1 + ' + Me.PdfSetFitVisibleZoomModeCheckItem1.Id = 23 + Me.PdfSetFitVisibleZoomModeCheckItem1.Name = "PdfSetFitVisibleZoomModeCheckItem1" + ' + 'PdfExportFormDataBarItem1 + ' + Me.PdfExportFormDataBarItem1.Id = 24 + Me.PdfExportFormDataBarItem1.Name = "PdfExportFormDataBarItem1" + ' + 'PdfImportFormDataBarItem1 + ' + Me.PdfImportFormDataBarItem1.Id = 25 + Me.PdfImportFormDataBarItem1.Name = "PdfImportFormDataBarItem1" + ' + 'PdfRibbonPage1 + ' + Me.PdfRibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.PdfFileRibbonPageGroup1, Me.PdfNavigationRibbonPageGroup1, Me.PdfZoomRibbonPageGroup1}) + Me.PdfRibbonPage1.Name = "PdfRibbonPage1" + ' + 'PdfFileRibbonPageGroup1 + ' + Me.PdfFileRibbonPageGroup1.ItemLinks.Add(Me.PdfFileOpenBarItem1) + Me.PdfFileRibbonPageGroup1.ItemLinks.Add(Me.PdfFileSaveAsBarItem1) + Me.PdfFileRibbonPageGroup1.ItemLinks.Add(Me.PdfFilePrintBarItem1) + Me.PdfFileRibbonPageGroup1.Name = "PdfFileRibbonPageGroup1" + ' + 'PdfNavigationRibbonPageGroup1 + ' + Me.PdfNavigationRibbonPageGroup1.ItemLinks.Add(Me.PdfPreviousPageBarItem1) + Me.PdfNavigationRibbonPageGroup1.ItemLinks.Add(Me.PdfNextPageBarItem1) + Me.PdfNavigationRibbonPageGroup1.ItemLinks.Add(Me.PdfFindTextBarItem1) + Me.PdfNavigationRibbonPageGroup1.Name = "PdfNavigationRibbonPageGroup1" + ' + 'PdfZoomRibbonPageGroup1 + ' + Me.PdfZoomRibbonPageGroup1.ItemLinks.Add(Me.PdfZoomOutBarItem1) + Me.PdfZoomRibbonPageGroup1.ItemLinks.Add(Me.PdfZoomInBarItem1) + Me.PdfZoomRibbonPageGroup1.ItemLinks.Add(Me.PdfExactZoomListBarSubItem1) + Me.PdfZoomRibbonPageGroup1.Name = "PdfZoomRibbonPageGroup1" + ' + 'PdfFormDataRibbonPage1 + ' + Me.PdfFormDataRibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.PdfFormDataBarPageGroup1}) + Me.PdfFormDataRibbonPage1.Name = "PdfFormDataRibbonPage1" + Me.PdfFormDataRibbonPage1.Visible = False + ' + 'PdfFormDataBarPageGroup1 + ' + Me.PdfFormDataBarPageGroup1.ItemLinks.Add(Me.PdfExportFormDataBarItem1) + Me.PdfFormDataBarPageGroup1.ItemLinks.Add(Me.PdfImportFormDataBarItem1) + Me.PdfFormDataBarPageGroup1.Name = "PdfFormDataBarPageGroup1" + ' + 'btnrefresh + ' + Me.btnrefresh.Image = Global.DD_Record_Organiser.My.Resources.Resources.refresh_16xLG + Me.btnrefresh.ImageAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnrefresh.Location = New System.Drawing.Point(12, 227) + Me.btnrefresh.Name = "btnrefresh" + Me.btnrefresh.Size = New System.Drawing.Size(98, 23) + Me.btnrefresh.TabIndex = 1 + Me.btnrefresh.Text = "Aktualisieren" + Me.btnrefresh.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnrefresh.UseVisualStyleBackColor = True + ' + 'PdfBarController2 + ' + Me.PdfBarController2.BarItems.Add(Me.PdfFileOpenBarItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfFileSaveAsBarItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfFilePrintBarItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfPreviousPageBarItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfNextPageBarItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfFindTextBarItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfZoomOutBarItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfZoomInBarItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfExactZoomListBarSubItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfZoom10CheckItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfZoom25CheckItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfZoom50CheckItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfZoom75CheckItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfZoom100CheckItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfZoom125CheckItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfZoom150CheckItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfZoom200CheckItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfZoom400CheckItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfZoom500CheckItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfSetActualSizeZoomModeCheckItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfSetPageLevelZoomModeCheckItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfSetFitWidthZoomModeCheckItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfSetFitVisibleZoomModeCheckItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfExportFormDataBarItem1) + Me.PdfBarController2.BarItems.Add(Me.PdfImportFormDataBarItem1) + Me.PdfBarController2.Control = Me.PdfViewer1 + ' + 'btndelete + ' + Me.btndelete.Image = Global.DD_Record_Organiser.My.Resources.Resources.delete + Me.btndelete.ImageAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btndelete.Location = New System.Drawing.Point(116, 227) + Me.btndelete.Name = "btndelete" + Me.btndelete.Size = New System.Drawing.Size(75, 23) + Me.btndelete.TabIndex = 4 + Me.btndelete.Text = "Löschen" + Me.btndelete.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btndelete.UseVisualStyleBackColor = True + ' + 'ImageListBoxControl1 + ' + Me.ImageListBoxControl1.Location = New System.Drawing.Point(26, 269) + Me.ImageListBoxControl1.Name = "ImageListBoxControl1" + Me.ImageListBoxControl1.Size = New System.Drawing.Size(293, 194) + Me.ImageListBoxControl1.TabIndex = 5 + ' + 'frmScanFiles + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(934, 577) + Me.Controls.Add(Me.ImageListBoxControl1) + Me.Controls.Add(Me.btndelete) + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.btnrefresh) + Me.Controls.Add(Me.ListView1) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.Name = "frmScanFiles" + Me.Text = "Inbox - Scanned Files" + Me.TopMost = True + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.StatusStrip2.ResumeLayout(False) + Me.StatusStrip2.PerformLayout() + CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.PdfBarController1, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.PdfBarController2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.ImageListBoxControl1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents ListView1 As System.Windows.Forms.ListView + Friend WithEvents ColumnHeader2 As System.Windows.Forms.ColumnHeader + Friend WithEvents ImageList1 As System.Windows.Forms.ImageList + Friend WithEvents btnrefresh As System.Windows.Forms.Button + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents StatusStrip2 As System.Windows.Forms.StatusStrip + Friend WithEvents pdfstatuslblPageNumber As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents ToolStripDropDownButton1 As System.Windows.Forms.ToolStripDropDownButton + Friend WithEvents PdfBarController1 As DevExpress.XtraPdfViewer.Bars.PdfBarController + Friend WithEvents PdfViewer1 As DevExpress.XtraPdfViewer.PdfViewer + Friend WithEvents RibbonControl1 As DevExpress.XtraBars.Ribbon.RibbonControl + Friend WithEvents PdfFileOpenBarItem1 As DevExpress.XtraPdfViewer.Bars.PdfFileOpenBarItem + Friend WithEvents PdfFileSaveAsBarItem1 As DevExpress.XtraPdfViewer.Bars.PdfFileSaveAsBarItem + Friend WithEvents PdfFilePrintBarItem1 As DevExpress.XtraPdfViewer.Bars.PdfFilePrintBarItem + Friend WithEvents PdfPreviousPageBarItem1 As DevExpress.XtraPdfViewer.Bars.PdfPreviousPageBarItem + Friend WithEvents PdfNextPageBarItem1 As DevExpress.XtraPdfViewer.Bars.PdfNextPageBarItem + Friend WithEvents PdfFindTextBarItem1 As DevExpress.XtraPdfViewer.Bars.PdfFindTextBarItem + Friend WithEvents PdfZoomOutBarItem1 As DevExpress.XtraPdfViewer.Bars.PdfZoomOutBarItem + Friend WithEvents PdfZoomInBarItem1 As DevExpress.XtraPdfViewer.Bars.PdfZoomInBarItem + Friend WithEvents PdfExactZoomListBarSubItem1 As DevExpress.XtraPdfViewer.Bars.PdfExactZoomListBarSubItem + Friend WithEvents PdfZoom10CheckItem1 As DevExpress.XtraPdfViewer.Bars.PdfZoom10CheckItem + Friend WithEvents PdfZoom25CheckItem1 As DevExpress.XtraPdfViewer.Bars.PdfZoom25CheckItem + Friend WithEvents PdfZoom50CheckItem1 As DevExpress.XtraPdfViewer.Bars.PdfZoom50CheckItem + Friend WithEvents PdfZoom75CheckItem1 As DevExpress.XtraPdfViewer.Bars.PdfZoom75CheckItem + Friend WithEvents PdfZoom100CheckItem1 As DevExpress.XtraPdfViewer.Bars.PdfZoom100CheckItem + Friend WithEvents PdfZoom125CheckItem1 As DevExpress.XtraPdfViewer.Bars.PdfZoom125CheckItem + Friend WithEvents PdfZoom150CheckItem1 As DevExpress.XtraPdfViewer.Bars.PdfZoom150CheckItem + Friend WithEvents PdfZoom200CheckItem1 As DevExpress.XtraPdfViewer.Bars.PdfZoom200CheckItem + Friend WithEvents PdfZoom400CheckItem1 As DevExpress.XtraPdfViewer.Bars.PdfZoom400CheckItem + Friend WithEvents PdfZoom500CheckItem1 As DevExpress.XtraPdfViewer.Bars.PdfZoom500CheckItem + Friend WithEvents PdfSetActualSizeZoomModeCheckItem1 As DevExpress.XtraPdfViewer.Bars.PdfSetActualSizeZoomModeCheckItem + Friend WithEvents PdfSetPageLevelZoomModeCheckItem1 As DevExpress.XtraPdfViewer.Bars.PdfSetPageLevelZoomModeCheckItem + Friend WithEvents PdfSetFitWidthZoomModeCheckItem1 As DevExpress.XtraPdfViewer.Bars.PdfSetFitWidthZoomModeCheckItem + Friend WithEvents PdfSetFitVisibleZoomModeCheckItem1 As DevExpress.XtraPdfViewer.Bars.PdfSetFitVisibleZoomModeCheckItem + Friend WithEvents PdfExportFormDataBarItem1 As DevExpress.XtraPdfViewer.Bars.PdfExportFormDataBarItem + Friend WithEvents PdfImportFormDataBarItem1 As DevExpress.XtraPdfViewer.Bars.PdfImportFormDataBarItem + Friend WithEvents PdfRibbonPage1 As DevExpress.XtraPdfViewer.Bars.PdfRibbonPage + Friend WithEvents PdfFileRibbonPageGroup1 As DevExpress.XtraPdfViewer.Bars.PdfFileRibbonPageGroup + Friend WithEvents PdfNavigationRibbonPageGroup1 As DevExpress.XtraPdfViewer.Bars.PdfNavigationRibbonPageGroup + Friend WithEvents PdfZoomRibbonPageGroup1 As DevExpress.XtraPdfViewer.Bars.PdfZoomRibbonPageGroup + Friend WithEvents PdfFormDataRibbonPage1 As DevExpress.XtraPdfViewer.Bars.PdfFormDataRibbonPage + Friend WithEvents PdfFormDataBarPageGroup1 As DevExpress.XtraPdfViewer.Bars.PdfFormDataBarPageGroup + Friend WithEvents PdfBarController2 As DevExpress.XtraPdfViewer.Bars.PdfBarController + Friend WithEvents btndelete As System.Windows.Forms.Button + Friend WithEvents ImageListBoxControl1 As DevExpress.XtraEditors.ImageListBoxControl +End Class diff --git a/app/DD-Record-Organiser/frmScanFiles.resx b/app/DD-Record-Organiser/frmScanFiles.resx new file mode 100644 index 0000000..0aaf057 --- /dev/null +++ b/app/DD-Record-Organiser/frmScanFiles.resx @@ -0,0 +1,623 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADm + BwAAAk1TRnQBSQFMAwEBAAGQAQABkAEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA + AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA + AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA + AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm + AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ + AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm + AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz + AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm + AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm + AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA + ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm + AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm + ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm + AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA + AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ + AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz + AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/ + AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA + AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM + AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm + ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ + AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/ + ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM + ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm + AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM + AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA + AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA + ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7 + Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/8DAAEHDBIBBzIAARIM/wES + MAAKIAP0AfMB/wHqMAAKIAH0A/MB/wHqMAACIAG9AW8GIATzAf8BbTAAAiABRgH0AZQBbwGUAb0CIATz + Af8BbTAAAyABFwGUAUYBvQEXAiAE8wH/AeswAAQgApQBFgMgBPMB/wHrMAAEIAFHAf8EIATzAf8B7DAA + BfkB/wT5A/MB8gH/AewwAAr5Bf8B7DAACvkB/wLyAfMB7QG8MgAB7QH/A/MD8gH/AfIB8wHtAfAzAAGS + Af8B8wXyAf8B8wGSAfA0AAGSCP8BkgHwNQAB8Aj3AfA0AAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEB + AQABAQUAAYAXAAP/AQABwAcAAcBXAAHAAQEGAAHAAQMGAAHAAQcGAAHAAQ8GAAs= + + + + 1212, 173 + + + 17, 212 + + + 165, 212 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABycnIOcHBwi4qKivKEhIT1ZGRkiG5ubhEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZCQ + kF6EhITmubm5/MvLy/7Jycn/tbW1/4CAgO5ra2t4c3NzCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfn58tkJCQwqqqqv3k5OT79vb2/e7v7/3U1NT8v7+//sHB + wf+qqqr/enp65Wpqamlzc3MFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp6enDKCg + oIyioqL61tbW+/b29vz09fX/3N3e/8XDv//Z2tz/6err/c3Nzfy3t7f+uLi4/56env90dHTbdXV1WQAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7u7tSpqam4sbGxvzz8/P79/f3/uTk5P/Ewb7/5djG///w + z//r2Lf/zMS2/9TW2f/j5eb9x8fH/LCwsP6wsLD/k5OT/3V1dc9ycnJKAAAAAAAAAAAAAAAAAAAAALu7 + u6e8vLz96enp+/n5+f7r6+v/wcHD/9vX0f//+ej///DZ///szP//58D//+Oz/+fGmv/HtqX/0dPW/9/h + 4/3BwcL8qKio/qenp/+Kior+dHR0wXBwcDoAAAAAAAAAAMXFxfz39/f9+vr6/8DAwP/MzMz////////+ + 9f//9eX//+/Y///qy///57///eCz//HMnP/mtIL/0pxt/7+jj//P0tT/2dze/bi4uf2hoaH+np6f/3h4 + ePoAAAAAAAAAAMjIyEfExMSpy8vL9Nvb2//Ly8v/ysnJ/93Y0v//9uX///LZ///rzP//5b7//d+y//DJ + nP/js4P/1pxr/8qBTv+5ZzP/tYx0/9HU1f/W2dr9s7i5/YOHif8AAAAAAAAAAAAAAAAAAAAAv7+/DMXF + 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 + AP//wAH//4AD//8AB//+AA///AAf//gA///8H/////////////8oAAAAIAAAAEAAAAABACAAAAAAAIAQ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAenp6Pm5ubrl7e3vya2tr2mhoaF5XV1cDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAioqKG35+fqaFhYX9v7+//s/Pz//Gxsb/lZWV/21t + bdNycnJRAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkJCQBoyMjHaEhITyq6ur/uPj4/nY2Nj7xMTE/sPD + w//FxcX/vr6+/46Ojv9ubm7Id3d3QwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgoEaKiorXoKCg/tbW1vrx8fH68vLy/vPz + 8//t7e3809PT+729vf69vb3/v7+//7a2tv+Hh4f+bGxsu3R0dDYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK+vrx6cnJysm5ub/sXFxfzv7+/58vLy/vLy + 8v/y8vL/zs/R/9PU1f/w8fL/6urq/M7Ozvy4uLj9uLi4/7u7u/+srKz/goKC/WxsbK50dHQqAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK2trQWqqqp3n5+f87m5uf3m5ub69fX1/fPz + 8//09PT/1NXW/7Syrv/l1sL/4tO5/7u2rv/MztD/6+zt/+bm5vzKysr7srKy/rKysv+1tbX/pKSk/3t7 + e/xtbW2gcXFxIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCwsI+pqam07CwsP7b29v69fX1+/T0 + 9P/19fX/3Nzd/7Oxsf/c1Mf///Td///u0///68n//+rA/+rTr//At6n/yMvN/+fo6v/i4uL9xcXF/K2t + rf6srKz/rq6u/5ubm/92dnb3b29vkmpqahgAAAAAAAAAAAAAAAAAAAAAvr6+hbGxsf3Ozs778vLy+vb2 + 9v729vb/4uLi/7Kysv/T0Mz///zv///25P//79n//+zQ///px///5cD//+W2//rYp//jwJb/v62d/8XI + y//h5OX/3+Dg/MHBwfyoqKj9p6en/6qqqv+Tk5P/c3Nz829vb4RlZWUQAAAAAAAAAAC9vb378PDw+vn5 + +f319fX/6Ojo/7a2tv/Pz8/////////99///9+z///Pi///v2f//7ND//+jH///lvv//4rb/99Sm/+3E + lf/ms4L/1aF0/7yhjP/Fx8n/3ODi/9vc3P29vb38oqKi/qKiov+kpKT/jo6O/21tbdYAAAAAAAAAAMnJ + yZ3Gxsb62tra//Dw8P/Y2Nj/tLS0/8jIyP/28/P////4///57f//9OL//+/Y///sz///6Mb//+W9//3i + tP/106X/7MKU/+Kyg//aoXL/0JBe/8R/Tv+2j3f/xMLC/9ja2//Y2Nj9ubm5/J2dnf6fn5//d3d38wAA + AAAAAAAAAAAAANXV1RPHx8dlwcHBvMTExPra2tr/5ubm/8LCwv+5ubf/0s3F//3x3v//89r//+zP///p + x///5r3//eGz//TSpf/rwZP/4rGB/9igcP/Qj1//xn1K/7tkLf+vXzH/tqqk/9LS0//b3N3/0NXW/aWr + r/16fHz9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMGMPDw2q+vr7AxMTE/NfX1//c3N3/vb/A/8G8 + tf/g073//+rF///nvf//4rP/9dKi/+vAkf/ir3//2J5q/8uOX/+7k3j/wLSt/9DW2v/V29//wcnP/6qe + mP+aakv/ljoN/4AoEbkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLy8sbwcHBbb29 + vcXCwsL80tPT/9HS1P+/vr7/y8Cw/+rTrv/40aD/6r6P/82rjP/Bs6f/yM3T/9Xc4v/Gz9b/saeg/6R1 + T/+jTQ7/pTsA/6A5AP+MIwD9hRkATwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAMvLyx68vLxyurq6yb+/v/3Nzs//yczP/8G/vf/Dxsr/09nh/8vS2/+4rab/roFT/7Fe + Df+zTwD/r00A/6xLAP+nRAD/jygA/pIeAHUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMTEIre4uners7zNwaqV/sakgP+3j1n/vnAP/8Ji + AP++YAD/uV0A/7dYAP+zVAD/rEsA/5EqAP+VIACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBqAGnNZQD70HcA/810 + AP/JcAD/xWoA/8BlAP+8YAD/uVwA/7JTAP+ULQD/kiQAmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALxeAAPldQCO1HMC/taE + AP/SfgD/zngA/8pzAP/GbgD/wmoA/79mAP+3WwD/lTAA/4smAKdaAAADAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/dwAM3HIAsdd9 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4eHgfcnJyWG9v + b1pxcXEcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg4ODKnh4 + eLFycnL7iYmJ/oODg/5paWn2bm5ujnBwcBcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiI + iBGBgYGOdnZ2+JKSkv3MzMz9zc3N/83Nzf6/v7/+i4uL/mhoaPFubm6Dd3d3EQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACRkZEEiYmJZX19feiFhYX+srKy/szMzP3IyMj/xsbG/8XFxf/ExMT/x8fH/ri4uP6FhYX+aGho7G9v + b3h5eXkMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAJqamjyFhYXLhISE/qWlpf7Ozs786enp9u/v7/jZ2dn5xMTE/cPDw//Dw8P/wcHB/8HB + wf/ExMT+sbGx/n9/f/5paWnlb29vbWtrawgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACdnZ0Yk5OToIiIiPybm5v+w8PD/uDg4Pfy8vL58PDw/+/v7//w8PD+7Ozs+9XV + 1frAwMD9v7+//7+/v/+9vb3/vr6+/8DAwP6rq6v+enp6/mdnZ95xcXFidHR0BQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAsLCwBZubm26QkJDtl5eX/ru7u/7a2tr48PDw9/Ly8v7w8PD/7u7u/+/v + 7//x8fH/7+/v/+7u7v7p6en809PT+r29vf27u7v/u7u7/7u7u/+6urr/vLy8/qSkpP53d3f+aWlp1nBw + cFdeXl4DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsrKw+l5eXz5WVlf6wsLD+1NTU+uzs7Pfz8/P98fHx/+/v + 7//v7+//8/Pz/+jo6P+ztbb/w8TG/+vr7P/u7u7/7Ozs/+np6fvR0dH6urq6/Li4uP+3t7f/t7e3/7a2 + tv+4uLj+nZ2d/nNzc/5paWnNeXl5TAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu7u7Gaenp6Kbm5v8qamp/srKyvzo6Oj38/Pz+/Ly + 8v/x8fH/8PDw//Ly8v/s7O3/tbW3/6OgnP/m18D/18q2/6Oinv+7vcD/5ebm/+vr6//p6en/5+fn+87O + zvu3t7f8tLS0/7S0tP+zs7P/tLS0/7S0tP6Wlpb+cHBw/m5ubsR2dnZCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK2trQWysrJvoqKi7qWlpf/BwcH+4ODg+PPz + 8/ny8vL/8vLy//Hx8f/z8/P/8PDw/7u7vP+dnJr/3tTE///02f//79H//+zM///sxv/fzrL/q6eg/7a4 + vP/f4OH/6erq/+fn5//k5OT8zs7O+rOzs/2wsLD/sLCw/7CwsP+wsLD/sLCw/pCQkP5ubm79bm5uunZ2 + djgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwsLCPaysrM+mpqb+ubm5/9nZ + 2fnw8PD49PT0/vLy8v/y8vL/8/Pz//Pz8//CwsL/mZmX/9fQxv//+eX///Pc///v1v//7M///+nJ///o + w///57///+e5/+jQrP+yqp//s7a4/9na3P/m5+f/5OTk/+Li4vzJycn6sLCw/a2trf+srKz/rKys/62t + rf+qqqr+jIyM/mxsbPxvb2+vd3d3LgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL6+vg29vb2bra2t/LKy + sv/Pz8/77Ozs+PX19f3z8/P/8vLy//T09P/19fX/xsbH/5aWl//Oy8j///zw///36f//8+H///Da///u + 1P//687//+nJ///nw///5b3//+S3///gsf/61qX/5MKa/7iqm/+xtLb/09XX/+Pk5P/i4uL/4eHh/MbG + xvqurq78qamp/6mpqf+oqKj/qamp/6ampv6Ghob+ampq+29vb6RxcXEmAAAAAAAAAAAAAAAAAAAAALS0 + tJu0tLT+xsbG/ebm5vj29vb79PT0//Pz8//09PT/9vb2/83Nzf+VlZX/x8fG/////P///fX///js///0 + 5f//8uD///Da///t1P//687//+nI///nwv//5b3//+S3//vdr//106T/8MmZ/+2+jf/esYX/u6aT/7K0 + tf/O0dP/4eLi/+Hh4f/e3t79xcXF+qurq/ympqb/paWl/6Wlpf+lpaX/oaGh/oKCgv5qamr4cXFxmW9v + bxsAAAAAAAAAALe3t+zf39/59/f3+vf39/709PT/8vLy//T09P/W1tb/mZmZ/8DAwP/////////////8 + +P//+fH///br///05f//8t///+/Z///t0///687//+nI///nwv//5Lz//+K4//zesP/10qT/7seZ/+i8 + jf/jsYL/3qd2/9Scbf+7nIb/s7Kz/8rN0P/d3t7/3t7e/9zc3P3ExMT6qKio/KKiov+ioqL/oaGh/6Ki + ov+bm5v+fHx8/mtra60AAAAAAAAAALu7u67Gxsb+2dnZ/u/v7/729vb+9PT0/+jo6P+Dg4P/ra2t/+zs + 7P/////////////99///+vD///br///05f//8t///+/Z///t0///683//+nH///nwv//5Lz//uK2//rc + rv/00aP/7saY/+i7jf/isYH/26Z2/9aba//QkF7/yoRT/7qQdP+1r63/yM3Q/9nb2//b29z/2tra/cLC + wvujo6P8nZ2d/56env+enp7/lJSU/mtra8EAAAAAAAAAAM/PzwTJyclTxsbGp7m5ufHDw8P+2NjY/u3t + 7f76+vr+29vb/6urq/+Xl5f/wMC///Pv6/////f///nt///15f//8d7//+/Y///t0///683//+nH///m + wf//5Lv//uK3//vbrf/00KL/7saX/+e7jP/hsIH/26V2/9Waav/Pj1//yIRU/8N4Rv+7azf/tH1d/7Wp + o//Gycv/1dbW/9nZ2f/Y2Nj9v7+/+6GhofycnJz/lZWV/29vb9EAAAAAAAAAAAAAAAAAAAAAAAAAANvb + 2wzIyMhVxcXFqre3t/LAwMD+2NjY/u/v7/7z8/T+0NDQ/6Wmpv+hoJ7/z8vC//zw4v//9uP///La///u + 0///68z//+jH///mwf//5Lv//uK1//ncrP/z0KH/7cWW/+e6i//hr4D/26R1/9SZav/Oj1//yINT/8F4 + R/+7azf/tFoj/65fMv+zopn/vr+//9bW1v/W1tb/2NjZ/9PV1v2vs7X7lpqb/nR2duAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANzc3AzExMRYwcHBrbW1tfTAwMD+1dXV/uzs7P7s7Oz+x8jI/6Ok + pf+uqqX/29HA///u0///7s///+rH///nwP//5Lv//uO2//narf/zz6H/7cSV/+e5iv/grn//2qN0/9SZ + af/PjVz/yIBN/799T/+3kHb/uK+s/8XLzv/S1NX/2dnZ/9PU1v/EyMv/rbS3/5uRjf+XZUv/iCsO/3hk + XZUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANDQ0A7Dw8NawMDAsbOz + s/a+vr7+09PT/unp6f7k5OX+wcLD/6Slpf+6sqn/5dW7///qwv//57v//+K1//rZq//yzqD/7MOV/+e4 + iv/hrn3/3aNw/9KXav/Am37/tqqg/7/EyP/Q09X/29zd/9bY2f/IzM7/sLa8/5+Vj/+aakz/nkUP/580 + AP+bMwD+hh4A/n8XADoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANfX1w/ExMRbvr6+s7Gxsfe8vLz+0dHR/ubm5v7c3d7+vL2//6mnp//HvKn/79ew//7c + qv/1z5//8MSU/+e3iP/NrIz/tqmd/7m7v//LztH/3N3e/9ja3P/JzdH/tLm//6KYkv+gcU3/plEP/6k/ + AP+lQAD/oz8A/585AP6MJwD+gRsAxIgAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM7OzhG+vr5fvLy8tbCwsPm7u7v+zs7O/uLi + 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 + Z//4qz3/9JkZ/+6HAP/nfQD/3XUA/9VuAP7MZQD80GIA4M9gAK7IWgB7yFcARcBRABUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/mwBY74UA+vCIAP/ogQD/4XkA/Od5AOPldQCy4HAAedlsAETsbgAVAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/5QAJ/WFAFzzhQBE+4MAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA///5//// + AAD//+B///8AAP//gB///wAA//4AB///AAD//AAB//8AAP/wAAB//wAA/8AAAB//AAD/gAAAD/8AAP4A + AAAD/wAA+AAAAAD/AADwAAAAAD8AAMAAAAAADwAAgAAAAAADAACAAAAAAAEAAIAAAAAAAQAAwAAAAAAB + AAD4AAAAAAEAAP8AAAAAAQAA/+AAAAADAAD//AAAAAMAAP//gAAABwAA///wAAAPAAD///4AAB8AAP// + /4AAPwAA////AAB/AAD///4AAP8AAP///AAB/wAA///4AAH/AAD///AAA/8AAP//wAAH/wAA//+AAA// + AAD//wAAH/8AAP/+AAA//wAA//wAAH//AAD/+AAA//8AAP/gAAH//wAA/8AAA///AAD/gAAP//8AAP8A + AD///wAA/wAH////AAD/AP////8AAP/f/////wAA////////AAD///////8AAP///////wAA + + + \ No newline at end of file diff --git a/app/DD-Record-Organiser/frmScanFiles.vb b/app/DD-Record-Organiser/frmScanFiles.vb new file mode 100644 index 0000000..28edab0 --- /dev/null +++ b/app/DD-Record-Organiser/frmScanFiles.vb @@ -0,0 +1,144 @@ +Imports System.IO +Public Class frmScanFiles + Dim DragID + Dim MouseIsDown As Boolean = False + + Private Sub frmScanFiles_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing + ClassWindowLocation.SaveFormLocationSize(Me, 9999, CURRENT_SCREEN_ID, Me.Name) + End Sub + Private Sub frmScanFiles_Load(sender As Object, e As EventArgs) Handles Me.Load + Load_Files() + ClassWindowLocation.LoadFormLocationSize(Me, 9999, CURRENT_SCREEN_ID, Me.Name) + End Sub + Sub Load_Files() + Try + Dim sql1 As String = String.Format("select * from TBPMO_FILES_USER where HANDLE_TYPE = 'SCAN' and WORKED = 0 AND UPPER(USER_WORK) = '{0}'", Environment.UserName) + Dim DT As DataTable = ClassDatabase.Return_Datatable(sql1, "Load ScanFiles") + If Not IsNothing(DT) Then + ListView1.Items.Clear() + Dim i = 0 + For Each row As DataRow In DT.Rows + + Dim extension = Path.GetExtension(row.Item("FILENAME2WORK").ToString) + Dim filename = row.Item("FILENAME_ONLY").ToString + Dim ID = row.Item("GUID").ToString + 'We can only find associated exes by extension, so don't show any files that have no extension + If IsNothing(extension) Then + Else + If extension.Contains("pdf") Then + 'Add the file to the ListView, with the executable path as the key to the ImageList's image + ListView1.Items.Add(filename, 0) + Else + ListView1.Items.Add(filename) + End If + ListView1.Items(i).Tag = ID + i += 1 + End If + Next + If DT.Rows.Count = 0 Then + Me.Close() + End If + End If + Catch ex As Exception + MsgBox("unexpected Error in Load Scanfiles:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) + End Try + End Sub + + Private Sub btnrefresh_Click(sender As Object, e As EventArgs) Handles btnrefresh.Click + Load_Files() + End Sub + + Private Sub PdfViewer1_CurrentPageChanged(sender As Object, e As DevExpress.XtraPdfViewer.PdfCurrentPageChangedEventArgs) Handles PdfViewer1.CurrentPageChanged + PDF_Pagenumber() + End Sub + Sub PDF_Pagenumber() + Try + pdfstatuslblPageNumber.Text = "Page " & PdfViewer1.CurrentPageNumber & "/" & PdfViewer1.PageCount + Catch ex As Exception + + End Try + End Sub + + Private Sub ListView1_ItemSelectionChanged(sender As Object, e As ListViewItemSelectionChangedEventArgs) Handles ListView1.ItemSelectionChanged + If ListView1.SelectedItems.Count = 1 Then + Dim i = ListView1.FocusedItem + Dim i1 = i.Text + If Not IsNothing(i) Then + If i.Text.ToLower.EndsWith("pdf") Then + Panel1.Visible = True + Dim docpath = CURRENT_SCAN_FOLDERWATCH & "\" & i.Text + PdfViewer1.LoadDocument(docpath) + 'PdfViewer1.HorizontalScroll.Visible = True + Else + Panel1.Visible = False + PdfViewer1.DocumentFilePath = "" + End If + End If + End If + End Sub + + Private Sub ToolStripDropDownButton1_Click(sender As Object, e As EventArgs) Handles ToolStripDropDownButton1.Click + PdfViewer1.ZoomFactor = 30 + End Sub + 'Private Sub ListView1_MouseDown(sender As Object, e As MouseEventArgs) Handles ListView1.MouseDown + ' If ListView1.SelectedItems.Count = 1 Then + ' Dim i = ListView1.FocusedItem + ' Dim i1 = i.Text + ' If Not IsNothing(i) Then + ' MouseIsDown = True + ' DragID = i.Tag + ' Console.WriteLine("Mouse Down") + ' End If + ' End If + 'End Sub + + Private Sub ListView1_MouseMove(sender As Object, e As MouseEventArgs) Handles ListView1.MouseMove + If MouseIsDown Then + 'Initiate dragging. + ListView1.DoDragDrop(DragID, DragDropEffects.Copy) + Console.WriteLine("Dragging") + End If + MouseIsDown = False + End Sub + + Private Sub ListView1_ItemDrag(sender As Object, e As ItemDragEventArgs) Handles ListView1.ItemDrag + If ListView1.SelectedItems.Count = 1 Then + Dim i = ListView1.FocusedItem + Dim i1 = i.Text + If Not IsNothing(i) Then + MouseIsDown = True + DragID = i.Tag + Console.WriteLine("Mouse Down") + ListView1.DoDragDrop("SCAN;" & DragID.ToString, DragDropEffects.Copy) + End If + End If + + End Sub + + Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged + + End Sub + + Private Sub PdfViewer1_DocumentChanged(sender As Object, e As DevExpress.XtraPdfViewer.PdfDocumentChangedEventArgs) Handles PdfViewer1.DocumentChanged + PDF_Pagenumber() + End Sub + + Private Sub btndelete_Click(sender As Object, e As EventArgs) Handles btndelete.Click + Try + If ListView1.SelectedItems.Count = 1 Then + Dim i = ListView1.FocusedItem + Dim i1 = i.Text + If Not IsNothing(i) Then + Dim del = "DELETE FROM TBPMO_FILES_USER where GUID = " & i.Tag + If ClassDatabase.Execute_non_Query(del, True) Then + Load_Files() + End If + End If + End If + Catch ex As Exception + MsgBox("Unexpected Error in Delete Scanfile:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) + End Try + + + End Sub +End Class \ No newline at end of file diff --git a/app/SetupWiX/Product.wxs b/app/SetupWiX/Product.wxs index 1faa834..e14377e 100644 --- a/app/SetupWiX/Product.wxs +++ b/app/SetupWiX/Product.wxs @@ -1,7 +1,7 @@ - + @@ -82,6 +82,10 @@ + + + + @@ -137,6 +141,9 @@ + + + @@ -156,6 +163,7 @@ +