EmployeeQualificationGrid.cs 8.7 KB

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