// Private methods private async Task <ListCollectionPage <TeamHours> > GetItemsResultsAsync(DateTime date, int pageSize, string searchQuery = "") { try { // Get the user object identifier var userObjectIdentifier = _userContext.User.FindFirst(AzureAdAuthenticationBuilderExtensions.ObjectIdentifierType)?.Value; // Prepare call to graph to fetch teamhours records from SharePoint var listCollectionPage = new ListCollectionPage <TeamHours>(); listCollectionPage.QueryDate = date.ToString("yyyyMM"); listCollectionPage.ObjectIdentifier = userObjectIdentifier; listCollectionPage.CurrentPageIndex = 1; listCollectionPage.PageSize = pageSize; listCollectionPage.SearchQuery = searchQuery; listCollectionPage.SiteList = await _graphSharePointService.GetSiteListAsync(userObjectIdentifier, ListSchema.TeamHoursListSchema); // Get the direct reports of the manager (paged) var directReports = await _graphUserService.GetUserDirectReportsAsync(userObjectIdentifier, String.Empty, pageSize); listCollectionPage.SkipToken = directReports.SkipToken; // Get all Team hours for the date if (_teamHoursDataList?.Count == 0 || _teamHoursDataList[0].Fields.Date != date.ToString("yyyyMM")) { var teamHoursResults = await _graphSharePointService.GetSiteListItemsAsync(listCollectionPage.SiteList, date.ToString("yyyyMM")); foreach (var teamHoursItem in teamHoursResults) { var teamHoursFields = ConvertToTeamHours(teamHoursItem); var userInfo = await _graphUserService.GetUserBasicAsync(teamHoursFields.ObjectIdentifier); teamHoursFields.DisplayName = userInfo.DisplayName ?? ""; _teamHoursDataList.Add(new TeamHours { Id = teamHoursItem.Id, ListId = listCollectionPage.SiteList.ListId, Fields = teamHoursFields }); } } var teamHoursDataList = new List <TeamHours>(); foreach (var item in directReports.DataList) { var teamHoursId = String.Empty; var teamHoursFields = new TeamHoursFields { ObjectIdentifier = item.Id, Date = date.ToString("yyyyMM"), ItemState = ItemState.NotSubmitted, TeamHoursItemState = ItemState.NotSubmitted }; foreach (var teamHoursItem in _teamHoursDataList) { if (teamHoursItem.Fields.ObjectIdentifier == item.Id) { teamHoursId = teamHoursItem.Id; teamHoursFields = teamHoursItem.Fields; } } if (String.IsNullOrEmpty(teamHoursFields.DisplayName)) { var userInfo = await _graphUserService.GetUserBasicAsync(teamHoursFields.ObjectIdentifier); teamHoursFields.DisplayName = userInfo.DisplayName ?? ""; } teamHoursDataList.Add(new TeamHours { Id = teamHoursId, ListId = listCollectionPage.SiteList.ListId, Fields = teamHoursFields }); } listCollectionPage.DataList = teamHoursDataList; return(listCollectionPage); } catch (Exception ex) { _logger.LogError("Error getting team hour items in repository: " + ex.Message); throw; } }
private TeamHoursFields ConvertToTeamHours(GraphResultItem graphResultsItem) { try { var teamHoursFields = new TeamHoursFields(); object objectValue; if (graphResultsItem.Properties.TryGetValue("ObjectIdentifier", out objectValue)) { teamHoursFields.ObjectIdentifier = objectValue.ToString(); } if (graphResultsItem.Properties.TryGetValue("Date", out objectValue)) { teamHoursFields.Date = objectValue.ToString(); } if (graphResultsItem.Properties.TryGetValue("MeetingHours", out objectValue)) { teamHoursFields.MeetingHours = Convert.ToInt16(objectValue); } if (graphResultsItem.Properties.TryGetValue("MeetingMinutes", out objectValue)) { teamHoursFields.MeetingMinutes = Convert.ToInt16(objectValue); } if (graphResultsItem.Properties.TryGetValue("MeetingAdjustedHours", out objectValue)) { teamHoursFields.MeetingAdjustedHours = Convert.ToInt16(objectValue); } if (graphResultsItem.Properties.TryGetValue("MeetingAdjustedMinutes", out objectValue)) { teamHoursFields.MeetingAdjustedMinutes = Convert.ToInt16(objectValue); } if (graphResultsItem.Properties.TryGetValue("EmailHours", out objectValue)) { teamHoursFields.EmailHours = Convert.ToInt16(objectValue); } if (graphResultsItem.Properties.TryGetValue("EmailMinutes", out objectValue)) { teamHoursFields.EmailMinutes = Convert.ToInt16(objectValue); } if (graphResultsItem.Properties.TryGetValue("EmailAdjustedHours", out objectValue)) { teamHoursFields.EmailAdjustedHours = Convert.ToInt16(objectValue); } if (graphResultsItem.Properties.TryGetValue("EmailAdjustedMinutes", out objectValue)) { teamHoursFields.EmailAdjustedMinutes = Convert.ToInt16(objectValue); } if (graphResultsItem.Properties.TryGetValue("OtherHours", out objectValue)) { teamHoursFields.OtherHours = Convert.ToInt16(objectValue); } if (graphResultsItem.Properties.TryGetValue("OtherMinutes", out objectValue)) { teamHoursFields.OtherMinutes = Convert.ToInt16(objectValue); } if (graphResultsItem.Properties.TryGetValue("OtherAdjustedHours", out objectValue)) { teamHoursFields.OtherAdjustedHours = Convert.ToInt16(objectValue); } if (graphResultsItem.Properties.TryGetValue("OtherAdjustedMinutes", out objectValue)) { teamHoursFields.OtherAdjustedMinutes = Convert.ToInt16(objectValue); } if (graphResultsItem.Properties.TryGetValue("AdjustedHoursReason", out objectValue)) { teamHoursFields.AdjustedHoursReason = objectValue.ToString(); } if (graphResultsItem.Properties.TryGetValue("TeamHoursItemState", out objectValue)) { teamHoursFields.TeamHoursItemState = (ItemState)Enum.Parse(typeof(ItemState), objectValue.ToString()); } if (graphResultsItem.Properties.TryGetValue("TeamHoursSubmittedDate", out objectValue)) { teamHoursFields.TeamHoursSubmittedDate = Convert.ToDateTime(objectValue.ToString()); } if (graphResultsItem.Properties.TryGetValue("ItemState", out objectValue)) { teamHoursFields.ItemState = (ItemState)Enum.Parse(typeof(ItemState), objectValue.ToString()); } if (graphResultsItem.Properties.TryGetValue("SubmittedDate", out objectValue)) { teamHoursFields.SubmittedDate = Convert.ToDateTime(objectValue.ToString()); } return(teamHoursFields); } catch (Exception ex) { _logger.LogError("Error converting team hours items in repository: " + ex.Message); throw; } }
public async Task <ListCollectionPage <TeamHours> > GetNextItemsAsync(ListCollectionPage <TeamHours> listCollectionPage) { try { // Try fetching the data from cache listCollectionPage.CurrentPageIndex++; var cacheKey = listCollectionPage.CurrentPageIndex.ToString() + "_" + listCollectionPage.ObjectIdentifier + listCollectionPage.QueryDate; var cacheEntry = await _teamHoursCache.TryRetrieveFromCacheAsync(listCollectionPage, cacheKey); if (cacheEntry != null) { return(cacheEntry); } if (String.IsNullOrEmpty(listCollectionPage.SkipToken)) { return(null); // No more entries TODO: process not submitted } // TeamHours entry not in cache listCollectionPage.DataList = new List <TeamHours>(); // Get all Team hours for the date if not in memory if (_teamHoursDataList?.Count == 0) { var teamHoursResults = await _graphSharePointService.GetSiteListItemsAsync(listCollectionPage.SiteList, listCollectionPage.QueryDate); foreach (var teamHoursItem in teamHoursResults) { var teamHoursFields = ConvertToTeamHours(teamHoursItem); var userInfo = await _graphUserService.GetUserBasicAsync(teamHoursFields.ObjectIdentifier); teamHoursFields.DisplayName = userInfo.DisplayName ?? ""; _teamHoursDataList.Add(new TeamHours { Id = teamHoursItem.Id, ListId = listCollectionPage.SiteList.ListId, Fields = teamHoursFields }); } } // Call graph for direct reports next page var directReports = await _graphUserService.GetUserDirectReportsAsync(listCollectionPage.ObjectIdentifier, listCollectionPage.SkipToken, listCollectionPage.PageSize); listCollectionPage.SkipToken = directReports.SkipToken; var teamHoursDataList = new List <TeamHours>(); foreach (var item in directReports.DataList) { var teamHoursId = String.Empty; var teamHoursFields = new TeamHoursFields { ObjectIdentifier = item.Id, Date = listCollectionPage.QueryDate, ItemState = ItemState.NotSubmitted, TeamHoursItemState = ItemState.NotSubmitted }; foreach (var teamHoursItem in _teamHoursDataList) { if (teamHoursItem.Fields.ObjectIdentifier == item.Id) { teamHoursId = teamHoursItem.Id; teamHoursFields = teamHoursItem.Fields; } } if (String.IsNullOrEmpty(teamHoursFields.DisplayName)) { var userInfo = await _graphUserService.GetUserBasicAsync(teamHoursFields.ObjectIdentifier); teamHoursFields.DisplayName = userInfo.DisplayName ?? ""; } teamHoursDataList.Add(new TeamHours { Id = teamHoursId, ListId = listCollectionPage.SiteList.ListId, Fields = teamHoursFields }); } listCollectionPage.DataList = teamHoursDataList; // Save to cache await _teamHoursCache.SaveToCacheAsync(listCollectionPage, cacheKey); return(listCollectionPage); } catch (Exception ex) { _logger.LogError("Error getting team hour items in repository: " + ex.Message); throw; } }