public async Async.Task <PlannerPlan> CreatePlan(Group owner)
        {
            PlannerPlan forCreate = new PlannerPlan();

            forCreate.Title = "Test Plan" + Guid.NewGuid();
            forCreate.Owner = owner.Id;

            return(await graphClient.Planner.Plans.Request().AddAsync(forCreate));
        }
        private async Task <PlannerPlan> CreatePlan(string groupId, string channelName)
        {
            var plannerPlan = new PlannerPlan()
            {
                Owner = groupId,
                Title = channelName
            };

            return(await GraphClient.Planner.Plans.Request().AddAsync(plannerPlan));
        }
        private async Task LoadAllTasksAsync()
        {
            try
            {
                GraphServiceClient graphClient = await GraphServiceHelper.GetGraphServiceClientAsync();

                if (graphClient != null)
                {
                    IPlannerPlanTasksCollectionPage tasks    = await graphClient.Planner.Plans[PlanId].Tasks.Request().GetAsync();
                    Dictionary <string, string>     buckets  = Buckets.ToDictionary(s => s.Id, s => s.Name);
                    List <PlannerTaskViewModel>     taskList = new List <PlannerTaskViewModel>();
                    PlannerPlan plan = Plans.FirstOrDefault(s => s.Id == InternalPlanId);
                    while (true)
                    {
                        foreach (PlannerTask task in tasks)
                        {
                            PlannerTaskViewModel taskViewModel = new PlannerTaskViewModel(task);
                            if (plan != null)
                            {
                                taskViewModel.GroupId = plan.Owner;
                            }

                            taskViewModel.PropertyChanged += TaskViewModel_PropertyChanged;
                            await GetAssignmentsAsync(taskViewModel, graphClient);

                            if (!string.IsNullOrEmpty(taskViewModel.BucketId) && buckets.ContainsKey(taskViewModel.BucketId))
                            {
                                taskViewModel.BucketName = buckets[taskViewModel.BucketId];
                            }

                            taskList.Add(taskViewModel);
                        }

                        if (tasks.NextPageRequest == null)
                        {
                            break;
                        }

                        tasks = await tasks.NextPageRequest.GetAsync();
                    }

                    _allTasks.Clear();
                    _allTasks.AddRange(taskList);
                    LoadTasks();
                }
            }
            catch (Exception exception)
            {
                MessageDialog messageDialog = new MessageDialog(exception.Message);
                await messageDialog.ShowAsync();
            }
        }
        private async void Add_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                GraphServiceClient graphClient = await GraphServiceHelper.GetGraphServiceClientAsync();

                if (graphClient != null &&
                    !string.IsNullOrWhiteSpace(_input?.Text))
                {
                    PlannerTask task = new PlannerTask
                    {
                        Title = _input.Text
                    };
                    if (TaskType != TaskTypeAllTasksId && TaskType != TaskTypeClosedTasksId)
                    {
                        task.BucketId = TaskType;
                    }

                    task.PlanId = PlanId;
                    _input.Text = string.Empty;
                    CanAddTask  = false;
                    PlannerTask taskCreated = await graphClient.Planner.Tasks.Request().AddAsync(task);

                    PlannerPlan                 plan          = Plans.FirstOrDefault(s => s.Id == InternalPlanId);
                    PlannerTaskViewModel        taskViewModel = new PlannerTaskViewModel(taskCreated);
                    Dictionary <string, string> buckets       = Buckets.ToDictionary(s => s.Id, s => s.Name);
                    if (plan != null)
                    {
                        taskViewModel.GroupId = plan.Owner;
                    }

                    if (!string.IsNullOrEmpty(taskViewModel.BucketId) && buckets.ContainsKey(taskViewModel.BucketId))
                    {
                        taskViewModel.BucketName = buckets[taskViewModel.BucketId];
                    }

                    if (taskCreated.PlanId == InternalPlanId)
                    {
                        taskViewModel.PropertyChanged += TaskViewModel_PropertyChanged;
                        _allTasks.Add(taskViewModel);
                        Tasks.Insert(0, taskViewModel);
                    }
                }
            }
            catch (Exception exception)
            {
                MessageDialog messageDialog = new MessageDialog(exception.Message);
                await messageDialog.ShowAsync();
            }

            CanAddTask = true;
        }
        private void UpdateCategories(PlannerPlan plan)
        {
            SelectedCategory = null;
            CustomCategoryGroups.Clear();
            var categoryDescriptions = _graphClient.Planner.Plans[plan.Id].Details.Request().GetAsync().Result.CategoryDescriptions;

            System.Reflection.PropertyInfo[] propertyInfos = categoryDescriptions.GetType().GetProperties();
            foreach (System.Reflection.PropertyInfo propertyInfo in propertyInfos)
            {
                if (propertyInfo.PropertyType == typeof(string))
                {
                    string value = (string)propertyInfo.GetValue(categoryDescriptions);
                    CustomCategoryGroups.Add(new CustomCategory(propertyInfo.Name, value, true));
                }
            }
        }
Пример #6
0
        public static async Task <PlannerPlan> AddPlan(string teamId, string title)
        {
            try
            {
                var plan = new PlannerPlan();
                plan.Owner = teamId;
                plan.Title = title;

                var results = await graphClient.Groups[teamId].Planner.Plans.Request()
                              .AddAsync(plan);
                return(results);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error add plan: {ex.Message}");
                return(null);
            }
        }
        /// <summary>
        /// Update the navigation property plans in users
        /// <param name="body"></param>
        /// <param name="requestConfiguration">Configuration for the request such as headers, query parameters, and middleware options.</param>
        /// </summary>
        public RequestInformation CreatePatchRequestInformation(PlannerPlan body, Action <PlannerPlanItemRequestBuilderPatchRequestConfiguration> requestConfiguration = default)
        {
            _ = body ?? throw new ArgumentNullException(nameof(body));
            var requestInfo = new RequestInformation {
                HttpMethod     = Method.PATCH,
                UrlTemplate    = UrlTemplate,
                PathParameters = PathParameters,
            };

            requestInfo.SetContentFromParsable(RequestAdapter, "application/json", body);
            if (requestConfiguration != null)
            {
                var requestConfig = new PlannerPlanItemRequestBuilderPatchRequestConfiguration();
                requestConfiguration.Invoke(requestConfig);
                requestInfo.AddRequestOptions(requestConfig.Options);
                requestInfo.AddHeaders(requestConfig.Headers);
            }
            return(requestInfo);
        }
        /// <summary>
        /// Use this API to create a new plannerPlan.
        /// </summary>
        /// <param name="groupId">The group's ID (team) to create the plannerPlan into.</param>
        /// <returns>If successful, this method returns 201 Created response code and plannerPlan object in the response body. In case of errors, see HTTP status codes.</returns>
        public async Task CreatePlannerPlan(string groupId)
        {
            // C# 8.0 Preview 2 feature.
            using var cs = this.GetCodeSection();

            if (string.IsNullOrWhiteSpace(groupId))
            {
                cs.Warning(Constants.MESSAGE_WARNING_NULLARGUMENTS);
                return;
            }

            var plannerPlan = new PlannerPlan()
            {
                Id = groupId
            };
            var plannerPlanContent = JsonConvert.SerializeObject(plannerPlan);

            try
            {
                HttpResponseMessage httpResponseMessage = null;
                var retry = new RetryWithExponentialBackoff <HttpResponseMessage>();
                await retry.RunAsync(
                    async() =>
                {
                    httpResponseMessage = await HttpClient.PostAsync(O365Settings.MsGraphBetaEndpoint + "/planner/plans",
                                                                     new StringContent(plannerPlanContent, Encoding.UTF8, "application/json"));
                    return(httpResponseMessage);
                });

                if (!httpResponseMessage.IsSuccessStatusCode)
                {
                    var ex = new HttpRequestException(Constants.EXCEPTION_HTTPREQUEST + $" Status Code: {httpResponseMessage.StatusCode}.");
                    cs.Exception(ex);
                    throw ex;
                }
            }
            catch (Exception ex)
            {
                cs.Exception(ex);
                throw;
            }
        }
        private async Task CreatePlanSDK(MyPlan myPlan, string groupId)
        {
            try
            {
                var graphServiceClient = await GetGraphServiceAsync();

                var planToCreate = new PlannerPlan
                {
                    Title = myPlan.title,
                    Owner = groupId
                };
                //reqPlan.Owner = myPlan.owner;

                await graphServiceClient.Planner.Plans.Request().AddAsync(planToCreate);
            }
            catch (Exception el)
            {
                el.ToString();
            }
        }
        public async Task UpdatePlanSDK(MyPlan myPlan)
        {
            try
            {
                var graphServiceClient = await GetGraphServiceAsync();

                var reqPlan = await graphServiceClient.Planner.Plans[myPlan.id].Request().GetAsync();

                string etag = reqPlan.GetEtag();
                var    plan = new PlannerPlan
                {
                    Title = myPlan.title
                };
                //reqPlan.Owner = myPlan.owner;

                await graphServiceClient.Planner.Plans[reqPlan.Id].Request().Header("If-Match", etag).Header("Prefer", "return=representation").UpdateAsync(plan);
            }
            catch (Exception el)
            {
                el.ToString();
            }
        }
Пример #11
0
        public static async Task <TeamsTab> AddPlannerTab(string teamId, string channelId, string title)
        {
            PlannerPlan plan   = null;
            TeamsTab    newTab = null;

            try
            {
                plan       = new PlannerPlan();
                plan.Owner = teamId;
                plan.Title = title;

                plan = await graphClient.Planner.Plans.Request()
                       .AddAsync(plan);
            }

            catch (ServiceException ex)
            {
                Console.WriteLine($"Error add plan: {ex.Message}");
                plan = null;
            }

            if (plan != null)
            {
                TeamsPlannerTab plannerTab = new TeamsPlannerTab(title, plan.Id);
                newTab = await graphClient.Teams[teamId].Channels[channelId].Tabs.Request().AddAsync(plannerTab);
                //using (HttpClient httpClient = new HttpClient())
                //{
                //    TeamsPlannerTab plannerTab = new TeamsPlannerTab("Plan Gamma2", plan.Id);
                //    var resp = await httpClient.PostAsJson(
                //        $"https://graph.microsoft.com/beta/teams/{teamId}/channels/{channelId}/tabs",
                //        plannerTab,
                //        graphClient.AuthenticationProvider as IAuthenticationProvider2);
                //    newTab = await resp.Content.ReadAsJsonAsync<TeamsTab>();
                //}
            }

            return(newTab);
        }
Пример #12
0
        private static async Task <PlannerTask> CreatePlanner(GraphServiceClient graphClient, string groupId, Conversation conversation, User me)
        {
            string taskTitle = $"{DateTime.Now.ToString("yyyyMMddHHmmss")}-{conversation.Topic}";

            PlannerPlan plan = await GetPlannerPlanAsync(graphClient, groupId, "visitor intake");

            string bucketId = await GetBucketIdAsync(graphClient, plan, "LobbyIntake");

            var newTask = new PlannerTask()
            {
                PlanId = plan.Id,
                ConversationThreadId = conversation.Id,
                BucketId             = bucketId,
                Title = taskTitle
            };

            newTask.Assignments = new PlannerAssignments();
            newTask.Assignments.AddAssignee(me.Id); //Assign the current logged in user

            var createdTask = await graphClient.Planner.Tasks.Request().AddAsync(newTask);

            return(createdTask);
        }
Пример #13
0
        private static async Task <string> GetBucketIdAsync(GraphServiceClient graphClient, PlannerPlan plan, string bucketName)
        {
            //Note: Buckets does not support $filter, so need to use linq
            var planBuckets = await graphClient.Planner
                              .Plans[plan.Id]
                              .Buckets
                              .Request()
                              .GetAsync();

            return(planBuckets.FirstOrDefault(bucket => bucket.Name == bucketName).Id);
        }
Пример #14
0
        public static async Task <PlannerPlan> UpdatePlanAsync(HttpClient httpClient, string accessToken, PlannerPlan plan, string title)
        {
            var stringContent = new StringContent(JsonSerializer.Serialize(new { title }));

            stringContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
            var responseMessage = await GraphHelper.PatchAsync(httpClient, accessToken, stringContent, $"v1.0/planner/plans/{plan.Id}", new Dictionary <string, string>() { { "IF-MATCH", plan.ETag } });

            while (responseMessage.StatusCode == System.Net.HttpStatusCode.PreconditionFailed)
            {
                // retrieve the plan again
                plan = await GraphHelper.GetAsync <PlannerPlan>(httpClient, $"v1.0/planner/plans/{plan.Id}", accessToken);

                responseMessage = await GraphHelper.PatchAsync(httpClient, accessToken, stringContent, $"v1.0/planner/plans/{plan.Id}", new Dictionary <string, string>() { { "IF-MATCH", plan.ETag } });
            }
            if (responseMessage.IsSuccessStatusCode)
            {
                var responseContent = await responseMessage.Content.ReadAsStringAsync();

                return(JsonSerializer.Deserialize <PlannerPlan>(responseContent));
            }
            return(null);
        }
Пример #15
0
 public PlannerPlanPipeBind(PlannerPlan plan)
 {
     _plan = plan;
 }
 private void UpdateBuckets(PlannerPlan plan)
 {
     SelectedBucket = null;
     PlannerBuckets = _graphClient.Planner.Plans[plan.Id].Buckets.Request().GetAsync().Result.ToList();
     var categoryDescriptions = _graphClient.Planner.Plans[plan.Id].Details.Request().GetAsync().Result.CategoryDescriptions;
 }
Пример #17
0
        public static PlannerPlans FromModel(PlannerPlan model)
        {
            var vm = Mapper.Map <PlannerPlan, PlannerPlans>(model);

            return(vm);
        }
Пример #18
0
 public async Task <PlannerPlan> CreatePlanAsync(PlannerPlan plan)
 {
     return(await graphClient.Planner.Plans.Request().AddAsync(plan));
 }