LeaveRequestGrid.cs 3.3 KB

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