コード例 #1
0
ファイル: Missao.cs プロジェクト: lincoln-alves/sgus
        public virtual bool UsuarioConcluiu(UsuarioTrilha matricula)
        {
            try
            {
                var solucoesSebrae =
                    ListaItemTrilha.Where(
                        x => x.Usuario == null && x.Missao.PontoSebrae.TrilhaNivel.ID == matricula.TrilhaNivel.ID)
                    .AsQueryable();

                if (!solucoesSebrae.Any())
                {
                    return(false);
                }

                var retorno = solucoesSebrae.All(
                    it =>
                    it.ObterStatusParticipacoesItemTrilha(matricula) == enumStatusParticipacaoItemTrilha.Aprovado);

                return(retorno);
            }
            catch (Exception)
            {
                return(false);
            }
        }
コード例 #2
0
 public ItemTrilhaAvaliacao(string resenha, int avaliacao, UsuarioTrilha usuarioTrilha, ItemTrilha itemTrilha)
 {
     Resenha       = resenha;
     Avaliacao     = avaliacao;
     UsuarioTrilha = usuarioTrilha;
     ItemTrilha    = itemTrilha;
 }
コード例 #3
0
        /// <summary>
        /// Retorna true caso o usuário já tenha avaliado o item trilha em questão
        /// </summary>
        /// <param name="usuario"></param>
        /// <returns></returns>
        public virtual bool ChecarAvaliacao(UsuarioTrilha usuario)
        {
            if (usuario != null)
            {
                return(Avaliacoes.Any(x => x.UsuarioTrilha.ID == usuario.ID));
            }

            return(false);
        }
コード例 #4
0
        public virtual string ObterTexto(Trilha trilha, UsuarioTrilha matricula, LogLider logLider = null,
                                         ItemTrilha solucaoSebrae      = null, Missao missao = null, PontoSebrae pontoSebrae = null, string corPin = null,
                                         TrilhaTutorial trilhaTutorial = null)
        {
            try
            {
                // Caso tenha um tutorial vinculado
                if (Tipo == enumTipoMensagemGuia.Tutorial && trilhaTutorial != null)
                {
                    var tutorial = Tutoriais.FirstOrDefault(x => x.ID == trilhaTutorial.ID);

                    if (tutorial != null && !string.IsNullOrEmpty(tutorial.Conteudo))
                    {
                        return(tutorial.Conteudo);
                    }
                }

                // Para cada momento, precisa obter os dados personalizados de acordo com a necessidade.
                string texto;

                switch (ID)
                {
                // Esses cases aqui são os que não precisam concatenar nenhum dado. Se isso mudar um dia,
                // tem que mudar aqui.
                case enumMomento.PrimeiroAcessoMapa:
                case enumMomento.PrimeiroAcessoMochila:
                case enumMomento.PrimeiraTentativaCambio:
                case enumMomento.PossuirMoedasProvaFinal:
                case enumMomento.PrimeiroAcessoCriacaoSolucaoTrilheiro:
                    texto = Texto;
                    break;

                case enumMomento.PrimeiroAcessoLoja:
                    if (pontoSebrae == null)
                    {
                        throw new Exception("Ponto Sebrae é obrigatório.");
                    }

                    texto = Texto.Replace("#NOME_PONTO_SEBRAE", pontoSebrae.NomeExibicao);

                    break;

                case enumMomento.PrimeiroLiderLojaUltimoAcesso:
                case enumMomento.AlteracaoLiderLojaUltimoAcesso:
                    if (logLider == null || logLider.Lider == null || logLider.Tempo == null)
                    {
                        texto = Texto;
                        break;
                    }

                    texto = string.Format(Texto, logLider.Lider.Usuario.Nome,
                                          logLider.Tempo != null ? logLider.Lider.ObterTempoConclusaoFormatado(logLider.Tempo) : "0s");

                    if (pontoSebrae == null)
                    {
                        throw new Exception("Ponto Sebrae é obrigatório.");
                    }

                    texto = texto.Replace("#NOME_PONTO_SEBRAE", pontoSebrae.NomeExibicao);
                    break;

                case enumMomento.PrimeiraConclusaoSolucaoSebrae:
                    if (solucaoSebrae == null)
                    {
                        throw new Exception("Solução Sebrae é obrigatória.");
                    }

                    texto = string.Format(Texto, solucaoSebrae.Tipo.Nome, solucaoSebrae.Moedas ?? 0,
                                          solucaoSebrae.Missao.PontoSebrae.TrilhaNivel.QuantidadeMoedasProvaFinal ?? 0);

                    texto = texto.Replace("#NOME_SOLUCAO_SEBRAE", solucaoSebrae.Nome);
                    break;

                // A mensagem é a mesma para a primeira e as demais missões concluídas. Se isso mudar um dia,
                // tem que mudar aqui.
                case enumMomento.PrimeiraConclusaoMissao:
                case enumMomento.DemaisConclusoesMissao:
                    if (missao == null)
                    {
                        throw new Exception("Missão é obrigatória.");
                    }

                    texto = Texto.Replace("#NOME_PONTO_SEBRAE", missao.Nome);
                    break;

                // Os cases abaixo estão juntos porque o dado concatenado é idêntico nos dois casos. Se isso
                // mudar um dia, tem que mudar aqui.
                case enumMomento.ConclusoesTodasSolucoesLoja:
                case enumMomento.ConcluirMetadeSolucoesLoja:
                    if (solucaoSebrae == null)
                    {
                        throw new Exception("Solução Sebrae é obrigatória.");
                    }

                    if (pontoSebrae == null)
                    {
                        throw new Exception("Ponto Sebrae é obrigatório.");
                    }

                    texto = Texto.Replace("#NOME_PONTO_SEBRAE", pontoSebrae.NomeExibicao);
                    break;

                case enumMomento.EvoluirPin:
                    texto = string.Format(Texto, corPin);
                    break;

                case enumMomento.DemaisConclusoesSolucaoSebrae:
                    if (solucaoSebrae == null)
                    {
                        throw new Exception("Solução Sebrae é obrigatória.");
                    }

                    if (pontoSebrae == null)
                    {
                        throw new Exception("Ponto Sebrae é obrigatório.");
                    }

                    texto = string.Format(Texto, solucaoSebrae.Tipo.Nome, solucaoSebrae.Moedas ?? 0);

                    texto = texto.Replace("#NOME_PONTO_SEBRAE", pontoSebrae.NomeExibicao);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                if (trilha == null)
                {
                    throw new Exception("A trilha é obrigatória para gerar a mensagem da guia");
                }

                if (matricula == null)
                {
                    throw new Exception("A matrícula é obrigatória para gerar a mensagem da guia");
                }

                texto = texto
                        .Replace("#NOME_ALUNO", matricula.Usuario.Nome)
                        .Replace("#NOME_TRILHA", trilha.Nome)
                        .Replace("#NOME_NIVEL", matricula.TrilhaNivel.Nome)
                        .Replace("#DATA_MATRICULA", matricula.DataInicio.ToShortDateString())
                        .Replace("#DATA_LIMITE", matricula.DataLimite.ToShortDateString());

                return(texto);
            }
            catch (Exception ex)
            {
                // ReSharper disable once PossibleIntendedRethrow
                throw ex;
            }
        }
コード例 #5
0
 public virtual bool DeveExibirMensagem(UsuarioTrilha matricula)
 {
     return(ListaUsuarioTrilhaMensagemGuia.All(x => x.UsuarioTrilha.ID != matricula.ID));
 }
コード例 #6
0
ファイル: TrilhaNivel.cs プロジェクト: lincoln-alves/sgus
        public virtual dynamic ObterLideres(UsuarioTrilha matricula, string enderecoSgus)
        {
            var matriculaLideres = ListaPontoSebrae.Select(x => x.ObterLiderDetalhado(enderecoSgus));

            return(matriculaLideres.Where(x => x.Id == matricula.Usuario.ID).ToList());
        }
コード例 #7
0
        public virtual enumStatusParticipacaoItemTrilha?ObterStatusParticipacoesItemTrilha(UsuarioTrilha usuarioTrilha)
        {
            if (Tipo == null)
            {
                return(null);
            }

            switch ((enumTipoItemTrilha)Tipo.ID)
            {
            case enumTipoItemTrilha.Solucoes:
                var participacaoSolucao = ListaItemTrilhaParticipacao
                                          .Where(x => x.UsuarioTrilha.ID == usuarioTrilha.ID && x.MatriculaOferta != null)
                                          .OrderBy(x => x.MatriculaOferta.ID)
                                          .LastOrDefault();

                if (participacaoSolucao == null || participacaoSolucao.MatriculaOferta == null)
                {
                    return(enumStatusParticipacaoItemTrilha.NaoInscrito);
                }

                //CASO UMA MATRICULA N TIVER APROVADA E A OFERTA N ESTIVER MAIS ABERTA, CONSIDERAR COMO NAO INSCRITO
                if (!participacaoSolucao.MatriculaOferta.IsAprovado() && !participacaoSolucao.MatriculaOferta.Oferta.IsPrazoConclusao())
                {
                    return(enumStatusParticipacaoItemTrilha.NaoInscrito);
                }

                if (participacaoSolucao.MatriculaOferta.StatusMatricula == enumStatusMatricula.Abandono)
                {
                    return(enumStatusParticipacaoItemTrilha.Abandono);
                }

                if (participacaoSolucao.Autorizado != true && participacaoSolucao.MatriculaOferta.MatriculaTurma.Any(x => x.Turma.DataFinal.HasValue && x.Turma.DataFinal.Value <= DateTime.Now.Date))
                {
                    return(enumStatusParticipacaoItemTrilha.Reprovado);
                }

                if (participacaoSolucao.MatriculaOferta.StatusMatricula == enumStatusMatricula.Inscrito)
                {
                    return(enumStatusParticipacaoItemTrilha.EmAndamento);
                }

                if (participacaoSolucao.Autorizado != true)
                {
                    return(enumStatusParticipacaoItemTrilha.EmAndamento);
                }

                return(enumStatusParticipacaoItemTrilha.Aprovado);

            case enumTipoItemTrilha.Discursiva:
                var participacoes =
                    ListaItemTrilhaParticipacao.Where(itp => itp.UsuarioTrilha.ID == usuarioTrilha.ID)
                    .ToList();

                if (!participacoes.Any())
                {
                    return(enumStatusParticipacaoItemTrilha.NaoInscrito);
                }

                if (participacoes.Any(x => x.Autorizado == true))
                {
                    return(enumStatusParticipacaoItemTrilha.Aprovado);
                }

                var ultimaParticipacao = participacoes.LastOrDefault();

                if (ultimaParticipacao != null &&
                    ultimaParticipacao.TipoParticipacao == enumTipoParticipacaoTrilha.ParticipacaoTrilheiro)
                {
                    return(enumStatusParticipacaoItemTrilha.Pendente);
                }

                var ultimaParticipacaoTrilheiro =
                    participacoes.LastOrDefault(
                        x => x.TipoParticipacao == enumTipoParticipacaoTrilha.ParticipacaoTrilheiro);

                // Se chegou aqui, a última participação pode ser do monitor, então busca a última participação
                // do monitor e verifica se ela exista e foi autorizada.
                if (ultimaParticipacao != null && ultimaParticipacaoTrilheiro != null &&
                    ultimaParticipacao.TipoParticipacao == enumTipoParticipacaoTrilha.InteracaoMonitor &&
                    ultimaParticipacaoTrilheiro.Autorizado == false)
                {
                    return(enumStatusParticipacaoItemTrilha.Revisar);
                }

                return(enumStatusParticipacaoItemTrilha.NaoInscrito);

            case enumTipoItemTrilha.Jogo:
            case enumTipoItemTrilha.Atividade:
                // Se for atividade, somente a última participação é que interessa.
                var participacao =
                    ListaItemTrilhaParticipacao.LastOrDefault(x => x.UsuarioTrilha.ID == usuarioTrilha.ID);

                if (participacao == null)
                {
                    return(enumStatusParticipacaoItemTrilha.NaoInscrito);
                }

                if (participacao.Autorizado == true)
                {
                    return(enumStatusParticipacaoItemTrilha.Aprovado);
                }

                return(enumStatusParticipacaoItemTrilha.EmAndamento);

            case enumTipoItemTrilha.ConheciGame:
                return(enumStatusParticipacaoItemTrilha.EmAndamento);
            }

            return(null);
        }
コード例 #8
0
 public virtual bool UsuarioConcluiu(UsuarioTrilha matricula)
 {
     return
         (ListaItemTrilha.Where(x => x.PodeExibir() && x.Usuario == null && x.Missao.PontoSebrae.TrilhaNivel.ID == matricula.ID).All(
              x => x.ObterStatusParticipacoesItemTrilha(matricula) == enumStatusParticipacaoItemTrilha.Aprovado));
 }