MeetingStore.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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.Duration)
  15. || meeting.HasOriginalValue(x => x.Time.Finish)
  16. || meeting.HasOriginalValue(x => x.Title)
  17. || meeting.HasOriginalValue(x => x.Description)
  18. || meeting.HasOriginalValue(x => x.Activity.ID);
  19. if (!needsupdate)
  20. return;
  21. var assignments = Provider.Query<Assignment>(
  22. new Filter<Assignment>(x=>x.Meeting.Link.ID).IsEqualTo(meeting.ID),
  23. new Columns<Assignment>(x=>x.ID)
  24. .Add(x=>x.Title)
  25. .Add(x=>x.Description)
  26. .Add(x=>x.Date)
  27. .Add(x=>x.Booked.Start)
  28. .Add(x=>x.Booked.Finish)
  29. .Add(x=>x.Booked.Duration)
  30. .Add(x=>x.ActivityLink.ID)
  31. ).Rows.Select(x=>x.ToObject<Assignment>()).ToArray();
  32. foreach (var assignment in assignments)
  33. {
  34. assignment.Date = meeting.Date;
  35. assignment.Booked.Start = meeting.Time.Start;
  36. assignment.Booked.Finish = meeting.Time.Duration;
  37. assignment.Booked.Finish = meeting.Time.Finish;
  38. assignment.ActivityLink.ID = meeting.Activity.ID;
  39. assignment.Title = meeting.Title;
  40. assignment.Description = meeting.Description;
  41. }
  42. var updates = assignments.Where(x => x.IsChanged()).ToArray();
  43. if (updates.Any())
  44. Provider.Save(updates);
  45. }
  46. protected override void AfterSave(Meeting entity)
  47. {
  48. base.AfterSave(entity);
  49. UpdateAssignments(entity);
  50. }
  51. }
  52. }