public static string FormatarTextoCertificadoTutor(string texto, int idOferta, int idTurma, int idUsuario)
        {
            var tI = new CultureInfo("pt-Br", true).TextInfo;

            if (idOferta > 0 && idUsuario > 0)
            {
                var oferta = new BMOferta().ObterPorId(idOferta);

                var professor = new BMUsuario().ObterPorId(idUsuario);

                if (oferta == null || professor == null)
                {
                    return("Erro ao gerar o certificado");
                }

                var turma = new BMTurma().ObterPorID(idTurma);

                if (turma == null)
                {
                    return("Erro ao gerar o certificado");
                }

                var dataInicioTurma = turma.DataInicio.ToString("dd/MM/yyyy");

                string dataFimTurma = turma.DataFinal.HasValue
                    ? turma.DataFinal.Value.ToString("dd/MM/yyyy")
                    : "";

                var nomeUsuario = tI.ToTitleCase(professor.Nome.ToLower());

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

                return(texto
                       .Replace("#DATASISTEMAEXTENSO", DateTime.Now.ToLongDateString())
                       .Replace("#DATASISTEMA", DateTime.Now.ToString("dd/MM/yyyy"))
                       .Replace("#DATAHORASISTEMA", DateTime.Now.ToString("dd/MM/yyyy HH:mm"))
                       .Replace("#PROFESSOR", nomeUsuario != null ? nomeUsuario : string.Empty)
                       .Replace("#LOCAL", turma.Local != null ? turma.Local : "Sem Local")
                       .Replace("#CPF", WebFormHelper.FormatarCPF(professor.CPF))
                       .Replace("#EMAILPROFESSOR", professor.Email)
                       .Replace("#OFERTA", oferta.Nome)
                       .Replace("#CARGAHORARIA", oferta.CargaHoraria.ToString())
                       .Replace("#NOMESE", oferta.SolucaoEducacional.Nome)
                       .Replace("#EMENTA", oferta.SolucaoEducacional.Ementa)
                       .Replace("#DATEGERACAOCERTIFICADO", DateTime.Now.ToString("dd/MM/yyyy"))
                       .Replace("#DATAGERACAOCERTIFICADO", DateTime.Now.ToString("dd/MM/yyyy"))
                       .Replace("#CODIGOCERTIFICADO",
                                oferta.CertificadoTemplateProfessor.ObterCodigoCertificadoTutor(idOferta, idTurma, idUsuario))
                       .Replace("#DATAINICIOTURMA", dataInicioTurma)
                       .Replace("#DATAFIMTURMA.", dataFimTurma)
                       .Replace("#TEXTOPORTAL", oferta.SolucaoEducacional.Apresentacao != null
                        ? Regex.Replace(oferta.SolucaoEducacional.Apresentacao, "<.*?>", string.Empty)
                        : string.Empty)
                       .Replace("#INFORMACOESADICIONAIS", oferta.InformacaoAdicional != null
                        ? Regex.Replace(oferta.InformacaoAdicional, "<.*?>", string.Empty)
                        : string.Empty)
                       .Replace("#AREATEMATICA", oferta.SolucaoEducacional.ListaAreasTematicas.Any()
                        ? string.Join(", ",
                                      oferta.SolucaoEducacional.ListaAreasTematicas.Select(x => x.AreaTematica.Nome).ToArray())
                        : string.Empty)
                       .Replace("#CARGAHORARIASOLUCAOSEBRAE", totalHoras.ToString()));
            }

            return("Erro ao gerar o certificado");
        }
        /// <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");
        }