public async Task SubmitHoursAsync(IEnumerable <WorkHours> workHoursToSubmit, string messageBody = "")
        {
            try
            {
                if (workHoursToSubmit == null)
                {
                    throw new ArgumentNullException(nameof(workHoursToSubmit));
                }
                if (((List <WorkHours>)workHoursToSubmit)?.Count == 0)
                {
                    return;                                                   // Nothing to do
                }
                // Get the manager object identifier of the current user
                var managerOfUser = await _graphUserService.GetMyManagerAsync(_objectIdentifier); // Need to get the manager Id in order to request the corresponding SharePoint List.

                var managerObjectIdentifier = managerOfUser.Id ?? "";

                await SubmitHoursAsync(workHoursToSubmit, _objectIdentifier, managerOfUser, messageBody);
            }
            catch (Exception ex)
            {
            }
        }
        public async Task RequestHoursReviewAsync(IEnumerable <TeamHours> teamHoursToReview, string messageBody = "")
        {
            try
            {
                // Get the SpSiteList, if the list does not exists, it will create one
                var             teamHoursToReviewList   = teamHoursToReview.ToList();
                GraphResultItem managerObjectIdentifier = await _graphUserService.GetMyManagerAsync(teamHoursToReviewList[0].Fields.ObjectIdentifier);

                var teamHoursSiteList = await _graphSharePointService.GetSiteListAsync(managerObjectIdentifier.Id, ListSchema.TeamHoursListSchema);

                var workHoursDate = DateTime.Now;


                var dateKey  = teamHoursToReviewList.First().Fields.Date.Remove(6).ToString();
                var cacheKey = managerObjectIdentifier + dateKey;

                // Persist to SharePoint
                foreach (var item in teamHoursToReview)
                {
                    // Update the workHoursDate which is used to set the month in the message body
                    workHoursDate = DateTime.ParseExact(item.Fields.Date, "yyyyMMdd", CultureInfo.InvariantCulture);

                    // Create JSON object to update Team Hours in SharePoint
                    dynamic teamHoursFieldsObject = new JObject();
                    teamHoursFieldsObject.ItemState = ItemState.RequiresRevision.ToString();

                    dynamic teamHoursRootObject = new JObject();
                    teamHoursRootObject.fields = teamHoursFieldsObject;

                    // Update List Item in TeamHours List
                    var teamHoursItemId = _graphSharePointService.UpdateSiteListItemAsync(teamHoursSiteList, item.Id, teamHoursRootObject.ToString());

                    // Update work hours in sharepoint with request revision
                    var userObjectIdentifier = item.Fields.ObjectIdentifier;
                    var workHoursSiteList    = await _graphSharePointService.GetSiteListAsync(userObjectIdentifier, ListSchema.WorkHoursListSchema);

                    var dateFix           = item.Fields.Date.Remove(6);
                    var workHoursToUpdate = await _graphSharePointService.GetSiteListItemsAsync(workHoursSiteList, dateFix);

                    foreach (var workHoursItem in workHoursToUpdate)
                    {
                        // Create JSON object to update Work Hours in SharePoint
                        dynamic workHoursFieldsObject = new JObject();
                        workHoursFieldsObject.ItemState = ItemState.RequiresRevision.ToString();

                        dynamic workHoursRootObject = new JObject();
                        workHoursRootObject.fields = workHoursFieldsObject;

                        // Update List Item in WorkHours List
                        var workHoursItemId = _graphSharePointService.UpdateSiteListItemAsync(workHoursSiteList, workHoursItem.Id, workHoursRootObject.ToString());
                    }

                    // Create notification and send email
                    var sendToObject = await _graphUserService.GetUserBasicAsync(userObjectIdentifier);

                    messageBody = _workflowServiceHelper.ComposeMessageBody(NotificationType.RequestWorkHoursRevision, workHoursDate, messageBody);
                    await _workflowServiceHelper.SendNotificationAsync(sendToObject, NotificationType.RequestWorkHoursRevision, messageBody);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }