MeetingAssignments.cs 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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 MeetingAssignments :DynamicDataGrid<Assignment>
  11. {
  12. public MeetingModel? Model { get; set; }
  13. public MeetingAssignments()
  14. {
  15. Options.BeginUpdate()
  16. .Clear()
  17. .Add(DynamicGridOption.AddRows)
  18. .Add(DynamicGridOption.DeleteRows)
  19. .EndUpdate();
  20. }
  21. protected override DynamicGridColumns LoadColumns()
  22. {
  23. return new DynamicGridColumns()
  24. {
  25. new DynamicGridColumn()
  26. {
  27. ColumnName = CoreUtils.GetFullPropertyName<Assignment, String>(x => x.EmployeeLink.Code, "."),
  28. Width = 120
  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. protected 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. updates.Add(assignment);
  80. }
  81. if (updates.Any())
  82. new Client<Assignment>().Save(updates, "Added by Meeting Editor");
  83. Refresh(false, true);
  84. }
  85. }
  86. }
  87. }