public ActionResult Reports(int projectId) { var project = _dataManager.FindProjectById(projectId); if (project == null) { return(HttpNotFound()); } TopContributorsReportBuilder builder = new TopContributorsReportBuilder(_dataManager); List <UserContribution> contributionList = builder.CalculateUserContributions(project); List <UserContributionViewModel> viewModels = new List <UserContributionViewModel>(); contributionList.ForEach(contribution => viewModels.Add(Mapper.Map <UserContributionViewModel>(contribution))); TopContributorsReportViewModel topContributorsReportViewModel = new TopContributorsReportViewModel() { ProjectName = project.Name, ProjectId = project.Id, UserContributionList = viewModels }; List <SprintStatusModel> sprintStatusModelList = new List <SprintStatusModel>(); SprintStatusReportBuilder statusReportBuilder = new SprintStatusReportBuilder(_dataManager); project.SprintList.ForEach(sprint => { SprintStatusModel sprintStatusModel = statusReportBuilder.BuildSprintStatus(sprint.Id); sprintStatusModelList.Add(sprintStatusModel); }); List <SprintStatusReportViewModel> sprintStatusReportViewModelList = Mapper.Map <List <SprintStatusReportViewModel> >(sprintStatusModelList); OverrallReportViewModel model = new OverrallReportViewModel() { TopContributorsReportViewModel = topContributorsReportViewModel, SprintStatusReportViewList = sprintStatusReportViewModelList }; return(View("Reports/Reports", model)); }
public SprintStatusModel BuildSprintStatus(int sprintId) { SprintModel sprint = _dataManager.FindSprintById(sprintId); var taskDificultyLevels = _dataManager.TaskDificultyLevels; var userList = _dataManager.UserList; var tasklist = _dataManager.TaskList.Where(task => task.SprintId == sprint.Id).ToList(); int overallEffortEstimation = 0; int overallWorkEffort = 0; List <TaskStatusModel> taskStatusModelList = new List <TaskStatusModel>(); tasklist.ForEach(task => { try { TaskStatusModel model = BuildTaskStatus(task, taskDificultyLevels, userList); overallEffortEstimation += model.EffortEstimation; overallWorkEffort += model.WorkEffort; taskStatusModelList.Add(model); } catch (Exception e) { Console.WriteLine("Failed to calculate task status for task {0} {1} due to :{2}", task.Id, task.Name, e.Message); } }); int totalNumberOfTasks = taskStatusModelList.Count; int numberOfFinishedTasks = 0; taskStatusModelList.ForEach(task => { if (task.Status.Equals(TaskState.Finished)) { numberOfFinishedTasks++; } }); int percentageOfCompletion = 0; try { percentageOfCompletion = numberOfFinishedTasks * 100 / totalNumberOfTasks; } catch (Exception) { //Devided by zero exception } SprintStatusModel sprintStatusModel = new SprintStatusModel() { Id = sprint.Id, Name = sprint.Name, TargetDate = sprint.TargetDate, PercentageOfCompletion = percentageOfCompletion, OverallEffortEstimation = overallEffortEstimation, OverallWorkEffort = overallWorkEffort, TaskStatusList = taskStatusModelList }; return(sprintStatusModel); }