using System; using System.Linq; using Comal.Classes; using InABox.Core; using System.Diagnostics.CodeAnalysis; namespace comal.timesheets { public class InOutModel : ListModel { public InOutModel(IModelHost host, Func> filter, bool transient = false) : base(host, filter, transient) { } public InOutModel(IModelHost host, Func> filter, [NotNull] string filename) : base(host, filter, filename) { } protected override void Initialize() { base.Initialize(); _statuses = new Tuple[] { }; } private Tuple[] _statuses; public bool IsClockedOn(Guid id) => _statuses.Any(x => x.Item1.Equals(id) && x.Item3.Equals(TimeSpan.Zero)); public TimeSpan StartTime(Guid id) => _statuses.FirstOrDefault(x => x.Item1.Equals(id))?.Item2 ?? TimeSpan.Zero; public TimeSpan FinishTime(Guid id) => _statuses.FirstOrDefault(x => x.Item1.Equals(id))?.Item3 ?? TimeSpan.Zero; public override void BeforeLoad(MultiQuery query) { base.BeforeLoad(query); query.Add( new Filter(x=>x.EmployeeLink.ID) .InQuery(Filter(), x=>x.ID) .And(x=>x.Date).IsEqualTo(DateTime.Today), new Columns(x=>x.EmployeeLink.ID) .Add(x=>x.Start) .Add(x=>x.Finish) ); } public override void AfterLoad(MultiQuery query) { base.AfterLoad(query); _statuses = query.Get() .ToTuples(x => x.EmployeeLink.ID, x => x.Start, x => x.Finish).ToArray(); } } }