GPSTrackerStore.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. internal class GPSTrackerStore : BaseStore<GPSTracker>
  9. {
  10. protected override void AfterSave(GPSTracker entity)
  11. {
  12. UpdateLinkedEquipment(entity);
  13. UpdateLinkedJob(entity);
  14. base.AfterSave(entity);
  15. }
  16. private void UpdateLinkedEquipment(GPSTracker entity)
  17. {
  18. if (entity.Equipment.HasOriginalValue(x => x.ID))
  19. {
  20. var oldID = entity.Equipment.GetOriginalValue(x => x.ID);
  21. var newID = entity.Equipment.ID;
  22. var trackers = Provider.Query(
  23. new Filter<Equipment>(x => x.ID).IsEqualTo(oldID).Or(x => x.ID).IsEqualTo(newID),
  24. new Columns<Equipment>(x => x.ID, x => x.TrackerLink.ID)
  25. );
  26. var updates = new List<Equipment>();
  27. var prev = trackers.Rows.FirstOrDefault(r => r.Get<Equipment, Guid>(c => c.ID).Equals(oldID));
  28. if (prev != null)
  29. {
  30. var target = prev.ToObject<Equipment>();
  31. target.TrackerLink.ID = Guid.Empty;
  32. updates.Add(target);
  33. }
  34. var curr = trackers.Rows.FirstOrDefault(r => r.Get<Equipment, Guid>(c => c.ID).Equals(newID));
  35. if (curr != null)
  36. {
  37. var tracker = curr.ToObject<Equipment>();
  38. tracker.TrackerLink.ID = entity.ID;
  39. updates.Add(tracker);
  40. }
  41. if (updates.Any())
  42. Provider.Save(updates);
  43. }
  44. }
  45. private void UpdateLinkedJob(GPSTracker entity)
  46. {
  47. if (entity.JobTracker.HasOriginalValue(x => x.ID))
  48. {
  49. var oldID = entity.JobTracker.GetOriginalValue(x => x.ID);
  50. var newID = entity.JobTracker.ID;
  51. var trackers = Provider.Query(
  52. new Filter<JobTracker>(x => x.ID).IsEqualTo(oldID).Or(x => x.ID).IsEqualTo(newID),
  53. new Columns<JobTracker>(x => x.ID, x => x.TrackerLink.ID)
  54. );
  55. var updates = new List<JobTracker>();
  56. var prev = trackers.Rows.FirstOrDefault(r => r.Get<JobTracker, Guid>(c => c.ID).Equals(oldID));
  57. if (prev != null)
  58. {
  59. var target = prev.ToObject<JobTracker>();
  60. target.TrackerLink.ID = Guid.Empty;
  61. updates.Add(target);
  62. }
  63. var curr = trackers.Rows.FirstOrDefault(r => r.Get<JobTracker, Guid>(c => c.ID).Equals(newID));
  64. if (curr != null)
  65. {
  66. var tracker = curr.ToObject<JobTracker>();
  67. tracker.TrackerLink.ID = entity.ID;
  68. updates.Add(tracker);
  69. }
  70. if (updates.Any())
  71. Provider.Save(updates);
  72. }
  73. }
  74. }
  75. }