| 
					
				 | 
			
			
				@@ -61,6 +61,7 @@ using Comal.Classes.SecurityDescriptors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using System.Threading; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using H.Formatters; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using PRSDesktop.Forms.Issues; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using Brushes = System.Windows.Media.Brushes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 namespace PRSDesktop; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -273,7 +274,7 @@ public partial class MainWindow : IPanelHostControl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Title = $"{(String.Equals(App.Profile?.ToUpper(), "DEFAULT") ? "PRS Desktop" : App.Profile)} (Release {CoreUtils.GetVersion()})"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Logger.Send(LogType.Information, "", "Checking for updates"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        CheckForUpdates(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SupportUtils.CheckForUpdates(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Exception? startupException = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ValidationStatus? loginStatus = null; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1641,6 +1642,9 @@ public partial class MainWindow : IPanelHostControl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /// <param name="progress">If not <see langword="null"/>, then rather than opening a new progress window, just uses that.</param> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private void AfterLogin(IProgress<string>? progress) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Logger.Send(LogType.Information, "", "Checking Support Ticket Status"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CheckSupportTicketStatus(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Logger.Send(LogType.Information, "", "Loading employee"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         LoadCurrentEmployee(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (CheckTimesheetBypass(true)) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2391,6 +2395,9 @@ public partial class MainWindow : IPanelHostControl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            CheckSupportTicketStatus(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             bool IsClockedOn = this.IsClockedOn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (IsClockedOn) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2429,6 +2436,17 @@ public partial class MainWindow : IPanelHostControl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void CheckSupportTicketStatus() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Dispatcher.BeginInvoke(() => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            IssuesButton.Background = IssuesWindow.Check() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ? new SolidColorBrush(Colors.Red) { Opacity = 0.5 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                : Brushes.Transparent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private void Notifications_Changed(object sender) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (Notifications.IsActive) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2887,64 +2905,64 @@ public partial class MainWindow : IPanelHostControl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     [DllImport("user32.dll")] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private static extern IntPtr GetActiveWindow(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    #region Check For Updates 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private string GetUpdateLocation() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (App.DatabaseSettings.DatabaseType == DatabaseType.Networked) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(ClientFactory.ClientType == typeof(RestClient<>)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                string url = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //var domain = App.DatabaseSettings.URL.Split(new[] { "://" }, StringSplitOptions.RemoveEmptyEntries).Last(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //var port = App.DatabaseSettings.Port; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var domain = ClientFactory.Parameters?.FirstOrDefault()?.ToString() ?? ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                domain = domain.Split(new[] { "://" }, StringSplitOptions.RemoveEmptyEntries).LastOrDefault() ?? ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!String.IsNullOrWhiteSpace(domain)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    try 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        var client = new HttpClient { BaseAddress = new Uri($"https://{domain}") }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        client.GetAsync("operations").Wait(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        url = $"https://{domain}"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    catch (Exception) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        url = $"http://{domain}"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return url; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return Path.Combine(CoreUtils.GetCommonAppData("PRSServer"), "update"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private string GetLatestVersion(string location) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return Client.Version(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private string GetReleaseNotes(string location) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return Client.ReleaseNotes(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private byte[]? GetInstaller(string location) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return Client.Installer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private void CheckForUpdates() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Update.CheckForUpdates( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            GetUpdateLocation, GetLatestVersion, GetReleaseNotes, GetInstaller, null, App.AutoUpdateSettings.Elevated, "PRSDesktopSetup.exe"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    #endregion 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // #region Check For Updates 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // private string GetUpdateLocation() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     if (App.DatabaseSettings.DatabaseType == DatabaseType.Networked) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //         if(ClientFactory.ClientType == typeof(RestClient<>)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //             string url = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //             //var domain = App.DatabaseSettings.URL.Split(new[] { "://" }, StringSplitOptions.RemoveEmptyEntries).Last(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //             //var port = App.DatabaseSettings.Port; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //             var domain = ClientFactory.Parameters?.FirstOrDefault()?.ToString() ?? ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //             domain = domain.Split(new[] { "://" }, StringSplitOptions.RemoveEmptyEntries).LastOrDefault() ?? ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //             if (!String.IsNullOrWhiteSpace(domain)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //                  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //                 try 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //                 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //                     var client = new HttpClient { BaseAddress = new Uri($"https://{domain}") }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //                     client.GetAsync("operations").Wait(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //                     url = $"https://{domain}"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //                 catch (Exception) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //                 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //                     url = $"http://{domain}"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //             return url; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //         else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //             return ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //         return Path.Combine(CoreUtils.GetCommonAppData("PRSServer"), "update"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // private string GetLatestVersion(string location) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     return Client.Version(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // private string GetReleaseNotes(string location) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     return Client.ReleaseNotes(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // private byte[]? GetInstaller(string location) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     return Client.Installer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // private void CheckForUpdates() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //     Update.CheckForUpdates( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //         GetUpdateLocation, GetLatestVersion, GetReleaseNotes, GetInstaller, null, App.AutoUpdateSettings.Elevated, "PRSDesktopSetup.exe"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // #endregion 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     #region Modules + Reports 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3304,6 +3322,23 @@ public partial class MainWindow : IPanelHostControl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             MessageBox.Show(logfile + " does not exist!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void CheckForUpdates_OnClick(object sender, RoutedEventArgs e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!SupportUtils.CheckForUpdates()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (MessageWindow.ShowYesNo( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "You appear to be using the latest version already!\n\nRun the installer anyway?", "Update")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                SupportUtils.DownloadAndRunInstaller(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void OpenSupportSession_OnClick(object sender, RoutedEventArgs e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SupportUtils.OpenSupportSession(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private void DocumentTypeList_OnClick(object sender, RoutedEventArgs e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3386,11 +3421,14 @@ public partial class MainWindow : IPanelHostControl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             IssuesWindow.Execute(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            CheckSupportTicketStatus(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         catch(Exception err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             MessageWindow.ShowError("Could not load issues.", err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |