Beispiel #1
0
        public async Task <StatusCountDto> GetStatusCount(int forUserId = -1, DateTime?fromDate = null, DateTime?toDate = null)
        {
            var result = new StatusCountDto
            {
                FromDate = fromDate,
                ToDate   = toDate
            };

            AppUser user = null;

            if (forUserId != -1)
            {
                user = await userRepo.GetById(forUserId);

                if (user == null)
                {
                    return(result);
                }
                result.TargetUser = mapper.Map <UserSummaryDto>(user);
            }

            var documents = filteringService.Filter(docRepo.GetAll(), user, fromDate: fromDate, toDate: toDate);

            result.DocumentsCurrentStatusCount = reportingService.CountDocumentsByStatus(documents);
            result.TotalDocuments = result.DocumentsCurrentStatusCount.Values.Sum();

            // TODO - move status filtering logic to another place
            bool historyPredicate(DocumentHistoryEntry e)
            {
                if (user != null && e.User.Id != user.Id)
                {
                    return(false);
                }

                if (fromDate.HasValue && e.Created < fromDate.Value)
                {
                    return(false);
                }

                if (toDate.HasValue && e.Created > toDate.Value)
                {
                    return(false);
                }

                return(true);
            }

            var statusChanges = historyRepo.GetAll().Where(historyPredicate);

            result.StatusChangesCount = reportingService.CountStatusChanges(statusChanges.AsQueryable());
            result.TotalChanges       = result.StatusChangesCount.Values.Sum();


            return(result);
        }