Ejemplo n.º 1
0
        public async Task <PlannerBucket> AddPlannerBucketAsync(PlannerBucket plannerBucket)
        {
            signalRMessage.sendMessage($"POST: {graphServiceClient.Planner.Buckets.Request().RequestUrl}");
            var response = await graphServiceClient.Planner.Buckets.Request().AddAsync(plannerBucket);

            return(response);
        }
 public PlannerBucket GetBucket(HttpClient httpClient, string accessToken, string planId)
 {
     // first try to get the bucket by id
     if (_bucket != null)
     {
         return(_bucket);
     }
     else
     {
         try
         {
             var buckets = PlannerUtility.GetBucketsAsync(httpClient, accessToken, planId).GetAwaiter().GetResult();
             if (buckets != null)
             {
                 PlannerBucket bucket   = null;
                 var           bucketId = _id ?? _bucket?.Id;
                 if (bucketId != null)
                 {
                     bucket = buckets.FirstOrDefault(b => b.Id == bucketId);
                 }
                 if (bucket == null)
                 {
                     // by name?
                     bucket = buckets.FirstOrDefault(b => b.Name.Equals(_id, StringComparison.OrdinalIgnoreCase));
                 }
                 return(bucket);
             }
         }
         catch (GraphException ex)
         {
             throw new PSArgumentException(ex.Error.Message);
         }
         return(null);
     }
 }
        public async Task <PlannerBucket> CreateBucket(string planId, string bucketName)
        {
            var plannerBucket = new PlannerBucket()
            {
                Name   = bucketName,
                PlanId = planId
            };

            return(await GraphClient.Planner.Buckets.Request().AddAsync(plannerBucket));
        }
        /// <summary>
        /// Use this API to create a new plannerTask.
        /// </summary>
        /// <param name="planId">The plannerplan's ID to create a new plannerTask into.</param>
        /// <param name="bucket"></param>
        /// <param name="sTask"></param>
        /// <returns>If successful, this method returns 201 Created response code and plannerTask object in the response body. In case of errors, see HTTP status codes.</returns>
        private async Task <PlannerTask> CreateTask(string planId, PlannerBucket bucket, PlannerTask sTask)
        {
            // C# 8.0 Preview 2 feature.
            using var cs = this.GetCodeSection();

            if (string.IsNullOrWhiteSpace(planId) ||
                bucket == null ||
                sTask == null)
            {
                cs.Warning(Constants.MESSAGE_WARNING_NULLARGUMENTS);
                return(null);
            }

            dynamic body = new ExpandoObject();

            body.planId        = planId;
            body.bucketId      = bucket.Id;
            body.title         = sTask.Title;
            body.startDateTime = sTask.StartDateTime;
            body.dueDateTime   = sTask.DueDateTime;
            var bodyContent = JsonConvert.SerializeObject(body);

            cs.Debug($"\nBody content:\n-Title: {body.title}\n-Plan Id: {body.planId}");

            PlannerTask newTask;

            try
            {
                HttpResponseMessage httpResponseMessage = null;
                var retry = new RetryWithExponentialBackoff <HttpResponseMessage>();
                await retry.RunAsync(
                    async() =>
                {
                    httpResponseMessage = await HttpClient.PostAsync(
                        new Uri(O365Settings.MsGraphBetaEndpoint + $"/planner/tasks"),
                        new StringContent(bodyContent, 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;
                }
                var httpResultString = httpResponseMessage.Content.ReadAsStringAsync().Result;
                newTask = JsonConvert.DeserializeObject <PlannerTask>(httpResultString);
            }
            catch (Exception ex)
            {
                cs.Exception(ex);
                throw;
            }
            return(newTask);
        }
        private void UpdateTasks(PlannerBucket bucket)
        {
            SelectedTask = null;
            var getPlannerTasks = _graphClient.Planner.Buckets[bucket.Id].Tasks.Request().GetAsync().Result.ToList();

            getPlannerTasks.Insert(0, new PlannerTask()
            {
                Title = _neuAufgabe
            });
            PlannerTasks = getPlannerTasks;
            //zweimal aktualisieren gehts nicht. deswegen hier wird ein Zwischenvariable eingeführt.
            //OnPropertyChanged("PlannerTasks");
        }
 /// <summary>
 /// Create new navigation property to buckets for me
 /// <param name="body"></param>
 /// <param name="requestConfiguration">Configuration for the request such as headers, query parameters, and middleware options.</param>
 /// </summary>
 public RequestInformation CreatePostRequestInformation(PlannerBucket body, Action<BucketsRequestBuilderPostRequestConfiguration> requestConfiguration = default) {
     _ = body ?? throw new ArgumentNullException(nameof(body));
     var requestInfo = new RequestInformation {
         HttpMethod = Method.POST,
         UrlTemplate = UrlTemplate,
         PathParameters = PathParameters,
     };
     requestInfo.SetContentFromParsable(RequestAdapter, "application/json", body);
     if (requestConfiguration != null) {
         var requestConfig = new BucketsRequestBuilderPostRequestConfiguration();
         requestConfiguration.Invoke(requestConfig);
         requestInfo.AddRequestOptions(requestConfig.Options);
         requestInfo.AddHeaders(requestConfig.Headers);
     }
     return requestInfo;
 }
Ejemplo n.º 7
0
    public static async Task <PlannerBucket> AddPlannerBucket(PlannerBucket plannerBucket, string clientId = null)
    {
        var graphClient = GetAuthenticatedClient();

        if (!string.IsNullOrEmpty(clientId))
        {
            var hubContext = GlobalHost.ConnectionManager.GetHubContext <MwHub>();
            hubContext.Clients.Client(clientId).addMessage("POST: " + graphClient.Planner.Buckets.Request().RequestUrl);
        }
        var response = await graphClient
                       .Planner
                       .Buckets
                       .Request()
                       .AddAsync(plannerBucket);

        return(response);
    }
Ejemplo n.º 8
0
        public static PlannerBuckets FromModel(PlannerBucket model)
        {
            var vm = Mapper.Map <PlannerBucket, PlannerBuckets>(model);

            return(vm);
        }
Ejemplo n.º 9
0
        public async System.Threading.Tasks.Task <ActionResult> Import(HttpPostedFileBase file, string PlannerPlan, string clientId)
        {
            SignalRMessage signalR      = new SignalRMessage(clientId);
            GraphPlanner   graphPlanner = new GraphPlanner(clientId);

            try
            {
                // Get current planner object
                var planner = await graphPlanner.GetplannerPlanAsync(PlannerPlan);

                // Count imported tasks
                int importedTasksCounter = 0;

                // Get uploaded json
                BinaryReader b       = new BinaryReader(file.InputStream);
                byte[]       binData = b.ReadBytes(file.ContentLength);
                string       result  = Encoding.UTF8.GetString(binData);

                JsonReader reader = new JsonTextReader(new StringReader(result));
                // Do not parse datetime values
                reader.DateParseHandling    = DateParseHandling.None;
                reader.DateTimeZoneHandling = DateTimeZoneHandling.Unspecified;
                JObject trelloBoard = JObject.Load(reader);

                // Get trello lists
                ArrayList bucketsToCreate = new ArrayList();

                foreach (JToken list in trelloBoard.SelectToken("lists"))
                {
                    string bucketName = (string)list["name"];
                    // check if list was archived
                    bool isOpen = !(bool)list["closed"];

                    if (!bucketsToCreate.Contains(bucketName) && isOpen)
                    {
                        bucketsToCreate.Add(bucketName);
                    }
                }

                // Get existing planner buckets
                IEnumerable <PlannerBucket> plannerBuckets = await graphPlanner.GetPlannerBucketsAsync(PlannerPlan);

                // Create planner bucket if not exists
                foreach (string bucket in bucketsToCreate)
                {
                    try
                    {
                        if (!plannerBuckets.ToList().Where(p => p.Name == bucket).Any())
                        {
                            PlannerBucket plannerBucket = new PlannerBucket
                            {
                                Name   = bucket,
                                PlanId = PlannerPlan
                            };

                            var reponse = await graphPlanner.AddPlannerBucketAsync(plannerBucket);
                        }
                    }
                    catch
                    {
                    }
                }

                // Get available planner buckets
                plannerBuckets = await graphPlanner.GetPlannerBucketsAsync(PlannerPlan);

                // create tasks
                foreach (JToken task in trelloBoard.SelectToken("cards"))
                {
                    try
                    {
                        // Get name of the trello list which will become a planner bucket
                        string trelloId = (string)task["idList"];
                        string name     = (string)trelloBoard.SelectToken($"$.lists[?(@.id == '{trelloId}')]")["name"];
                        // Check if task is in an archived list --> won't be imported
                        bool isInArchivedList = (bool)trelloBoard.SelectToken($"$.lists[?(@.id == '{trelloId}')]")["closed"];

                        PlannerTask plannerTask = new PlannerTask
                        {
                            PlanId = PlannerPlan,
                            Title  = (string)task["name"],
                        };

                        if (isInArchivedList)
                        {
                            signalR.sendMessage("Discarding task because stored in an archived list: '" + plannerTask.Title + "'");
                        }
                        else
                        {
                            try
                            {
                                // Get bucketId to store tasks
                                string bucketId = plannerBuckets.Where(p => p.Name.Equals(name)).First().Id;
                                plannerTask.BucketId = bucketId;
                            }
                            catch
                            {
                            }

                            // Get completed
                            bool isClosed = bool.Parse((string)task["closed"]);

                            if (isClosed)
                            {
                                plannerTask.PercentComplete = 100;
                            }

                            // Get due
                            string dueDateTime = (string)task["due"];

                            if (!string.IsNullOrEmpty(dueDateTime))
                            {
                                plannerTask.DueDateTime = DateTimeOffset.Parse(dueDateTime);
                            }

                            // Get assigned user
                            try
                            {
                                JToken[] assignedToId = task.SelectTokens("idMembers[*]").ToArray();

                                plannerTask.Assignments = new PlannerAssignments();

                                // workaround: https://github.com/nicolonsky/ModernWorkplaceConcierge/issues/75#issuecomment-821622465
                                plannerTask.Assignments.ODataType = null;

                                foreach (JToken currentUser in assignedToId)
                                {
                                    if (!string.IsNullOrEmpty((string)currentUser))
                                    {
                                        string assignedToname = (string)trelloBoard.SelectToken($"$.members[?(@.id == '{(string)currentUser}')]")["fullName"];

                                        User user = await GraphHelper.GetUser(assignedToname);

                                        plannerTask.Assignments.AddAssignee(user.Id);
                                    }
                                }
                            }
                            catch
                            {
                            }

                            // Add the task
                            var request = await graphPlanner.AddPlannerTaskAsync(plannerTask);

                            signalR.sendMessage("Successfully imported task '" + request.Title + "'");

                            importedTasksCounter++;

                            // Add task details like description and attachments

                            JToken[] attachments     = task.SelectTokens("attachments[*]").ToArray();
                            string   taskDescription = (string)task["desc"];

                            if (!string.IsNullOrEmpty(taskDescription) || attachments.Count() > 0)
                            {
                                PlannerTaskDetails plannerTaskDetails = new PlannerTaskDetails();

                                if (!string.IsNullOrEmpty(taskDescription))
                                {
                                    plannerTaskDetails.Description = taskDescription;
                                }

                                plannerTaskDetails.References = new PlannerExternalReferences();

                                foreach (JToken attachment in attachments)
                                {
                                    string attachmentUrl  = attachment.Value <string>("url");
                                    string attachmentName = attachment.Value <string>("name");

                                    if (!string.IsNullOrEmpty(attachmentUrl))
                                    {
                                        try
                                        {
                                            plannerTaskDetails.References.AddReference(attachmentUrl, attachmentName);
                                        }
                                        catch
                                        {
                                        }
                                    }
                                }

                                try
                                {
                                    plannerTaskDetails.Checklist = new PlannerChecklistItems();

                                    JToken[] checklists = task.SelectTokens("idChecklists[*]").ToArray();

                                    foreach (JToken checklist in checklists)
                                    {
                                        JToken[] checklistItems = trelloBoard.SelectTokens($"$.checklists[?(@.id == '{(string)checklist}')].checkItems[*].name").ToArray();

                                        int checklistCount = 0;

                                        foreach (JToken checklistItem in checklistItems)
                                        {
                                            string checklistItemName = (string)checklistItem;

                                            // truncate string because checklist items are limited to 100 characters
                                            if (checklistItemName.Length >= 100)
                                            {
                                                signalR.sendMessage("Truncating checklist item: '" + checklistItemName + "' on task: '" + plannerTask.Title + "'. The maximum length in Planner is 100 characters!");
                                                checklistItemName = checklistItemName.Substring(0, 100);
                                            }

                                            if (!(checklistCount >= 20))
                                            {
                                                plannerTaskDetails.Checklist.AddChecklistItem(checklistItemName);
                                            }
                                            else
                                            {
                                                signalR.sendMessage("Discarding checklist item: '" + checklistItemName + "' on task: '" + plannerTask.Title + "' because Planner limit's each card to 20 checklist items!");
                                            }

                                            checklistCount++;
                                        }
                                    }
                                }
                                catch (Exception e)
                                {
                                    signalR.sendMessage("Error: " + e.Message);
                                }

                                var response = await graphPlanner.AddPlannerTaskDetailsAsync(plannerTaskDetails, request.Id);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        signalR.sendMessage("Error: " + e.Message);
                    }
                }

                signalR.sendMessage("Success imported: " + importedTasksCounter + " tasks to planner: " + planner.Title);
            }
            catch (Exception e)
            {
                signalR.sendMessage("Error: " + e.Message);
            }

            signalR.sendMessage("Done#!");
            return(new HttpStatusCodeResult(204));
        }
 public PlannerBucketPipeBind(PlannerBucket bucket)
 {
     _bucket = bucket;
 }
Ejemplo n.º 11
0
 public async Task <PlannerBucket> CreateBucketAsync(PlannerBucket bucket)
 {
     return(await graphClient.Planner.Buckets.Request().AddAsync(bucket));
 }