private static async Task <int> UpdateItem(int id, float completedWork, float remainingWork) { await CheckSettings(); var update = await AzureDevOps.SaveWorkItemsAsync(new WorkItem { Id = id, Fields = new Fields { CompletedWork = completedWork, RemainingWork = remainingWork } }); ColorConsole.WriteLine(update ? $"{id} updated! ".Green() : $" Could not update {id}! ".Red()); return(0); }
private static async Task <int> GetUserAssignments(IEnumerable <string> users) { await CheckSettings(); if (users?.Any() == true) { foreach (var u in users) { try { var user = Users?.FirstOrDefault(x => (u?.Contains("@") == true && x?.PrincipalName?.Equals(u, StringComparison.OrdinalIgnoreCase) == true) || ((u?.Contains("@") != true) && x?.PrincipalName?.Split('@')?.FirstOrDefault()?.Equals(u, StringComparison.OrdinalIgnoreCase) == true))?.PrincipalName ?? u; var workItems = await AzureDevOps.GetWorkItems(user); var bugs = workItems?.Count(x => x.Fields.WorkItemType.Equals("Bug")).ToString(); var tasks = workItems?.Count(x => x.Fields.WorkItemType.Equals("Task")).ToString(); ColorConsole.WriteLine($"\n{workItems?.FirstOrDefault()?.Fields?.AssignedTo.ToUpperInvariant() ?? user.ToUpperInvariant()}: {workItems?.Count}".Cyan(), " (", "B: ", $" {bugs ?? string.Empty} ".White().OnRed(), " / T: ", $" {tasks ?? string.Empty} ".Black().OnYellow(), ")\n"); var i = 0; workItems?.ForEach(wi => { i++; var createdDate = wi.Fields.CreatedDate.ToString(DateFormat); var elapsed = new StringBuilder($" {createdDate} "); for (var e = 1; e < DateTimeOffset.Now.Subtract(wi.Fields.CreatedDate).Days - createdDate.Length; e++) { elapsed.Append(" "); } var completed = $" {wi.Fields.CompletedWork} (C) ".White().OnDarkGreen(); var remaining = $" {wi.Fields.RemainingWork} (R) ".White().OnDarkRed(); var original = $" {wi.Fields.OriginalEstimate} (O) ".White().OnDarkGray(); var severity = $" {wi.Fields.Severity} ".White().OnDarkMagenta(); var priority = $" P{wi.Fields.Priority} ".White().OnDarkCyan(); var index = i.ToString().PadLeft(2, '0'); var wiType = $"[{index}.{wi.Fields.WorkItemType.FirstOrDefault()}]"; ColorConsole.WriteLine($" ", wiType.EndsWith("B]", StringComparison.OrdinalIgnoreCase) ? wiType.Red() : wiType.Yellow(), " ", $" {wi.Id} ".Black().OnWhite(), $" {wi.Fields.Title}"); ColorConsole.WriteLine(SpacesPrefix, elapsed.ToString().OnRed()); ColorConsole.WriteLine(SpacesPrefix, severity, " / ", priority); ColorConsole.WriteLine(SpacesPrefix, completed, " + ", remaining, " / ", original); Console.WriteLine(); }); } catch (Exception ex) { Log.Error(ex, "Invalid Command"); ColorConsole.WriteLine("Invalid Command: " + ex.Message?.Red() ?? string.Empty); } } } return(0); }
private static async Task CheckSettings() { if (string.IsNullOrWhiteSpace(AzureDevOps.Account) || string.IsNullOrWhiteSpace(AzureDevOps.Project) || string.IsNullOrWhiteSpace(AzureDevOps.Token)) { ColorConsole.WriteLine("\n Please provide Azure DevOps details using the 'setup' option".Black().OnCyan()); var details = Console.ReadLine().Split(' '); Parser.Default .ParseArguments <AddAccountOptions>(details) .MapResult( (AddAccountOptions opts) => AddAccount(opts.Account, opts.Project, opts.Token), errs => HandleParseErrors(errs?.ToList())); } if (Users == null || Users.Count == 0) { Users = await AzureDevOps.GetUsers().ConfigureAwait(false); } }