using System; using System.Threading; using System.Threading.Tasks; using Comal.Classes.SecurityDescriptors; using InABox.Core; using InABox.Mobile; using Xamarin.Forms.Xaml; namespace PRS.Mobile { [XamlCompilation(XamlCompilationOptions.Compile)] public partial class HumanResourcesModule { private CancellationTokenSource _pollingToken; public HumanResourcesModule() { InitializeComponent(); MyDetails.IsVisible = Security.IsAllowed(); DigitalForms.IsVisible = Security.IsAllowed(); LeaveRequests.IsVisible = Security.IsAllowed(); Qualifications.IsVisible = Security.IsAllowed(); TimeSheets.IsVisible = Security.IsAllowed(); } protected override void OnAppearing() { _pollingToken = new CancellationTokenSource(); StartMonitoringQualifications(); StartMonitoringForms(); base.OnAppearing(); } protected override void OnDisappearing() { base.OnDisappearing(); _pollingToken.Cancel(); } private void StartMonitoringQualifications() { var token = _pollingToken.Token; Task.Run(() => { while (!_pollingToken.Token.IsCancellationRequested) { App.Data.EmployeeQualifications.Refresh(true); Dispatcher.BeginInvokeOnMainThread(() => { Qualifications.Alert = App.Data.EmployeeQualifications.NeedsAttention > 0 ? App.Data.EmployeeQualifications.NeedsAttention.ToString() : ""; }); Task.Delay(TimeSpan.FromSeconds(30), token) .Wait(token); } }, token ); } private void StartMonitoringForms() { var token = _pollingToken.Token; Task.Run(() => { while (!_pollingToken.Token.IsCancellationRequested) { App.Data.EmployeeForms.Refresh(true); Dispatcher.BeginInvokeOnMainThread(() => { DigitalForms.Alert = App.Data.EmployeeForms.NeedsAttention > 0 ? App.Data.EmployeeForms.NeedsAttention.ToString() : ""; }); Task.Delay(TimeSpan.FromSeconds(30), token) .Wait(token); } }, token ); } private void MyDetails_OnTapped(MobileModuleItem sender, ModuleMenuItemTappedArgs args) { Navigation.PushAsync(new MyDetailsPage()); } private void QualificationsBtn_Tapped(MobileModuleItem sender, ModuleMenuItemTappedArgs args) { Navigation.PushAsync(new EmployeeQualificationList()); } private void EmployeeFormsBtn_Tapped(MobileModuleItem sender, ModuleMenuItemTappedArgs args) { Navigation.PushAsync(new EmployeeForms()); } private void LeaveBtn_Tapped(MobileModuleItem sender, ModuleMenuItemTappedArgs args) { Navigation.PushAsync(new LeaveRequestList()); } private void TimesheetsBtn_Tapped(MobileModuleItem sender, ModuleMenuItemTappedArgs args) { Navigation.PushAsync(new MyTimesheets()); } } }