LeaveRequestGrid.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows.Controls;
  5. using System.Windows.Media.Imaging;
  6. using Comal.Classes;
  7. using InABox.Core;
  8. using InABox.DynamicGrid;
  9. using InABox.WPF;
  10. namespace PRSDesktop
  11. {
  12. public class LeaveRequestGrid : DynamicDataGrid<LeaveRequest>
  13. {
  14. public bool FutureOnly = true;
  15. private bool InProgressOnly = true;
  16. public LeaveRequestGrid()
  17. {
  18. Options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.FilterRows, DynamicGridOption.SelectColumns);
  19. ActionColumns.Add(new DynamicImageColumn(PRSDesktop.Resources.contract.AsBitmapImage(), FormAction) { Position = DynamicActionColumnPosition.End });
  20. AddButton("Include Complete", null, IncompleteOnlyClick);
  21. AddButton("Include History", null, ToggleAllRequests);
  22. }
  23. private bool FormAction(CoreRow? row)
  24. {
  25. if (row is null)
  26. return false;
  27. var leaveRequestID = row.Get<LeaveRequest, Guid>(x => x.ID);
  28. var menu = new ContextMenu();
  29. DynamicGridUtils.PopulateFormMenu<LeaveRequestForm, LeaveRequest, LeaveRequestLink>(menu, leaveRequestID, () => row.ToObject<LeaveRequest>());
  30. menu.IsOpen = true;
  31. return false;
  32. }
  33. private bool IncompleteOnlyClick(Button btn, CoreRow[] arg2)
  34. {
  35. InProgressOnly = !InProgressOnly;
  36. UpdateButton(btn, null, InProgressOnly ? "Include Complete" : "In Progress Only");
  37. return true;
  38. }
  39. private bool ToggleAllRequests(Button btn, CoreRow[] rows)
  40. {
  41. FutureOnly = !FutureOnly;
  42. UpdateButton(btn, null, FutureOnly ? "Include History" : "Future Only");
  43. return true;
  44. }
  45. protected override void Reload(Filters<LeaveRequest> criteria, Columns<LeaveRequest> columns, ref SortOrder<LeaveRequest>? sort,
  46. Action<CoreTable?, Exception?> action)
  47. {
  48. if (InProgressOnly)
  49. criteria.Add(new Filter<LeaveRequest>(x => x.Status).IsEqualTo(LeaveRequestStatus.InProgress));
  50. if (FutureOnly)
  51. criteria.Add(new Filter<LeaveRequest>(x => x.To).IsGreaterThanOrEqualTo(DateTime.Today));
  52. base.Reload(criteria, columns, ref sort, action);
  53. }
  54. protected override Dictionary<string, object?> EditorValueChanged(IDynamicEditorForm editor, LeaveRequest[] items, string name, object value)
  55. {
  56. var result = base.EditorValueChanged(editor, items, name, value);
  57. if (name == "LeaveType.ID")
  58. {
  59. ReloadForms<LeaveRequest, LeaveRequestForm, ActivityForm>(editor, items.FirstOrDefault(), x => x.Activity.ID,
  60. value != null ? (Guid)value : Guid.Empty);
  61. }
  62. else if (name.Equals("EmployeeLink.ID"))
  63. {
  64. var activity = editor.FindEditor("LeaveType.ID") as ILookupEditorControl;
  65. if (activity != null)
  66. DefineLookups(activity, items);
  67. }
  68. return result;
  69. }
  70. protected override void AfterLoad(IDynamicEditorForm editor, LeaveRequest[] items)
  71. {
  72. base.AfterLoad(editor, items);
  73. if (items.FirstOrDefault().ID == Guid.Empty)
  74. ReloadForms<LeaveRequest, LeaveRequestForm, ActivityForm>(editor, items.FirstOrDefault(), x => x.Activity.ID,
  75. items.FirstOrDefault().LeaveType.ID);
  76. }
  77. protected override BaseEditor? GetEditor(object item, DynamicGridColumn column)
  78. {
  79. var result = base.GetEditor(item, column);
  80. if (result == null)
  81. return null;
  82. if (!Security.IsAllowed<CanApproveLeaveRequests>() && (column.ColumnName.Equals("Approved") || column.ColumnName.Equals("Status")))
  83. result.Editable = Editable.Disabled;
  84. return result;
  85. }
  86. }
  87. }