MeetingStore.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System.Linq;
  2. using Comal.Classes;
  3. using InABox.Core;
  4. namespace Comal.Stores
  5. {
  6. internal class MeetingStore : BaseStore<Meeting>
  7. {
  8. private void UpdateAssignments(Meeting meeting)
  9. {
  10. bool needsupdate =
  11. meeting.HasOriginalValue(x => x.Date)
  12. || meeting.HasOriginalValue(x => x.Time.Start)
  13. || meeting.HasOriginalValue(x => x.Time.Duration)
  14. || meeting.HasOriginalValue(x => x.Time.Finish)
  15. || meeting.HasOriginalValue(x => x.Title)
  16. || meeting.HasOriginalValue(x => x.Description)
  17. || meeting.HasOriginalValue(x => x.Activity.ID);
  18. if (!needsupdate)
  19. return;
  20. var assignments = Provider.Query<Assignment>(
  21. new Filter<Assignment>(x=>x.Meeting.Link.ID).IsEqualTo(meeting.ID),
  22. Columns.None<Assignment>().Add(x=>x.ID)
  23. .Add(x=>x.Title)
  24. .Add(x=>x.Description)
  25. .Add(x=>x.Date)
  26. .Add(x=>x.Booked.Start)
  27. .Add(x=>x.Booked.Finish)
  28. .Add(x=>x.Booked.Duration)
  29. .Add(x=>x.ActivityLink.ID)
  30. ).Rows.Select(x=>x.ToObject<Assignment>()).ToArray();
  31. foreach (var assignment in assignments)
  32. {
  33. assignment.Date = meeting.Date;
  34. assignment.Booked.Start = meeting.Time.Start;
  35. assignment.Booked.Finish = meeting.Time.Duration;
  36. assignment.Booked.Finish = meeting.Time.Finish;
  37. assignment.ActivityLink.ID = meeting.Activity.ID;
  38. assignment.Title = meeting.Title;
  39. assignment.Description = meeting.Description;
  40. }
  41. var updates = assignments.Where(x => x.IsChanged()).ToArray();
  42. if (updates.Any())
  43. Provider.Save(updates);
  44. }
  45. protected override void AfterSave(Meeting entity)
  46. {
  47. base.AfterSave(entity);
  48. UpdateAssignments(entity);
  49. }
  50. }
  51. }