public Sprint EndSprint(int projectId, Sprint sprint) { if (sprint.State != SprintState.ACTIVE) { throw new CheckedException($"Sprint has not been started."); } var date = DateTime.Today; _projectDAO.EndSprint(sprint.Id, date); foreach (var userStory in sprint.UserStories) { bool isFinished = true; foreach (var task in userStory.Tasks) { if (!task.IsApproved) { isFinished = false; _projectDAO.ResetAssignedMember(task.Id); } } _projectDAO.UpdateUserStoryState(userStory.Id, isFinished? UserStoryState.RESOLVED: UserStoryState.BACKLOG); } var newSprint = new Sprint() { Order = sprint.Order + 1, State = SprintState.QUEUING, }; _projectDAO.AddSprint(projectId, newSprint); var project = _projectDAO.GetProjectById(projectId); return(project.Sprints.OrderByDescending(s => s.Order).First()); }