using System; using System.Collections.Generic; using System.Linq; using Comal.Classes; using InABox.Core; namespace Comal.Stores { internal class JobTrackerStore : BaseStore { protected override void AfterSave(JobTracker entity) { UpdateLinkedTracker(entity); base.AfterSave(entity); } private void UpdateLinkedTracker(JobTracker entity) { if (entity.TrackerLink.HasOriginalValue(x => x.ID)) { var oldID = entity.TrackerLink.GetOriginalValue(x => x.ID); var newID = entity.TrackerLink.ID; var trackers = Provider.Query( new Filter(x => x.ID).IsEqualTo(oldID).Or(x => x.ID).IsEqualTo(newID), new Columns(x => x.ID, x => x.JobTracker.ID) ); var updates = new List(); var prev = trackers.Rows.FirstOrDefault(r => r.Get(c => c.ID).Equals(oldID)); if (prev != null) { var tracker = prev.ToObject(); tracker.JobTracker.ID = Guid.Empty; updates.Add(tracker); } var curr = trackers.Rows.FirstOrDefault(r => r.Get(c => c.ID).Equals(newID)); if (curr != null) { var tracker = curr.ToObject(); tracker.JobTracker.ID = entity.ID; updates.Add(tracker); } if (updates.Any()) Provider.Save(updates); } } } }