diff --git a/app/DD_PM_WINDREAM/ClassParamRefresh.vb b/app/DD_PM_WINDREAM/ClassParamRefresh.vb index 4b16652..d2b4898 100644 --- a/app/DD_PM_WINDREAM/ClassParamRefresh.vb +++ b/app/DD_PM_WINDREAM/ClassParamRefresh.vb @@ -76,6 +76,23 @@ INACTIVITY_DURATION = CInt(oInactivityDuration) Catch ex As Exception INACTIVITY_DURATION = 0 + + End Try + ElseIf oMode.StartsWith("PM.COL_LAST_EDITED") Then + Dim oLEDITEDCOL = oMode.Replace("PM.COL_LAST_EDITED=", "") + Try + LAST_EDITED_COLUMN = oLEDITEDCOL + Catch ex As Exception + LAST_EDITED_COLUMN = "" + + End Try + ElseIf oMode.StartsWith("PM.COL_LAST_ADDED") Then + Dim oLEDITEDCOL = oMode.Replace("PM.COL_LAST_ADDED=", "") + Try + LAST_ADDED_COLUMN = oLEDITEDCOL + Catch ex As Exception + LAST_ADDED_COLUMN = "" + End Try Else LOGGER.Info($"Wrong oMode: {oMode}") diff --git a/app/DD_PM_WINDREAM/ModuleRuntimeVariables.vb b/app/DD_PM_WINDREAM/ModuleRuntimeVariables.vb index 7d0d34c..94e108b 100644 --- a/app/DD_PM_WINDREAM/ModuleRuntimeVariables.vb +++ b/app/DD_PM_WINDREAM/ModuleRuntimeVariables.vb @@ -74,6 +74,8 @@ Module ModuleRuntimeVariables Public POPUP_REMINDER_ACTIVE As Boolean = True Public INACTIVITY_DURATION As Integer = 0 Public INACTIVITYRecognized As Boolean = False + Public LAST_EDITED_COLUMN As String = "NONE" + Public LAST_ADDED_COLUMN As String = "NONE" Public LICENSE_COUNT As Integer = 0 Public LICENSE_EXPIRED As Boolean = False diff --git a/app/DD_PM_WINDREAM/frmMain.vb b/app/DD_PM_WINDREAM/frmMain.vb index 024310c..de84785 100644 --- a/app/DD_PM_WINDREAM/frmMain.vb +++ b/app/DD_PM_WINDREAM/frmMain.vb @@ -14,11 +14,15 @@ Imports System.ComponentModel Imports System.IO Imports System.Drawing.Imaging Imports DevExpress.XtraPrinting +Imports System.Runtime.Serialization +Imports System.Security.Cryptography Public Class frmMain Private UserLoggedin As Integer = 0 Private CURR_DT_VWPM_PROFILE_ACTIVE As DataTable Private CURR_DT_OVERVIEW As DataTable + Private OVERVIEW_ADDED_WHEN As String + Private OVERVIEW_CHANGED_WHEN As String Private RedDocuments As Integer = 0 Private YellowDocuments As Integer = 0 @@ -42,7 +46,42 @@ Public Class frmMain Private DT_CHECKUSER_MODULE As DataTable Private IsFilterMode As Boolean + Private Function GET_LAST_ADDED(pDatatable As DataTable) As String + Dim oADDED As String + Try + If IsNothing(pDatatable) Then + oADDED = "NOTHING" + ElseIf LAST_ADDED_COLUMN = "NONE" Then + oADDED = Now.ToShortTimeString.ToString + Else + Dim result As Object + result = pDatatable.Compute($"MAX({LAST_ADDED_COLUMN})", "") + oADDED = result + End If + Catch ex As Exception + oADDED = "Exception" + End Try + Return oADDED + End Function + Private Function GET_LAST_CHANGED(pDatatable As DataTable) As String + Dim oCHANGED As String + Try + If IsNothing(pDatatable) Then + oCHANGED = "NOTHING" + ElseIf LAST_EDITED_COLUMN = "NONE" Then + oCHANGED = Now.ToShortTimeString.ToString + Else + Dim result As Object + result = pDatatable.Compute($"MAX({LAST_EDITED_COLUMN})", "") + oCHANGED = result + End If + + Catch ex As Exception + oCHANGED = "Exception" + End Try + Return oCHANGED + End Function Private Sub frmMain_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing Try FormOpenClose = True @@ -616,7 +655,7 @@ Public Class frmMain End Try End Sub - Async Function Load_single_Profile() As Tasks.Task + Async Function Load_single_Profile(Optional ForceReload As Boolean = False) As Tasks.Task Try Load_Profiles_for_User() Layout_Single_Profile() @@ -633,18 +672,31 @@ Public Class frmMain If result = 1 Then ToolStripLabelViewTape.Text = "Detailansicht Profil: " & CURRENT_CLICKED_PROFILE_TITLE - Dim sql = foundRows(0)("SQL_VIEW") + Dim oSQL = foundRows(0)("SQL_VIEW") - sql = clsPatterns.ReplaceInternalValues(sql) - sql = clsPatterns.ReplaceUserValues(sql, USER_PRENAME, USER_SURNAME, USER_SHORTNAME, USER_LANGUAGE, USER_EMAIL, USER_ID, CURRENT_CLICKED_PROFILE_ID) + oSQL = clsPatterns.ReplaceInternalValues(oSQL) + oSQL = clsPatterns.ReplaceUserValues(oSQL, USER_PRENAME, USER_SURNAME, USER_SHORTNAME, USER_LANGUAGE, USER_EMAIL, USER_ID, CURRENT_CLICKED_PROFILE_ID) - sql = sql.Replace("@USER_ID", USER_ID) - sql = sql.Replace("@USERNAME", USER_USERNAME) - sql = sql.Replace("@MACHINE_NAME", Environment.MachineName) - sql = sql.Replace("@DATE", Now.ToShortDateString) - sql = sql.Replace("@PROFILE_ID", CURRENT_CLICKED_PROFILE_ID) + oSQL = oSQL.Replace("@USER_ID", USER_ID) + oSQL = oSQL.Replace("@USERNAME", USER_USERNAME) + oSQL = oSQL.Replace("@MACHINE_NAME", Environment.MachineName) + oSQL = oSQL.Replace("@DATE", Now.ToShortDateString) + oSQL = oSQL.Replace("@PROFILE_ID", CURRENT_CLICKED_PROFILE_ID) - CURR_DT_OVERVIEW = Await ClassDatabase.Return_DatatableAsync(sql, "Load_single_Profile") + CURR_DT_OVERVIEW = Await ClassDatabase.Return_DatatableAsync(oSQL, "Load_single_Profile") + + Dim oADDED = GET_LAST_ADDED(CURR_DT_OVERVIEW) + Dim oChanged = GET_LAST_CHANGED(CURR_DT_OVERVIEW) + If oADDED = OVERVIEW_ADDED_WHEN And oChanged = OVERVIEW_CHANGED_WHEN Then + LOGGER.Info("No changes on OverviewHash - so exit Refresh") + If ForceReload = False Then + Exit Function + End If + + Else + OVERVIEW_ADDED_WHEN = oADDED + OVERVIEW_CHANGED_WHEN = oChanged + End If If CURR_DT_OVERVIEW.Rows.Count = 0 Then NO_WORKFLOWITEMS = True @@ -949,7 +1001,7 @@ Public Class frmMain Private Sub NotifyIcon1_Click(sender As System.Object, e As EventArgs) Handles NotifyIcon1.Click BringMonitor2Front() End Sub - Private Async Function Decide_Load(FormLoad As Boolean) As Tasks.Task + Private Async Function Decide_Load(FormLoad As Boolean, Optional ForceReload As Boolean = False) As Tasks.Task Try GridIsLoaded = False @@ -964,9 +1016,9 @@ Public Class frmMain TimerRefresh.Stop() If GRID_LOAD_TYPE = "OVERVIEW" Then - Await Load_Grid_Overview(FormLoad) + Await Load_Grid_Overview(FormLoad, ForceReload) ElseIf GRID_LOAD_TYPE.StartsWith("PROFILE#") Then - Await Load_single_Profile() + Await Load_single_Profile(ForceReload) End If GridView_Docs.HideLoadingPanel() @@ -1455,7 +1507,7 @@ Public Class frmMain TimerRefresh.Start() RefreshHelper.LoadViewInfo() End Sub - Async Function Load_Grid_Overview(FormLoad As Boolean) As Tasks.Task + Async Function Load_Grid_Overview(FormLoad As Boolean, Optional ForceReload As Boolean = False) As Tasks.Task Dim oStopWatch As New RefreshHelper.SW("Load_Grid_Overview(LGO)") Layout_Single_Profile() GRID_LOAD_TYPE = "OVERVIEW" @@ -1502,6 +1554,18 @@ Public Class frmMain If Not IsNothing(CURR_DT_OVERVIEW) Then LOGGER.Debug($"Datatable CURR_DT_OVERVIEW loaded: {CURR_DT_OVERVIEW.Rows.Count} rows") + Dim oADDED = GET_LAST_ADDED(CURR_DT_OVERVIEW) + Dim oChanged = GET_LAST_CHANGED(CURR_DT_OVERVIEW) + If oADDED = OVERVIEW_ADDED_WHEN And oChanged = OVERVIEW_CHANGED_WHEN Then + LOGGER.Info("No changes on OverviewHash - so exit Refresh") + If ForceReload = False Then + Exit Function + End If + + Else + OVERVIEW_ADDED_WHEN = oADDED + OVERVIEW_CHANGED_WHEN = oChanged + End If NO_WORKFLOWITEMS = False If CURR_DT_OVERVIEW.Rows.Count = 0 Then If USER_LANGUAGE = "de-DE" Then @@ -2040,7 +2104,7 @@ Public Class frmMain End If LoadNavBar() - Await Decide_Load(False) + Await Decide_Load(False, True) If GridControl_Docs.Visible = True And FormOpenClose = False Then RefreshHelper.LoadViewInfo() End Sub