private void BuildNumberOfFinishedTasksValues(List<object> xValues, List<object> yValues, DateTime startTime, DateTime endTime, int projectId) { var managerProject = new ProjectUserManager(); var managerTask = new TaskManager(); int count = 0; int doneId = managerTask.GetDoneStateId(); var doneTasks = managerTask.GetTasksForProject(projectId).Where(t => t.State == doneId); foreach (var t in doneTasks) { var dtst = managerTask.GetDoneTaskStateChanges(t.Id); if (dtst.Count == 0) // invalid test data continue; var max = dtst.Max(st => st.Timestamp); var finalStateChange = dtst.SingleOrDefault(st => st.Timestamp == max); if (startTime != DateTime.MinValue && endTime != DateTime.MinValue) { if (finalStateChange.Timestamp >= startTime && finalStateChange.Timestamp <= endTime) count++; } else if (startTime != DateTime.MinValue && endTime == DateTime.MinValue) { if (finalStateChange.Timestamp >= startTime) count++; } else if (startTime == DateTime.MinValue && endTime != DateTime.MinValue) { if (finalStateChange.Timestamp <= endTime) count++; } else { count++; } } xValues.Add("Finished Tasks"); yValues.Add(count); }