Esempio n. 1
0
        // 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;
            }
        }
Esempio n. 2
0
        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;
            }
        }
Esempio n. 3
0
        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;
            }
        }