예제 #1
0
        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)));
        }
예제 #2
0
        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);
        }
예제 #3
0
        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));
        }
예제 #4
0
        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);
        }