Exemplo n.º 1
0
        private static void CreateBucket(string targetPlanId, Bucket bucket, bool addAssignments, HttpClient httpClient)
        {
            bucket.PlanId = targetPlanId;

            // reset all order hints as the exported values don't work
            bucket.OrderHint = " !";
            var newBucket = GraphResponse <Bucket> .Post("buckets", httpClient, bucket).Result;

            // if we are too quick the created bucket is not available yet, make sure it it there
            Thread.Sleep(5 * 1000);
            var verifyNewBucket = GraphResponse <Bucket> .Get("buckets/" + newBucket.Id, httpClient).Result;

            bucket.Tasks = bucket.Tasks.Reverse().ToArray();
            foreach (PlannerTask task in bucket.Tasks)
            {
                task.PlanId    = targetPlanId;
                task.BucketId  = newBucket.Id;
                task.OrderHint = " !";

                // assignments contain the users assigned to a task
                if (addAssignments)
                {
                    foreach (Assignment assignment in task.Assignments.Values)
                    {
                        assignment.OrderHint = " !";
                    }
                }
                else
                {
                    task.Assignments = new Dictionary <string, Assignment>();
                }
                var newTask = GraphResponse <PlannerTask> .Post("tasks", httpClient, task).Result;

                // remember new task id for next loop
                task.Id = newTask.Id;
            }

            // if we are too quick the created tasks are not available yet
            Thread.Sleep(5 * 1000);

            foreach (PlannerTask task in bucket.Tasks)
            {
                var newTaskDetailsResponse = GraphResponse <TaskDetailResponse> .Get("tasks/" + task.Id + "/details", httpClient).Result;

                foreach (var checklist in task.TaskDetail.Checklist.Values)
                {
                    checklist.OrderHint = " !";
                }
                foreach (var reference in task.TaskDetail.References.Values)
                {
                    // same as order hint
                    reference.PreviewPriority = " !";
                }
                var updatedTaskDetailsResponse = GraphResponse <TaskDetailResponse> .Patch("tasks/" + task.Id + "/details", httpClient, task.TaskDetail, newTaskDetailsResponse.OdataEtag).Result;
            }
        }
Exemplo n.º 2
0
        private static void CreateBucket(string targetPlanId, Bucket bucket, bool addAssignments, HttpClient httpClient)
        {
            bucket.PlanId = targetPlanId;

            // reset all order hints as the exported values don't work
            bucket.OrderHint = " !";
            var newBucket = GraphResponse <Bucket> .Post("buckets", httpClient, bucket).Result;

            // if we are too quick the created bucket is not available yet, make sure it it there
            Thread.Sleep(5 * 1000);
            var verifyNewBucket = GraphResponse <Bucket> .Get("buckets/" + newBucket.Id, httpClient).Result;

            SaveTasks(targetPlanId, newBucket.Id, addAssignments, bucket.Tasks, httpClient);
        }
Exemplo n.º 3
0
        private static void SaveTasks(string targetPlanId, string bucketId, bool addAssignments, IEnumerable <PlannerTask> tasks, HttpClient httpClient)
        {
            var taskList = tasks.Reverse().ToList();

            foreach (PlannerTask task in taskList)
            {
                task.PlanId    = targetPlanId;
                task.BucketId  = bucketId;
                task.OrderHint = " !";

                // assignments contain the users assigned to a task
                if (addAssignments)
                {
                    foreach (Assignment assignment in task.Assignments.Values)
                    {
                        assignment.OrderHint = " !";
                    }
                }
                else
                {
                    task.Assignments = new Dictionary <string, Assignment>();
                }
                var newTask = GraphResponse <PlannerTask> .Post("tasks", httpClient, task).Result;

                // remember new task id for next loop
                task.Id        = newTask.Id;
                task.OrderHint = newTask.OrderHint;
            }

            // if we are too quick the created tasks are not available yet
            Thread.Sleep(5 * 1000);

            foreach (PlannerTask task in taskList)
            {
                var newTaskDetailsResponse = GraphResponse <TaskDetailResponse> .Get("tasks/" + task.Id + "/details", httpClient).Result;

                foreach (var checklist in task.TaskDetail.Checklist.Values)
                {
                    checklist.OrderHint = " !";
                }
                foreach (var reference in task.TaskDetail.References.Values)
                {
                    // same as order hint
                    reference.PreviewPriority = " !";
                }
                var updatedTaskDetailsResponse = GraphResponse <TaskDetailResponse> .Patch("tasks/" + task.Id + "/details", httpClient, task.TaskDetail, newTaskDetailsResponse.OdataEtag).Result;
            }
        }
Exemplo n.º 4
0
        // export a plan and import everything into a new plan
        public static void Import()
        {
            Console.WriteLine("Step 1: Select the plan to export");
            Plan exportedPlan = Export(false);

            Console.WriteLine("Step 2: Select the plan in which you want to import");
            Plan targetPlan = SelectPlan();

            bool addAssignments = Program.GetInput("Do you want to import the assignments (y/n)? This might send email notifications to the assignees. ") == "y";

            using (var httpClient = PreparePlannerClient())
            {
                // buckets and tasks are always added at the beginning, therefore reversing the order when importing, otherwise e.g. the
                // last exported bucket would become the first bucket in the imported plan
                exportedPlan.Buckets = exportedPlan.Buckets.Reverse().ToArray();

                // create buckets and tasks and then set details for the created tasks (can't be done in one step)
                foreach (Bucket bucket in exportedPlan.Buckets)
                {
                    bucket.PlanId = targetPlan.Id;
                    // reset all order hints as the exported values don't work
                    bucket.OrderHint = " !";
                    var newBucket = GraphResponse <Bucket> .Post("buckets", httpClient, bucket).Result;

                    bucket.Tasks = bucket.Tasks.Reverse().ToArray();
                    foreach (PlannerTask task in bucket.Tasks)
                    {
                        task.PlanId    = targetPlan.Id;
                        task.BucketId  = newBucket.Id;
                        task.OrderHint = " !";

                        // assignments contain the users assigned to a task
                        if (addAssignments)
                        {
                            foreach (Assignment assignment in task.Assignments.Values)
                            {
                                assignment.OrderHint = " !";
                            }
                        }
                        else
                        {
                            task.Assignments = new Dictionary <string, Assignment>();
                        }
                        var newTask = GraphResponse <PlannerTask> .Post("tasks", httpClient, task).Result;

                        // remember new task id for next loop
                        task.Id = newTask.Id;
                    }

                    // if we are too quick the created tasks are not available yet
                    Thread.Sleep(2 * 1000);

                    foreach (PlannerTask task in bucket.Tasks)
                    {
                        var newTaskDetailsResponse = GraphResponse <TaskDetailResponse> .Get("tasks/" + task.Id + "/details", httpClient).Result;

                        foreach (var checklist in task.TaskDetail.Checklist.Values)
                        {
                            checklist.OrderHint = " !";
                        }
                        foreach (var reference in task.TaskDetail.References.Values)
                        {
                            // same as order hint
                            reference.PreviewPriority = " !";
                        }
                        var updatedTaskDetailsResponse = GraphResponse <TaskDetailResponse> .Patch("tasks/" + task.Id + "/details", httpClient, task.TaskDetail, newTaskDetailsResponse.OdataEtag).Result;
                    }
                }
            }

            Console.WriteLine("Import is done");
        }