public void OnGet(string date) { DateTime dt; if (date != null && DateTime.TryParse(date, out dt)) { this.StatsByDate = this._statsService.GetStatsByDate(dt); } }
public StatsByDate GetStatsByDate(DateTime date) { var result = new StatsByDate(); result.FormattedDate = date.ToString("dd.MM.yyyy"); var personsAndPresence = this._personRepository.GetAll() .Select(p => new { Person = p, Presence = p.Presences.FirstOrDefault(p => p.Date.Date == date.Date) }).ToList(); var presents = personsAndPresence .Where(pp => pp.Presence != null && pp.Presence.Called && (String.IsNullOrEmpty(pp.Presence.Presence) || _numbersOnlyRegex.IsMatch(pp.Presence.Presence) || pp.Presence.Presence.Equals("P", StringComparison.InvariantCultureIgnoreCase))); var rests = personsAndPresence .Where(pp => pp.Presence != null && pp.Presence.Called && pp.Presence.Presence != null && pp.Presence.Presence.Equals("R", StringComparison.InvariantCultureIgnoreCase)); var quarantines = personsAndPresence .Where(pp => pp.Presence != null && pp.Presence.Called && pp.Presence.Presence != null && pp.Presence.Presence.IndexOf("Q", StringComparison.InvariantCultureIgnoreCase) >= 0); result.PresentCount = presents .Count(); result.RestCount = rests.Count(); result.QuarantineCount = quarantines.Count(); result.MissionCount = presents.GroupBy(pp => pp.Person.Mission) .ToDictionary(g => g.Key, g => { if (g.Key.IndexOf("Quarantaine", StringComparison.InvariantCultureIgnoreCase) >= 0) { return(result.QuarantineCount); } return(g.Count()); }); return(result); }