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);
            }
        }
        protected void ddlAtivo_OnSelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlAtivo.SelectedValue == "N" && Request["Id"] != null)
            {
                int id;
                if (int.TryParse(Request["Id"], out id))
                {
                    var pontoSebrae = new ManterPontoSebrae().ObterPorId(id);

                    var itensTrilha = pontoSebrae?.ObterItensTrilha().Where(x => x.Missao != null && x.Usuario == null).ToList();

                    if (itensTrilha != null && itensTrilha.Any())
                    {
                        // Informando total de itens
                        totalItemTrilha.Text     = itensTrilha.Count.ToString();
                        rptItemTrilha.DataSource = itensTrilha;
                        rptItemTrilha.DataBind();

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