private async Task <List <Widget> > GetAllSprints(List <Widget> widgets) { var lists = await clickUpService.GetLists("2339092", "sprint"); // will get all the lists with the name sprint in it like for example: sprint 1, sprint 2, etc... foreach (var item in lists) { var tasks = await clickUpService.GetTasks(item.Key, true); var sprintTasks = new List <TasksPerSprint>(); var closedTickets = tasks.Where(t => t.status.type == "closed"); if (closedTickets != null) { var tasksByUser = closedTickets.GroupBy(t => t.assignees.FirstOrDefault() != null ? t.assignees.FirstOrDefault().username : null); foreach (var userTask in tasksByUser) { var sprintTask = new TasksPerSprint(); sprintTask.Username = userTask.Key; sprintTask.Count = userTask.Count(); int totalTickets = 0; int totalBugs = 0; foreach (var task in userTask) { bool isBug = false; if (task.tags != null && task.tags.Any()) { var bug = task.tags.Where(t => t.name.ToLower() == "bug").FirstOrDefault(); if (bug != null) { isBug = true; } } var scrumPoint = task.custom_fields.Where(c => c.name == "Scrum Points").FirstOrDefault(); if (scrumPoint != null) { var option = scrumPoint.type_config.options.Where(t => t.orderindex == Convert.ToInt32(scrumPoint.value)).FirstOrDefault(); if (option != null) { if (!String.IsNullOrWhiteSpace(option.name)) { if (!isBug) { sprintTask.SprintPoints += Convert.ToInt32(option.name); totalTickets++; } else { sprintTask.BugPoints += Convert.ToInt32(option.name); totalBugs++; } } } } } sprintTask.Tickets = totalTickets; sprintTask.Bugs = totalBugs; sprintTasks.Add(sprintTask); } if (sprintTasks != null && !String.IsNullOrWhiteSpace(item.Value)) { var count = sprintTasks.Sum(t => t.Count); var sprintPoints = sprintTasks.Sum(t => t.SprintPoints); if (count == 0 && sprintPoints == 0) { continue; } sprintTasks.Add(new Models.TasksPerSprint() { Username = "******", Count = count, SprintPoints = sprintPoints }); widgets.Add(new Widget(item.Value) { Content = new TableContent() { Content = sprintTasks }, Column = 6 }); } } } return(widgets); }