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()); } }
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); }