Exemple #1
0
        protected string GetRowClass(WorkitemInformationViewModel item)
        {
            if (item.IsBlocked)
            {
                return("table-danger");
            }

            if (item.IsOnHold)
            {
                return("table-warning");
            }

            if (string.Equals(item.State, "active", StringComparison.OrdinalIgnoreCase))
            {
                return("table-primary");
            }

            if (string.Equals(item.State, "new", StringComparison.OrdinalIgnoreCase))
            {
                return("table-secondary");
            }

            if (string.Equals(item.State, "resolved", StringComparison.OrdinalIgnoreCase))
            {
                return("table-success");
            }

            return(string.Empty);
        }
Exemple #2
0
        // TODO: DataSource should not have knowledge on the type specific to reporters!
        public async Task <WorkitemInformationViewModel> GetWorkItemInfo(WorkItemViewModel workItem, IEnumerable <TeamMemberViewModel> team)
        {
            (var estimatedToComplete, var timeSpent) = GetEtaMetric(workItem, team, allowZeroEstimate: true);
            var isInCodeReview = await IsInCodeReview(workItem);

            if (IsResolved(workItem) || (!IsActive(workItem) && !IsNew(workItem)) || !IsAssignedToTeamMember(workItem, team))
            {
                return(null);
            }

            var workItemInfo = new WorkitemInformationViewModel
            {
                Id    = workItem.WorkItemId,
                Title = workItem.Fields[WorkItemTitleField],
                State = workItem.Fields[WorkItemStateField],
                Url   = GetWorkItemUrl(GetProject(workItem), workItem.WorkItemId),

                // Priority = workItem.Fields[prio]
                AssignedTo   = GetUserReference(workItem.Fields[WorkItemAssignedToField]),
                Type         = workItem.Fields[WorkItemTypeField],
                IsBlocked    = ContainsTag(workItem, "blocked"),
                IsOnHold     = ContainsTag(workItem, "onhold"),
                Estimated    = estimatedToComplete,
                Spent        = timeSpent,
                PullRequests = Enumerable.Empty <WorkitemPullRequest>(),
            };

            var pullRequestIds = GetPullRequestIds(workItem);

            if (pullRequestIds != null && pullRequestIds.Any())
            {
                var pullRequests = await _repository.GetAsync <PullRequest>(p => pullRequestIds.Contains(p.PullRequestId));

                workItemInfo.PullRequests = pullRequestIds.Select(pId =>
                {
                    var prInfo = new WorkitemPullRequest {
                        Id = pId
                    };
                    var pr = pullRequests.SingleOrDefault(p => p.PullRequestId == pId);
                    if (pr == null)
                    {
                        return(prInfo);
                    }

                    prInfo.Url        = GetPullRequestUrl(GetProject(workItem), pr.Repository, pId);
                    prInfo.Title      = pr.Title;
                    prInfo.TimeActive = GetPullRequestActiveTime(pr);
                    prInfo.Author     = pr.Author;
                    prInfo.State      = pr.State.ToString();

                    return(prInfo);
                });
            }

            workItemInfo.Warnings = GetWorkitemWarnings(workItemInfo, workItem);

            return(workItemInfo);
        }
Exemple #3
0
        private IEnumerable <string> GetWorkitemWarnings(WorkitemInformationViewModel workItem, WorkItemViewModel workItemVM)
        {
            if (string.Equals(workItem.State, WorkItemStateActive, StringComparison.OrdinalIgnoreCase) && workItem.Estimated == 0)
            {
                yield return("Workitem does not have an estimate");
            }

            if (workItem.Spent / workItem.Estimated > 1.8f)
            {
                yield return("Workitem is delayed");
            }

            var activePrWithNoCodeReview = workItem.PullRequests.Any(p => string.Equals(workItem.State, "Active", StringComparison.OrdinalIgnoreCase)) && ContainsTag(workItemVM, "code review");

            if (activePrWithNoCodeReview)
            {
                yield return("Active Pull Request, but no 'Code Review' tag.");
            }
        }