EmployeeGrid.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. using System;
  2. using System.Drawing;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5. using Comal.Classes;
  6. using FastReport.DataVisualization.Charting;
  7. using InABox.Core;
  8. using InABox.DynamicGrid;
  9. using InABox.WPF;
  10. namespace PRSDesktop
  11. {
  12. internal class EmployeeGrid : DynamicDataGrid<Employee>
  13. {
  14. private bool ShowAll;
  15. public EmployeeGrid()
  16. {
  17. Options.AddRange(
  18. DynamicGridOption.FilterRows,
  19. DynamicGridOption.SelectColumns,
  20. DynamicGridOption.MultiSelect
  21. );
  22. ActionColumns.Add(new DynamicScheduleEditorColumn<Employee>());
  23. HiddenColumns.Add(x => x.ActiveSchedules);
  24. HiddenColumns.Add(x => x.Thumbnail.ID);
  25. HiddenColumns.Add(x => x.Thumbnail.FileName);
  26. ActionColumns.Add(new DynamicImageColumn<Employee>(this, x => x.Thumbnail, true) { Position = DynamicActionColumnPosition.Start });
  27. ActionColumns.Add(new DynamicMenuColumn(MenuBuild) { Position = DynamicActionColumnPosition.Start });
  28. AddButton("Activities", PRSDesktop.Resources.quality.AsBitmapImage(), ShowActivities);
  29. AddButton("Role Forms", PRSDesktop.Resources.kanban.AsBitmapImage(), ShowRoleForms);
  30. //ActionColumns.Add(new DynamicEmployeeStatusColumn<Employee>(x => x.InOut));
  31. //HiddenColumns.Add(x => x.InOut);
  32. AddButton("Show All", PRSDesktop.Resources.anonymous.AsBitmapImage(Color.White), ToggleFinishedEmployees);
  33. }
  34. private void MenuBuild(DynamicMenuColumn column, CoreRow? row)
  35. {
  36. if (row == null) return;
  37. var newItem = column.AddItem("Digital Forms", null, null);
  38. DynamicGridUtils.PopulateFormMenu<EmployeeForm, Employee, EmployeeLink>(newItem, row.Get<Employee, Guid>(x => x.ID));
  39. column.AddSeparator();
  40. column.AddItem("Activities", PRSDesktop.Resources.quality, ShowActivitiesWindow);
  41. column.AddItem("Role Forms", PRSDesktop.Resources.kanban, ShowRoleFormsWindow);
  42. }
  43. private void ShowActivitiesWindow(CoreRow row)
  44. {
  45. DynamicGridUtils.CreateGridWindow("Employee Activities",
  46. new DynamicCrossJoinGrid<EmployeeActivity, Employee>(row.ToObject<Employee>(), x => x.Employee.ID, x => x.ID)).ShowDialog();
  47. }
  48. private void ShowRoleFormsWindow(CoreRow row)
  49. {
  50. DynamicGridUtils.CreateGridWindow("Employee Role Forms",
  51. new DynamicCrossJoinGrid<EmployeeDigitalForm, Employee>(row.ToObject<Employee>(), x => x.Employee.ID, x => x.ID)).ShowDialog();
  52. }
  53. private bool ShowActivities(Button button, CoreRow[] rows)
  54. {
  55. if(rows.Length == 0)
  56. {
  57. MessageBox.Show("Please select an employee.");
  58. return false;
  59. }
  60. else if(rows.Length > 1)
  61. {
  62. MessageBox.Show("Please select only one employee");
  63. return false;
  64. }
  65. ShowActivitiesWindow(rows[0]);
  66. return false;
  67. }
  68. private bool ShowRoleForms(Button button, CoreRow[] rows)
  69. {
  70. if(rows.Length == 0)
  71. {
  72. MessageBox.Show("Please select an employee.");
  73. return false;
  74. }
  75. else if(rows.Length > 1)
  76. {
  77. MessageBox.Show("Please select only one employee");
  78. return false;
  79. }
  80. ShowRoleFormsWindow(rows[0]);
  81. return false;
  82. }
  83. public Employee[] Employees { get; private set; }
  84. private bool ToggleFinishedEmployees(Button btn, CoreRow[] rows)
  85. {
  86. ShowAll = !ShowAll;
  87. UpdateButton(btn, PRSDesktop.Resources.anonymous.AsBitmapImage(Color.White), ShowAll ? "Hide Finished" : "Show All");
  88. return true;
  89. }
  90. protected override void Reload(Filters<Employee> criteria, Columns<Employee> columns, ref SortOrder<Employee> sort,
  91. Action<CoreTable, Exception> action)
  92. {
  93. if (!ShowAll)
  94. criteria.Add(new Filter<Employee>(x => x.FinishDate).IsEqualTo(DateTime.MinValue));
  95. base.Reload(criteria, columns, ref sort, action);
  96. }
  97. protected override BaseEditor? GetEditor(object item, DynamicGridColumn column)
  98. {
  99. if (column.ColumnName.StartsWith("OrgChart.") && !Security.IsAllowed<CanViewOrgChartByEmployee>())
  100. return new NullEditor();
  101. return base.GetEditor(item, column);
  102. }
  103. }
  104. }