EquipmentStore.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Comal.Classes;
  5. using InABox.Core;
  6. namespace Comal.Stores
  7. {
  8. public class EquipmentStore : SchedulableStore<Equipment>
  9. {
  10. protected override void AfterSave(Equipment entity)
  11. {
  12. UpdateLinkedTracker(entity);
  13. base.AfterSave(entity);
  14. }
  15. private void UpdateLinkedTracker(Equipment entity)
  16. {
  17. if (entity.TrackerLink.HasOriginalValue(x => x.ID))
  18. {
  19. var oldID = entity.TrackerLink.GetOriginalValue(x => x.ID);
  20. var newID = entity.TrackerLink.ID;
  21. var trackers = Provider.Query(
  22. new Filter<GPSTracker>(x => x.ID).IsEqualTo(oldID).Or(x => x.ID).IsEqualTo(newID),
  23. new Columns<GPSTracker>(x => x.ID, x => x.Equipment.ID)
  24. );
  25. var updates = new List<GPSTracker>();
  26. var prev = trackers.Rows.FirstOrDefault(r => r.Get<GPSTracker, Guid>(c => c.ID).Equals(oldID));
  27. if (prev != null)
  28. {
  29. var tracker = prev.ToObject<GPSTracker>();
  30. tracker.Equipment.ID = Guid.Empty;
  31. updates.Add(tracker);
  32. }
  33. var curr = trackers.Rows.FirstOrDefault(r => r.Get<GPSTracker, Guid>(c => c.ID).Equals(newID));
  34. if (curr != null)
  35. {
  36. var tracker = curr.ToObject<GPSTracker>();
  37. tracker.Equipment.ID = entity.ID;
  38. updates.Add(tracker);
  39. }
  40. if (updates.Any())
  41. Provider.Save(updates);
  42. }
  43. }
  44. }
  45. }