public TimeRegistrationModule(ITimeRegistrationRepository timeRegistrationRepository) : base("/read/timeregistrations") { this.RequiresAuthentication(); Get["/"] = _ => Json(timeRegistrationRepository.ToList()); Get["/{id:guid}"] = parameters => Json(timeRegistrationRepository.GetById((Guid)parameters.id)); Get["/getfordate/{date:datetime}"] = parameters => Json(timeRegistrationRepository.GetForPeriod((DateTime)parameters.date, ((DateTime)parameters.date).AddDays(1))); Get["/getforperiod/{fromDate}/{toDate}"] = parameters => Json(timeRegistrationRepository.GetForPeriod((DateTime)parameters.fromDate, ((DateTime)parameters.toDate).AddDays(1))); Get["/getinfo/{fromDate}/{toDate}"] = parameters => { var items = timeRegistrationRepository.GetForPeriod((DateTime)parameters.fromDate, ((DateTime)parameters.toDate).AddDays(1)); var summary = new TimeRegistrationPeriodInfo { Count = items.Count(), Income = Math.Round(items.Sum(i => i.Minutes.HasValue ? i.CorrectedIncome != null ? i.CorrectedIncome.Value : (i.Minutes.Value * ((decimal)i.Rate / 60)) : 0), 2), BillableMinutes = items.Sum(i => i.Minutes.HasValue && ((i.CorrectedIncome != null && i.CorrectedIncome.Value > 0) || i.Rate > 0) ? i.Minutes.Value : 0), UnbillableMinutes = items.Sum(i => i.Minutes.HasValue && ((i.CorrectedIncome == null || i.CorrectedIncome.Value <= 0) && i.Rate <= 0) ? i.Minutes.Value : 0), }; var perTask = items.GroupBy(r => new { r.ClientId, r.ClientName, r.ProjectId, r.ProjectName, r.Task }) .Select(g => { return new TimeRegistrationPeriodInfoPerTask { ClientId = g.Key.ClientId, Client = g.Key.ClientName, ProjectId = g.Key.ProjectId, Project = g.Key.ProjectName, Task = g.Key.Task, Count = g.Count(), Income = Math.Round(g.Sum(i => i.Minutes.HasValue ? i.CorrectedIncome != null ? i.CorrectedIncome.Value : (i.Minutes.Value * ((decimal)i.Rate / 60)) : 0), 2), BillableMinutes = g.Sum(i => i.Minutes.HasValue && ((i.CorrectedIncome != null && i.CorrectedIncome.Value > 0) || i.Rate > 0) ? i.Minutes.Value : 0), UnbillableMinutes = g.Sum(i => i.Minutes.HasValue && ((i.CorrectedIncome == null || i.CorrectedIncome.Value <= 0) && i.Rate <= 0) ? i.Minutes.Value : 0), }; }).ToList(); return new { Summary = summary, PerTask = perTask }; }; }