Пример #1
0
        public List <WorkItemDto> GetUserSyncedTasksByDateRange(DateTime fromDate, DateTime endDate, string userId, bool includeIncompleteItems = false)
        {
            List <WorkItemDto> workItemDtos = new List <WorkItemDto>();

            if (fromDate.Date > DateTime.Today.Date.AddDays(7))
            {
                return(workItemDtos);
            }

            if (endDate.Date < fromDate.Date)
            {
                return(workItemDtos);
            }
            WeekInfo   currentWeekInfo = null;
            List <int> weekIdRange     = new List <int>();

            using (WeekInfoRepository repository = new WeekInfoRepository())
            {
                currentWeekInfo = repository.GetCurrentWeekInfo();
                if (currentWeekInfo == null)
                {
                    throw new Exception("Current Week is not registered.");
                }

                IQueryable <WeekInfo> weekItems = repository.FilterLocal(
                    x => DbFunctions.TruncateTime(x.StartDate) >= fromDate &&
                    DbFunctions.TruncateTime(x.EndDate) <= endDate);

                weekIdRange = weekItems.Select(x => x.Id).ToList();
            }
            if (weekIdRange.Count == 0 && !includeIncompleteItems)
            {
                return(workItemDtos);
            }

            // Get Current Week Tasks.
            if (weekIdRange.Contains(currentWeekInfo.Id))
            {
                List <WorkItemDto> userWorkItems = GetUserCurrentWeekSyncedTasks(userId, includeIncompleteItems);
                workItemDtos.AddRange(userWorkItems);
                weekIdRange = weekIdRange.Except(new List <int>()
                {
                    currentWeekInfo.Id
                }).ToList();
            }

            // Get other week Tasks.
            using (WorkItemRepository repository = new WorkItemRepository())
            {
                List <WorkItemDto> otherWeekWorkItems =
                    repository.Filter(x => weekIdRange.Contains(x.WeekId)).ToList()
                    .Select(x => x.ToDto(x.Id)).ToList();
                workItemDtos.AddRange(otherWeekWorkItems);
            }

            return(workItemDtos);
        }
 public List <WorkItemDto> GetWorkItemByTaskId(int taskId, int weekId)
 {
     using (WorkItemRepository repository = new WorkItemRepository())
     {
         return(repository
                .Filter(x => x.TaskId == taskId && x.WeekId == weekId)
                .Select(x => x.ToDto(x.Id)).ToList());
     }
 }
Пример #3
0
        public List <WorkItemDto> GetUserCurrentWeekSyncedTasks(string userId, bool includeIncompleteItems = true)
        {
            List <WorkItemDto> currentWeekTasks = new List <WorkItemDto>();
            WeekInfo           currentWeek      = null;

            UserInfo currentUser = null;

            using (UserInfoRepository userInfoRepository = new UserInfoRepository())
            {
                currentUser = userInfoRepository.Find(x => x.UserId == userId);
                if (currentUser == null)
                {
                    throw new Exception(string.Format("User Id {0} not found", userId));
                }
            }

            // Get current week.
            using (WeekInfoRepository repository = new WeekInfoRepository())
            {
                currentWeek = repository.GetCurrentWeekInfo();
                if (currentWeek == null)
                {
                    throw new Exception("Current Week is not registered.");
                }
            }

            // Get servers configured for the user.
            List <UserServerInfo> userServers = new List <UserServerInfo>();

            using (UserServerInfoRepository repository = new UserServerInfoRepository())
            {
                userServers = repository.Filter(x => x.UserId == userId).ToList();
            }

            // Get user incomplete tasks from task repository.
            List <int> currentWeekTaskIdList    = new List <int>();
            List <int> currentWeekMovedTaskList = new List <int>();

            foreach (UserServerInfo server in userServers)
            {
                using (WorkItemRepository workItemRepository = new WorkItemRepository())
                {
                    IQueryable <UserWorkItem> currentWeekSavedTasks = workItemRepository
                                                                      .Filter(x => x.ServerId == server.Id &&
                                                                              x.UserId == userId &&
                                                                              x.State != WorkItemState.Moved &&
                                                                              x.WeekId == currentWeek.Id);

                    IQueryable <UserWorkItem> currentWeekMovedTasks = workItemRepository
                                                                      .Filter(x => x.ServerId == server.Id &&
                                                                              x.UserId == userId &&
                                                                              x.State == WorkItemState.Moved &&
                                                                              x.WeekId == currentWeek.Id);

                    currentWeekTaskIdList    = currentWeekSavedTasks.Select(x => x.TaskId).ToList();
                    currentWeekMovedTaskList = currentWeekSavedTasks.Select(x => x.TaskId).ToList();
                }

                TeamServer teamServer = null;
                using (TeamServerRepository repository = new TeamServerRepository())
                {
                    teamServer = repository.Find(x => x.Id == server.TfsId);
                    if (teamServer == null)
                    {
                        continue;
                    }
                }

                // Get all tasks by id including to do items.
                List <WorkItem> userIncompleteItems = _teamServerManagementService
                                                      .GetWorkItemsByIds(currentWeekTaskIdList, teamServer.Url, server.CredentialHash, includeIncompleteItems);
                using (WorkItemRepository workItemRepository = new WorkItemRepository())
                {
                    foreach (WorkItem item in userIncompleteItems)
                    {
                        // Add new items.
                        UserWorkItem existingWorkItem = workItemRepository.Find(x => x.UserId == userId &&
                                                                                x.WeekId == currentWeek.Id &&
                                                                                x.TaskId == item.Id);
                        if (existingWorkItem == null)
                        {
                            UserWorkItem newWorkItem = item.ToEntity(server.TfsId);
                            newWorkItem.UserId     = userId;
                            newWorkItem.AssignedTo = currentUser.FirstName + " " + currentUser.LastName;
                            newWorkItem.WeekId     = currentWeek.Id;
                            int newWorkItemId = workItemRepository.Insert(newWorkItem);

                            currentWeekTasks.Add(newWorkItem.ToDto(newWorkItemId));
                        }
                        else
                        {
                            existingWorkItem.Title       = item.Title;
                            existingWorkItem.Status      = item.State;
                            existingWorkItem.Sprint      = item.IterationPath;
                            existingWorkItem.Project     = item.AreaPath;
                            existingWorkItem.Description = item.Description;

                            workItemRepository.Update(existingWorkItem);
                            currentWeekTasks.Add(existingWorkItem.ToDto(existingWorkItem.Id));
                        }
                    }
                }
            }
            return(currentWeekTasks);
        }