KanbanEditDetailsView.xaml.cs 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Comal.Classes;
  7. using InABox.Mobile;
  8. using Xamarin.Forms;
  9. using Xamarin.Forms.Xaml;
  10. using XF.Material.Forms.UI.Dialogs;
  11. namespace PRS.Mobile
  12. {
  13. public class KanbanJobNameConverter : AbstractConverter<KanbanShell, String>
  14. {
  15. protected override string Convert(KanbanShell value, object? parameter = null)
  16. {
  17. return value?.JobID != Guid.Empty
  18. ? $"Job: {value.JobName}"
  19. : "Select Job";
  20. }
  21. }
  22. public class KanbanTypeConverter : AbstractConverter<KanbanShell, String>
  23. {
  24. protected override string Convert(KanbanShell value, object? parameter = null)
  25. {
  26. return value?.TypeID != Guid.Empty
  27. ? $"Type: {value.TypeName}"
  28. : "Select Type" ;
  29. }
  30. }
  31. public class KanbanEmployeeConverter : AbstractConverter<KanbanShell, String>
  32. {
  33. protected override string Convert(KanbanShell value, object? parameter = null)
  34. {
  35. return value?.EmployeeID != Guid.Empty
  36. ? $"Assigned To: {value.EmployeeName}"
  37. : "Select Employee";
  38. }
  39. }
  40. [XamlCompilation(XamlCompilationOptions.Compile)]
  41. public partial class KanbanEditDetailsView
  42. {
  43. public KanbanEditDetailsView()
  44. {
  45. InitializeComponent();
  46. }
  47. public override void Refresh()
  48. {
  49. _description.Text = ViewModel.Item.Summary;
  50. _description.IsEnabled = ViewModel.Item.ManagerID == App.Data.Me.ID;
  51. _description.BackgroundColor = _description.IsEnabled
  52. ? Color.LightYellow
  53. : Color.Gainsboro;
  54. }
  55. private async void _selectjob_Clicked(object sender, MobileButtonClickEventArgs args)
  56. {
  57. ShowPopup(() => CreateJobSelection("Select Job", (job) =>
  58. {
  59. ViewModel.Item.JobID = job.ID;
  60. ViewModel.Item.JobNumber = job.JobNumber;
  61. ViewModel.Item.JobName = job.Name;
  62. DoChanged("JobID");
  63. }));
  64. }
  65. private View CreateJobSelection(String caption, Action<JobShell> selected)
  66. {
  67. SelectionView selection = new SelectionView
  68. {
  69. VerticalOptions = LayoutOptions.Fill,
  70. HorizontalOptions = LayoutOptions.Fill,
  71. CanSearch = true
  72. };
  73. selection.Configure += (sender, args) =>
  74. {
  75. args.Columns
  76. .BeginUpdate()
  77. .Clear()
  78. .Add(new MobileGridTextColumn<JobShell>() { Column = x=>x.JobNumber, Width = GridLength.Auto, Caption = "#"})
  79. .Add(new MobileGridTextColumn<JobShell>() { Column = x=>x.Name, Width = GridLength.Star, Caption = caption, Alignment = TextAlignment.Start})
  80. .EndUpdate();
  81. args.Filters.AddRange(App.Data.Jobs.AvailableFilters().Select(x=>x.Name));
  82. };
  83. selection.Refresh += (sender, args) => App.Data.Jobs.Refresh(false);
  84. selection.SelectionChanged += (sender, args) =>
  85. {
  86. selected(args.SelectedItems.FirstOrDefault() as JobShell);
  87. DismissPopup();
  88. };
  89. selection.Load();
  90. return selection;
  91. }
  92. private void _selecttype_OnClicked(object sender, MobileButtonClickEventArgs args)
  93. {
  94. ShowPopup(() => CreateKanbanTypeSelection("Select Type", (type) =>
  95. {
  96. ViewModel.Item.TypeID = type.ID;
  97. ViewModel.Item.TypeName = type.Description;
  98. DoChanged("TypeID");
  99. }));
  100. }
  101. private View CreateKanbanTypeSelection(String caption, Action<KanbanTypeShell> selected)
  102. {
  103. SelectionView selection = new SelectionView
  104. {
  105. VerticalOptions = LayoutOptions.Fill,
  106. HorizontalOptions = LayoutOptions.Fill,
  107. CanSearch = false
  108. };
  109. selection.Configure += (sender, args) =>
  110. {
  111. args.Columns
  112. .BeginUpdate()
  113. .Clear()
  114. .Add(new MobileGridTextColumn<KanbanTypeShell>() { Column = x=>x.Description, Width = GridLength.Star, Caption = caption})
  115. .EndUpdate();
  116. };
  117. selection.Refresh += (sender, args) => App.Data.KanbanTypes.Refresh(false);
  118. selection.SelectionChanged += (sender, args) =>
  119. {
  120. selected(args.SelectedItems.FirstOrDefault() as KanbanTypeShell);
  121. DismissPopup();
  122. };
  123. selection.Load();
  124. return selection;
  125. }
  126. private void _selectemployee_OnClicked(object sender, MobileButtonClickEventArgs args)
  127. {
  128. ShowPopup(() => CreateEmployeeSelection("Select Employee", (employee) =>
  129. {
  130. ViewModel.Item.EmployeeID = employee.ID;
  131. ViewModel.Item.EmployeeName = employee.Name;
  132. DoChanged("EmployeeID");
  133. }));
  134. }
  135. private View CreateEmployeeSelection(String caption, Action<EmployeeShell> selected)
  136. {
  137. SelectionView selection = new SelectionView
  138. {
  139. VerticalOptions = LayoutOptions.Fill,
  140. HorizontalOptions = LayoutOptions.Fill,
  141. CanSearch = false
  142. };
  143. selection.Configure += (sender, args) =>
  144. {
  145. args.Columns
  146. .BeginUpdate()
  147. .Clear()
  148. .Add(new MobileGridTextColumn<EmployeeShell>() { Column = x=>x.Name, Width = GridLength.Star, Caption = caption})
  149. .EndUpdate();
  150. };
  151. selection.Refresh += (sender, args) => App.Data.Employees.Refresh(false);
  152. selection.SelectionChanged += (sender, args) =>
  153. {
  154. selected(args.SelectedItems.FirstOrDefault() as EmployeeShell);
  155. DismissPopup();
  156. };
  157. selection.Load();
  158. return selection;
  159. }
  160. private async void _changestatus_OnClicked(object sender, MobileButtonClickEventArgs args)
  161. {
  162. var index = await MaterialDialog.Instance.SelectActionAsync(Enum.GetNames(typeof(KanbanStatus)));
  163. if (index > -1)
  164. {
  165. ViewModel.Item.Status = (KanbanStatus)index;
  166. DoChanged("Category");
  167. }
  168. }
  169. private void _duedate_OnChanged(object sender, DateButtonChangedArgs args)
  170. {
  171. ViewModel.Item.DueDate = args.Date;
  172. DoChanged("DueDate");
  173. }
  174. private void Title_OnTextChanged(object sender, TextChangedEventArgs e)
  175. {
  176. DoChanged("Title");
  177. }
  178. private void _description_OnTextChanged(object sender, TextChangedEventArgs e)
  179. {
  180. //ViewModel.Item.Description = _description.Text;
  181. DoChanged("Description");
  182. }
  183. }
  184. }