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); }
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); }