EmployeeQualificationGrid.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using Comal.Classes;
  9. using InABox.Core;
  10. using InABox.Clients;
  11. using InABox.DynamicGrid;
  12. using Microsoft.Win32;
  13. using SaveFileDialog = Microsoft.Win32.SaveFileDialog;
  14. namespace PRSDesktop;
  15. public class QualificationManyToManyGrid<T> : DynamicManyToManyGrid<EmployeeQualification, T> where T : Entity, new()
  16. {
  17. public QualificationManyToManyGrid()
  18. {
  19. HiddenColumns.Add(x => x.Qualification.Renewal);
  20. HiddenColumns.Add(x => x.Expiry);
  21. }
  22. protected override void DoReconfigure(FluentList<DynamicGridOption> options)
  23. {
  24. base.DoReconfigure(options);
  25. options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.SelectColumns, DynamicGridOption.MultiSelect);
  26. }
  27. protected override void DoReconfigureEditors(DynamicEditorGrid grid, EmployeeQualification[] items)
  28. {
  29. base.DoReconfigureEditors(grid, items);
  30. var renewal = grid.GetPropertyValue("Qualification.Renewal");
  31. var expiry = grid.FindEditor("Expiry");
  32. expiry.SetEnabled(true);// renewal.Equals(QualificationRenewal.Manual));
  33. }
  34. protected override Dictionary<string, object?> EditorValueChanged(IDynamicEditorForm editor, EmployeeQualification[] items, string name,
  35. object value)
  36. {
  37. var result = base.EditorValueChanged(editor, items, name, value);
  38. if (name.Equals("Qualification.Renewal"))
  39. foreach (var item in items)
  40. {
  41. var expiry = item.CalculateExpiry(item.Qualified, (QualificationRenewal)value, item.Qualification.Period, item.Expiry);
  42. if (expiry != item.Expiry)
  43. {
  44. item.Expiry = expiry;
  45. result["Expiry"] = expiry;
  46. }
  47. }
  48. return result;
  49. }
  50. }
  51. public class QualificationEmployeeGrid : QualificationManyToManyGrid<Qualification>
  52. {
  53. }
  54. public class EmployeeQualificationGrid : QualificationManyToManyGrid<Employee>
  55. {
  56. private readonly Button LoadQualificationTemplate;
  57. private readonly Button SaveQualificationTemplate;
  58. public EmployeeQualificationGrid()
  59. {
  60. LoadQualificationTemplate = AddButton("Load Template", null, "Load Template", LoadQualificationTemplate_Click);
  61. LoadQualificationTemplate.Visibility = Visibility.Collapsed;
  62. SaveQualificationTemplate = AddButton("Save Template", null, "Save Template", SaveQualificationTemplate_Click);
  63. SaveQualificationTemplate.Visibility = Visibility.Collapsed;
  64. HiddenColumns.Add(x => x.Qualification.ID);
  65. }
  66. private bool LoadQualificationTemplate_Click(Button sender, CoreRow[] selectedRows)
  67. {
  68. var dialog = new MultiSelectDialog<EmployeeQualificationTemplate>(null, null, false);
  69. if (dialog.ShowDialog())
  70. {
  71. var templateID = dialog.IDs().First();
  72. var qualificationIds = Client.Query(
  73. new Filter<EmployeeQualificationTemplateItem>(x => x.Template.ID).IsEqualTo(templateID),
  74. new Columns<EmployeeQualificationTemplateItem>(x => x.Qualification.ID))
  75. .ExtractValues<EmployeeQualificationTemplateItem, Guid>(x => x.Qualification.ID);
  76. var qualifications = new Client<Qualification>().Load(new Filter<Qualification>(x => x.ID).InList(qualificationIds));
  77. var guids = CurrentGuids();
  78. var newItems = new List<EmployeeQualification>();
  79. foreach (var qualification in qualifications)
  80. {
  81. if (!guids.Contains(qualification.ID))
  82. {
  83. var newQualification = CreateItem();
  84. newQualification.Qualification.ID = qualification.ID;
  85. newQualification.Qualification.Synchronise(qualification);
  86. newItems.Add(newQualification);
  87. }
  88. }
  89. SaveItems(newItems.ToArray());
  90. return true;
  91. }
  92. return false;
  93. /*var dlg = new OpenFileDialog();
  94. dlg.Filter = "JSON files (*.json)|*.json|All files (*.*)|*.*";
  95. if(dlg.ShowDialog() == true)
  96. {
  97. Guid[] list;
  98. using (var stream = dlg.OpenFile())
  99. {
  100. list = Serialization.Deserialize<Guid[]>(stream);
  101. }
  102. var qualifications = new Client<Qualification>().Load(
  103. new Filter<Qualification>(x => x.ID).InList(list));
  104. var guids = CurrentGuids();
  105. var newItems = new List<EmployeeQualification>();
  106. foreach (var qualification in qualifications)
  107. {
  108. if (!guids.Contains(qualification.ID))
  109. {
  110. var newQualification = CreateItem();
  111. newQualification.Qualification.ID = qualification.ID;
  112. newQualification.Qualification.Synchronise(qualification);
  113. newItems.Add(newQualification);
  114. }
  115. }
  116. SaveItems(newItems.ToArray());
  117. return true;
  118. }
  119. return false;*/
  120. }
  121. private bool SaveQualificationTemplate_Click(Button sender, CoreRow[] selectedRows)
  122. {
  123. var dialog = new MultiSelectDialog<EmployeeQualificationTemplate>(null, null, false);
  124. if (dialog.ShowDialog())
  125. {
  126. var templateID = dialog.IDs().First();
  127. var templateItems = Client.Query(
  128. new Filter<EmployeeQualificationTemplateItem>(x => x.Template.ID).IsEqualTo(templateID),
  129. new Columns<EmployeeQualificationTemplateItem>(x => x.ID)).Rows.Select(x => x.ToObject<EmployeeQualificationTemplateItem>()).ToArray();
  130. Client.Delete(templateItems, "Deleted because re-save of template");
  131. List<EmployeeQualificationTemplateItem> newItems = new();
  132. foreach(var item in Data.Rows)
  133. {
  134. var newItem = new EmployeeQualificationTemplateItem();
  135. newItem.Template.ID = templateID;
  136. newItem.Qualification.ID = item.Get<EmployeeQualification, Guid>(x => x.Qualification.ID);
  137. newItems.Add(newItem);
  138. }
  139. Client.Save(newItems, "Save to template");
  140. }
  141. return false;
  142. /*
  143. var list = new List<Guid>();
  144. foreach(var item in Data.Rows)
  145. {
  146. var qualification = item.ToObject<EmployeeQualification>();
  147. list.Add(qualification.Qualification.ID);
  148. }
  149. var dlg = new SaveFileDialog();
  150. dlg.Filter = "JSON files (*.json)|*.json|All files (*.*)|*.*";
  151. dlg.AddExtension = true;
  152. if(dlg.ShowDialog() == true)
  153. {
  154. using(var stream = dlg.OpenFile())
  155. {
  156. Serialization.Serialize(list, stream);
  157. }
  158. }
  159. return false;
  160. */
  161. }
  162. protected override void DoAdd(bool OpenEditorOnDirectEdit = false)
  163. {
  164. var filter = GetFilter() as Filter<Qualification>;
  165. var dlg = new MultiSelectDialog<Qualification>(filter, null, true);
  166. if (dlg.ShowDialog())
  167. {
  168. var guids = CurrentGuids();
  169. var items = dlg.Items(null);
  170. var single = items.Length == 1;
  171. if (single)
  172. {
  173. var item = items.First();
  174. var newItem = CreateItem();
  175. newItem.Qualification.ID = item.ID;
  176. newItem.Qualification.Synchronise(item);
  177. if (EditItems(new EmployeeQualification[] { newItem }))
  178. {
  179. Refresh(false, true);
  180. }
  181. }
  182. else
  183. {
  184. foreach (var item in items)
  185. {
  186. if (!guids.Contains(item.ID))
  187. {
  188. var newItem = CreateItem();
  189. newItem.Qualification.ID = item.ID;
  190. newItem.Qualification.Synchronise(item);
  191. SaveItem(newItem);
  192. }
  193. }
  194. Refresh(false, true);
  195. }
  196. }
  197. }
  198. }