EmployeeRosterItemGrid.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. using System;
  2. using System.Linq;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5. using Comal.Classes;
  6. using InABox.Clients;
  7. using InABox.Core;
  8. using InABox.DynamicGrid;
  9. using InABox.WPF;
  10. namespace PRSDesktop;
  11. public class EmployeeRosterItemGrid : BaseEmployeeRosterItemGrid<Employee, EmployeeRosterItem>
  12. {
  13. private Button _select = null!;
  14. private Button _start = null!;
  15. public EmployeeRosterItemGrid()
  16. {
  17. _select = AddButton("Select", PRSDesktop.Resources.clock.AsBitmapImage(), SelectRoster);
  18. _start = AddButton("", PRSDesktop.Resources.assignments.AsBitmapImage(), SelectStart);
  19. UpdateButtons();
  20. }
  21. protected override void DoReconfigure(FluentList<DynamicGridOption> options)
  22. {
  23. base.DoReconfigure(options);
  24. options.Remove(DynamicGridOption.EditRows);
  25. options.Remove(DynamicGridOption.ExportData);
  26. options.Remove(DynamicGridOption.ImportData);
  27. }
  28. public override void Load(object item, Func<Type, CoreTable?>? PageDataHandler)
  29. {
  30. base.Load(item, PageDataHandler);
  31. UpdateButtons();
  32. }
  33. public override void SaveItem(EmployeeRosterItem item)
  34. {
  35. base.SaveItem(item);
  36. Client.Save(item, "Updated by User");
  37. UpdateRoster(null);
  38. }
  39. private void UpdateRoster(EmployeeRoster? roster)
  40. {
  41. if (Item.RosterTemplate.ID != (roster?.ID ?? Guid.Empty))
  42. {
  43. Item.RosterTemplate.ID = roster?.ID ?? Guid.Empty;
  44. Item.RosterTemplate.Code = roster?.Code ?? "";
  45. Item.RosterTemplate.Description = roster?.Description ?? "";
  46. Client.Save(Item, "Roster Template Updated");
  47. UpdateButtons();
  48. }
  49. }
  50. protected override void DeleteItems(params CoreRow[] rows)
  51. {
  52. base.DeleteItems(rows);
  53. var deletes = rows.Select(x => x.ToObject<EmployeeRosterItem>()).OfType<EmployeeRosterItem>().ToArray();
  54. Client.Delete(deletes,"Deleted by User");
  55. UpdateRoster(null);
  56. }
  57. private bool SelectRoster(Button arg1, CoreRow[] arg2)
  58. {
  59. MultiSelectDialog<EmployeeRoster> dlg = new MultiSelectDialog<EmployeeRoster>(
  60. null,
  61. new Columns<EmployeeRoster>(x => x.ID).Add(x => x.Code).Add(x => x.Description),
  62. false);
  63. if (dlg.ShowDialog() && dlg.Items().FirstOrDefault() is EmployeeRoster roster)
  64. {
  65. var query = new MultiQuery();
  66. Client.Delete(Items,"");
  67. if (roster.ID != Guid.Empty)
  68. {
  69. var newroster = new Client<EmployeeRosterTemplateItem>().Query(
  70. new Filter<EmployeeRosterTemplateItem>(x => x.Roster.ID).IsEqualTo(roster.ID)
  71. ).Rows
  72. .Select(x => x.ToObject<EmployeeRosterTemplateItem>().ToEmployeeRosterItem(Item))
  73. .ToArray();
  74. Client.Save(newroster,"");
  75. }
  76. UpdateRoster(roster);
  77. DoChanged();
  78. return true;
  79. }
  80. return false;
  81. }
  82. private bool SelectStart(Button arg1, CoreRow[] arg2)
  83. {
  84. var date = Item.RosterStart.IsEmpty() ? DateTime.Today : Item.RosterStart;
  85. if (DateEdit.Execute("Select Start Date", ref date))
  86. {
  87. Item.RosterStart = date;
  88. Client.Save(Item, "Updated Roster Start Date");
  89. DoChanged();
  90. return true;
  91. }
  92. return false;
  93. }
  94. private void UpdateButtons()
  95. {
  96. _select.Visibility = (Item == null) || (Item.ID == Guid.Empty) ? Visibility.Collapsed : Visibility.Visible;
  97. _start.Visibility = (Item == null) || (Item.ID == Guid.Empty) ? Visibility.Collapsed : Visibility.Visible;
  98. var roster = (Item == null) || (Item.ID == Guid.Empty) || Item.RosterTemplate.ID == Guid.Empty
  99. ? "(Custom)"
  100. : Item.RosterTemplate.Code;
  101. UpdateButton(_select,PRSDesktop.Resources.clock.AsBitmapImage(),roster);
  102. var start = (Item == null) || (Item.ID == Guid.Empty) || Item.RosterStart.IsEmpty()
  103. ? "(Select Start)"
  104. : $"Start: {Item.RosterStart:dd MMM yy}";
  105. UpdateButton(_start,PRSDesktop.Resources.assignments.AsBitmapImage(),start);
  106. }
  107. }