MeetingStore.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System;
  2. using System.Linq;
  3. using Comal.Classes;
  4. using InABox.Core;
  5. namespace Comal.Stores
  6. {
  7. internal class MeetingStore : BaseStore<Meeting>
  8. {
  9. private void UpdateAssignments(Meeting meeting)
  10. {
  11. bool needsupdate =
  12. meeting.HasOriginalValue(x => x.Date)
  13. || meeting.HasOriginalValue(x => x.Time.Start)
  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. new Columns<Assignment>(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.Finish;
  36. assignment.ActivityLink.ID = meeting.Activity.ID;
  37. assignment.Title = meeting.Title;
  38. assignment.Description = meeting.Description;
  39. }
  40. var updates = assignments.Where(x => x.IsChanged()).ToArray();
  41. if (updates.Any())
  42. Provider.Save(updates);
  43. }
  44. protected override void AfterSave(Meeting entity)
  45. {
  46. base.AfterSave(entity);
  47. UpdateAssignments(entity);
  48. }
  49. }
  50. }