public List <string> CriarSugestoes(ProgressoDto progressoDto, bool houveReabertas, bool houvePerdidas, int qtdParticipantes)
        {
            List <string> lista = new List <string>();

            if (progressoDto.Posicao == qtdParticipantes)
            {
                lista.Add("Você está na ultima colocação. Precisamos melhorar esse quadro.");
            }

            switch (progressoDto.Posicao)
            {
            case 2:
                lista.Add("A primeira posição está bem a sua frente. Continue com o bom trabalho e suba mais degraus.");
                break;

            case 3:
                lista.Add("O pódio é seu. Continue com o bom trabalho e suba mais degraus.");
                break;

            case 4:
                lista.Add("Você está perto do pódio. Continue com o bom trabalho e suba mais degraus.");
                break;

            default:
                break;
            }


            if (!progressoDto.Emblemas.Any())
            {
                lista.Add("Além de ganhar pontos extras, o emblema o diferencia dos demais jogadores em algum aspecto. Tente atender os critérios.");
            }

            if (!progressoDto.Premios.Any())
            {
                lista.Add("Atenda as expectativas. Conquiste os prêmios definidos e ganhe pontos extras.");
            }

            if (houveReabertas)
            {
                lista.Add("Você teve várias atividades reabertas e isso faz com que você não alcance a pontuação máxima. Faça mais testes para ter certeza que as concluiu antes de fechá-las.");
            }

            if (houvePerdidas)
            {
                lista.Add("Após concluir as atividades, as mesmas foram reabertas e outro jogador as fechou. Preste mais atenção para não perder os pontos.");
            }

            return(lista);
        }
        private ProgressoModel ParseToProgressoModel(ProgressoDto dto)
        {
            ProgressoModel model = new ProgressoModel();

            model.Nome      = dto.Nome;
            model.Login     = dto.Login;
            model.Pontuacao = dto.Pontuacao;
            model.Posicao   = dto.Posicao;

            model.ImagemByte = dto.Imagem;

            model.Sugestoes = dto.Sugestoes;

            model.PremioTarefa   = dto.Premios.Any(x => x == PremioEnum.Tarefa);
            model.PremioProblema = dto.Premios.Any(x => x == PremioEnum.Problema);

            model.EmblemaAjudante   = dto.Emblemas.Any(x => x == EmblemaEnum.Ajudante);
            model.EmblemaCerteiro   = dto.Emblemas.Any(x => x == EmblemaEnum.Certeiro);
            model.EmblemaHalter     = dto.Emblemas.Any(x => x == EmblemaEnum.Halterofilista);
            model.EmblemaSuporte    = dto.Emblemas.Any(x => x == EmblemaEnum.Suporte);
            model.EmblemaResolvedor = dto.Emblemas.Any(x => x == EmblemaEnum.Resolvedor);

            return(model);
        }
        private ProgressoDto ObterProgressoUsuario(List <ResumoQuantitativoHelper> resumosUsuarios, UsuarioInfoDTO usuarioInfo, string nomeProjeto)
        {
            var resumosUsuariosAtivos = resumosUsuarios.Where(
                x => Configuracao.Xml.LoginsAtivos(nomeProjeto).Contains(x.Login)).ToList();

            var resumoSuporte  = ObterQuemAtendeCriterioPorEmblema(resumosUsuariosAtivos, EmblemaEnum.Suporte);
            var resumoHalter   = ObterQuemAtendeCriterioPorEmblema(resumosUsuariosAtivos, EmblemaEnum.Halterofilista);
            var resumoCerteiro = ObterQuemAtendeCriterioPorEmblema(resumosUsuariosAtivos, EmblemaEnum.Certeiro);
            var resumoAjudante = ObterQuemAtendeCriterioPorEmblema(resumosUsuariosAtivos, EmblemaEnum.Ajudante);
            var resumoSabio    = ObterQuemAtendeCriterioPorEmblema(resumosUsuariosAtivos, EmblemaEnum.Resolvedor);

            var dicUsuarioResumoPontuacao = ObterPontuacoes(resumosUsuariosAtivos, resumoSuporte, resumoHalter,
                                                            resumoCerteiro, resumoAjudante, resumoSabio);

            int posicao = 0;

            foreach (var itemDicUsuarioResumo in dicUsuarioResumoPontuacao.OrderByDescending(x => x.Value))
            {
                posicao += 1;

                var resumo = itemDicUsuarioResumo.Key;

                if (resumo.IdUsuario != usuarioInfo.Id)
                {
                    continue;
                }

                int pontuacao = itemDicUsuarioResumo.Value;

                ProgressoDto p = new ProgressoDto();
                p.Nome      = usuarioInfo.Nome;
                p.Login     = usuarioInfo.Login;
                p.Pontuacao = pontuacao;
                p.Posicao   = posicao;
                p.Imagem    = usuarioInfo.Imagem;

                if (resumo.QuantidadeTarefasConcluidas >= Configuracao.Xml.QuantidadePremioTarefa)
                {
                    p.Premios.Add(PremioEnum.Tarefa);
                }
                if (resumo.QuantidadeProblemasConcluidos >= Configuracao.Xml.QuantidadePremioProblema)
                {
                    p.Premios.Add(PremioEnum.Problema);
                }

                if (resumo == resumoSuporte)
                {
                    p.Emblemas.Add(EmblemaEnum.Suporte);
                }
                if (resumo == resumoHalter)
                {
                    p.Emblemas.Add(EmblemaEnum.Halterofilista);
                }
                if (resumo == resumoCerteiro)
                {
                    p.Emblemas.Add(EmblemaEnum.Certeiro);
                }
                if (resumo == resumoAjudante)
                {
                    p.Emblemas.Add(EmblemaEnum.Ajudante);
                }
                if (resumo == resumoSabio)
                {
                    p.Emblemas.Add(EmblemaEnum.Resolvedor);
                }

                bool houveReabertas = resumo.QuantidadeAtividadesConcluidasReabertas != 0;
                bool houvePerdidas  = resumo.QuantidadeAtividadesFeitasQueOutroConcluiu != 0;
                p.Sugestoes = CriarSugestoes(p, houveReabertas, houvePerdidas, resumosUsuariosAtivos.Count);

                return(p);
            }

            throw new Exception("Progresso não encontrado");
        }