public async Task <StatusChangesTimeDto> GetStatusChangesTime(int forDocumentId = -1, DateTime?fromDate = null, DateTime?toDate = null) { var result = new StatusChangesTimeDto { FromDate = fromDate, ToDate = toDate }; Document document = null; if (forDocumentId != -1) { document = await docRepo.GetById(forDocumentId); if (document == null) { return(result); } result.TargetDocument = mapper.Map <DocumentSummaryDto>(document); } if (document != null) { result.StatusChangesTime = reportingService.TimeBetweenStatusChanges(document.History); } else { var documents = filteringService.Filter(docRepo.GetAll(), fromDate: fromDate, toDate: toDate); result.StatusChangesTime = reportingService.AverageTimeBetweenStatusChanges(documents); } result.TotalTime = new TimeSpan(result.StatusChangesTime.Values.Sum(t => t.Ticks)); return(result); }