using System; using System.Collections.Generic; using System.Linq; using Comal.Classes; using InABox.Core; namespace Comal.Stores { internal class GPSTrackerStore : BaseStore { protected override void AfterSave(GPSTracker entity) { UpdateLinkedEquipment(entity); UpdateLinkedJob(entity); base.AfterSave(entity); } private void UpdateLinkedEquipment(GPSTracker entity) { if (entity.Equipment.HasOriginalValue(x => x.ID)) { var oldID = entity.Equipment.GetOriginalValue(x => x.ID); var newID = entity.Equipment.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.TrackerLink.ID) ); var updates = new List(); var prev = trackers.Rows.FirstOrDefault(r => r.Get(c => c.ID).Equals(oldID)); if (prev != null) { var target = prev.ToObject(); target.TrackerLink.ID = Guid.Empty; updates.Add(target); } var curr = trackers.Rows.FirstOrDefault(r => r.Get(c => c.ID).Equals(newID)); if (curr != null) { var tracker = curr.ToObject(); tracker.TrackerLink.ID = entity.ID; updates.Add(tracker); } if (updates.Any()) Provider.Save(updates); } } private void UpdateLinkedJob(GPSTracker entity) { if (entity.JobTracker.HasOriginalValue(x => x.ID)) { var oldID = entity.JobTracker.GetOriginalValue(x => x.ID); var newID = entity.JobTracker.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.TrackerLink.ID) ); var updates = new List(); var prev = trackers.Rows.FirstOrDefault(r => r.Get(c => c.ID).Equals(oldID)); if (prev != null) { var target = prev.ToObject(); target.TrackerLink.ID = Guid.Empty; updates.Add(target); } var curr = trackers.Rows.FirstOrDefault(r => r.Get(c => c.ID).Equals(newID)); if (curr != null) { var tracker = curr.ToObject(); tracker.TrackerLink.ID = entity.ID; updates.Add(tracker); } if (updates.Any()) Provider.Save(updates); } } } }