diff --git a/app/DD-Record-Organizer/ClassControlBuilder.vb b/app/DD-Record-Organizer/ClassControlBuilder.vb
index 4bc9038..0f04eed 100644
--- a/app/DD-Record-Organizer/ClassControlBuilder.vb
+++ b/app/DD-Record-Organizer/ClassControlBuilder.vb
@@ -309,13 +309,13 @@ Public Class ClassControlBuilder
MsgBox("Error in Enable Controls - " & CONTROL_ID.ToString & ": " & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
- Public Function Depending_Controls(control As Control, TableResult As DataTable, value As String)
+ Public Sub Depending_Controls(control As Control, TableResult As DataTable, value As String)
Try
If TableResult.Rows.Count = 0 Then
- Return 2
+ Exit Sub
End If
If CURRENT_RECORD_ID = 0 Or CONTROL_ID = 0 Then
- Return 2
+ Exit Sub
End If
If IsNothing(value) Then 'Kein Value also abhängige Controls auf "Leer" setzen
Try
@@ -342,10 +342,10 @@ Public Class ClassControlBuilder
End Select
Next
- Return 2
+ Exit Sub
Catch ex As Exception
MsgBox("Unexpected error in DependingControls (For Each row As DataRow In TableResult.Rows)- " & CONTROL_ID.ToString & ": " & ex.Message, MsgBoxStyle.Critical)
- Return 0
+ Exit Sub
End Try
@@ -372,16 +372,16 @@ Public Class ClassControlBuilder
If ClassControlCommandsUI.UpdateControlValue(CONTROL_ID, CURRENT_RECORD_ID, value.ToString, CURRENT_ENTITY_ID) = False Then
ClassLogger.Add(String.Format(" >> ClassControlCommandsUI.UpdateControlValue (1) was not successfull - ControlID: {0},RecordID: {1},value: {2}'", CONTROL_ID, CURRENT_RECORD_ID, value), False)
- Return 0
Else
- ' & upd & "'")
+ ControlsChanged.Remove(CONTROL_ID)
End If
Else
If LogErrorsOnly = False Then ClassLogger.Add(" >> ctrlvalID is Nothing - Attention.....", False, False)
If CURRENT_RECORD_ID <> 0 Then
If ClassControlCommandsUI.InsertControlValue(CONTROL_ID, CURRENT_RECORD_ID, value, CURRENT_ENTITY_ID) = False Then
ClassLogger.Add(String.Format(" >> ClassControlCommandsUI.InsertControlValue (1) was not successfull - ControlID: {0},RecordID: {1},value: {2}'", CONTROL_ID, CURRENT_RECORD_ID, value), False)
- Return 0
+ Else
+ ControlsChanged.Remove(CONTROL_ID)
End If
End If
End If
@@ -431,6 +431,7 @@ Public Class ClassControlBuilder
If Not IsNothing(id) Then
'Dim upd = String.Format("UPDATE TBPMO_CONTROL_VALUE SET VALUE = '{0}', CHANGED_WHO = '{1}' WHERE GUID = {2}", dateValue, USER_USERNAME, id)
If ClassControlCommandsUI.UpdateControlValue(dependingControlId, CURRENT_RECORD_ID, dateValue, CURRENT_ENTITY_ID) = True Then
+ ControlsChanged.Remove(dependingControlId)
If LogErrorsOnly = False Then ClassLogger.Add(" >> Value was not nothing - Updated the ControlValue'", False) '" & upd)
Else
ClassLogger.Add(" >> Check Update depending control (DateEdit) value as it was nothing and Update was not successful - Update-Command '", False) ' & upd & "'")
@@ -438,6 +439,7 @@ Public Class ClassControlBuilder
Else
If ClassControlCommandsUI.InsertControlValue(dependingControlId, CURRENT_RECORD_ID, dateValue, CURRENT_ENTITY_ID) = True Then
+ ControlsChanged.Remove(dependingControlId)
If LogErrorsOnly = False Then ClassLogger.Add(" >> Value was nothing - Inserted the ControlValue (DateEdit)!", False)
Else
ClassLogger.Add(String.Format(" >> ClassControlCommandsUI.InsertControlValue (DateEdit) was not successfull - ControlID: {0},RecordID: {1},value: {2}'", CONTROL_ID, CURRENT_RECORD_ID, dateValue), False)
@@ -470,8 +472,8 @@ Public Class ClassControlBuilder
' Hier werden nun evtl schon gesetzte Werte für CheckedListBox angehakt
' Wert per LINQ aus DT_ControlValues suchen der zur aktuellen controlId passt
Dim values As List(Of Object) = (From row1 In CURRENT_CONTROL_VALUES.AsEnumerable()
- Where row1.Item("CONTROL_ID") = dependingControlId
- Select row1.Item("VALUE")).ToList()
+ Where row1.Item("CONTROL_ID") = dependingControlId
+ Select row1.Item("VALUE")).ToList()
ControlLoader.CheckedListBox.LoadValue(checkedlistbox, values)
If IsEdit Or IsInsert Then
@@ -497,6 +499,7 @@ Public Class ClassControlBuilder
If Not IsNothing(id) Then
If ClassControlCommandsUI.UpdateControlValue(dependingControlId, CURRENT_RECORD_ID, value1, CURRENT_ENTITY_ID) = True Then
If LogErrorsOnly = False Then ClassLogger.Add(" >> Value was not nothing - Updated the ControlValue'", False) '" & upd)
+ ControlsChanged.Remove(dependingControlId)
Else
ClassLogger.Add(String.Format(" >> ClassControlCommandsUI.UpdateControlValue (TextBox) was not successfull - ControlID: {0},RecordID: {1},value: {2}'", CONTROL_ID, CURRENT_RECORD_ID, value1), False)
End If
@@ -509,6 +512,7 @@ Public Class ClassControlBuilder
Else
If ClassControlCommandsUI.InsertControlValue(dependingControlId, CURRENT_RECORD_ID, value1, CURRENT_ENTITY_ID) = True Then
+ ControlsChanged.Remove(dependingControlId)
If LogErrorsOnly = False Then ClassLogger.Add(" >> Value was nothing - Inserted the ControlValue (TextBox)!", False)
Else
ClassLogger.Add(String.Format(" >> ClassControlCommandsUI.InsertControlValue (TextBox) was not successfull - ControlID: {0},RecordID: {1},value: {2}'", CONTROL_ID, CURRENT_RECORD_ID, value1), False)
@@ -532,8 +536,8 @@ Public Class ClassControlBuilder
ControlLoader.DataGridViewCheckable.SetDataSource(gridControl, dt)
Dim values As List(Of Object) = (From row1 In CURRENT_CONTROL_VALUES.AsEnumerable()
- Where row1.Item("CONTROL_ID") = dependingControlId
- Select row1.Item("VALUE")).ToList()
+ Where row1.Item("CONTROL_ID") = dependingControlId
+ Select row1.Item("VALUE")).ToList()
ControlLoader.DataGridViewCheckable.LoadValue(gridControl, values)
End Select
@@ -541,12 +545,10 @@ Public Class ClassControlBuilder
End If
Next
- Return 1
Catch ex As Exception
MsgBox("Unexpected error in DependingControls - " & CONTROL_ID.ToString & ": " & ex.Message, MsgBoxStyle.Critical)
- Return 0
End Try
- End Function
+ End Sub
Public Sub OnDateTimeValueChanged(sender As Object, ByVal e As EventArgs)
If CURRENT_RECORD_ENABLED = False Then Exit Sub
@@ -744,7 +746,7 @@ Public Class ClassControlBuilder
' CtrlCommandUI.SaveRecord(0, CURRENT_ENTITY_ID, CURRENT_PARENT_ID)
'End If
- Dim CONTROL_VALUE As String = ClassControlCommandsUI.GetControlValue(control)
+ Dim CONTROL_VALUE As String = ClassControlCommandsUI.GetControlValue(control)
If CURRENT_RECORD_ID = 0 Then
Exit Sub
diff --git a/app/DD-Record-Organizer/ClassControlCommandsUI.vb b/app/DD-Record-Organizer/ClassControlCommandsUI.vb
index 3cb1bde..f63bb28 100644
--- a/app/DD-Record-Organizer/ClassControlCommandsUI.vb
+++ b/app/DD-Record-Organizer/ClassControlCommandsUI.vb
@@ -580,8 +580,8 @@ Public Class ClassControlCommandsUI
End If
'Dim values As New List(Of String)(value.Split(";"))
- Dim AddValues = values.Except(oldValues)
- Dim RemoveValues = oldValues.Except(values)
+ Dim AddValues = values.Except(oldValues).ToList()
+ Dim RemoveValues = oldValues.Except(values).ToList()
For Each _addValue As String In AddValues
If Not _addValue = "" Then
Dim converted_value = Check_and_Format_Value(ControlId, RecordId, _addValue)
@@ -596,9 +596,9 @@ Public Class ClassControlCommandsUI
Next
For Each v As String In RemoveValues
ClassDatabase.Execute_non_Query(String.Format("DELETE FROM TBPMO_CONTROL_VALUE WHERE CONTROL_ID = {0} AND RECORD_ID = {1} AND VALUE = '{2}'", ControlId, RecordId, v))
- ClassProxy.PRPROXY_CONTROL_DEL(RecordId, CURRENT_ENTITY_ID, ControlId)
+ ' ClassProxy.PRPROXY_CONTROL_DEL(RecordId, CURRENT_ENTITY_ID, ControlId)
Next
-
+ ClassProxy.PRPROXY_CONTROL_VALUE_UPD_INS(CURRENT_ENTITY_ID, ControlId, RecordId, "")
Catch ex As Exception
MsgBox("Error in UpdateMultipleValues:" & vbNewLine & ex.Message)
End Try
diff --git a/app/DD-Record-Organizer/ClassInactivity.vb b/app/DD-Record-Organizer/ClassInactivity.vb
new file mode 100644
index 0000000..e56d803
--- /dev/null
+++ b/app/DD-Record-Organizer/ClassInactivity.vb
@@ -0,0 +1,45 @@
+Public Class ClassInactivity
+ Private _timer As Timers.Timer
+ Private _interval As Integer
+
+ Public Sub New(intervalMinutes As Integer)
+ _interval = intervalMinutes * 1000 * 60
+ _timer = New Timers.Timer(_interval)
+ _timer.AutoReset = False
+ _timer.Enabled = True
+ AddHandler _timer.Elapsed, AddressOf OnTick
+ End Sub
+
+ Public Sub Start()
+ If _interval > 0 Then
+ _timer.Enabled = True
+ End If
+ End Sub
+
+ Public Sub Reset()
+ _timer.Enabled = False
+ _timer.Enabled = True
+ End Sub
+
+ Public Sub SetInterval(newInterval As Integer)
+ _timer.Interval = newInterval
+ _interval = newInterval
+ End Sub
+
+ Private Sub OnTick()
+ ' Der User wird ausgeloggt
+ ClassUser.LogoutUser()
+
+ Dim result As DialogResult = MessageBox.Show("Sie wurden aufgrund von Inaktivität ausgeloggt. Möchten Sie sich wieder anmelden?", "Inaktivität", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
+ If result = DialogResult.Yes Then
+ ClassInit.InitUserLogin()
+ MsgBox("Sie wurden wieder eingeloggt")
+ Else
+ MsgBox("Die Anwendung wird beendet")
+ Application.Exit()
+ End If
+
+ End Sub
+
+
+End Class
diff --git a/app/DD-Record-Organizer/ClassInactivityFilter.vb b/app/DD-Record-Organizer/ClassInactivityFilter.vb
new file mode 100644
index 0000000..719d4d4
--- /dev/null
+++ b/app/DD-Record-Organizer/ClassInactivityFilter.vb
@@ -0,0 +1,29 @@
+Public Class ClassInactivityFilter
+ Implements IMessageFilter
+
+ Private _form As frmMain
+ Private _last_check As New DateTime()
+
+ Public Sub New(form As frmMain)
+ _form = form
+ End Sub
+
+ Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
+ ' PrefilterMessage empfängt ALLE Events ab, die zur Laufzeit passieren
+ ' Überprüft ob die abgefangenen Events zu Aktionen mit Maus oder Keyboard gehören
+ Dim mouse As Boolean = (m.Msg >= &H200 And m.Msg <= &H20D) Or (m.Msg >= &HA0 And m.Msg <= &HAD)
+ Dim kbd As Boolean = (m.Msg >= &H100 And m.Msg <= &H109)
+
+ ' Errechnet die Zeit-Differenz zwischen Jetzt und dem letzten Zurücksetzen des Timers
+ Dim diffMs = (DateTime.Now.Ticks - _last_check.Ticks) / 10000
+
+ ' Timer wird nur zurückgesetzt, wenn Maus/Keyboard Events passieren
+ ' und wenn das letzte Zurücksetzen mind. 500ms in der Vergangenheit liegt
+ If (mouse Or kbd) And diffMs > 500 Then
+ _last_check = DateTime.Now
+ _form.TIMER_INACTIVITY.Reset()
+ End If
+
+ Return False
+ End Function
+End Class
diff --git a/app/DD-Record-Organizer/ClassLicence.vb b/app/DD-Record-Organizer/ClassLicence.vb
index 48ab40b..2ceb499 100644
--- a/app/DD-Record-Organizer/ClassLicence.vb
+++ b/app/DD-Record-Organizer/ClassLicence.vb
@@ -50,7 +50,7 @@ Public Class ClassLicence
If LICENSE_FILE_DATE < CDate(todayDate) Then
- MsgBox("Your license evaluated!" & vbNewLine & "Last valid date: " & split(1) & vbNewLine & "Please contact Digital Data.", MsgBoxStyle.Exclamation)
+ MsgBox("Your license expired!" & vbNewLine & "Last valid date: " & split(1) & vbNewLine & "Please contact Digital Data.", MsgBoxStyle.Exclamation)
LICENSE_EXPIRED = True
LICENSE_COUNT = 0
End If
diff --git a/app/DD-Record-Organizer/ClassUser.vb b/app/DD-Record-Organizer/ClassUser.vb
new file mode 100644
index 0000000..11f0413
--- /dev/null
+++ b/app/DD-Record-Organizer/ClassUser.vb
@@ -0,0 +1,17 @@
+Public Class ClassUser
+
+ Public Shared Sub LogoutUser()
+ Try
+ Dim SQL
+
+ SQL = $"UPDATE TBDD_USER SET LOGGED_IN = {0}, LOGGED_WHERE = '' WHERE LOWER(USERNAME) = LOWER('{USER_USERNAME}')"
+ ClassDatabase.Execute_non_Query(sql)
+
+ sql = $"DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = {USER_GUID} AND MODULE = 'Record-Organizer'"
+ ClassDatabase.Execute_non_Query(sql)
+ Catch ex As Exception
+ ClassLogger.Add("Error while logging out user: " & ex.Message)
+ End Try
+ End Sub
+
+End Class
diff --git a/app/DD-Record-Organizer/DD-Record-Organizer.vbproj b/app/DD-Record-Organizer/DD-Record-Organizer.vbproj
index 0fc8814..f7ccb23 100644
--- a/app/DD-Record-Organizer/DD-Record-Organizer.vbproj
+++ b/app/DD-Record-Organizer/DD-Record-Organizer.vbproj
@@ -253,6 +253,7 @@
+
@@ -267,6 +268,7 @@
+
@@ -441,6 +443,7 @@
Component
+
ControlProperties.en.resx
True
diff --git a/app/DD-Record-Organizer/frmConstructor_Main.vb b/app/DD-Record-Organizer/frmConstructor_Main.vb
index 2d1853c..4786a92 100644
--- a/app/DD-Record-Organizer/frmConstructor_Main.vb
+++ b/app/DD-Record-Organizer/frmConstructor_Main.vb
@@ -1796,6 +1796,7 @@ Public Class frmConstructor_Main
Private Sub tsButtonSave_Click(sender As Object, e As EventArgs) Handles tsButtonSave.Click
Save_Record()
+
End Sub
Sub Focus_Control(name As String)
@@ -1851,7 +1852,6 @@ Public Class frmConstructor_Main
End If
If CtrlCommandUI.IsInsert Then
ActivateAllTabs()
- DisableEditMode()
End If
ClassProxy.PRPROXY_RECORD_UPD_INS(CURRENT_ENTITY_ID, CURRENT_RECORD_ID)
@@ -1964,10 +1964,10 @@ Public Class frmConstructor_Main
If CtrlCommandUI.IsInsert Then
tsButtonSave.Enabled = False
tsButtonCancel.Visible = False
- Else
- ' DisableEditMode()
End If
+ DisableEditMode()
+
CtrlCommandUI.IsInsert = False
EDIT_STATE = EditState.None
RECORD_CHANGED = False
@@ -5298,6 +5298,8 @@ Public Class frmConstructor_Main
Customer_Run_Procedures()
' RECORD_CHANGED zurücksetzen
RECORD_CHANGED = False
+ 'Liste der geänderten Control Values leeren
+ CtrlBuilder.ControlsChanged.Clear()
End Sub
'''
diff --git a/app/DD-Record-Organizer/frmMain.vb b/app/DD-Record-Organizer/frmMain.vb
index c84e5fc..bdbac2f 100644
--- a/app/DD-Record-Organizer/frmMain.vb
+++ b/app/DD-Record-Organizer/frmMain.vb
@@ -11,10 +11,11 @@ Imports System.Net.Sockets
Imports DD_LIB_Standards
Public Class frmMain
-
Dim strIPAddress As String
+
Public Shared TIMER_SCAN As New System.Windows.Forms.Timer
- Public Shared TIMER_INACTIVITY As New System.Windows.Forms.Timer
+ Public TIMER_INACTIVITY As ClassInactivity
+
Private Shared Sub Scan_TickHandler(sender As Object, e As EventArgs)
Try
If ClassFolderWatcher.NEW_FILES = False Then Exit Sub
@@ -89,6 +90,8 @@ Public Class frmMain
LabelLanguage.Caption = "Language: " & USER_LANGUAGE
Load_Connection_Dep_Data()
+
+
'Wenn Argumente übergeben wurden, wird Formular geladen und zu record gesprungen
ClassJumpRecord.ParseArgs()
If Task_Popup_minutes <> 0 Then
@@ -180,13 +183,7 @@ Public Class frmMain
Exit Sub
End If
Try
- Dim sql = "UPDATE TBDD_USER SET LOGGED_IN = @LogInOut, LOGGED_WHERE = '@ANGEMELDETWO' WHERE (LOWER(USERNAME) = LOWER('@user'))"
- sql = sql.Replace("@LogInOut", 0)
- sql = sql.Replace("@ANGEMELDETWO", "''")
- sql = sql.Replace("@user", USER_USERNAME)
- ClassDatabase.Execute_non_Query(sql)
- sql = "DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = " & USER_GUID & " AND MODULE = 'Record-Organizer'"
- ClassDatabase.Execute_non_Query(sql)
+ ClassUser.LogoutUser()
ClassWindowLocation.SaveFormLocationSize(Me, 1, CURRENT_SCREEN_ID, "frmMain")
ToolStripManager.SaveSettings(Me)
@@ -602,9 +599,8 @@ Public Class frmMain
End If
Try
If USER_IS_ADMIN = False Or AUTO_LOGOUT_USER > 0 Then
- TIMER_INACTIVITY.Interval = AUTO_LOGOUT_USER
- 'TIMER_INACTIVITY.Enabled = True
- 'AddHandler TIMER_INACTIVITY.Tick, AddressOf Scan_TickHandler
+ TIMER_INACTIVITY = New ClassInactivity(AUTO_LOGOUT_USER)
+ Application.AddMessageFilter(New ClassInactivityFilter(Me))
End If
Catch ex As Exception
ClassHelper.InsertEssential_Log(USER_GUID, "USER_ID", "Unexpected Error in AUOTP_LOGOUT_USER: " & ex.Message)
@@ -824,8 +820,8 @@ Public Class frmMain
cultureInfo.DateTimeFormat.ShortDatePattern = USER_DATE_FORMAT
Thread.CurrentThread.CurrentCulture = cultureInfo
Thread.CurrentThread.CurrentUICulture = cultureInfo
- cultureInfo.DefaultThreadCurrentCulture = cultureInfo
- cultureInfo.DefaultThreadCurrentUICulture = cultureInfo
+ CultureInfo.DefaultThreadCurrentCulture = cultureInfo
+ CultureInfo.DefaultThreadCurrentUICulture = cultureInfo
End If
' Dieser Aufruf ist für den Designer erforderlich.