InOutModel.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using System;
  2. using System.Linq;
  3. using Comal.Classes;
  4. using InABox.Core;
  5. using System.Diagnostics.CodeAnalysis;
  6. using InABox.Mobile;
  7. namespace PRS.Mobile
  8. {
  9. public class InOutModel : CoreRepository<InOutModel,InOutShell,Employee>
  10. {
  11. public InOutModel(IModelHost host, Func<Filter<Employee>>? filter = null, Func<string>? cachefilename = null) : base(host, filter, cachefilename)
  12. {
  13. }
  14. protected override void Initialize()
  15. {
  16. base.Initialize();
  17. _statuses = new Tuple<Guid, TimeSpan, TimeSpan>[] { };
  18. }
  19. private Tuple<Guid, TimeSpan, TimeSpan>[] _statuses;
  20. public bool IsClockedOn(Guid id) => _statuses.Any(x => x.Item1.Equals(id) && x.Item3.Equals(TimeSpan.Zero));
  21. public TimeSpan StartTime(Guid id) => _statuses.FirstOrDefault(x => x.Item1.Equals(id))?.Item2 ?? TimeSpan.Zero;
  22. public TimeSpan FinishTime(Guid id) => _statuses.FirstOrDefault(x => x.Item1.Equals(id))?.Item3 ?? TimeSpan.Zero;
  23. protected override void BeforeLoad(MultiQuery query)
  24. {
  25. base.BeforeLoad(query);
  26. query.Add<TimeSheet>(
  27. new Filter<TimeSheet>(x=>x.Date).IsEqualTo(DateTime.Today),
  28. new Columns<TimeSheet>(ColumnTypeFlags.None).Add(x=>x.EmployeeLink.ID)
  29. .Add(x=>x.Start)
  30. .Add(x=>x.Finish)
  31. );
  32. }
  33. protected override void AfterLoad(MultiQuery query)
  34. {
  35. base.AfterLoad(query);
  36. _statuses = query.Get<TimeSheet>()
  37. .ToTuples<TimeSheet, Guid, TimeSpan, TimeSpan>(x => x.EmployeeLink.ID, x => x.Start, x => x.Finish).ToArray();
  38. }
  39. }
  40. }