TasksByUserControl - Copy.xaml.cs 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Globalization;
  5. using System.Linq;
  6. using System.Reflection;
  7. using System.Windows;
  8. using System.Windows.Controls;
  9. using System.Windows.Data;
  10. using System.Windows.Input;
  11. using Comal.Classes;
  12. using InABox.Clients;
  13. using InABox.Core;
  14. using InABox.DynamicGrid;
  15. using InABox.WPF;
  16. using Syncfusion.UI.Xaml.Kanban;
  17. using Syncfusion.Windows.Tools.Controls;
  18. namespace PRSDesktop
  19. {
  20. public class UserTasksHeaderImageConverter : IValueConverter
  21. {
  22. public static Dictionary<Guid, byte[]> Images { get; set; }
  23. public static Dictionary<Guid, Guid> Employees { get; set; }
  24. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  25. {
  26. var anonymous = Resources.anonymous.AsBitmapImage();
  27. if (Images == null)
  28. return anonymous;
  29. if (Employees == null)
  30. return anonymous;
  31. var dataContext = value as ColumnTag;
  32. if (dataContext == null)
  33. return anonymous;
  34. var getter = dataContext.GetType().GetProperty("Column", BindingFlags.NonPublic | BindingFlags.Instance);
  35. if (getter == null)
  36. return anonymous;
  37. var column = (KanbanColumn)getter.GetValue(dataContext);
  38. if (column == null)
  39. return anonymous;
  40. if (!Guid.TryParse(column.Categories, out var empid))
  41. return anonymous;
  42. if (!Employees.TryGetValue(empid, out var imageid))
  43. return anonymous;
  44. if (!Images.TryGetValue(imageid, out var data))
  45. return anonymous;
  46. return ImageUtils.LoadImage(data);
  47. }
  48. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  49. {
  50. throw new NotImplementedException();
  51. }
  52. }
  53. public class UserTasksHeaderTimeConverter : IValueConverter
  54. {
  55. public static IEnumerable<TaskModel> Kanbans { get; set; }
  56. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  57. {
  58. if (Kanbans == null)
  59. return "0:00";
  60. var dataContext = value as ColumnTag;
  61. if (dataContext == null)
  62. return "0:00";
  63. var getter = dataContext.GetType().GetProperty("Column", BindingFlags.NonPublic | BindingFlags.Instance);
  64. if (getter == null)
  65. return "0:00";
  66. var column = (KanbanColumn)getter.GetValue(dataContext);
  67. if (column == null)
  68. return "0:00";
  69. double result = 0.0F;
  70. foreach (var kanban in Kanbans.Where(x => Equals(x.Category, column.Categories)))
  71. result += kanban.EstimatedTime.TotalHours;
  72. return string.Format("{0:F2}", result);
  73. }
  74. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  75. {
  76. throw new NotImplementedException();
  77. }
  78. }
  79. //public class TaskHeaderWidthConverter : IValueConverter
  80. //{
  81. // public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  82. // {
  83. // var dataContext = (value as ColumnTag);
  84. // if (dataContext == null)
  85. // return 150;
  86. // PropertyInfo getter = dataContext.GetType().GetProperty("Column", BindingFlags.NonPublic | BindingFlags.Instance);
  87. // if (getter == null)
  88. // return 150;
  89. // KanbanColumn column = (KanbanColumn)getter.GetValue(dataContext);
  90. // if (column == null)
  91. // return 150;
  92. // return Math.Max(150, column.Width) - 20 ;
  93. // }
  94. // public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  95. // {
  96. // throw new NotImplementedException();
  97. // }
  98. //}
  99. /// <summary>
  100. /// Interaction logic for TaskListPanel.xaml
  101. /// </summary>
  102. public partial class TasksByUserControl : UserControl, ITaskControl
  103. {
  104. private List<TaskModel> _models = new();
  105. public TasksByUserControl()
  106. {
  107. InitializeComponent();
  108. }
  109. public bool IsReady { get; set; }
  110. private void TaskType_SelectionChanged(object sender, SelectionChangedEventArgs e)
  111. {
  112. }
  113. private void IncludeLocked_Checked(object sender, RoutedEventArgs e)
  114. {
  115. if (!IsReady)
  116. return;
  117. SaveSettings();
  118. Refresh(true);
  119. }
  120. private void IncludeManaged_Checked(object sender, RoutedEventArgs e)
  121. {
  122. if (!IsReady)
  123. return;
  124. SaveSettings();
  125. Refresh(true);
  126. }
  127. private void IncludeObserved_Checked(object sender, RoutedEventArgs e)
  128. {
  129. if (!IsReady)
  130. return;
  131. SaveSettings();
  132. Refresh(true);
  133. }
  134. private void IncludeCompleted_Checked(object sender, RoutedEventArgs e)
  135. {
  136. if (!IsReady)
  137. return;
  138. SaveSettings();
  139. Refresh(true);
  140. }
  141. private void Search_KeyUp(object sender, KeyEventArgs e)
  142. {
  143. FilterKanbans();
  144. }
  145. private void Export_Click(object sender, RoutedEventArgs e)
  146. {
  147. }
  148. private void Kanban_CardDragStart(object sender, KanbanDragStartEventArgs e)
  149. {
  150. var models = SelectedModels(e.SelectedCard.Content as TaskModel).ToList();
  151. if (models.Any(x => x.Locked || x.EmployeeID != Guid.Parse(x.Category.ToString())) || !Host.CanChangeTasks(models))
  152. e.IsCancel = true;
  153. }
  154. private void Kanban_CardDragEnd(object sender, KanbanDragEndEventArgs e)
  155. {
  156. using (new WaitCursor())
  157. {
  158. var target = e.TargetColumn.Categories;
  159. var targetCategory = e.TargetKey;
  160. var models = SelectedModels(e.SelectedCard.Content as TaskModel).Where(x => !Equals(x.Category, target)).ToList();
  161. if (!models.Any())
  162. return;
  163. var kanbans = Host.LoadKanbans(models, new Columns<Kanban>(x => x.ID, x => x.EmployeeLink.ID, x => x.Private, x => x.Number));
  164. var subscribers = new ClientKanbanSubscriberSet(kanbans.Select(x => x.ID));
  165. var targetID = Guid.Parse(target);
  166. var updated = new List<Kanban>();
  167. foreach (var kanban in kanbans)
  168. {
  169. if (!kanban.Private)
  170. {
  171. kanban.EmployeeLink.ID = targetID;
  172. subscribers.EnsureAssignee(kanban.ID, kanban.EmployeeLink.ID);
  173. updated.Add(kanban);
  174. }
  175. else
  176. {
  177. MessageBox.Show($"Cannot change assignee for task {kanban.Number} because it is private.");
  178. models.RemoveAll(x => x.ID == kanban.ID.ToString());
  179. }
  180. }
  181. new Client<Kanban>().Save(updated, string.Format("Task Employee Updated to {0}", target), (o, err) => { });
  182. subscribers.Save(false);
  183. foreach (var model in models)
  184. {
  185. model.Checked = false;
  186. model.Category = target;
  187. model.EmployeeID = targetID;
  188. }
  189. FilterKanbans();
  190. }
  191. }
  192. private void Kanban_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
  193. {
  194. e.Handled = true;
  195. }
  196. }
  197. }