MeetingAssignmentGrid.cs 3.6 KB

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