EmployeePanel.xaml.cs 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Windows;
  8. using System.Windows.Controls;
  9. using Comal.Classes;
  10. using InABox.Configuration;
  11. using InABox.Core;
  12. using InABox.DynamicGrid;
  13. using InABox.WPF;
  14. using InABox.Wpf;
  15. namespace PRSDesktop;
  16. public class EmployeePanelSettings : IUserConfigurationSettings
  17. {
  18. public DynamicSplitPanelView View { get; set; }
  19. public double AnchorWidth { get; set; }
  20. public double RoleHeight { get; set; }
  21. public double RosterHeight { get; set; }
  22. public EmployeePanelSettings()
  23. {
  24. View = DynamicSplitPanelView.Combined;
  25. AnchorWidth = 250;
  26. RoleHeight = 250;
  27. RosterHeight = 400;
  28. }
  29. }
  30. /// <summary>
  31. /// Interaction logic for EmployeePanel.xaml
  32. /// </summary>
  33. public partial class EmployeePanel : UserControl, IPanel<Employee>
  34. {
  35. private enum Suppress
  36. {
  37. Events
  38. }
  39. private EmployeePanelSettings _settings;
  40. private void DoLoadSettings()
  41. {
  42. using (new EventSuppressor(Suppress.Events))
  43. {
  44. _settings = new UserConfiguration<EmployeePanelSettings>().Load();
  45. SplitPanel.View = _settings.View;
  46. SplitPanel.AnchorWidth = _settings.AnchorWidth;
  47. RoleGridRow.Height = new GridLength(_settings.RoleHeight, GridUnitType.Pixel);
  48. RosterGridRow.Height = new GridLength(_settings.RosterHeight, GridUnitType.Pixel);
  49. }
  50. }
  51. private void DoSaveSettings()
  52. {
  53. _settings.View = SplitPanel.View;
  54. _settings.AnchorWidth = SplitPanel.AnchorWidth;
  55. _settings.RoleHeight = RoleGridRow.Height.Value;
  56. _settings.RosterHeight = RosterGridRow.Height.Value;
  57. new UserConfiguration<EmployeePanelSettings>().Save(_settings);
  58. }
  59. public EmployeePanel()
  60. {
  61. using (new EventSuppressor(Suppress.Events))
  62. InitializeComponent();
  63. }
  64. public bool IsReady { get; set; }
  65. public event DataModelUpdateEvent? OnUpdateDataModel;
  66. public Dictionary<string, object[]> Selected()
  67. {
  68. return new Dictionary<string, object[]> { { typeof(Employee).EntityName(), Employees.SelectedRows } };
  69. }
  70. public void Setup()
  71. {
  72. using (new EventSuppressor(Suppress.Events))
  73. {
  74. DoLoadSettings();
  75. Employees.HiddenColumns.Add(x => x.RosterTemplate.ID);
  76. Employees.HiddenColumns.Add(x => x.RosterStart);
  77. Employees.Refresh(true, false);
  78. Rosters.Refresh(true, false);
  79. Teams.Refresh(true, false);
  80. Roles.Refresh(true, false);
  81. Activities.Refresh(true, false);
  82. Forms.Refresh(true, false);
  83. Qualifications.Refresh(true, false);
  84. Spreadsheets.Refresh(true, false);
  85. Jobs.Refresh(true, false);
  86. RoleCrossTab.Visibility = Security.CanView<Employee>()
  87. && Security.CanView<Role>()
  88. && Security.CanView<EmployeeRole>() ? Visibility.Visible : Visibility.Collapsed;
  89. var visibleTabItems = Tab.Items.OfType<DynamicTabItem>().Where(x => x.Visibility == Visibility.Visible).ToList();
  90. if(visibleTabItems.Count <= 1)
  91. {
  92. foreach(var tab in visibleTabItems)
  93. {
  94. tab.Visibility = Visibility.Collapsed;
  95. Tab.SelectedItem = tab;
  96. }
  97. }
  98. }
  99. }
  100. public void Shutdown(CancelEventArgs? cancel)
  101. {
  102. }
  103. public void CreateToolbarButtons(IPanelHost host)
  104. {
  105. HumanResourcesSetupActions.SecurityGroups(host);
  106. host.CreateSetupSeparator();
  107. HumanResourcesSetupActions.EmployeeGroups(host);
  108. HumanResourcesSetupActions.EmployeePositions(host);
  109. HumanResourcesSetupActions.EmployeeRoles(host);
  110. HumanResourcesSetupActions.EmployeeTeams(host);
  111. HumanResourcesSetupActions.EmployeeActivities(host);
  112. HumanResourcesSetupActions.EmployeeQualifications(host);
  113. HumanResourcesSetupActions.EmployeeRosters(host);
  114. host.CreateSetupSeparator();
  115. HumanResourcesSetupActions.EmployeeOvertimeRules(host);
  116. HumanResourcesSetupActions.EmployeeOvertime(host);
  117. HumanResourcesSetupActions.EmployeeStandardLeave(host);
  118. host.CreateSetupSeparator();
  119. HumanResourcesSetupActions.EmployeeSpreadsheetTemplates(host);
  120. }
  121. private bool _loaded = false;
  122. private void Tab_SelectionChanged(object sender, SelectionChangedEventArgs e)
  123. {
  124. if (sender != Tab || !_loaded) return;
  125. RefreshCurrentTab();
  126. }
  127. private void RefreshCurrentTab()
  128. {
  129. if (Tab.SelectedTab == EmployeeTab)
  130. {
  131. RefreshEmployeeTab();
  132. }
  133. else if (Tab.SelectedTab == RoleCrossTab)
  134. {
  135. RefreshRoleTab();
  136. }
  137. }
  138. private void RefreshRoleTab()
  139. {
  140. EmployeeRoles.Refresh(true, true);
  141. }
  142. private void RefreshEmployeeTab()
  143. {
  144. Employees.Refresh(false, true);
  145. Rosters.Refresh(false, true);
  146. Teams.Refresh(false, true);
  147. Roles.Refresh(false, true);
  148. Activities.Refresh(false, true);
  149. Forms.Refresh(false, true);
  150. Qualifications.Refresh(false, true);
  151. Spreadsheets.Refresh(false, true);
  152. Jobs.Refresh(false, true);
  153. }
  154. public void Refresh()
  155. {
  156. RefreshCurrentTab();
  157. _loaded = true;
  158. }
  159. public string SectionName => "Employees";
  160. public DataModel DataModel(Selection selection)
  161. {
  162. var ids = Employees.ExtractValues(x => x.ID, selection).ToArray();
  163. return new AutoDataModel<Employee>(Filter<Employee>.Where(x => x.ID).InList(ids));
  164. }
  165. public void Heartbeat(TimeSpan time)
  166. {
  167. }
  168. private void Employees_OnOnSelectItem(object sender, DynamicGridSelectionEventArgs e)
  169. {
  170. var employee = e.Rows?.FirstOrDefault()?.ToObject<Employee>() ?? new Employee();
  171. Rosters.Load(employee, null);
  172. //Rosters.Refresh(false, true);
  173. Teams.EmployeeID = employee.ID;
  174. Teams.Refresh(false, true);
  175. //LoadEmployeeThumbnail(employee.Thumbnail.ID);
  176. Roles.EmployeeID = employee.ID;
  177. Roles.Refresh(false, true);
  178. Activities.Left = employee;
  179. Activities.Refresh(false,true);
  180. Forms.Left = employee;
  181. Forms.Refresh(false, true);
  182. Qualifications.Load(employee, null);
  183. Spreadsheets.Master = employee;
  184. Spreadsheets.Refresh(false,true);
  185. Jobs.Left = employee;
  186. Jobs.Refresh(false, true);
  187. }
  188. // private void LoadEmployeeThumbnail(Guid imageid)
  189. // {
  190. // Thumbnail.Source = null;
  191. // if (imageid == Guid.Empty)
  192. // return;
  193. // Bitmap result = null;
  194. // new Client<Document>().Query(
  195. // Filter<Document>.Where(x => x.ID).IsEqualTo(imageid),
  196. // new Columns<Document>(x => x.ID, x => x.Data),
  197. // null,
  198. // (o, e) => Dispatcher.Invoke(() =>
  199. // {
  200. // if (o?.Rows.Any() == true)
  201. // {
  202. // var ms = new MemoryStream(o.Rows.First().Get<Document, byte[]>(x => x.Data));
  203. // Thumbnail.Source = new Bitmap(ms).AsBitmapImage();
  204. // }
  205. // })
  206. // );
  207. // }
  208. private void SplitPanel_OnChanged(object sender, DynamicSplitPanelSettings e)
  209. {
  210. if (EventSuppressor.IsSet(Suppress.Events))
  211. return;
  212. DoSaveSettings();
  213. }
  214. private void Roles_OnSizeChanged(object sender, SizeChangedEventArgs e)
  215. {
  216. if (EventSuppressor.IsSet(Suppress.Events))
  217. return;
  218. DoSaveSettings();
  219. }
  220. private void Roles_OnOnChanged(object sender, EventArgs args)
  221. {
  222. Activities.Refresh(false,true);
  223. Forms.Refresh(false, true);
  224. }
  225. private void Rosters_OnOnChanged(object sender, EventArgs args)
  226. {
  227. //Employees.Refresh(false, true);
  228. }
  229. private void Rosters_OnSizeChanged(object sender, SizeChangedEventArgs e)
  230. {
  231. if (EventSuppressor.IsSet(Suppress.Events))
  232. return;
  233. DoSaveSettings();
  234. }
  235. private void Rosters_EmployeeChanged()
  236. {
  237. Employees.Refresh(false, true);
  238. }
  239. }