MeetingAssignmentGrid.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading;
  5. using Comal.Classes;
  6. using InABox.Clients;
  7. using InABox.Core;
  8. using InABox.DynamicGrid;
  9. namespace PRSDesktop
  10. {
  11. public class MeetingAssignmentGrid :DynamicDataGrid<Assignment>
  12. {
  13. public MeetingModel? Model { get; set; }
  14. public MeetingAssignmentGrid()
  15. {
  16. }
  17. protected override void DoReconfigure(DynamicGridOptions options)
  18. {
  19. base.DoReconfigure(options);
  20. options.Clear();
  21. options.AddRows = true;
  22. options.DeleteRows = true;
  23. options.MultiSelect = true;
  24. }
  25. protected override DynamicGridColumns LoadColumns()
  26. {
  27. return new DynamicGridColumns()
  28. {
  29. new DynamicGridColumn()
  30. {
  31. ColumnName = CoreUtils.GetFullPropertyName<Assignment, String>(x => x.EmployeeLink.Name, "."),
  32. Width = 0
  33. }
  34. };
  35. }
  36. protected override void Reload(
  37. Filters<Assignment> criteria, Columns<Assignment> columns, ref SortOrder<Assignment>? sort,
  38. CancellationToken token, Action<CoreTable?, Exception?> action)
  39. {
  40. var meetingfilter = (Model == null) || (Model.ID == Guid.Empty)
  41. ? new Filter<Assignment>().None()
  42. : new Filter<Assignment>(x => x.Meeting.Link.ID).IsEqualTo(Model.ID);
  43. criteria.Add(meetingfilter);
  44. base.Reload(criteria, columns, ref sort, token, action);
  45. }
  46. protected override bool CanCreateItems()
  47. {
  48. return Model == null
  49. ? false
  50. : base.CanCreateItems();
  51. }
  52. public override Assignment CreateItem()
  53. {
  54. var result = base.CreateItem();
  55. result.Meeting.Link.ID = Model.ID;
  56. return result;
  57. }
  58. protected override void DoAdd(bool OpenEditorOnDirectEdit = false)
  59. {
  60. var employeeids = Data.ExtractValues<Assignment, Guid>(x => x.EmployeeLink.ID).Distinct().ToArray();
  61. var existingfilter = employeeids.Any() ? new Filter<Employee>(x => x.ID).NotInList(employeeids) : null;
  62. var defaultfilter = LookupFactory.DefineFilter<Employee>();
  63. var filter = existingfilter != null
  64. ? existingfilter.And(defaultfilter)
  65. : defaultfilter;
  66. MultiSelectDialog<Employee> dlg = new MultiSelectDialog<Employee>(filter, LookupFactory.DefineColumns<Employee>(), true);
  67. if (dlg.ShowDialog() == true)
  68. {
  69. List<Assignment> updates = new List<Assignment>();
  70. foreach (var item in dlg.Items())
  71. {
  72. Assignment assignment = new Assignment();
  73. assignment.EmployeeLink.ID = item.ID;
  74. assignment.EmployeeLink.Synchronise(item);
  75. assignment.Meeting.Link.ID = Model.ID;
  76. assignment.Date = Model.Date;
  77. assignment.Booked.Start = Model.Start;
  78. assignment.Booked.Finish = Model.Finish;
  79. assignment.ActivityLink.ID = Model.ActivityID;
  80. assignment.Title = Model.Title;
  81. assignment.Description = Model.Description;
  82. updates.Add(assignment);
  83. }
  84. if (updates.Any())
  85. new Client<Assignment>().Save(updates, "Added by Meeting Editor");
  86. Refresh(false, true);
  87. }
  88. }
  89. }
  90. }