public void CancelarMatriculaCapacitacao(int idMatriculaCapacitacao, AuthenticationRequest autenticacao)
        {
            MatriculaCapacitacao matriculaCapacitacao = new BMMatriculaCapacitacao().ObterPorId(idMatriculaCapacitacao);

            if (matriculaCapacitacao != null &&
                matriculaCapacitacao.StatusMatricula == enumStatusMatricula.Inscrito)
            {
                TimeSpan diasMatriculados = Convert.ToDateTime(DateTime.Now) - Convert.ToDateTime(matriculaCapacitacao.DataInicio);
                if (diasMatriculados.Days > int.Parse(ConfiguracaoSistemaUtil.ObterInformacoes(enumConfiguracaoSistema.DiasCancelamentoCurso).Registro))
                {
                    //Passou do Limite para cancelamento
                    throw new AcademicoException("O prazo de cancelamento expirou");
                }

                if (matriculaCapacitacao.ListaMatriculaTurmaCapacitacao != null && matriculaCapacitacao.ListaMatriculaTurmaCapacitacao.Count > 0)
                {
                    // Embora esteja em uma lista ele sempre terá somente uma matrícula turma para cada matrícula capacitação por regra de negócio
                    new BMMatriculaTurmaCapacitacao().ExcluirLista(matriculaCapacitacao.ListaMatriculaTurmaCapacitacao);
                    matriculaCapacitacao.ListaMatriculaTurmaCapacitacao.Clear();
                }

                matriculaCapacitacao.DataFim         = DateTime.Now;
                matriculaCapacitacao.StatusMatricula = enumStatusMatricula.CanceladoAluno;
                matriculaCapacitacao.Auditoria       = new Auditoria(autenticacao.Login);
            }
            else
            {
                throw new AcademicoException("Não foi encontrada nenhuma matrícula com cancelamento permitido");
            }

            new BMMatriculaCapacitacao().Salvar(matriculaCapacitacao);
        }
        public string MatriculaCapacitacao(int idUsuario, int idCapacitacao, int idTurma)
        {
            var usuario = new BMUsuario().ObterPorId(idUsuario);

            if (usuario == null)
            {
                throw new AcademicoException("Usuário não localizado na base");
            }

            var capacitacao = new BMCapacitacao().ObterPorId(idCapacitacao);

            if (capacitacao == null)
            {
                throw new AcademicoException("Capacitação não localizado na base");
            }

            var matCap = new BMMatriculaCapacitacao().ObterUsuariosPorCapacitacao(usuario.ID, capacitacao.ID);

            if (matCap.Count > 0)
            {
                throw new AcademicoException("Usuário já matriculado nesta capacitação.");
            }

            var turmaCap = new BMTurmaCapacitacao().ObterPorId(idTurma);

            if (turmaCap == null)
            {
                throw new AcademicoException("Turma não localizada na base");
            }

            var matriculaCapacitacao = new MatriculaCapacitacao {
                Usuario          = usuario,
                Capacitacao      = capacitacao,
                UF               = usuario.UF,
                NivelOcupacional = usuario.NivelOcupacional,
                StatusMatricula  = enumStatusMatricula.Inscrito,
                DataInicio       = DateTime.Today
            };


            new BMMatriculaCapacitacao().Salvar(matriculaCapacitacao);

            var matriculaTurmaCapacitacao = new MatriculaTurmaCapacitacao {
                MatriculaCapacitacao = matriculaCapacitacao,
                TurmaCapacitacao     = turmaCap,
                DataMatricula        = DateTime.Today
            };

            new BMMatriculaTurmaCapacitacao().Salvar(matriculaTurmaCapacitacao);

            return(string.Empty);
        }
Example #3
0
        public void PreencherMatriculas()
        {
            if (ddlCapacitacao.SelectedIndex > 0)
            {
                var bmMatriculaCapacitacao     = new BMMatriculaCapacitacao();
                var listarMatriculaCapacitacao = bmMatriculaCapacitacao.ObterPorCapacitacao(int.Parse(ddlCapacitacao.SelectedValue));

                if (!bmUsuario.PerfilAdministrador())
                {
                    int idUF = bmUsuario.ObterUfLogadoSeGestor();
                    listarMatriculaCapacitacao = listarMatriculaCapacitacao.Where(x => x.UF.ID == idUF).ToList();
                }

                if (listarMatriculaCapacitacao.Count() > 0)
                {
                    pnlMatricula.Visible = true;
                    WebFormHelper.PreencherGrid(listarMatriculaCapacitacao, dgvMatriculaCapacitacao);
                }
            }
        }
        private static bool UsuarioPossuiPendenciaCapacitacaoPrograma(int solucaoId, Usuario usuario,
                                                                      ref DTODisponibilidadeSolucaoEducacional retorno)
        {
            var filtroMatriculaCapacitacao = new MatriculaCapacitacao
            {
                StatusMatricula = enumStatusMatricula.Inscrito,
                Usuario         = usuario
            };

            var listaMatriculaCapacitacao = new BMMatriculaCapacitacao().ObterPorFiltros(filtroMatriculaCapacitacao,
                                                                                         true);

            // Verificar se a capacitação possui pré-capacitações.
            foreach (
                var modNecessario in
                listaMatriculaCapacitacao.Select(
                    matriculaCapacitacao =>
                    new BMModuloSolucaoEducacional().CapacitacaoPossuiSolucao(
                        matriculaCapacitacao.Capacitacao.ID, solucaoId))
                .Where(modSol => modSol != null)
                .Select(modSol => new BMModuloPreRequisito().ListPreRequisitosPorModulo(modSol, usuario.ID))
                .Where(modNecessario => modNecessario.ID != 0))
            {
                retorno.TextoDisponibilidade =
                    string.Format(
                        "Existe uma solução educacional do \"{0}\" da capacitação \"{1}\" do programa \"{2}\" que precisa ser concluída antes que possa ser realizada a inscrição nesse curso. <br /><br /><a href='" +
                        //modNecessario.Capacitacao.Programa.Acesso +
                        "'>Clique aqui</a> para acessar a página do Programa.", modNecessario.Nome,
                        modNecessario.Capacitacao.Nome, modNecessario.Capacitacao.Programa.Nome);

                retorno.CodigoDisponibilidade = (int)enumDisponibilidadeSolucaoEducacional.PossuiPreReqPrograma;

                return(true);
            }

            return(false);
        }
        protected void btnEnviar_Click(object sender, EventArgs e)
        {
            try
            {
                BMMatriculaCapacitacao manterMatriculaCapacitacao = new BMMatriculaCapacitacao();

                MatriculaCapacitacao matriculaCapacitacao = this.ObterObjetoMatriculaCapacitacao();
                manterMatriculaCapacitacao.Salvar(matriculaCapacitacao);

                if (ddlTurmaCapacitacao.SelectedIndex > 0)
                {
                    MatriculaTurmaCapacitacao matriculaTurmaCapacitacao = ObterObjetoMatriculaTurmaCapacitacao(matriculaCapacitacao.ID);
                    new BMMatriculaTurmaCapacitacao().Salvar(matriculaTurmaCapacitacao);
                }

                //Dispara o evento informando que a matricula em uma oferta foi realizada
                if (MatriculouAlunoEmUmaCapacitacao != null)
                {
                    //Obtem as informações da matricula Oferta (inclusive a lista de turmas da oferta)
                    matriculaCapacitacao = manterMatriculaCapacitacao.ObterPorId(matriculaCapacitacao.ID);

                    MatriculouAlunoEmUmaCapacitacao(this, new MatricularAlunoEmUmaCapacitacaoEventArgs(matriculaCapacitacao));
                    ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "myscript", " $('#EdicaoNivel, #modal-background').removeClass('active');", true);
                }

                GerenciarMatriculaCapacitacao gerenciarMatriculaCapacitacao = (GerenciarMatriculaCapacitacao)this.Page;
                gerenciarMatriculaCapacitacao.PreencherMatriculas();

                WebFormHelper.ExibirMensagem(enumTipoMensagem.Sucesso, "Dados cadastrados com sucesso.");
            }
            catch (AcademicoException ex)
            {
                WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, ex.Message);
                return;
            }
        }
Example #6
0
 public ManterMatriculaCapacitacao() : base()
 {
     bmMatriculaCapacitacao = new BMMatriculaCapacitacao();
 }
Example #7
0
        protected void ddlTurma_SelectedIndexChanged(object sender, EventArgs e)
        {
            DropDownList comboTurma = (DropDownList)sender;

            if (comboTurma != null && comboTurma.SelectedItem != null)
            {
                try
                {
                    //Obtém a linha da grid onde a dropdownlist (combo) de oferta, está contida
                    GridViewRow linhadaGrid = (GridViewRow)comboTurma.NamingContainer;

                    if (linhadaGrid != null)
                    {
                        HiddenField            hdfIdMatriculaOferta   = (HiddenField)linhadaGrid.FindControl("hdfIdMatriculaOferta");
                        BMMatriculaCapacitacao bmMatriculaCapacitacao = new BMMatriculaCapacitacao();
                        DropDownList           ddlStatusOferta        = (DropDownList)linhadaGrid.FindControl("ddlStatusOferta");
                        DropDownList           ddlTurma = (DropDownList)linhadaGrid.FindControl("ddlTurma");

                        BMMatriculaTurmaCapacitacao bmMatriculaTurmaCapacitacao = new BMMatriculaTurmaCapacitacao();

                        MatriculaTurmaCapacitacao matriculaTurmaCapacitacao = bmMatriculaTurmaCapacitacao.ObterPorMatriculaCapacitacao(Convert.ToInt32(hdfIdMatriculaOferta.Value)).FirstOrDefault();

                        if (matriculaTurmaCapacitacao == null)
                        {
                            matriculaTurmaCapacitacao = new MatriculaTurmaCapacitacao();
                        }

                        int idTurma = ddlTurma.SelectedIndex > 0 ? int.Parse(ddlTurma.SelectedValue) : 0;

                        if (idTurma > 0 &&
                            (matriculaTurmaCapacitacao.TurmaCapacitacao == null ||
                             matriculaTurmaCapacitacao.TurmaCapacitacao.ID != idTurma))
                        {
                            // Alteração otimizada para não precisar realizar uma consulta por um objeto TurmaCapacitacao.
                            // Em vez disso cria um novo, pois tudo que o NHibernate precisa pra alter o ID no banco
                            // é o ID da TurmaCapacitacao.
                            matriculaTurmaCapacitacao.TurmaCapacitacao = new Dominio.Classes.TurmaCapacitacao
                            {
                                ID = idTurma
                            };

                            if (matriculaTurmaCapacitacao.ID == 0)
                            {
                                matriculaTurmaCapacitacao.DataMatricula        = DateTime.Now;
                                matriculaTurmaCapacitacao.MatriculaCapacitacao =
                                    new BMMatriculaCapacitacao().ObterPorId(Convert.ToInt32(hdfIdMatriculaOferta.Value));
                            }
                            bmMatriculaTurmaCapacitacao.Salvar(matriculaTurmaCapacitacao);
                        }
                        else
                        {
                            bmMatriculaTurmaCapacitacao.Excluir(matriculaTurmaCapacitacao);
                        }
                    }
                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Sucesso, "Dados alterados com sucesso!");
                }
                catch
                {
                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Ocorreu um erro na edição, por favor, tente novamente mais tarde!");
                }
            }
        }
        public IList <MatriculaCapacitacao> ObterPorUsuario(int idUsuario)
        {
            var bmMatriculaCapacitacao = new BMMatriculaCapacitacao();

            return(bmMatriculaCapacitacao.ObterPorUsuario(idUsuario));
        }
Example #9
0
        public DTOAgenda ObterAgenda(int idUsuario, int mes, int ano)
        {
            var listaErros = new List <string>();

            var dataInicioMes = (new DateTime(ano, mes, 1));
            var dataFimMes    = dataInicioMes.AddMonths(1).AddDays(-1);
            var diaSemana     = ((int)DateTime.Now.DayOfWeek);

            if (diaSemana == 0)
            {
                diaSemana = 6;
            }
            else
            {
                diaSemana = diaSemana - 1;
            }

            var diaSemanaInicioMes = (int)dataInicioMes.DayOfWeek;

            if (diaSemanaInicioMes == 0)
            {
                diaSemanaInicioMes = 6;
            }
            else
            {
                diaSemanaInicioMes = diaSemanaInicioMes - 1;
            }
            var      listaEventos         = new List <DTOEventoAgenda>();
            var      manterMatriculaTurma = new ManterMatriculaTurma();
            DateTime?dataInicio           = DateTime.Now.Date;
            DateTime?dataFim = DateTime.Now.Date;
            IList <MatriculaTurma> listaCursoInscritos;
            var anoInicial = DateTime.Now.Year;

            try
            {
                listaCursoInscritos = manterMatriculaTurma.ObterMatriculasInscritas(idUsuario);
            }
            catch (Exception ex)
            {
                listaErros.Add(ex.ToString());
                listaCursoInscritos = new List <MatriculaTurma>();
                //TODO: LOGAR ERROR
                //TODO: MELHORAR TRATAMENTO DE COMO RECUPERAR OS DADOS
            }
            //TODO: MELHORAR pois não achei melhor solução

            try
            {
                foreach (var matriculaTurma in listaCursoInscritos)
                {
                    var data = matriculaTurma.Turma.DataInicio;

                    if (data.Year < anoInicial)
                    {
                        anoInicial = data.Year;
                    }
                    try
                    {
                        data = matriculaTurma.MatriculaOferta.DataSolicitacao.Date > data.Date
                            ? matriculaTurma.MatriculaOferta.DataSolicitacao.Date
                            : data;

                        if (data.Date.Between(dataInicioMes.Date, dataFimMes.Date))
                        {
                            listaEventos.Add(new DTOEventoAgenda
                            {
                                TipoEvento           = (int)enumTipoEventoAgenda.Inicio,
                                Data                 = data.ToString("dd/MM/yyyy"),
                                Nome                 = matriculaTurma.Turma.Oferta.SolucaoEducacional.Nome,
                                IdSolucaoEducacional = matriculaTurma.Turma.Oferta.SolucaoEducacional.ID,
                                IdTurma              = matriculaTurma.Turma.ID,
                                IdOferta             = matriculaTurma.Turma.Oferta.ID,
                                IdMatriculaOferta    = matriculaTurma.MatriculaOferta.ID,
                                IdMatriculaTurma     = matriculaTurma.ID.ToString()
                            });
                        }
                    }
                    catch (Exception ex)
                    {
                        listaErros.Add(ex.ToString());
                    }

                    dataInicio = dataInicio.Value.Date > data.Date ? data.Date : dataInicio;

                    try
                    {
                        data = matriculaTurma.CalcularDataLimite();

                        if (data.Date.Between(dataInicioMes.Date, dataFimMes.Date))
                        {
                            listaEventos.Add(new DTOEventoAgenda
                            {
                                TipoEvento           = (int)enumTipoEventoAgenda.Fim,
                                Data                 = data.ToString("dd/MM/yyyy"),
                                Nome                 = matriculaTurma.Turma.Oferta.SolucaoEducacional.Nome,
                                IdSolucaoEducacional = matriculaTurma.Turma.Oferta.SolucaoEducacional.ID,
                                IdTurma              = matriculaTurma.Turma.ID,
                                IdOferta             = matriculaTurma.Turma.Oferta.ID,
                                IdMatriculaOferta    = matriculaTurma.MatriculaOferta.ID,
                                IdMatriculaTurma     = matriculaTurma.ID.ToString()
                            });
                        }
                    }
                    catch (Exception ex)
                    {
                        listaErros.Add(ex.ToString());
                    }
                    dataFim = dataFim.Value.Date < data.Date ? data.Date : dataFim;
                }
            }
            catch (Exception ex)
            {
                listaErros.Add(ex.ToString());
            }

            try
            {
                var listaUsuarioTrilha =
                    (new BMUsuarioTrilha()).ObterPorUsuario(idUsuario)
                    .Where(p => p.StatusMatricula == enumStatusMatricula.Inscrito)
                    .ToList();
                foreach (var item in listaUsuarioTrilha)
                {
                    var data = item.DataInicio;
                    if (data.Year < anoInicial)
                    {
                        anoInicial = data.Year;
                    }
                    if (data.Date.Between(dataInicioMes.Date, dataFimMes.Date))
                    {
                        listaEventos.Add(new DTOEventoAgenda
                        {
                            TipoEvento           = (int)enumTipoEventoAgenda.Inicio,
                            Data                 = data.ToString("dd/MM/yyyy"),
                            Nome                 = string.Concat(item.TrilhaNivel.Trilha.Nome, " - ", item.TrilhaNivel.Nome),
                            IdSolucaoEducacional = 0,
                            IdTurma              = 0,
                            IdOferta             = 0,
                            IdMatriculaOferta    = 0,
                            IdMatriculaTurma     = item.ID + "000" + item.TrilhaNivel.ID
                        });
                    }
                    data = item.DataFim.HasValue
                        ? item.DataFim.Value
                        : (item.TrilhaNivel.LimiteCancelamento > 0
                            ? item.DataInicio.AddDays(item.TrilhaNivel.LimiteCancelamento)
                            : item.DataInicio.AddDays(item.TrilhaNivel.QuantidadeDiasPrazo));
                    if (data.Date.Between(dataInicioMes.Date, dataFimMes.Date))
                    {
                        listaEventos.Add(new DTOEventoAgenda
                        {
                            TipoEvento           = (int)enumTipoEventoAgenda.Fim,
                            Data                 = data.ToString("dd/MM/yyyy"),
                            Nome                 = string.Concat(item.TrilhaNivel.Trilha.Nome, " - ", item.TrilhaNivel.Nome),
                            IdSolucaoEducacional = 0,
                            IdTurma              = 0,
                            IdOferta             = 0,
                            IdMatriculaOferta    = 0,
                            IdMatriculaTurma     = item.ID + "000" + item.TrilhaNivel.ID
                        });
                    }
                }
            }
            catch (Exception ex)
            {
                listaErros.Add(ex.ToString());
            }

            try
            {
                var listaMatriculaCapacitacao =
                    new BMMatriculaCapacitacao().ObterPorUsuario(idUsuario)
                    .Where(x => x.StatusMatricula.Equals(enumStatusMatricula.Inscrito))
                    .ToList();
                var manterMatCapacitacao = new ManterMatriculaCapacitacaoService();
                var culture = new CultureInfo("pt-BR");
                foreach (var itemHistorico in listaMatriculaCapacitacao)
                {
                    var dtoCapacitacao = manterMatCapacitacao.AprovacoesSolucoesEducacionais(itemHistorico, idUsuario);
                    foreach (var item in dtoCapacitacao.ModulosCapacitacao)
                    {
                        DateTime data;
                        if (!string.IsNullOrEmpty(item.DataInicio))
                        {
                            data = Convert.ToDateTime(item.DataInicio, culture);
                            if (data.Year < anoInicial)
                            {
                                anoInicial = data.Year;
                            }
                            if (data.Date.Between(dataInicioMes.Date, dataFimMes.Date))
                            {
                                listaEventos.Add(new DTOEventoAgenda
                                {
                                    TipoEvento           = (int)enumTipoEventoAgenda.Inicio,
                                    Data                 = data.ToString("dd/MM/yyyy"),
                                    Nome                 = string.Concat(itemHistorico.Capacitacao.Programa.Nome, " - ", item.Nome),
                                    IdSolucaoEducacional = 0,
                                    IdTurma              = 0,
                                    IdOferta             = 0,
                                    IdMatriculaOferta    = 0,
                                    IdMatriculaTurma     =
                                        itemHistorico.ID + itemHistorico.Capacitacao.Programa.ID.ToString() +
                                        itemHistorico.Capacitacao.ID.ToString() + "000" + item.ID
                                });
                            }
                        }
                        if (string.IsNullOrEmpty(item.DataFim))
                        {
                            continue;
                        }
                        data = Convert.ToDateTime(item.DataFim, culture);
                        if (data.Date.Between(dataInicioMes.Date, dataFimMes.Date))
                        {
                            listaEventos.Add(new DTOEventoAgenda
                            {
                                TipoEvento           = (int)enumTipoEventoAgenda.Fim,
                                Data                 = data.ToString("dd/MM/yyyy"),
                                Nome                 = string.Concat(itemHistorico.Capacitacao.Programa.Nome, " - ", item.Nome),
                                IdSolucaoEducacional = 0,
                                IdTurma              = 0,
                                IdOferta             = 0,
                                IdMatriculaOferta    = 0,
                                IdMatriculaTurma     =
                                    itemHistorico.ID + itemHistorico.Capacitacao.Programa.ID.ToString() +
                                    itemHistorico.Capacitacao.ID.ToString() + "000" + item.ID
                            });
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                listaErros.Add(ex.ToString());
            }

            return(new DTOAgenda
            {
                DataAtual = DateTime.Now.ToString("dd/MM/yyyy"),
                DataInicioMes = dataInicioMes.ToString("dd/MM/yyyy"),
                DataFimMes = dataFimMes.ToString("dd/MM/yyyy"),
                DiaSemana = diaSemana.ToString(),
                DiaSemanaInicioMes = diaSemanaInicioMes.ToString(),
                Eventos = listaEventos.OrderByDescending(x => x.TipoEvento).ToList(),
                AnoInicial = anoInicial,
                AnoFinal = dataFim.Value.Year,
                Erros = listaErros
            });
        }
Example #10
0
        private void PreencherDTOComInformacoesDaMatriculaPrograma(int id_Usuario, List <DTOItemMeusCursos> resultado)
        {
            DTOItemMeusCursos dtoItemMeusCursos = null;

            try
            {
                IList <MatriculaCapacitacao> ListaMatriculaCapacitacao = new BMMatriculaCapacitacao().ObterPorUsuario(id_Usuario).Where(x => x.StatusMatricula.Equals(enumStatusMatricula.Inscrito)).OrderBy(x => x.Capacitacao.Programa.ID).ToList();

                var manterMatCapacitacao = new ManterMatriculaCapacitacaoService();

                int    prevPrograma       = 0;
                int    cont               = 0;
                double totalAprovacoesSol = 0;
                double totalSol           = 0;

                foreach (var itemHistorico in ListaMatriculaCapacitacao)
                {
                    BMCapacitacao bmCapacitacao = new BMCapacitacao();

                    // PROGRAMAS - Mudou o programa cria um novo item pai
                    if (prevPrograma != itemHistorico.Capacitacao.Programa.ID)
                    {
                        totalAprovacoesSol = 0;
                        totalSol           = 0;

                        dtoItemMeusCursos                   = new DTOItemMeusCursos();
                        dtoItemMeusCursos.ID                = itemHistorico.Capacitacao.Programa.ID;
                        dtoItemMeusCursos.NomeSolucao       = itemHistorico.Capacitacao.Programa.Nome;
                        dtoItemMeusCursos.Fornecedor        = Constantes.Sebrae;
                        dtoItemMeusCursos.TextoApresentacao = itemHistorico.Capacitacao.Programa.Apresentacao;
                        dtoItemMeusCursos.DataInicio        = itemHistorico.Capacitacao.DataInicio.ToString("dd/MM/yyyy");
                        dtoItemMeusCursos.DataLimite        = itemHistorico.Capacitacao.DataFim.HasValue ? itemHistorico.Capacitacao.DataFim.Value.ToString("dd/MM/yyyy") : "";
                        dtoItemMeusCursos.Tipo              = Constantes.ProgramaUC;
                        dtoItemMeusCursos.CargaHoraria      = Constantes.NaoDefinido;
                        dtoItemMeusCursos.IdProgramaPortal  = itemHistorico.Capacitacao.Programa.IdNodePortal;
                        dtoItemMeusCursos.LinkAcesso        = "";//!string.IsNullOrEmpty(itemHistorico.Capacitacao.Programa.Acesso) ? itemHistorico.Capacitacao.Programa.Acesso : "";
                    }

                    DTOCapacitacao dtoCapacitacao = manterMatCapacitacao.AprovacoesSolucoesEducacionais(itemHistorico, id_Usuario);

                    dtoItemMeusCursos.CapacitacoesPrograma.Add(dtoCapacitacao);

                    string[] totais = dtoCapacitacao.TextoConclusaoCapacitacao.Split('/');

                    totalAprovacoesSol += float.Parse(totais[0]);
                    totalSol           += float.Parse(totais[1]);

                    //dtoItemMeusCursos.LinkSemAcesso.Add(new DTOLinkSemAcesso { MotivoLinkSemAcesso = string.Format("Este curso será iniciado no dia {0}", exibirData.ToString("dd/MM/yyyy")) });

                    // Se o próximo programa for diferente ou for o último insere no DTO Pai os filhos
                    if (ListaMatriculaCapacitacao.Count - 1 == cont || itemHistorico.Capacitacao.Programa.ID != ListaMatriculaCapacitacao[cont + 1].Capacitacao.Programa.ID)
                    {
                        dtoItemMeusCursos.PorcentagemConlusaoPrograma = (int)(Math.Round(totalAprovacoesSol / totalSol, 2) * 100);
                        dtoItemMeusCursos.TextoConclusaoPrograma      = totalAprovacoesSol + "/" + totalSol;
                        resultado.Add(dtoItemMeusCursos);
                    }

                    // Atualiza a referência ao passado
                    prevPrograma = itemHistorico.Capacitacao.Programa.ID;

                    cont++;
                }
            }
            catch (Exception ex)
            {
                ErroUtil.Instancia.TratarErro(ex);
            }
        }
        /// <summary>
        /// Método usado para gerar o certificado de cursos normais e de trilha
        /// </summary>
        /// <param name="pTexto"></param>
        /// <param name="pIdMatriculaOferta"></param>
        /// <param name="pIdUsuarioTrilha"></param>
        /// <returns></returns>
        public static string FormatarTextoCertificadoTrilhaTurma(string pTexto, int pIdMatriculaPrograma,
                                                                 int pIdMatriculaOferta, int pIdUsuarioTrilha)
        {
            var tI = new CultureInfo("pt-Br", true).TextInfo;

            if (pIdMatriculaPrograma > 0)
            {
                var matriculaCapacitacao = new BMMatriculaCapacitacao().ObterPorId(pIdMatriculaPrograma);
                if (matriculaCapacitacao != null)
                {
                    var nomeUsuario     = tI.ToTitleCase(matriculaCapacitacao.Usuario.Nome.ToLower());
                    var dataInicioTurma = string.Empty;
                    var dataFimTurma    = string.Empty;

                    if (matriculaCapacitacao.ListaMatriculaTurmaCapacitacao != null &&
                        matriculaCapacitacao.ListaMatriculaTurmaCapacitacao.Any())
                    {
                        if (matriculaCapacitacao.ListaMatriculaTurmaCapacitacao.FirstOrDefault().TurmaCapacitacao !=
                            null &&
                            matriculaCapacitacao.ListaMatriculaTurmaCapacitacao.FirstOrDefault()
                            .TurmaCapacitacao.DataInicio.HasValue)
                        {
                            dataInicioTurma =
                                matriculaCapacitacao.ListaMatriculaTurmaCapacitacao.FirstOrDefault()
                                .TurmaCapacitacao.DataInicio.Value.ToString("dd/MM/yyyy");
                        }
                        if (matriculaCapacitacao.ListaMatriculaTurmaCapacitacao.FirstOrDefault().TurmaCapacitacao !=
                            null &&
                            matriculaCapacitacao.ListaMatriculaTurmaCapacitacao.FirstOrDefault()
                            .TurmaCapacitacao.DataFim.HasValue)
                        {
                            dataFimTurma =
                                matriculaCapacitacao.ListaMatriculaTurmaCapacitacao.FirstOrDefault()
                                .TurmaCapacitacao.DataFim.Value.ToString("dd/MM/yyyy");
                        }
                    }

                    pTexto = pTexto
                             .Replace("#CODIGOCERTIFICADO", matriculaCapacitacao.CDCertificado)
                             .Replace("#DATEGERACAOCERTIFICADO",
                                      matriculaCapacitacao.DataGeracaoCertificado.HasValue
                                ? matriculaCapacitacao.DataGeracaoCertificado.Value.ToString("dd/MM/yyyy")
                                : string.Empty)
                             .Replace("#DATAGERACAOCERTIFICADO",
                                      matriculaCapacitacao.DataGeracaoCertificado.HasValue
                                ? matriculaCapacitacao.DataGeracaoCertificado.Value.ToString("dd/MM/yyyy")
                                : string.Empty)
                             .Replace("#DATASISTEMAEXTENSO", DateTime.Now.ToLongDateString().ToString())
                             .Replace("#DATASISTEMA", DateTime.Now.ToString("dd/MM/yyyy"))
                             .Replace("#DATAHORASISTEMA", DateTime.Now.ToString("dd/MM/yyyy HH:mm"))
                             .Replace("#ALUNO", nomeUsuario)
                             .Replace("#CPF", WebFormHelper.FormatarCPF(matriculaCapacitacao.Usuario.CPF))
                             .Replace("#EMAILALUNO", matriculaCapacitacao.Usuario.Email)
                             .Replace("#OFERTA", matriculaCapacitacao.Capacitacao.Nome)
                             .Replace("#NOMEPROGRAMA", matriculaCapacitacao.Capacitacao.Programa.Nome)
                             .Replace("#DATAINICIOOFERTA", matriculaCapacitacao.Capacitacao.DataInicio.ToString("dd/MM/yyyy"))
                             .Replace("#DATAFIMOFERTA",
                                      matriculaCapacitacao.Capacitacao.DataFim.HasValue
                                ? matriculaCapacitacao.Capacitacao.DataFim.Value.ToString("dd/MM/yyyy")
                                : string.Empty)
                             .Replace("#DATAMATRICULA",
                                      matriculaCapacitacao.ListaMatriculaTurmaCapacitacao != null
                                ? matriculaCapacitacao.ListaMatriculaTurmaCapacitacao.FirstOrDefault()
                                      .DataMatricula.ToString("dd/MM/yyyy")
                                : string.Empty);

                    var matriculaTurmaCapacitacao = matriculaCapacitacao.ListaMatriculaTurmaCapacitacao != null
                        ? matriculaCapacitacao.ListaMatriculaTurmaCapacitacao.FirstOrDefault()
                        : null;

                    var dataTermino = matriculaTurmaCapacitacao != null &&
                                      matriculaTurmaCapacitacao.MatriculaCapacitacao != null &&
                                      matriculaTurmaCapacitacao.MatriculaCapacitacao.DataFim.HasValue
                        ? matriculaTurmaCapacitacao.MatriculaCapacitacao.DataFim.Value.ToString("dd/MM/yyyy")
                        : "";

                    pTexto = pTexto.Replace("#DATATERMINO", dataTermino);

                    pTexto.Replace("#TURMA",
                                   matriculaCapacitacao.ListaMatriculaTurmaCapacitacao != null
                            ? matriculaCapacitacao.ListaMatriculaTurmaCapacitacao.FirstOrDefault()
                                   .TurmaCapacitacao.Nome
                            : string.Empty)
                    .Replace("#STATUS", matriculaCapacitacao.StatusMatriculaFormatado)
                    .Replace("#DATAINICIOTURMA", dataInicioTurma)
                    .Replace("#DATAFIMTURMA", dataFimTurma);


                    return(pTexto);
                }
            }

            if (pIdMatriculaOferta > 0)
            {
                MatriculaOferta matriculaOferta = new BMMatriculaOferta().ObterPorID(pIdMatriculaOferta);
                if (matriculaOferta != null)
                {
                    var nomeUsuario = tI.ToTitleCase(matriculaOferta.Usuario.Nome.ToLower());

                    var dataInicioTurma = string.Empty;
                    var dataFimTurma    = string.Empty;

                    var matriculaTurma = matriculaOferta.MatriculaTurma.FirstOrDefault();

                    if (matriculaOferta.MatriculaTurma != null && matriculaTurma != null)
                    {
                        if (matriculaTurma.Turma != null)
                        {
                            dataInicioTurma = matriculaTurma.Turma.DataInicio.ToString("dd/MM/yyyy");
                        }
                        if (matriculaTurma.Turma != null && matriculaTurma.Turma.DataFinal.HasValue)
                        {
                            dataFimTurma = matriculaTurma.Turma.DataFinal.Value.ToString("dd/MM/yyyy");
                        }
                    }

                    int totalHoras = matriculaOferta.Oferta.SolucaoEducacional.ListaItemTrilha
                                     .Where(x => x.Aprovado == enumStatusSolucaoEducacionalSugerida.Aprovado)
                                     .Sum(x => x.CargaHoraria);

                    return(pTexto
                           .Replace("#DATASISTEMAEXTENSO", DateTime.Now.ToLongDateString().ToString())
                           .Replace("#DATASISTEMA", DateTime.Now.ToString("dd/MM/yyyy"))
                           .Replace("#DATAHORASISTEMA", DateTime.Now.ToString("dd/MM/yyyy HH:mm"))
                           .Replace("#ALUNO", nomeUsuario)
                           .Replace("#CPF", WebFormHelper.FormatarCPF(matriculaOferta.Usuario.CPF))
                           .Replace("#EMAILALUNO", matriculaOferta.Usuario.Email)
                           .Replace("#CARGAHORARIASOLUCAOSEBRAE", totalHoras.ToString())
                           .Replace("#OFERTA", matriculaOferta.Oferta.Nome)
                           .Replace("#CARGAHORARIA", matriculaOferta.Oferta.CargaHoraria.ToString())
                           .Replace("#NOMESE", matriculaOferta.Oferta.SolucaoEducacional.Nome)
                           .Replace("#DATAINICIOOFERTA",
                                    matriculaTurma != null ? matriculaTurma.Turma.DataInicio.ToString("dd/MM/yyyy") : "")
                           .Replace("#DATAFIMOFERTA",
                                    matriculaTurma.Turma.DataFinal.HasValue
                                ? matriculaTurma.Turma.DataFinal.Value.ToString("dd/MM/yyyy")
                                : string.Empty)
                           .Replace("#DATAMATRICULA",
                                    matriculaOferta.MatriculaTurma != null
                                ? matriculaTurma.DataMatricula.ToString("dd/MM/yyyy")
                                : string.Empty)
                           .Replace("#DATATERMINO",
                                    matriculaOferta.MatriculaTurma != null &&
                                    matriculaTurma.DataTermino.HasValue
                                ? matriculaTurma
                                    .DataTermino.Value.ToString("dd/MM/yyyy")
                                : string.Empty)
                           .Replace("#EMENTA", matriculaOferta.Oferta.SolucaoEducacional.Ementa)
                           .Replace("#TURMA",
                                    matriculaOferta.MatriculaTurma != null ? matriculaTurma.Turma.Nome : string.Empty)
                           .Replace("#PROFESSOR", matriculaTurma != null && matriculaTurma.Turma.Professores.Any()
                            ? string.Join(", ", matriculaTurma.Turma.Professores.Select(x => x.Nome).ToArray())
                            : string.Empty)
                           .Replace("#LOCAL", matriculaTurma.Turma.Local != null ? matriculaTurma.Turma.Local : "Sem Local")
                           .Replace("#CODIGOCERTIFICADO", matriculaOferta.CDCertificado)
                           .Replace("#MEDIAFINALTURMA",
                                    matriculaOferta.MatriculaTurma != null &&
                                    matriculaTurma.MediaFinal.HasValue
                                ? matriculaTurma.MediaFinal.Value.ToString()
                                : string.Empty)
                           .Replace("#DATEGERACAOCERTIFICADO",
                                    matriculaOferta.DataGeracaoCertificado.HasValue
                                ? matriculaOferta.DataGeracaoCertificado.Value.ToString("dd/MM/yyyy")
                                : string.Empty)
                           .Replace("#DATAGERACAOCERTIFICADO",
                                    matriculaOferta.DataGeracaoCertificado.HasValue
                                ? matriculaOferta.DataGeracaoCertificado.Value.ToString("dd/MM/yyyy")
                                : string.Empty)
                           .Replace("#NOTAFINAL",
                                    matriculaOferta.MatriculaTurma != null &&
                                    matriculaTurma.MediaFinal.HasValue
                                ? matriculaTurma.MediaFinal.Value.ToString()
                                : string.Empty)
                           .Replace("#STATUS", matriculaOferta.StatusMatriculaFormatado)
                           .Replace("#DATAINICIOTURMA", dataInicioTurma)
                           .Replace("#DATAFIMTURMA", dataFimTurma)
                           .Replace("#TEXTOPORTAL", matriculaOferta.Oferta.SolucaoEducacional.Apresentacao != null
                            ? Regex.Replace(matriculaOferta.Oferta.SolucaoEducacional.Apresentacao, "<.*?>",
                                            string.Empty)
                            : string.Empty)
                           .Replace("#INFORMACOESADICIONAIS", matriculaOferta.Oferta.InformacaoAdicional != null
                            ? Regex.Replace(matriculaOferta.Oferta.InformacaoAdicional, "<.*?>", string.Empty)
                            : string.Empty)
                           .Replace("#AREATEMATICA", matriculaOferta.Oferta.SolucaoEducacional.ListaAreasTematicas.Any()
                            ? string.Join(", ",
                                          matriculaOferta.Oferta.SolucaoEducacional.ListaAreasTematicas.Select(
                                              x => x.AreaTematica.Nome).ToArray())
                            : string.Empty)
                           );
                }
            }

            if (pIdUsuarioTrilha > 0)
            {
                MatriculaOferta matriculaOferta = new BMMatriculaOferta().ObterPorID(pIdMatriculaOferta);

                var bmUsuarioTrilha = new BMUsuarioTrilha();
                var usuarioTrilha   = bmUsuarioTrilha.ObterPorId(pIdUsuarioTrilha);
                if (usuarioTrilha == null || !usuarioTrilha.StatusMatricula.Equals(enumStatusMatricula.Aprovado))
                {
                    return("Erro ao gerar o certificado");
                }
                var nomeUsuario = tI.ToTitleCase(usuarioTrilha.Usuario.Nome.ToLower());

                var cargaHoraria = bmUsuarioTrilha.ObterTotalCargaHoraria(usuarioTrilha);

                return(pTexto
                       .Replace("#DATASISTEMAEXTENSO", DateTime.Now.ToLongDateString().ToString())
                       .Replace("#DATASISTEMA", DateTime.Now.ToString("dd/MM/yyyy"))
                       .Replace("#DATAHORASISTEMA", DateTime.Now.ToString("dd/MM/yyyy HH:mm"))
                       .Replace("#ALUNO", nomeUsuario)
                       .Replace("#CPF", WebFormHelper.FormatarCPF(usuarioTrilha.Usuario.CPF))
                       .Replace("#EMAILALUNO", usuarioTrilha.Usuario.Email)
                       .Replace("#TRILHANIVEL", usuarioTrilha.TrilhaNivel.Nome)
                       .Replace("#TRILHA", usuarioTrilha.TrilhaNivel.Trilha.Nome)
                       .Replace("#DATALIMITE", usuarioTrilha.DataLimite.ToString("dd/MM/yyyy"))
                       .Replace("#DATAINICIOTRILHA", usuarioTrilha.DataInicio.ToString("dd/MM/yyyy"))
                       .Replace("#CARGAHORARIASOLUCAOSEBRAE", cargaHoraria.ToString())
                       .Replace("#DATAFIMTRILHA",
                                usuarioTrilha.DataFim.HasValue
                            ? usuarioTrilha.DataFim.Value.ToString("dd/MM/yyyy")
                            : string.Empty)
                       .Replace("#MEDIAFINALTRILHA",
                                usuarioTrilha.NotaProva.HasValue ? usuarioTrilha.NotaProva.Value.ToString() : string.Empty)
                       .Replace("#CODIGOCERTIFICADO", usuarioTrilha.CDCertificado)
                       .Replace("#CARGAHORARIA", cargaHoraria.ToString())
                       .Replace("#DATEGERACAOCERTIFICADO",
                                usuarioTrilha.DataGeracaoCertificado.HasValue
                            ? usuarioTrilha.DataGeracaoCertificado.Value.ToString("dd/MM/yyyy")
                            : string.Empty)
                       .Replace("#DATAGERACAOCERTIFICADO",
                                usuarioTrilha.DataGeracaoCertificado.HasValue
                            ? usuarioTrilha.DataGeracaoCertificado.Value.ToString("dd/MM/yyyy")
                            : string.Empty));
            }
            return("Erro ao gerar o certificado");
        }
        public List <DTOCapacitacao> ConsultarCapacitacoes(int idUsuario, int idCapacitacao = 0, int idPrograma = 0, string nome = "")
        {
            Usuario usuario = new BMUsuario().ObterPorId(idUsuario);

            if (usuario == null)
            {
                throw new AcademicoException("Usuário não localizado na base");
            }

            Capacitacao objCapacitacao = new Capacitacao();

            if (idPrograma > 0)
            {
                objCapacitacao.Programa.ID = idPrograma;
            }

            if (!string.IsNullOrEmpty(nome))
            {
                objCapacitacao.Nome = nome;
            }

            if (idCapacitacao > 0)
            {
                objCapacitacao.ID = idCapacitacao;
            }

            IList <Capacitacao> ListaCapacitacoes = new BMCapacitacao().ObterPorFiltroNoPeriodoInscricoes(objCapacitacao);

            if (ListaCapacitacoes.Count == 0 || ListaCapacitacoes == null)
            {
                throw new AcademicoException("Não há capacitações disponíveis");
            }

            List <DTOCapacitacao> retorno = new List <DTOCapacitacao>();

            IList <MatriculaCapacitacao> capacitacoesJaMatriculado = new BMMatriculaCapacitacao().ObterPorUsuario(usuario.ID);

            foreach (var cap in ListaCapacitacoes)
            {
                DTOCapacitacao listReturn = new DTOCapacitacao();
                listReturn.jaInscrito = false;
                if (capacitacoesJaMatriculado.Count > 0)
                {
                    var jaInscrito = capacitacoesJaMatriculado.Where(x => x.Capacitacao.ID == cap.ID).ToList();
                    if (jaInscrito.Count > 0)
                    {
                        listReturn.jaInscrito = true;
                    }
                }

                listReturn.ID = cap.ID;
                listReturn.NomeCapacitacao      = cap.Nome;
                listReturn.DataInicio           = cap.DataInicio.ToString("dd/MM/yyyy");
                listReturn.DataFim              = cap.DataFim.HasValue ? cap.DataFim.Value.ToString("dd/MM/yyyy") : "";
                listReturn.DataInicioInscricoes = cap.DataInicioInscricao.HasValue ? cap.DataInicioInscricao.Value.ToString("dd/MM/yyyy") : "";
                listReturn.DataFimInscricoes    = cap.DataFimInscricao.HasValue ? cap.DataFimInscricao.Value.ToString("dd/MM/yyyy") : "";
                listReturn.Programa.ID          = cap.Programa.ID;
                listReturn.Programa.Nome        = cap.Programa.Nome;
                listReturn.Programa.Ativo       = cap.Programa.Ativo;
                listReturn.descricao            = cap.Descricao;
                listReturn.TurmaCapacitacao     = cap.ListaTurmas.Select(f => new DTOTurmaCapacitacao {
                    ID = f.ID, Nome = f.Nome
                }).ToList();
                listReturn.PodeRealizarIscricao = cap.DataInicioInscricao.HasValue && cap.DataFimInscricao.HasValue && (DateTime.Now > cap.DataInicioInscricao.Value && DateTime.Now < cap.DataFimInscricao.Value);

                retorno.Add(listReturn);
            }


            return(retorno);
        }