Ejemplo n.º 1
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                try
                {
                    var manterMensagemGuia = new ManterMensagemGuia();

                    var mensagens = manterMensagemGuia.ObterTodos();

                    if (mensagens.Any())
                    {
                        WebFormHelper.PreencherGrid(mensagens.ToList(), dgvMensagemGuia);
                        pnlMensagemGuia.Visible = true;
                    }
                    else
                    {
                        pnlMensagemGuia.Visible = false;
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Alerta, "Nenhuma Informação Encontrada");
                    }
                }
                catch (AcademicoException ex)
                {
                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, ex.Message);
                }
            }
        }
Ejemplo n.º 2
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                if (Request["Id"] == null)
                {
                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Atencao, "Mensagem inválida. Tente novamente.");

                    Response.Redirect("ListarMensagemGuia.aspx");
                }
                else
                {
                    var mensagemGuia = new ManterMensagemGuia().ObterPorId(int.Parse(Request["Id"]));

                    if (mensagemGuia == null)
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Atencao, "Mensagem inválida. Tente novamente.");

                        Response.Redirect("ListarMensagemGuia.aspx");
                    }
                    else
                    {
                        PreencherCampos(mensagemGuia);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        private DTOMensagemGuia VerificarMoedasProvaFinal(UsuarioTrilha matricula)
        {
            try
            {
                var trilha = new ManterTrilha().ObterTrilhaPorId(matricula.TrilhaNivel.Trilha.ID);

                var momento = enumMomento.PossuirMoedasProvaFinal;

                // Refresh básico da matrícula. Foi mal, mas estamos com pressa.
                matricula = new ManterUsuarioTrilha().ObterPorId(matricula.ID);

                var moedas = new ManterUsuarioTrilhaMoedas().Obter(matricula, enumTipoMoeda.Ouro);

                var minimoMoedas = matricula.TrilhaNivel.QuantidadeMoedasProvaFinal;

                var jaVisualizou =
                    new ManterUsuarioTrilhaMensagemGuia().ObterTodos()
                    .Any(x => x.UsuarioTrilha.ID == matricula.ID && x.MensagemGuia.ID == momento);

                if (minimoMoedas > 0 && moedas >= minimoMoedas && !jaVisualizou)
                {
                    var mensagem = new ManterMensagemGuia().ObterPorId(momento);

                    var visualizacao = RegistrarVisualizacao(matricula, mensagem);

                    return(new DTOMensagemGuia(visualizacao.ID, mensagem.ObterTexto(trilha, matricula)));
                }

                return(null);
            }
            catch (Exception)
            {
                return(null);
            }
        }
Ejemplo n.º 4
0
        private DTOMensagemGuia VerificarPrimeiraConclusaoMissao(UsuarioTrilha matricula, TrilhaNivel nivel)
        {
            // Refresh básico dos objetos. Foi mal, mas estamos com pressa.
            matricula = new ManterUsuarioTrilha().ObterPorId(matricula.ID);

            nivel = new ManterTrilhaNivel().ObterTrilhaNivelPorID(nivel.ID);

            var trilha = new ManterTrilha().ObterTrilhaPorId(matricula.TrilhaNivel.Trilha.ID);

            var momento = enumMomento.PrimeiraConclusaoMissao;

            if (matricula.ListaVisualizacoesMensagemGuia.All(x => x.MensagemGuia.ID != momento))
            {
                var primeiraConclusao =
                    nivel.ObterMissoes()
                    .FirstOrDefault(
                        m =>
                        m.UsuarioConcluiu(matricula)
                        );

                if (primeiraConclusao == null)
                {
                    return(null);
                }

                var mensagem = new ManterMensagemGuia().ObterPorId(momento);

                var visualizacao = RegistrarVisualizacao(matricula, mensagem, missao: primeiraConclusao);

                return(new DTOMensagemGuia(visualizacao.ID, mensagem.ObterTexto(trilha, matricula, missao: primeiraConclusao)));
            }

            return(null);
        }
Ejemplo n.º 5
0
        private List <DTOMensagemGuia> VerificarPrimeiroAcesso(UsuarioTrilha matricula, enumMomento momento,
                                                               PontoSebrae pontoSebrae = null)
        {
            try
            {
                var mensagens = new List <DTOMensagemGuia>();

                // Refresh básico da matrícula. Foi mal, mas estamos com pressa.
                var trilha = new ManterTrilha().ObterTrilhaPorId(matricula.TrilhaNivel.Trilha.ID);

                if (matricula.ListaVisualizacoesMensagemGuia.All(x => x.MensagemGuia.ID != momento))
                {
                    var mensagem = new ManterMensagemGuia().ObterPorId(momento);

                    var visualizacao = RegistrarVisualizacao(matricula, mensagem);

                    // Caso tenha um tutorial vinculado
                    if (mensagem.Tipo == enumTipoMensagemGuia.Tutorial)
                    {
                        mensagens.Add(new DTOMensagemGuia(visualizacao.ID, ObterTutoriaisMensagemGuia(mensagem.Tutoriais)));
                        return(mensagens);
                    }

                    mensagens.Add(new DTOMensagemGuia(visualizacao.ID, mensagem.ObterTexto(trilha, matricula, pontoSebrae: pontoSebrae)));

                    return(mensagens);
                }

                return(null);
            }
            catch
            {
                return(null);
            }
        }
Ejemplo n.º 6
0
        private DTOMensagemGuia VerificarHistoricoLider(UsuarioTrilha matricula, PontoSebrae pontoSebrae)
        {
            var manterLogLider = new ManterLogLider();

            var trilha = new ManterTrilha().ObterTrilhaPorId(matricula.TrilhaNivel.Trilha.ID);

            // Só interessa obter os dois últimos logs.
            var ultimosLogs =
                manterLogLider.ObterPorAlunoPontoSebrae(matricula, pontoSebrae)
                .Where(x => x.PontoSebrae.ID == pontoSebrae.ID)
                .OrderByDescending(x => x.ID)
                .Take(2)
                .ToList();

            // Só interessa se a quantidade de logs for maior que 1. Se houver somente 1 log, não é necessário exibir nenhuma msg.
            if (ultimosLogs.Count() > 1)
            {
                var ultimoLog    = ultimosLogs[0];
                var penultimoLog = ultimosLogs[1];

                // Explicando a lógica complicada abaixo:
                // Se não havia líder no último acesso e agora tem, exibe a msg do primeiro líder.
                // Caso existem líderes nos dois últimos logs, mas sejam líderes diferentes, exibe a msg.
                // Se nenhuma condição for satisfeita, retorna null e escapa da mensagem.
                var momento = penultimoLog.Lider == null && ultimoLog.Lider != null
                    ? enumMomento.PrimeiroLiderLojaUltimoAcesso
                    : (penultimoLog.Lider != null && ultimoLog.Lider != null &&
                       penultimoLog.Lider.ID != ultimoLog.Lider.ID
                        ? (enumMomento?)enumMomento.AlteracaoLiderLojaUltimoAcesso
                        : null);

                // Ragequit.
                if (momento == null)
                {
                    return(null);
                }

                var mensagem = new ManterMensagemGuia().ObterPorId(momento.Value);

                // Verificar se a última visualização da mensagem foi para o líder atual.
                // Só faz sentido ser executado caso o momento seja AlteracaoLiderLojaUltimoAcesso
                if (momento.Value == enumMomento.AlteracaoLiderLojaUltimoAcesso &&
                    mensagem.ListaUsuarioTrilhaMensagemGuia.LastOrDefault(
                        x =>
                        x.UsuarioTrilha.ID == matricula.ID &&
                        x.LogLider != null &&
                        x.LogLider.Lider.ID == penultimoLog.Lider.ID) != null)
                {
                    return(null);
                }

                var visualizacao = RegistrarVisualizacao(matricula, mensagem, ultimoLog);

                return(new DTOMensagemGuia(visualizacao.ID,
                                           mensagem.ObterTexto(trilha, matricula, ultimoLog, pontoSebrae: pontoSebrae)));
            }

            return(null);
        }
Ejemplo n.º 7
0
        private DTOMensagemGuia VerificarConclusaoMetadeSolucoesLoja(UsuarioTrilha matricula, PontoSebrae pontoSebrae)
        {
            try
            {
                var trilha = new ManterTrilha().ObterTrilhaPorId(matricula.TrilhaNivel.Trilha.ID);

                // Refresh básico da loja. Foi mal, mas estamos com pressa.
                pontoSebrae = new ManterPontoSebrae().ObterPorId(pontoSebrae.ID);

                var momento = enumMomento.ConcluirMetadeSolucoesLoja;

                // Refresh básico da matrícula. Foi mal, mas estamos com pressa.
                matricula = new ManterUsuarioTrilha().ObterPorId(matricula.ID);

                var solucoesSebrae = pontoSebrae.ObterItensTrilha();

                if (!new ManterUsuarioTrilhaMensagemGuia().ObterTodos()
                    .Any(
                        x =>
                        x.UsuarioTrilha.ID == matricula.ID &&
                        x.ItemTrilha.Missao.PontoSebrae.ID == pontoSebrae.ID && x.MensagemGuia.ID == momento))
                {
                    var concluidos =
                        solucoesSebrae
                        .Count(
                            x =>
                            x.Usuario == null && x.Missao.PontoSebrae.TrilhaNivel.ID == matricula.TrilhaNivel.ID && x.PodeExibir() &&
                            x.ObterStatusParticipacoesItemTrilha(matricula) == enumStatusParticipacaoItemTrilha.Aprovado && x.Ativo.Value);

                    if (concluidos > 0)
                    {
                        var mensagem = new ManterMensagemGuia().ObterPorId(momento);

                        var ids = solucoesSebrae.Select(x => new { x.ID }).Select(x => x.ID).ToList();

                        var solucaoSebraeMetade =
                            solucoesSebrae
                            .FirstOrDefault(x => ids.IndexOf(x.ID) >= concluidos / 2);

                        var visualizacao = RegistrarVisualizacao(matricula, mensagem, null, solucaoSebraeMetade);

                        return(new DTOMensagemGuia(visualizacao.ID,
                                                   mensagem.ObterTexto(trilha, matricula, solucaoSebrae: solucaoSebraeMetade, pontoSebrae: pontoSebrae)));
                    }
                }

                return(null);
            }
            catch (Exception)
            {
                return(null);
            }
        }
Ejemplo n.º 8
0
        protected void ddlTipo_OnSelectedIndexChanged(object sender, EventArgs e)
        {
            var tipo = int.Parse(ddlTipo.SelectedValue);

            switch (tipo)
            {
            case -1:
                WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Selecione um tipo.");

                break;

            case 0:
                divTexto.Visible    = true;
                divTutorial.Visible = false;

                if (!string.IsNullOrEmpty(Request["Id"]))
                {
                    var mensagemGuia = new ManterMensagemGuia().ObterPorId(int.Parse(Request["Id"]));
                    txtTexto.Text = mensagemGuia.Texto;

                    if (mensagemGuia.HashTags != null)
                    {
                        SetarHashTags(mensagemGuia);

                        divHashTag.Visible = true;
                    }
                    else
                    {
                        divHashTag.Visible = false;
                    }
                }

                break;

            case 1:
                divTexto.Visible    = false;
                txtTexto.Text       = "";
                divTutorial.Visible = true;

                PreencherTutoriais();
                break;

            default:
                break;
            }
        }
Ejemplo n.º 9
0
        private DTOMensagemGuia VerificarPrimeiraTentativaCambio(UsuarioTrilha matricula)
        {
            var trilha = new ManterTrilha().ObterTrilhaPorId(matricula.TrilhaNivel.Trilha.ID);

            var momento = enumMomento.PrimeiraTentativaCambio;

            if (matricula.ListaVisualizacoesMensagemGuia.All(x => x.MensagemGuia.ID != momento))
            {
                MensagemGuia mensagemGuia;

                using (var manterMensagemGuia = new ManterMensagemGuia())
                {
                    mensagemGuia = manterMensagemGuia.ObterPorId(momento);
                }

                var visualizacao = RegistrarVisualizacao(matricula, mensagemGuia);

                return(new DTOMensagemGuia(visualizacao.ID, mensagemGuia.ObterTexto(trilha, matricula)));
            }

            return(null);
        }
Ejemplo n.º 10
0
        private List <DTOMensagemGuia> VerificarDemaisConclusoesSolucaoSebrae(UsuarioTrilha matricula)
        {
            var retorno = new List <DTOMensagemGuia>();

            if (matricula != null && matricula.ID != 0)
            {
                var trilha = new ManterTrilha().ObterTrilhaPorId(matricula.TrilhaNivel.Trilha.ID);

                // Refresh básico da matrícula. Foi mal, mas estamos com pressa.
                matricula = new ManterUsuarioTrilha().ObterPorId(matricula.ID);

                var momento = enumMomento.DemaisConclusoesSolucaoSebrae;

                var visualizacoes =
                    matricula.ListaVisualizacoesMensagemGuia.Where(
                        x => x.MensagemGuia.ID == momento && x.Visualizacao == null && x.ItemTrilha != null).AsQueryable();

                // Contar a partir da segunda aprovação.
                if (matricula.ListaItemTrilhaParticipacao.Count(x => x.Autorizado == true) > 1 && visualizacoes.Any())
                {
                    foreach (var visualizacao in visualizacoes)
                    {
                        var mensagem = new ManterMensagemGuia().ObterPorId(momento);

                        // Salvar visualização dessa mensagem.
                        visualizacao.Visualizacao = DateTime.Now;
                        new ManterUsuarioTrilhaMensagemGuia().Salvar(visualizacao);

                        // Refresh básico da Solução Sebrae. Foi mal, mas estamos com pressa.
                        var solucaoSebrae = new ManterItemTrilha().ObterItemTrilhaPorID(visualizacao.ItemTrilha.ID);

                        retorno.Add(new DTOMensagemGuia(visualizacao.ID,
                                                        mensagem.ObterTexto(trilha, matricula, solucaoSebrae: solucaoSebrae)));
                    }
                }
            }

            return(retorno);
        }
Ejemplo n.º 11
0
        private DTOMensagemGuia VerificarEvolucaoPin(UsuarioTrilha matricula)
        {
            try
            {
                var trilha = new ManterTrilha().ObterTrilhaPorId(matricula.TrilhaNivel.Trilha.ID);

                var manterMatricula = new ManterUsuarioTrilha();
                var momento         = enumMomento.EvoluirPin;

                // Refresh básico da matrícula. Foi mal, mas estamos com pressa.
                matricula = manterMatricula.ObterPorId(matricula.ID);

                var moedasOuro  = new ManterUsuarioTrilhaMoedas().Obter(matricula, enumTipoMoeda.Ouro);
                var moedasNivel = new ManterTrilhaNivel().ObterTotalMoedasSolucoesSebrae(matricula.TrilhaNivel.ID);

                var tipoTrofeu = matricula.ObterTipoTrofeu(moedasOuro, moedasNivel);

                if (tipoTrofeu > matricula.TipoTrofeu && tipoTrofeu != enumTipoTrofeu.Bronze)
                {
                    matricula.TipoTrofeu = tipoTrofeu;
                    manterMatricula.Salvar(matricula);

                    var mensagem = new ManterMensagemGuia().ObterPorId(momento);

                    var visualizacao = RegistrarVisualizacao(matricula, mensagem);

                    return(new DTOMensagemGuia(visualizacao.ID,
                                               mensagem.ObterTexto(trilha, matricula, corPin: tipoTrofeu.ToString())));
                }

                return(null);
            }
            catch (Exception)
            {
                return(null);
            }
        }
Ejemplo n.º 12
0
        private List <DTOMensagemGuia> VerificarDemaisConclusoesMissao(UsuarioTrilha matricula, TrilhaNivel nivel)
        {
            var retorno = new List <DTOMensagemGuia>();

            // Refresh básico da matrícula. Foi mal, mas estamos com pressa.
            matricula = new ManterUsuarioTrilha().ObterPorId(matricula.ID);
            nivel     = new ManterTrilhaNivel().ObterTrilhaNivelPorID(nivel.ID);

            var trilha = new ManterTrilha().ObterTrilhaPorId(matricula.TrilhaNivel.Trilha.ID);

            var idsMissoesConcluidasVisualizadas =
                matricula.ListaVisualizacoesMensagemGuia.Where(x => x.Missao != null).Select(x => x.Missao.ID).ToList();

            var missoes = nivel.ObterMissoes();

            // Obter missões concluídas que o usuário ainda não recebeu a mensagem.
            var missoesConcluidas =
                missoes.Where(
                    x =>
                    !idsMissoesConcluidasVisualizadas.Contains(x.ID))
                .ToList()
                .Where(x => x.UsuarioConcluiu(matricula));

            foreach (var missao in missoesConcluidas)
            {
                var mensagem = new ManterMensagemGuia().ObterPorId(enumMomento.DemaisConclusoesMissao);

                var visualizacao = RegistrarVisualizacao(matricula, mensagem, missao: missao);

                // Salvar visualização dessa mensagem.
                new ManterUsuarioTrilhaMensagemGuia().Salvar(visualizacao);

                retorno.Add(new DTOMensagemGuia(visualizacao.ID, mensagem.ObterTexto(trilha, matricula, missao: missao)));
            }

            return(retorno);
        }
Ejemplo n.º 13
0
        private Dominio.Classes.MensagemGuia ObterObjetoMensagemGuia()
        {
            ValidarMensagemGuia();

            var mensagemGuia = new ManterMensagemGuia().ObterPorId(int.Parse(Request["Id"]));

            mensagemGuia.Tipo = (enumTipoMensagemGuia)int.Parse(ddlTipo.SelectedValue);

            switch (mensagemGuia.Tipo)
            {
            case enumTipoMensagemGuia.Personalizada:
                mensagemGuia.Texto = txtTexto.Text;
                break;

            case enumTipoMensagemGuia.Tutorial:

                var tutorais = new List <Dominio.Classes.TrilhaTutorial>();

                foreach (var tutorial in uclistTutorial.RecuperarIdsSelecionados())
                {
                    tutorais.Add(new Dominio.Classes.TrilhaTutorial
                    {
                        ID = int.Parse(tutorial)
                    });
                }

                mensagemGuia.Tutoriais = tutorais;

                break;

            default:
                break;
            }

            return(mensagemGuia);
        }
Ejemplo n.º 14
0
        private DTOMensagemGuia VerificarPrimeiraConclusaoSolucaoSebrae(UsuarioTrilha matricula)
        {
            if (matricula != null && matricula.ID != 0)
            {
                // Refresh básico da matrícula. Foi mal, mas estamos com pressa.
                matricula = new ManterUsuarioTrilha().ObterPorId(matricula.ID);

                var trilha = new ManterTrilha().ObterTrilhaPorId(matricula.TrilhaNivel.Trilha.ID);

                var momento = enumMomento.PrimeiraConclusaoSolucaoSebrae;

                if (matricula.ListaVisualizacoesMensagemGuia.All(x => x.MensagemGuia.ID != momento))
                {
                    var primeiraConclusao =
                        matricula.ListaItemTrilhaParticipacao.OrderBy(x => x.DataEnvio)
                        .FirstOrDefault(x => x.Autorizado == true);

                    if (primeiraConclusao == null)
                    {
                        return(null);
                    }

                    var mensagem = new ManterMensagemGuia().ObterPorId(momento);

                    var visualizacao = RegistrarVisualizacao(matricula, mensagem);

                    // Refresh básico da Solução Sebrae. Foi mal, mas estamos com pressa.
                    var solucaoSebrae = new ManterItemTrilha().ObterItemTrilhaPorID(primeiraConclusao.ItemTrilha.ID);

                    return(new DTOMensagemGuia(visualizacao.ID, mensagem.ObterTexto(trilha, matricula, solucaoSebrae: solucaoSebrae)));
                }
            }


            return(null);
        }
Ejemplo n.º 15
0
        private void AlterarItemTrilhaParticipacao()
        {
            if (_ItemTrilhaParticipacao != null)
            {
                ItemTrilhaParticipacao itemNovo = new ItemTrilhaParticipacao();
                itemNovo.UsuarioTrilha     = _ItemTrilhaParticipacao.UsuarioTrilha;
                itemNovo.ItemTrilha        = _ItemTrilhaParticipacao.ItemTrilha;
                itemNovo.Monitor           = new BMUsuario().ObterUsuarioLogado();
                itemNovo.TextoParticipacao = txtObservacao.Text;
                itemNovo.Visualizado       = false;
                itemNovo.TipoParticipacao  = enumTipoParticipacaoTrilha.InteracaoMonitor;
                itemNovo.DataEnvio         = DateTime.Now;

                //Anexo
                if (fupldArquivoEnvio != null && fupldArquivoEnvio.PostedFile != null && fupldArquivoEnvio.PostedFile.ContentLength > 0)
                {
                    itemNovo.FileServer = ObterAnexo();
                }
                else
                {
                    itemNovo.FileServer = null;
                }

                try
                {
                    new ManterItemTrilhaParticipacao().CadastrarHistorico(itemNovo, chkEnviarEmail.Checked);
                }
                catch (EmailException)
                {
                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Erro ao enviar o email. Dados salvos com sucesso!");
                }

                try
                {
                    bool?rbautorizado = null;
                    if (rblAutorizadoModal.SelectedValue == "S")
                    {
                        rbautorizado = true;
                    }
                    else if (rblAutorizadoModal.SelectedValue == "N")
                    {
                        rbautorizado = false;
                    }

                    if (rbautorizado != _ItemTrilhaParticipacao.Autorizado)
                    {
                        AlterarStatusItemTrilhaParticipacao(_ItemTrilhaParticipacao, rbautorizado);
                    }


                    // Pega uma nova referência já que a antiga de ItemTrilha não tem a autorização acima
                    itemNovo.ItemTrilha = new ManterItemTrilha().ObterItemTrilhaPorID(itemNovo.ItemTrilha.ID);

                    // Inclui caso seja a data de última participação do usuário, precisa ficar depois do salvamento da autorização
                    new ManterTrilhaTopicoTematicoParticipacao().IncluirUltimaParticipacao(itemNovo.UsuarioTrilha, itemNovo.ItemTrilha);

                    // Se foi aprovado, criar visualização da mensagem para o aluno.
                    if (itemNovo.ItemTrilha.ObterStatusParticipacoesItemTrilha(itemNovo.UsuarioTrilha) ==
                        enumStatusParticipacaoItemTrilha.Aprovado)
                    {
                        var mensagem = new ManterMensagemGuia().ObterPorId(enumMomento.DemaisConclusoesSolucaoSebrae);

                        TrilhaServices.RegistrarVisualizacao(itemNovo.UsuarioTrilha, mensagem, null, itemNovo.ItemTrilha, salvarData: false);
                    }

                    try
                    {
                        MontarPainelSe(_ItemTrilhaParticipacao.ID);
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Sucesso, "Dados alterados com sucesso");
                    }
                    catch (Exception)
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Atencao, "A participação do aluno foi alterada com sucesso, porém não foi possível atualizar a tela. Atualize a tela manualmente.");
                    }
                }
                catch
                {
                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Erro ao atualizar a participação do usuário");
                }
            }
        }
Ejemplo n.º 16
0
        private DTOMensagemGuia VerificarConclusaoTodasSolucoesLoja(UsuarioTrilha matricula, PontoSebrae pontoSebrae)
        {
            try
            {
                var trilha = new ManterTrilha().ObterTrilhaPorId(matricula.TrilhaNivel.Trilha.ID);

                // Refresh básico da loja. Foi mal, mas estamos com pressa.
                pontoSebrae = new ManterPontoSebrae().ObterPorId(pontoSebrae.ID);

                var momento = enumMomento.ConclusoesTodasSolucoesLoja;

                // Refresh básico da matrícula. Foi mal, mas estamos com pressa.
                matricula = new ManterUsuarioTrilha().ObterPorId(matricula.ID);

                if (
                    !new ManterUsuarioTrilhaMensagemGuia().ObterTodos()
                    .Any(
                        x =>
                        x.UsuarioTrilha.ID == matricula.ID &&
                        x.ItemTrilha.Missao.PontoSebrae.ID == pontoSebrae.ID && x.MensagemGuia.ID == momento))
                {
                    var total =
                        pontoSebrae.ObterItensTrilha()
                        .Count(
                            x =>
                            x.Usuario == null && x.Missao.PontoSebrae.TrilhaNivel.ID == matricula.TrilhaNivel.ID &&
                            x.PodeExibir() && x.Ativo.Value);

                    var concluidos =
                        pontoSebrae.ObterItensTrilha()
                        .Count(
                            x =>
                            x.Usuario == null && x.Missao.PontoSebrae.TrilhaNivel.ID == matricula.TrilhaNivel.ID &&
                            x.PodeExibir() &&
                            x.ObterStatusParticipacoesItemTrilha(matricula) == enumStatusParticipacaoItemTrilha.Aprovado && x.Ativo.Value);

                    if (total > 0 && concluidos == total)
                    {
                        var mensagem = new ManterMensagemGuia().ObterPorId(momento);

                        var ultimaSolucaoSebrae =
                            pontoSebrae.ObterItensTrilha()
                            .LastOrDefault(
                                x =>
                                x.Missao.PontoSebrae.ID == pontoSebrae.ID &&
                                x.ListaItemTrilhaParticipacao.Any() &&
                                x.ListaItemTrilhaParticipacao.FirstOrDefault().UsuarioTrilha.ID == matricula.ID);

                        var visualizacao = RegistrarVisualizacao(matricula, mensagem, null, ultimaSolucaoSebrae);

                        return(new DTOMensagemGuia(visualizacao.ID,
                                                   mensagem.ObterTexto(trilha, matricula, solucaoSebrae: ultimaSolucaoSebrae, pontoSebrae: pontoSebrae)));
                    }
                }

                return(null);
            }
            catch
            {
                return(null);
            }
        }