DataModel.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using Comal.Classes;
  5. using InABox.Clients;
  6. using InABox.Core;
  7. namespace comal.timesheets
  8. {
  9. public delegate void DataChangedEvent(object sender, Type t);
  10. public delegate void DataRefreshedEvent();
  11. public class DataModel
  12. {
  13. public event DataRefreshedEvent DataRefreshed;
  14. public event DataChangedEvent DataChanged;
  15. public Employee Employee { get; private set; }
  16. public CoreTable TimeSheets { get; set; }
  17. public CoreTable Gates { get; private set; }
  18. public CoreTable Jobs { get; private set; }
  19. public bool CanBypassGates { get; private set; }
  20. public DataModel()
  21. {
  22. }
  23. public void Refresh(bool canbypassgates = true)
  24. {
  25. CanBypassGates = canbypassgates;
  26. RefreshTimeSheet();
  27. RefreshEmployee();
  28. RefreshJobs(canbypassgates);
  29. }
  30. private void RefreshTimeSheet()
  31. {
  32. Task.Run(() =>
  33. {
  34. try
  35. {
  36. CoreTable table = new Client<TimeSheet>().Query(
  37. new Filter<TimeSheet>(x => x.EmployeeLink.UserLink.ID).IsEqualTo(ClientFactory.UserGuid)
  38. .And(x => x.Date).IsEqualTo(DateTime.Today)
  39. .And(x => x.Finish).IsEqualTo(new TimeSpan()),
  40. new Columns<TimeSheet>(
  41. x => x.ID,
  42. x => x.Date,
  43. x => x.Start,
  44. x => x.Notes,
  45. x => x.JobLink.ID,
  46. x => x.JobLink.JobNumber,
  47. x => x.JobLink.Name,
  48. x => x.ActivityLink.ID,
  49. x => x.ActivityLink.Code,
  50. x => x.ActivityLink.Description,
  51. x => x.StartLocation.Latitude,
  52. x => x.StartLocation.Longitude,
  53. x => x.StartLocation.Timestamp,
  54. x => x.EmployeeLink.ID)
  55. );
  56. TimeSheets = table;
  57. DataChanged?.Invoke(this, typeof(TimeSheet));
  58. DataRefreshed?.Invoke();
  59. }
  60. catch (Exception ex)
  61. {
  62. var log = new MobileLogging(LogType.Query, "Data model RefreshTimeSheet()", ex.Message + ex.StackTrace, this.GetType().Name);
  63. }
  64. });
  65. }
  66. private void RefreshEmployee()
  67. {
  68. Task.Run(() =>
  69. {
  70. try
  71. {
  72. CoreTable table = new Client<Employee>().Query(
  73. new Filter<Employee>(x => x.UserLink.ID).IsEqualTo(ClientFactory.UserGuid),
  74. new Columns<Employee>(
  75. x => x.ID,
  76. x => x.Name
  77. ));
  78. if (table.Rows.Any())
  79. {
  80. Employee = table?.Rows.FirstOrDefault()?.ToObject<Employee>();
  81. DataChanged?.Invoke(this, typeof(Employee));
  82. DataRefreshed?.Invoke();
  83. }
  84. }
  85. catch (Exception ex)
  86. {
  87. var log = new MobileLogging(LogType.Query, "Data model RefreshEmployee()", ex.Message + ex.StackTrace, this.GetType().Name);
  88. }
  89. });
  90. }
  91. private void RefreshJobs(bool canbypassgates)
  92. {
  93. Task.Run(() =>
  94. {
  95. try
  96. {
  97. if (canbypassgates)
  98. {
  99. CoreTable table = new Client<Job>().Query(
  100. new Filter<Job>(X => X.Completed).IsEqualTo(DateTime.MinValue).And(x => x.JobStatus.Active).IsEqualTo(true),
  101. new Columns<Job>(
  102. X => X.ID,
  103. X => X.JobNumber,
  104. X => X.Name,
  105. X => X.SiteAddress.Location.Latitude,
  106. X => X.SiteAddress.Location.Longitude),
  107. new SortOrder<Job>(x => x.JobNumber));
  108. if (table.Rows.Any())
  109. {
  110. Jobs = table;
  111. DataChanged?.Invoke(this, typeof(Job));
  112. DataRefreshed?.Invoke();
  113. }
  114. }
  115. else
  116. {
  117. CoreTable table = new Client<JobTracker>().Query(
  118. new Filter<JobTracker>(x => x.Active).IsEqualTo(true),
  119. new Columns<JobTracker>(
  120. x => x.JobLink.ID,
  121. x => x.JobLink.JobNumber,
  122. x => x.JobLink.Name,
  123. x => x.TrackerLink.DeviceID,
  124. x => x.Gate,
  125. x => x.IsJobSite
  126. ));
  127. if (table.Rows.Any())
  128. {
  129. Gates = table;
  130. //DataChanged?.Invoke(this, typeof(JobTracker), e);
  131. DataRefreshed?.Invoke();
  132. }
  133. }
  134. }
  135. catch (Exception ex)
  136. {
  137. var log = new MobileLogging(LogType.Query, "Data model RefreshJobs()", ex.Message + ex.StackTrace, this.GetType().Name);
  138. }
  139. });
  140. }
  141. }
  142. }