using System; using System.Linq; using Comal.Classes; using InABox.Core; namespace Comal.Stores { internal class MeetingStore : BaseStore { private void UpdateAssignments(Meeting meeting) { bool needsupdate = meeting.HasOriginalValue(x => x.Date) || meeting.HasOriginalValue(x => x.Time.Start) || meeting.HasOriginalValue(x => x.Time.Duration) || meeting.HasOriginalValue(x => x.Time.Finish) || meeting.HasOriginalValue(x => x.Title) || meeting.HasOriginalValue(x => x.Description) || meeting.HasOriginalValue(x => x.Activity.ID); if (!needsupdate) return; var assignments = Provider.Query( new Filter(x=>x.Meeting.Link.ID).IsEqualTo(meeting.ID), new Columns(x=>x.ID) .Add(x=>x.Title) .Add(x=>x.Description) .Add(x=>x.Date) .Add(x=>x.Booked.Start) .Add(x=>x.Booked.Finish) .Add(x=>x.Booked.Duration) .Add(x=>x.ActivityLink.ID) ).Rows.Select(x=>x.ToObject()).ToArray(); foreach (var assignment in assignments) { assignment.Date = meeting.Date; assignment.Booked.Start = meeting.Time.Start; assignment.Booked.Finish = meeting.Time.Duration; assignment.Booked.Finish = meeting.Time.Finish; assignment.ActivityLink.ID = meeting.Activity.ID; assignment.Title = meeting.Title; assignment.Description = meeting.Description; } var updates = assignments.Where(x => x.IsChanged()).ToArray(); if (updates.Any()) Provider.Save(updates); } protected override void AfterSave(Meeting entity) { base.AfterSave(entity); UpdateAssignments(entity); } } }