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.