|
@@ -19,33 +19,42 @@ namespace Comal.Stores
|
|
|
{
|
|
|
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<GPSTracker>(x => x.ID).IsEqualTo(oldID).Or(x => x.ID).IsEqualTo(newID),
|
|
|
- Columns.None<GPSTracker>().Add(x => x.ID, x => x.Equipment.ID)
|
|
|
- );
|
|
|
-
|
|
|
- var updates = new List<GPSTracker>();
|
|
|
- var prev = trackers.Rows.FirstOrDefault(r => r.Get<GPSTracker, Guid>(c => c.ID).Equals(oldID));
|
|
|
- if (prev != null)
|
|
|
+ // If there are any other equipment items with the same tracker
|
|
|
+ // blank them out - a tracker can only be attached to one equipment item
|
|
|
+ var equips = Provider.Query(
|
|
|
+ new Filter<Equipment>(x => x.TrackerLink.ID).IsEqualTo(newID).And(x => x.ID)
|
|
|
+ .IsNotEqualTo(entity.ID),
|
|
|
+ Columns.None<Equipment>().Add(x => x.ID).Add(x => x.TrackerLink.ID)
|
|
|
+ ).ToList<Equipment>();
|
|
|
+ if (equips.Any())
|
|
|
{
|
|
|
- var tracker = prev.ToObject<GPSTracker>();
|
|
|
- tracker.Equipment.ID = Guid.Empty;
|
|
|
- updates.Add(tracker);
|
|
|
+ foreach (var equip in equips)
|
|
|
+ equip.TrackerLink.ID = Guid.Empty;
|
|
|
+ Provider.Save(equips);
|
|
|
}
|
|
|
|
|
|
- var curr = trackers.Rows.FirstOrDefault(r => r.Get<GPSTracker, Guid>(c => c.ID).Equals(newID));
|
|
|
+ var trackers = Provider.Query(
|
|
|
+ new Filter<GPSTracker>(x => x.ID).IsEqualTo(oldID).Or(x => x.ID).IsEqualTo(newID).Or(x=>x.Equipment.ID).IsEqualTo(entity.ID),
|
|
|
+ Columns.None<GPSTracker>().Add(x => x.ID, x => x.Equipment.ID)
|
|
|
+ ).ToList<GPSTracker>();
|
|
|
+
|
|
|
+ // If there are any other trackers attached to this equipment item,
|
|
|
+ // clear them out - an equipment item can only have one tracker
|
|
|
+ foreach (var tracker in trackers)
|
|
|
+ tracker.Equipment.ID = Guid.Empty;
|
|
|
+
|
|
|
+ // Update the equipment item with the new Tracker ID
|
|
|
+ var curr = trackers.FirstOrDefault(x => x.ID.Equals(newID));
|
|
|
if (curr != null)
|
|
|
- {
|
|
|
- var tracker = curr.ToObject<GPSTracker>();
|
|
|
- tracker.Equipment.ID = entity.ID;
|
|
|
- updates.Add(tracker);
|
|
|
- }
|
|
|
+ curr.Equipment.ID = entity.ID;
|
|
|
|
|
|
- if (updates.Any())
|
|
|
- Provider.Save(updates);
|
|
|
+ // Save any changes
|
|
|
+ if (trackers.Any(x=>x.IsChanged()))
|
|
|
+ Provider.Save(trackers);
|
|
|
}
|
|
|
}
|
|
|
}
|