Example #1
0
        public ResumoQuantitativoHelper CriarResumoQuantitativo(UsuarioAtividadeDTO usuarioAtividade, List <UsuarioAtividadeDTO> usuariosAtividades)
        {
            ResumoQuantitativoHelper detalhe = new ResumoQuantitativoHelper();

            detalhe.IdUsuario = usuarioAtividade.UsuarioInfo.Id;
            detalhe.Login     = usuarioAtividade.UsuarioInfo.Login;

            foreach (var itemAtividade in usuarioAtividade.Atividades)
            {
                //Verifica quantas atividades foram feitas
                bool atividadeTipoTarefa = itemAtividade.Tipo == TipoAtividadeEnum.Tarefa;

                if (atividadeTipoTarefa)
                {
                    detalhe.QuantidadeTarefasConcluidas += 1;
                }
                else
                {
                    detalhe.QuantidadeProblemasConcluidos += 1;
                }

                //Verifica quantas atividades foram feitas e depois reabertas em nome do usuário corrente
                var situacaoFeito = itemAtividade.Historico.FirstOrDefault(x => (x.Situacao == SituacaoAtividadeEnum.Feito || x.Situacao == SituacaoAtividadeEnum.Teste) &&
                                                                           x.UsuarioInfo == usuarioAtividade.UsuarioInfo);

                var situacaoFazendoOuAFazer = itemAtividade.Historico.LastOrDefault(x => x.Situacao == SituacaoAtividadeEnum.Fazendo || x.Situacao == SituacaoAtividadeEnum.Afazer);

                if (situacaoFeito != null && situacaoFazendoOuAFazer != null &&
                    situacaoFeito.Ordem < situacaoFazendoOuAFazer.Ordem)
                {
                    detalhe.QuantidadeAtividadesConcluidasReabertas += 1;
                }

                //Verifica estimativas
                var estimado = itemAtividade.CamposValores.FirstOrDefault(x => x.Campo.Nome == Configuracao.Xml.CampoEstimadoTarefa ||
                                                                          x.Campo.Nome == Configuracao.Xml.CampoEstimadoProblema);

                var realizado = itemAtividade.CamposValores.FirstOrDefault(x => x.Campo.Nome == Configuracao.Xml.CampoRealizadoTarefa ||
                                                                           x.Campo.Nome == Configuracao.Xml.CampoRealizadoProblema);

                if (estimado != null && realizado != null)
                {
                    detalhe.ValorTotalEstimado += estimado.TipoValor == TipoValorCampoEnumDTO.Numero
                        ? Convert.ToDecimal(estimado.Valor)
                        : 0;

                    detalhe.ValorTotalRealizado += realizado.TipoValor == TipoValorCampoEnumDTO.Numero
                        ? Convert.ToDecimal(realizado.Valor)
                        : 0;
                }

                //Verifica se a atividade foi concluida por outro usuário anteriormente
                if (itemAtividade.Historico.Any(x => x.UsuarioInfo != null && x.Situacao == SituacaoAtividadeEnum.Feito && x.UsuarioInfo != usuarioAtividade.UsuarioInfo))
                {
                    detalhe.QuantidadeAtividadesConcluidasQueOutrosFizeram += 1;
                }
            }

            //Verifica informações em relação a atividades de outros ususarios
            foreach (var itemAtividadeOutroUsuario in usuariosAtividades.Where(x => x.UsuarioInfo != usuarioAtividade.UsuarioInfo).SelectMany(x => x.Atividades))
            {
                var hsitoricoComAlteracoesDoUsuarioCorrente = itemAtividadeOutroUsuario.Historico.Where(x => x.UsuarioInfo == usuarioAtividade.UsuarioInfo);

                if (hsitoricoComAlteracoesDoUsuarioCorrente.Any(x => x.Situacao == SituacaoAtividadeEnum.Fazendo))
                {
                    detalhe.QuantidadeAtividadesFazendoQueOutroConcluiu += 1;
                }

                if (hsitoricoComAlteracoesDoUsuarioCorrente.Any(x => x.Situacao == SituacaoAtividadeEnum.Feito || x.Situacao == SituacaoAtividadeEnum.Teste))
                {
                    detalhe.QuantidadeAtividadesFeitasQueOutroConcluiu += 1;
                }
            }

            return(detalhe);
        }
Example #2
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);
        }