123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- using System.Collections.Generic;
- using System.Linq;
- using Comal.Classes;
- using InABox.Core;
- using System;
- namespace Comal.Stores
- {
- internal class GPSTrackerStore : BaseStore<GPSTracker>
- {
- 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;
- // If there are any other trackers linked to this new equipment item
- // blank them out - a tracker can only be attached to one equipment item
- var trackers = Provider.Query(
- new Filter<GPSTracker>(x => x.Equipment.ID).IsEqualTo(newID).And(x => x.ID)
- .IsNotEqualTo(entity.ID),
- Columns.None<GPSTracker>().Add(x => x.ID).Add(x => x.Equipment.ID)
- ).ToList<GPSTracker>();
- if (trackers.Any())
- {
- foreach (var tracker in trackers)
- tracker.Equipment.ID = Guid.Empty;
- Provider.Save(trackers);
- }
- var equips = Provider.Query(
- new Filter<Equipment>(x => x.ID).IsEqualTo(oldID).Or(x => x.ID).IsEqualTo(newID).Or(x=>x.TrackerLink.ID).IsEqualTo(entity.ID),
- Columns.None<Equipment>().Add(x => x.ID, x => x.TrackerLink.ID)
- ).ToList<Equipment>();
-
- // If there are any other trackers attached to this equipment item,
- // clear them out - an equipment item can only have one tracker
- foreach (var equip in equips)
- equip.TrackerLink.ID = Guid.Empty;
-
- // Update the equipment item with the new Tracker ID
- var curr = equips.FirstOrDefault(x => x.ID.Equals(newID));
- if (curr != null)
- curr.TrackerLink.ID = entity.ID;
- // Save any changes
- if (equips.Any(x=>x.IsChanged()))
- Provider.Save(equips);
- }
- }
- 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<JobTracker>(x => x.ID).IsEqualTo(oldID).Or(x => x.ID).IsEqualTo(newID),
- Columns.None<JobTracker>().Add(x => x.ID, x => x.TrackerLink.ID)
- );
- var updates = new List<JobTracker>();
- var prev = trackers.Rows.FirstOrDefault(r => r.Get<JobTracker, Guid>(c => c.ID).Equals(oldID));
- if (prev != null)
- {
- var target = prev.ToObject<JobTracker>();
- target.TrackerLink.ID = Guid.Empty;
- updates.Add(target);
- }
- var curr = trackers.Rows.FirstOrDefault(r => r.Get<JobTracker, Guid>(c => c.ID).Equals(newID));
- if (curr != null)
- {
- var tracker = curr.ToObject<JobTracker>();
- tracker.TrackerLink.ID = entity.ID;
- updates.Add(tracker);
- }
- if (updates.Any())
- Provider.Save(updates);
- }
- }
- }
- }
|