1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- using System;
- using System.Linq;
- using Comal.Classes;
- using InABox.Core;
- using System.Diagnostics.CodeAnalysis;
- namespace comal.timesheets
- {
- public class InOutModel : ListModel<InOutModel,InOutShell,Employee>
- {
- public InOutModel(IModelHost host, Func<Filter<Employee>> filter, bool transient = false) : base(host, filter, transient)
- {
- }
- public InOutModel(IModelHost host, Func<Filter<Employee>> filter, [NotNull] string filename) : base(host, filter, filename)
- {
- }
- protected override void Initialize()
- {
- base.Initialize();
- _statuses = new Tuple<Guid, TimeSpan, TimeSpan>[] { };
- }
- private Tuple<Guid, TimeSpan, TimeSpan>[] _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<TimeSheet>(
- new Filter<TimeSheet>(x=>x.EmployeeLink.ID)
- .InQuery(Filter(), x=>x.ID)
- .And(x=>x.Date).IsEqualTo(DateTime.Today),
- new Columns<TimeSheet>(x=>x.EmployeeLink.ID)
- .Add(x=>x.Start)
- .Add(x=>x.Finish)
- );
- }
- public override void AfterLoad(MultiQuery query)
- {
- base.AfterLoad(query);
- _statuses = query.Get<TimeSheet>()
- .ToTuples<TimeSheet, Guid, TimeSpan, TimeSpan>(x => x.EmployeeLink.ID, x => x.Start, x => x.Finish).ToArray();
- }
- }
- }
|