public List <NtWorkItem> GetWorkItems([FromBody] WorkItemInput input) { var ntCloudWorkItems = GetNtWorkItemsInCollection(input, URL_COLLECTION_NTCLOUD, NAME_PROJECT_NTCLOUD); var miscWorkItems = GetNtWorkItemsInCollection(input, URL_COLLECTION_NTSG, NAME_PROJECT_MISCSG); ntCloudWorkItems.AddRange(miscWorkItems); return(ntCloudWorkItems); }
public async Task <IActionResult> PostWorkItem(WorkItemInput input) { var email = input.Email; var bounds = input.MapBounds; var status = await daService.SendWorkItem(bounds, email, this.baseUrl); return(Ok(status)); }
private static Wiql ContructWiqlQuery(WorkItemInput workItemInput) { return(new Wiql() { Query = "Select [State], [Title] [Description]" + "From WorkItems " + $"Where [Work Item Type] = '{workItemInput.WorkItemType}' " + $"And [System.TeamProject] = '{workItemInput.ProjectName}' " + $"And [System.State] <> '{workItemInput.WorkItemStatus}' " + "Order By [State] Asc, [Changed Date] Desc" }); }
private static List <NtWorkItem> GetNtWorkItemsInCollection(WorkItemInput input, string collectionUri, string teamProjectName) { var startDate = DateTime.Parse(input.Start); var endDate = DateTime.Parse(input.End); var witClient = GetWitClient(collectionUri); var workHttpClient = GetWorkHttpClient(collectionUri); var iterations = workHttpClient.GetTeamIterationsAsync(new TeamContext(teamProjectName)).Result; var workItemQueryResult = GetWorkItemQueryResult(teamProjectName, endDate, startDate, input.NtTeamMembers, witClient, iterations, out var workItemLinks); if (!workItemLinks.Any()) { return(new List <NtWorkItem>()); } var ntWorkItems = GetNtWorkItems(workItemLinks, witClient, workItemQueryResult, teamProjectName, iterations, startDate, endDate); return(ntWorkItems); }
private async Task <DialogTurnResult> GetProjectInfo(WaterfallStepContext stepContext, CancellationToken cancellationToken) { if (!(stepContext.Options is RecognizerResult)) { return(await stepContext.EndDialogAsync(null, cancellationToken)); } var recognizerResult = (RecognizerResult)stepContext.Options; var workItemType = Utilities.GetWorkItemType(recognizerResult.Entities); var workItemInput = new WorkItemInput { WorkItemType = workItemType }; var activity = stepContext.Result as Activity; var projectInfo = JObject.Parse(activity.Value.ToString()); workItemInput.ProjectCollection = projectInfo["ProjectCollection"].ToString(); workItemInput.ProjectName = projectInfo["ProjectName"].ToString(); await workItemInputAccessor.SetAsync(stepContext.Context, workItemInput, cancellationToken).ConfigureAwait(false); return(await stepContext.NextAsync(null, cancellationToken)); }
private async Task <DialogTurnResult> FinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) { if (stepContext.Result == null || !(stepContext.Result is Activity) || !(stepContext.Options is RecognizerResult)) { return(await stepContext.EndDialogAsync(null, cancellationToken)); } var recognizerResult = (RecognizerResult)stepContext.Options; // We need to get the result from the LUIS JSON which at every level returns an array. WorkItemInput workItemInput = new WorkItemInput(); Match match = Regex.Match(recognizerResult.Entities["id"].ToString(), @"(\d+)"); if (match.Success) { workItemInput.WorkItemId = match.Groups[1].Value; } try { var authenticatedProfile = await this.authHelper.GetAuthenticatedProfileAsync(stepContext.Context, cancellationToken).ConfigureAwait(false); var activity = stepContext.Result as Activity; var projectInfo = JObject.Parse(activity.Value.ToString()); WorkItem workItem = await vsoApiController.GetWorkItemAsync(workItemInput.WorkItemId, projectInfo["ProjectCollection"].ToString(), projectInfo["ProjectName"].ToString(), authenticatedProfile.Token.AccessToken).ConfigureAwait(false); var replaceInfo = new Dictionary <string, string>(); replaceInfo.Add("{{workitemId}}", workItem.Id.ToString()); replaceInfo.Add("{{workitemUrl}}", $"https://{projectInfo["ProjectCollection"].ToString()}.visualstudio.com/{projectInfo["ProjectName"].ToString()}/_workitems/edit/{workItemInput.WorkItemId}"); if (workItem.Fields.Count == 0) { this.logger.LogWarning($"Work item details are miising for {workItem.Id}"); } if (workItem.Fields.TryGetValue("System.Title", out object title)) { replaceInfo.Add("{{workitemTitle}}", title.ToString()); } if (workItem.Fields.TryGetValue("System.WorkItemType", out object workItemType)) { replaceInfo.Add("{{workitemType}}", workItemType.ToString()); } if (workItem.Fields.TryGetValue("System.State", out object status)) { replaceInfo.Add("{{workitemStatus}}", status.ToString()); } if (workItem.Fields.TryGetValue("System.ChangedDate", out object lastUpdatedDate)) { replaceInfo.Add("{{lastUpdated}}", lastUpdatedDate.ToString()); } var cardText = await CardProvider.GetCardText("WorkItemDetailsCard", replaceInfo).ConfigureAwait(false); var replyActivity = JsonConvert.DeserializeObject <Activity>(cardText); await stepContext.Context.SendActivityAsync(replyActivity, cancellationToken); return(await stepContext.EndDialogAsync(workItemInput, cancellationToken)); } catch (Exception) { await stepContext.Context.SendActivityAsync(MessageFactory.Text($"Sorry something went wrong when fetching {workItemInput.WorkItemId}."), cancellationToken); return(await stepContext.EndDialogAsync(null, cancellationToken)); } }
public async Task <IEnumerable <WorkItem> > GetWorkItemsFromWorkItemInputAsync(string projectCollection, string projectName, WorkItemInput WorkItemInput, string accessToken) { return(await GetWorkItemByQueryAsync(projectCollection, projectName, ContructWiqlQuery(WorkItemInput), accessToken).ConfigureAwait(false)); }
public Dictionary <string, List <NtCollapsedWorkItem> > GetCollapsedWorkItems([FromBody] WorkItemInput input) { var workItems = GetWorkItems(input); var collapsedWorkItems = new Dictionary <string, List <NtCollapsedWorkItem> >(); var workItemDates = new Dictionary <string, Dictionary <string, int> >(); foreach (var workItem in workItems) { if (!collapsedWorkItems.ContainsKey(workItem.AssignedTo)) { collapsedWorkItems[workItem.AssignedTo] = new List <NtCollapsedWorkItem>(); workItemDates[workItem.AssignedTo] = new Dictionary <string, int>(); } var dateKey = workItem.ClosedDate; var task = $"{workItem.TeamProject}-{workItem.Id} {workItem.Title}"; if (!workItemDates[workItem.AssignedTo].ContainsKey(dateKey)) { workItemDates[workItem.AssignedTo][dateKey] = collapsedWorkItems[workItem.AssignedTo].Count; var collapsedWorkItem = new NtCollapsedWorkItem { Employee = workItem.AssignedTo, Date = workItem.ClosedDate, Title = workItem.Title, //DurationDemonstration = 0, DurationDeployment = 0, DurationDesign = 0, DurationDevelopment = 0, DurationDocumentation = 0, DurationMarketing = 0, DurationRequirements = 0, DurationTesting = 0, DurationOthers = 0, DurationNA = 0, DurationTotal = 0, Product = new Dictionary <string, double>(), WorkTasksList = new List <string>() { task } }; collapsedWorkItems[workItem.AssignedTo].Add(collapsedWorkItem); } else { collapsedWorkItems[workItem.AssignedTo][workItemDates[workItem.AssignedTo][dateKey]].Title += ", " + workItem.Title; collapsedWorkItems[workItem.AssignedTo][workItemDates[workItem.AssignedTo][dateKey]].WorkTasksList.Add(task); } var itemIndex = workItemDates[workItem.AssignedTo][dateKey]; if (workItem.Activity.IsNullOrEmpty()) { workItem.Activity = string.Empty; } workItem.Activity = workItem.Activity.Trim().ToLower(); double duration = 0; if (workItem.Duration != null) { duration = workItem.Duration.Value; } var isMisc = workItem.Product.ToUpper().Equals("MISC"); if (!isMisc) { var arr = workItem.Product.Split('.'); workItem.Product = String.Join(".", arr.Take(arr.Length - 1)).Trim(); } if (!collapsedWorkItems[workItem.AssignedTo][itemIndex].Product.ContainsKey(workItem.Product) && !isMisc) { collapsedWorkItems[workItem.AssignedTo][itemIndex].Product[workItem.Product] = 0; } collapsedWorkItems[workItem.AssignedTo][itemIndex].DurationTotal += duration; if (workItem.Activity.Equals(string.Empty)) { collapsedWorkItems[workItem.AssignedTo][itemIndex].DurationNA += duration; } else if (workItem.Activity.Equals("demonstration")) { //collapsedWorkItems[workItem.AssignedTo][itemIndex].DurationDemonstration += duration; collapsedWorkItems[workItem.AssignedTo][itemIndex].DurationMarketing += duration; } else if (workItem.Activity.Equals("deployment")) { if (!isMisc) { collapsedWorkItems[workItem.AssignedTo][itemIndex].Product[workItem.Product] += duration; collapsedWorkItems[workItem.AssignedTo][itemIndex].DurationDeployment += duration; } else { collapsedWorkItems[workItem.AssignedTo][itemIndex].DurationOthers += duration; } } else if (workItem.Activity.Equals("design")) { if (!isMisc) { collapsedWorkItems[workItem.AssignedTo][itemIndex].Product[workItem.Product] += duration; collapsedWorkItems[workItem.AssignedTo][itemIndex].DurationDesign += duration; } else { collapsedWorkItems[workItem.AssignedTo][itemIndex].DurationOthers += duration; } } else if (workItem.Activity.Equals("development")) { if (!isMisc) { collapsedWorkItems[workItem.AssignedTo][itemIndex].Product[workItem.Product] += duration; collapsedWorkItems[workItem.AssignedTo][itemIndex].DurationDevelopment += duration; } else { collapsedWorkItems[workItem.AssignedTo][itemIndex].DurationOthers += duration; } } else if (workItem.Activity.Equals("documentation")) { if (!isMisc) { collapsedWorkItems[workItem.AssignedTo][itemIndex].Product[workItem.Product] += duration; collapsedWorkItems[workItem.AssignedTo][itemIndex].DurationDocumentation += duration; } else { collapsedWorkItems[workItem.AssignedTo][itemIndex].DurationOthers += duration; } } else if (workItem.Activity.Equals("marketing")) { collapsedWorkItems[workItem.AssignedTo][itemIndex].DurationMarketing += duration; } else if (workItem.Activity.Equals("requirements")) { collapsedWorkItems[workItem.AssignedTo][itemIndex].DurationRequirements += duration; } else if (workItem.Activity.Equals("testing")) { collapsedWorkItems[workItem.AssignedTo][itemIndex].DurationTesting += duration; } else if (workItem.Activity.Equals("others")) { collapsedWorkItems[workItem.AssignedTo][itemIndex].DurationOthers += duration; } if (workItem.TeamProject.Trim().ToLower().Replace(" ", "").Equals("miscsg")) { continue; } } return(collapsedWorkItems); }
public Dictionary <string, List <NtWeeklyWorkItem> > GetWeeklyWorkItems([FromBody] WorkItemInput input) { var workItems = GetWorkItems(input); workItems.Sort(CompareWorkItemByDate); var weeklyWorkItems = new Dictionary <string, List <NtWeeklyWorkItem> >(); var workItemStartDates = new Dictionary <string, Dictionary <string, int> >(); foreach (var workItem in workItems) { if (!weeklyWorkItems.ContainsKey(workItem.AssignedTo)) { weeklyWorkItems[workItem.AssignedTo] = new List <NtWeeklyWorkItem>(); workItemStartDates[workItem.AssignedTo] = new Dictionary <string, int>(); } var curDate = DateTime.Parse(workItem.ClosedDate); var startDate = curDate.StartOfWeek(DayOfWeek.Monday); var endDate = curDate.EndOfWeek(DayOfWeek.Monday); var dateKey = startDate.ToString("yyyy MMMM dd"); var task = $"{workItem.TeamProject}-{workItem.Id} {workItem.Title}"; if (!workItemStartDates[workItem.AssignedTo].ContainsKey(dateKey)) { workItemStartDates[workItem.AssignedTo][dateKey] = weeklyWorkItems[workItem.AssignedTo].Count; var weeklyWorkItem = new NtWeeklyWorkItem { Employee = workItem.AssignedTo, WeekStartDate = dateKey, WeekEndDate = endDate.ToString("yyyy MMMM dd"), Title = workItem.Title, //DurationDemonstration = 0, DurationDeployment = 0, DurationDesign = 0, DurationDevelopment = 0, DurationDocumentation = 0, DurationMarketing = 0, DurationRequirements = 0, DurationTesting = 0, DurationOthers = 0, DurationNA = 0, DurationTotal = 0, Product = new Dictionary <string, double>(), WorkTasksList = new List <string>() { task } }; weeklyWorkItems[workItem.AssignedTo].Add(weeklyWorkItem); } else { weeklyWorkItems[workItem.AssignedTo][workItemStartDates[workItem.AssignedTo][dateKey]].Title += ", " + workItem.Title; weeklyWorkItems[workItem.AssignedTo][workItemStartDates[workItem.AssignedTo][dateKey]].WorkTasksList.Add(task); } var itemIndex = workItemStartDates[workItem.AssignedTo][dateKey]; if (workItem.Activity.IsNullOrEmpty()) { workItem.Activity = string.Empty; } workItem.Activity = workItem.Activity.Trim().ToLower(); double duration = 0; if (workItem.Duration != null) { duration = workItem.Duration.Value; } var isMisc = workItem.Product.ToUpper().Equals("MISC"); if (!isMisc && workItem.Product.StartsWith("NtEdge")) { var arr = workItem.Product.Split('.'); workItem.Product = string.Join(".", arr.Take(arr.Length - 1)).Trim(); } if (!weeklyWorkItems[workItem.AssignedTo][itemIndex].Product.ContainsKey(workItem.Product) && !isMisc) { weeklyWorkItems[workItem.AssignedTo][itemIndex].Product[workItem.Product] = 0; } weeklyWorkItems[workItem.AssignedTo][itemIndex].DurationTotal += duration; if (workItem.Activity.Equals(string.Empty)) { weeklyWorkItems[workItem.AssignedTo][itemIndex].DurationNA += duration; } else if (workItem.Activity.Equals("demonstration")) { //collapsedWorkItems[workItem.AssignedTo][itemIndex].DurationDemonstration += duration; weeklyWorkItems[workItem.AssignedTo][itemIndex].DurationMarketing += duration; } else if (workItem.Activity.Equals("deployment")) { if (!isMisc) { weeklyWorkItems[workItem.AssignedTo][itemIndex].Product[workItem.Product] += duration; weeklyWorkItems[workItem.AssignedTo][itemIndex].DurationDeployment += duration; } else { weeklyWorkItems[workItem.AssignedTo][itemIndex].DurationOthers += duration; } } else if (workItem.Activity.Equals("design")) { if (!isMisc) { weeklyWorkItems[workItem.AssignedTo][itemIndex].DurationDesign += duration; weeklyWorkItems[workItem.AssignedTo][itemIndex].Product[workItem.Product] += duration; } else { weeklyWorkItems[workItem.AssignedTo][itemIndex].DurationOthers += duration; } } else if (workItem.Activity.Equals("development")) { if (!isMisc) { weeklyWorkItems[workItem.AssignedTo][itemIndex].Product[workItem.Product] += duration; weeklyWorkItems[workItem.AssignedTo][itemIndex].DurationDevelopment += duration; } else { weeklyWorkItems[workItem.AssignedTo][itemIndex].DurationOthers += duration; } } else if (workItem.Activity.Equals("documentation")) { if (!isMisc) { weeklyWorkItems[workItem.AssignedTo][itemIndex].DurationDocumentation += duration; weeklyWorkItems[workItem.AssignedTo][itemIndex].Product[workItem.Product] += duration; } else { weeklyWorkItems[workItem.AssignedTo][itemIndex].DurationOthers += duration; } } else if (workItem.Activity.Equals("marketing")) { weeklyWorkItems[workItem.AssignedTo][itemIndex].DurationMarketing += duration; } else if (workItem.Activity.Equals("requirements")) { weeklyWorkItems[workItem.AssignedTo][itemIndex].DurationRequirements += duration; } else if (workItem.Activity.Equals("testing")) { weeklyWorkItems[workItem.AssignedTo][itemIndex].DurationTesting += duration; } else if (workItem.Activity.Equals("others")) { weeklyWorkItems[workItem.AssignedTo][itemIndex].DurationOthers += duration; } if (workItem.TeamProject.Trim().ToLower().Replace(" ", "").Equals("miscsg")) { continue; } } return(weeklyWorkItems); }