EmployeeGrid.cs 5.1 KB

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