public ActionResult Estatisticas(string nomeProjeto) { if (string.IsNullOrEmpty(nomeProjeto)) { return(Projeto()); } PreencherTempData(nomeProjeto); ProjetoUsuariosAtividadesDTO listaAtividadesUsuario = null; listaAtividadesUsuario = _atividadeService.ConsultarAtividadesConcluidasProProjeto(nomeProjeto); string usuarioLogado = System.Web.HttpContext.Current.User.Identity.Name; var perfilDto = _estatisticaService.ConsultarEstatisticasJogador(listaAtividadesUsuario, usuarioLogado); return(View("Estatisticas", ParseToEstatisticaModel(perfilDto))); }
public UsuarioAtividadeDTO ObterUsuarioSolicitante(ProjetoUsuariosAtividadesDTO projetoUsuarioAtividade, string loginUsuario) { if (!Configuracao.Xml.LoginsDesenvolvedores(projetoUsuarioAtividade.NomeProjeto).Contains(loginUsuario)) { throw new Exception("Usuário não configurado como desenvolvedor"); } if (!Configuracao.Xml.LoginsAtivos(projetoUsuarioAtividade.NomeProjeto).Contains(loginUsuario)) { throw new Exception("Desenvolvedor não está ativo no jogo"); } var usuarioAtividade = projetoUsuarioAtividade.UsuariosAtividades.OrderByDescending(x => x.Atividades.Count) .FirstOrDefault(x => x.UsuarioInfo.Login == loginUsuario); if (usuarioAtividade == null) { throw new Exception("Não foi encontrado usuário nos registros de atividades"); } return(usuarioAtividade); }
public EstatisticaDto ConsultarEstatisticasJogador(ProjetoUsuariosAtividadesDTO projetoUsuarioAtividade, string loginUsuario) { if (!projetoUsuarioAtividade.UsuariosAtividades.Any()) { throw new NullReferenceException("usuariosAtividades"); } if (string.IsNullOrEmpty(loginUsuario)) { throw new NullReferenceException("nomeUsuario"); } var nomeSplited = loginUsuario.Split('\\'); loginUsuario = nomeSplited.Length > 1 ? nomeSplited[1] : loginUsuario; var usuarioAtividade = ObterUsuarioSolicitante(projetoUsuarioAtividade, loginUsuario); var listaresumos = CriarResumosQuantitativos(projetoUsuarioAtividade.UsuariosAtividades); return(ObterProgressoUsuario(listaresumos, usuarioAtividade.UsuarioInfo, projetoUsuarioAtividade.NomeProjeto)); }
private ProjetoUsuariosAtividadesDTO ConverterEntidadesEmAtividadesUsuarioDto(string nomeProjeto, List <WorkItemCoreLatest> workItemsCoreLatest, List <WorkItemCoreWere> workItemsCoreWere, List <WorkItemCustomLatest> workItemsCustomLatest, List <Constant> constants, List <Field> fields) { ProjetoUsuariosAtividadesDTO projetoAtividade = new ProjetoUsuariosAtividadesDTO(nomeProjeto); List <UsuarioAtividadeDTO> usuariosAtividade = new List <UsuarioAtividadeDTO>(); List <UsuarioInfoDTO> usuariosInfo = CriarUsuariosInfoDto(constants); List <CampoDTO> camposDto = CriarListaCampoDtos(fields); List <Task> tasks = new List <Task>(); var workItemLatestTypeGrouped = workItemsCoreLatest.AsParallel().ToLookup(x => x.WorkItemType); var workItemWereTypeGrouped = workItemsCoreWere.AsParallel().ToLookup(x => x.WorkItemType); foreach (var itemUser in usuariosInfo) { UsuarioAtividadeDTO usuarioAtividade = new UsuarioAtividadeDTO { UsuarioInfo = itemUser }; usuariosAtividade.Add(usuarioAtividade); //Apenas tarefas implementadas pelo usuário var tasksCoreLatestDoUser = new List <WorkItemCoreLatest>(); var tasksCoreWereDoUser = new List <WorkItemCoreWere>(); var tasksCustomLatestDoUser = new List <WorkItemCustomLatest>(); if (workItemLatestTypeGrouped.Contains(WorkItemType.Task)) { tasksCoreLatestDoUser = workItemLatestTypeGrouped[WorkItemType.Task].AsParallel().Where(x => x.IdUsuarioPadrao == itemUser.Id).ToList(); tasksCoreWereDoUser = workItemWereTypeGrouped[WorkItemType.Task].AsParallel().Where(x => tasksCoreLatestDoUser.Any( l => l.PartitionId == x.PartitionId && l.DataspaceId == x.DataspaceId && x.Id == l.Id)).ToList(); tasksCustomLatestDoUser = workItemsCustomLatest.AsParallel().Where(x => tasksCoreLatestDoUser.Any( l => l.PartitionId == x.PartitionId && l.DataspaceId == x.DataspaceId && x.Id == l.Id)).ToList(); } //Apenas problemas resolvidos pelo usuário //Obs: No WorkItemCoreLatest o problema esta aprovado, mas assinado para um usuário da equipe de teste o qual não participa da equipe de dev. //Solução: Pegar apenas workitems com situação testing do WorkItemCoreWere, pois a situação de testing está assinado para o usuário de dev no histórico. var bugsCoreLatestDoUser = new List <WorkItemCoreLatest>(); var bugsCoreWereDoUser = new List <WorkItemCoreWere>(); var bugsCustomLatestDoUser = new List <WorkItemCustomLatest>(); if (workItemLatestTypeGrouped.Contains(WorkItemType.Bug)) { var dinamicBugsCoreLatestDoUser = workItemWereTypeGrouped[WorkItemType.Bug].AsParallel().Where(x => x.IdUsuarioPadrao == itemUser.Id && x.State == WorkItemState.Testing).Select(x => new { x.PartitionId, x.DataspaceId, x.Id }).Distinct().ToList(); bugsCoreLatestDoUser = workItemLatestTypeGrouped[WorkItemType.Bug].AsParallel().Where(x => dinamicBugsCoreLatestDoUser.Any( l => l.PartitionId == x.PartitionId && l.DataspaceId == x.DataspaceId && x.Id == l.Id)).ToList(); bugsCoreWereDoUser = workItemWereTypeGrouped[WorkItemType.Bug].AsParallel().Where(x => dinamicBugsCoreLatestDoUser.Any( l => l.PartitionId == x.PartitionId && l.DataspaceId == x.DataspaceId && x.Id == l.Id)).ToList(); bugsCustomLatestDoUser = workItemsCustomLatest.AsParallel().Where(x => dinamicBugsCoreLatestDoUser.Any( l => l.PartitionId == x.PartitionId && l.DataspaceId == x.DataspaceId && l.Id == x.Id)).ToList(); } Task task = new Task(() => { usuarioAtividade.Atividades.AddRange(CriarWorkItemsAtividadeDto(tasksCoreLatestDoUser, tasksCoreWereDoUser, usuariosInfo, tasksCustomLatestDoUser, camposDto)); usuarioAtividade.Atividades.AddRange(CriarWorkItemsBugDto(bugsCoreLatestDoUser, bugsCoreWereDoUser, usuariosInfo, itemUser, bugsCustomLatestDoUser, camposDto)); }); tasks.Add(task); task.Start(); } Task.WaitAll(tasks.ToArray()); projetoAtividade.UsuariosAtividades.AddRange(usuariosAtividade); return(projetoAtividade); }