Browse Source

Improved communication with user on "Process Leave"

Kenric Nugteren 7 tháng trước cách đây
mục cha
commit
4d942c4a74

+ 8 - 1
prs.desktop/Panels/Timesheets/TimeSheetLeaveProcessor.xaml.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Windows;
 using FastReport.Data;
+using InABox.Wpf;
 using InABox.WPF;
 using javax.sql;
 using Microsoft.Office.Interop.Outlook;
@@ -33,7 +34,13 @@ namespace PRSDesktop
 
         private void OK_OnClick(object sender, RoutedEventArgs e)
         {
-            if (MessageBox.Show("Process these Leave Entries?", "Process Leave", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
+            if(standardleave.SelectedIDs.Count == 0 && leaverequests.SelectedIDs.Count == 0)
+            {
+                MessageWindow.ShowMessage("You haven't selected any leave entries to process. Please tick the required entries by clicking the right-hand column.", "No entries selected");
+                return;
+            }
+
+            if (MessageWindow.ShowYesNo("Process these leave entries?", "Process Leave"))
             {
                 Progress.ShowModal("Processing Leave", (progress) =>
                 {

+ 10 - 10
prs.desktop/Panels/Timesheets/TimeSheetLeaveRequestGrid.cs

@@ -48,7 +48,7 @@ namespace PRSDesktop
         }
 
         private BitmapImage tick = PRSDesktop.Resources.tick.AsBitmapImage();
-        private List<Guid> selectedrows = new List<Guid>();
+        public HashSet<Guid> SelectedIDs = new HashSet<Guid>();
 
         private bool SelectedAction(CoreRow? arg)
         {
@@ -65,10 +65,10 @@ namespace PRSDesktop
         private void ToggleRow(CoreRow row)
         {
             Guid id = row.Get<LeaveRequest, Guid>(x => x.ID);
-            if (selectedrows.Contains(id))
-                selectedrows.Remove(id);
-            else
-                selectedrows.Add(id);
+            if (!SelectedIDs.Add(id))
+            {
+                SelectedIDs.Remove(id);
+            }
             InvalidateRow(row);
         }
 
@@ -76,7 +76,7 @@ namespace PRSDesktop
         {
             return arg == null
                 ? tick
-                : selectedrows.Contains(arg.Get<LeaveRequest,Guid>(x=>x.ID))
+                : SelectedIDs.Contains(arg.Get<LeaveRequest,Guid>(x=>x.ID))
                     ? tick
                     : null;
         }
@@ -94,11 +94,11 @@ namespace PRSDesktop
 
         public void Process(IProgress<String> progress)
         {
-            if (!selectedrows.Any())
+            if (SelectedIDs.Count == 0)
                 return;
 
             var employeeids = Data.ToDictionary<LeaveRequest, Guid, Guid>(x => x.ID, x => x.EmployeeLink.ID)
-                .Where(x=>selectedrows.Contains(x.Key))
+                .Where(x => SelectedIDs.Contains(x.Key))
                 .Select(x=>x.Value)
                 .Distinct()
                 .ToArray();
@@ -120,7 +120,7 @@ namespace PRSDesktop
             List<LeaveRequest> leaves = new List<LeaveRequest>();
             foreach (var row in Data.Rows)
             {
-                if (selectedrows.Contains(row.Get<LeaveRequest, Guid>(x => x.ID)))
+                if (SelectedIDs.Contains(row.Get<LeaveRequest, Guid>(x => x.ID)))
                 {
                     var leave = row.ToObject<LeaveRequest>();
                     var employee = employees.FirstOrDefault(x => x.ID == leave.EmployeeLink.ID);
@@ -129,7 +129,7 @@ namespace PRSDesktop
                         var roster = !String.IsNullOrWhiteSpace(rosters[employee.ID])
                             ? Serialization.Deserialize<List<EmployeeRosterItem>>(rosters[employee.ID])?.OrderBy(x => x.Day).ToArray()
                             : null;
-                        progress.Report($"Processing Leave Request {((double)i * 100.0F / (double)selectedrows.Count):F2}");
+                        progress.Report($"Processing Leave Request {((double)i * 100.0F / (double)SelectedIDs.Count):F2}");
                         var timesheets = RosterUtils.CreateLeaveTimesheets(
                             employee,
                             roster,

+ 7 - 9
prs.desktop/Panels/Timesheets/TimeSheetStandardLeaveGrid.cs

@@ -47,7 +47,7 @@ namespace PRSDesktop
         }
         
         private BitmapImage tick = PRSDesktop.Resources.tick.AsBitmapImage();
-        private List<Guid> selectedrows = new List<Guid>();
+        public HashSet<Guid> SelectedIDs = new HashSet<Guid>();
 
         private bool SelectedAction(CoreRow? arg)
         {
@@ -64,10 +64,8 @@ namespace PRSDesktop
         private void ToggleRow(CoreRow row)
         {
             Guid id = row.Get<StandardLeave, Guid>(x => x.ID);
-            if (selectedrows.Contains(id))
-                selectedrows.Remove(id);
-            else
-                selectedrows.Add(id);
+            if (!SelectedIDs.Add(id))
+                SelectedIDs.Remove(id);
             InvalidateRow(row);
         }
 
@@ -75,7 +73,7 @@ namespace PRSDesktop
         {
             return arg == null
                 ? tick
-                : selectedrows.Contains(arg.Get<StandardLeave,Guid>(x=>x.ID))
+                : SelectedIDs.Contains(arg.Get<StandardLeave,Guid>(x=>x.ID))
                     ? tick
                     : null;
         }
@@ -92,7 +90,7 @@ namespace PRSDesktop
 
         public void Process(IProgress<String> progress)
         {
-            if (!selectedrows.Any())
+            if (SelectedIDs.Count == 0)
                 return;
             
             progress.Report("Loading Standard Leaves");
@@ -119,7 +117,7 @@ namespace PRSDesktop
             List<StandardLeave> leaves = new List<StandardLeave>();
             foreach (var row in Data.Rows)
             {
-                if (selectedrows.Contains(row.Get<StandardLeave,Guid>(x=>x.ID)))
+                if (SelectedIDs.Contains(row.Get<StandardLeave,Guid>(x=>x.ID)))
                 {
                     var leave = row.ToObject<StandardLeave>();
                     foreach (var employee in employees)
@@ -127,7 +125,7 @@ namespace PRSDesktop
                         var roster = !String.IsNullOrWhiteSpace(rosters[employee.ID])
                             ? Serialization.Deserialize<List<EmployeeRosterItem>>(rosters[employee.ID])?.OrderBy(x => x.Day).ToArray()
                             : null;
-                        progress.Report($"Processing Standard Leave {((double)i * 100.0F)/((double)selectedrows.Count * employees.Length):F2}%");
+                        progress.Report($"Processing Standard Leave {((double)i * 100.0F)/((double)SelectedIDs.Count * employees.Length):F2}%");
                         var timesheets = RosterUtils.CreateLeaveTimesheets(
                             employee,
                             roster,