Explorar el Código

TaskPanel: Added new buttons to Contextmenu for setting manager and assignee.

Kenric Nugteren hace 7 meses
padre
commit
af413d1054
Se han modificado 1 ficheros con 60 adiciones y 16 borrados
  1. 60 16
      prs.desktop/Panels/Tasks/TaskPanel.xaml.cs

+ 60 - 16
prs.desktop/Panels/Tasks/TaskPanel.xaml.cs

@@ -110,11 +110,10 @@ public partial class TaskPanel : UserControl, IPanel<Kanban>, ITaskHost, IMaster
 
     #region Menu
 
-    private void CompleteTask(ITaskControl control, RoutedEventArgs e, DateTime completed)
+    private void CompleteTask(ITaskControl control, IEnumerable<TaskModel> tasks, DateTime completed)
     {
         if (!MessageWindow.ShowYesNo("Are you sure you want to complete the selected tasks?", "Confirm Completion"))
             return;
-        var tasks = (((FrameworkElement)e.Source).Tag as IEnumerable<TaskModel>)!;
         Progress.ShowModal("Completing Tasks", progress =>
         {
             var kanbans = LoadKanbans(tasks, Columns.Required<Kanban>().Add(x => x.ID, x => x.Completed, x => x.Status));
@@ -467,6 +466,8 @@ public partial class TaskPanel : UserControl, IPanel<Kanban>, ITaskHost, IMaster
         {
             menu.AddSeparatorIfNeeded();
 
+            #region Status
+
             var changeStatus = new MenuItem { Header = "Change Status" };
 
             AddChangeStatusButton(control, models, changeStatus, "Open", KanbanStatus.Open);
@@ -475,16 +476,10 @@ public partial class TaskPanel : UserControl, IPanel<Kanban>, ITaskHost, IMaster
 
             if (models.Any(x => x.CompletedDate.IsEmpty()))
             {
-                var complete = new MenuItem
-                {
-                    Tag = models,
-                    Header = models.Length > 1 ? "Complete Tasks" : "Complete Task"
-                };
-                complete.Click += (o, e) =>
+                var complete = menu.AddItem(models.Length > 1 ? "Complete Tasks" : "Complete Task", null, () =>
                 {
-                    CompleteTask(control, e, DateTime.Now);
-                };
-                menu.Items.Add(complete);
+                    CompleteTask(control, models, DateTime.Now);
+                });
 
                 if (Security.IsAllowed<CanSetKanbanCompletedDate>())
                 {
@@ -504,7 +499,7 @@ public partial class TaskPanel : UserControl, IPanel<Kanban>, ITaskHost, IMaster
                         menu.IsOpen = false;
 
                         var selectedDate = calendar.SelectedDate ?? DateTime.Now;
-                        CompleteTask(control, e, selectedDate);
+                        CompleteTask(control, models, selectedDate);
                     };
 
                     dateItem.Header = dateCalendar;
@@ -535,7 +530,11 @@ public partial class TaskPanel : UserControl, IPanel<Kanban>, ITaskHost, IMaster
 
             menu.Items.Add(changeStatus);
 
-            var changeType = new MenuItem { Header = "Change Task Type", Tag = models };
+            #endregion
+
+            #region Task Type
+
+            var changeType = menu.AddItem("Change Task Type", null, null);
 
             foreach(var type in KanbanTypes)
             {
@@ -555,10 +554,11 @@ public partial class TaskPanel : UserControl, IPanel<Kanban>, ITaskHost, IMaster
                 });
             }
 
-            menu.Items.Add(changeType);
+            #endregion
 
+            #region Due Date
 
-            var changeDueDate = new MenuItem { Header = "Change Due Date" };
+            var changeDueDate = menu.AddItem("Change Due Date", null, null);
 
             var calendarItem = new MenuItem();
 
@@ -590,10 +590,54 @@ public partial class TaskPanel : UserControl, IPanel<Kanban>, ITaskHost, IMaster
 
             changeDueDate.Items.Add(calendarItem);
 
-            menu.Items.Add(changeDueDate);
+            #endregion
+
+            #region Employees
+
+            menu.AddItem("Assign To...", null, (control, models), SetAssignee_Click);
+            menu.AddItem("Set Manager...", null, (control, models), SetManager_Click);
+
+            #endregion
         }
     }
 
+    private void SetAssignee_Click((ITaskControl control, TaskModel[] models) tuple)
+    {
+        var tasks = LoadKanbans(tuple.models, Columns.Required<Kanban>().Add(x => x.ID).Add(x => x.EmployeeLink.ID))
+            .ToArray();
+        if (MultiSelectDialog.SelectItem<Employee>(out var employee,
+            filter: LookupFactory.DefineLookupFilter<Kanban, Employee, EmployeeLink>(x => x.EmployeeLink, tasks),
+            columns: LookupFactory.DefineLookupColumns<Kanban, Employee, EmployeeLink>(x => x.EmployeeLink),
+            title: "Select Assignee for Task"))
+        {
+            foreach (var task in tasks)
+            {
+                task.EmployeeLink.CopyFrom(employee);
+            }
+            Client.Save(tasks, "Set Assignee");
+            tuple.control.Refresh();
+        }
+    }
+
+    private void SetManager_Click((ITaskControl control, TaskModel[] models) tuple)
+    {
+        var tasks = LoadKanbans(tuple.models, Columns.Required<Kanban>().Add(x => x.ID).Add(x => x.ManagerLink.ID))
+            .ToArray();
+        if (MultiSelectDialog.SelectItem<Employee>(out var employee,
+            filter: LookupFactory.DefineLookupFilter<Kanban, Employee, EmployeeLink>(x => x.ManagerLink, tasks),
+            columns: LookupFactory.DefineLookupColumns<Kanban, Employee, EmployeeLink>(x => x.ManagerLink),
+            title: "Select Manager for Task"))
+        {
+            foreach (var task in tasks)
+            {
+                task.ManagerLink.CopyFrom(employee);
+            }
+            Client.Save(tasks, "Set Manager");
+            tuple.control.Refresh();
+        }
+    }
+
+
     private void Subscribers_Click(TaskModel model)
     {
         var kanban = LoadKanbans([model], Columns.Required<Kanban>().Add(x => x.ID).Add(x => x.Number)).First();