private void PreencherDTOComInformacoesDoUsuarioTrilha(int id_Usuario, List <DTOItemHistoricoAcademico> resultado)
        {
            IList <UsuarioTrilha> ListaUsuarioTrilha = new BMUsuarioTrilha().ObterPorUsuario(id_Usuario);

            //UST #1158: Exibir cursos, programas e trilhas com status de inscrito no historico academico. Foir removido .Where(x => x.StatusMatricula != enumStatusMatricula.Inscrito)
            foreach (var itemHistorico in ListaUsuarioTrilha)
            {
                //if (itemHistorico.StatusMatricula.Equals(enumStatusMatricula.Concluido))
                //{
                var item = new DTOItemHistoricoAcademico
                {
                    NomeSolucao =
                        string.Concat(itemHistorico.TrilhaNivel.Trilha.Nome, " - ", itemHistorico.TrilhaNivel.Nome),
                    Instituicao = Constantes.UCSebrae
                };

                var data = itemHistorico.DataInicio;
                item.DataInicio = data.ToString("dd/MM/yyyy");
                item.DataFim    = itemHistorico.DataFim.HasValue ? itemHistorico.DataFim.Value.ToString("dd/MM/yyyy") : "";

                item.IdMatricula = itemHistorico.ID;
                item.Situacao    = itemHistorico.StatusMatriculaFormatado;
                item.Tipo        = Constantes.TrilhaUC;
                if (itemHistorico.StatusMatricula == enumStatusMatricula.Concluido ||
                    itemHistorico.StatusMatricula == enumStatusMatricula.Aprovado)
                {
                    item.TemCertificado = (itemHistorico.TrilhaNivel.CertificadoTemplate != null);
                }
                item.IdTrilhaNivel = itemHistorico.TrilhaNivel.ID;
                item.CargaHoraria  = itemHistorico.TrilhaNivel.CargaHoraria.ToString();
                resultado.Add(item);
                //}
            }
        }
        private static void ObterQuestionariosCancelamentoAbandono(MatriculaOferta matriculaOferta,
                                                                   DTOItemHistoricoAcademico dto)
        {
            if (matriculaOferta.StatusMatricula == enumStatusMatricula.CanceladoAluno ||
                matriculaOferta.StatusMatricula == enumStatusMatricula.Abandono &&
                matriculaOferta.MatriculaTurma != null && matriculaOferta.MatriculaTurma.Any())
            {
                var matriculaTurma = matriculaOferta.MatriculaTurma.FirstOrDefault();

                if (matriculaTurma != null)
                {
                    var turma = matriculaTurma.Turma;

                    var questionariosAssociacoes = new BMQuestionarioAssociacao().ObterPorTurma(turma).ToList();

                    if (matriculaOferta.StatusMatricula == enumStatusMatricula.CanceladoAluno)
                    {
                        // Obter questionário de cancelamento.
                        var associacaoCancelamento =
                            questionariosAssociacoes.FirstOrDefault(
                                q =>
                                q.TipoQuestionarioAssociacao.ID == (int)enumTipoQuestionarioAssociacao.Cancelamento);

                        if (associacaoCancelamento != null)
                        {
                            // Caso não tenha sido respondido, retorna o ID da turma do questionário de cancelamento para o usuário responder.
                            if (!associacaoCancelamento.Questionario.IsRespondido(matriculaOferta.Usuario, turma))
                            {
                                dto.IdTurmaQuestionarioCancelamento = turma.ID;
                            }
                        }
                    }

                    // Obter questionário de abandono.
                    if (matriculaOferta.StatusMatricula == enumStatusMatricula.Abandono)
                    {
                        var associacaoAbandono =
                            questionariosAssociacoes.FirstOrDefault(
                                q => q.TipoQuestionarioAssociacao.ID == (int)enumTipoQuestionarioAssociacao.Abandono);

                        if (associacaoAbandono != null)
                        {
                            // Caso não tenha sido respondido, retorna o ID da turma do questionário de abandono para o usuário responder.
                            if (!associacaoAbandono.Questionario.IsRespondido(matriculaOferta.Usuario, turma))
                            {
                                dto.IdTurmaQuestionarioAbandono = turma.ID;
                            }
                        }
                    }
                }
            }
        }
        private void PreencherCertificado(MatriculaOferta itemHistorico, DTOItemHistoricoAcademico item, Usuario usuario)
        {
            if (itemHistorico.IsAprovado() && !itemHistorico.IsOuvinte())
            // Alunos com o status de Ouvinte não podem emitir certificados.
            {
                item.TemCertificado = itemHistorico.Oferta.CertificadoTemplate != null;
                item.CargaHoraria   = itemHistorico.Oferta.CargaHoraria.ToString();

                if (itemHistorico.Oferta.SolucaoEducacional.Fornecedor.ID == (int)enumFornecedor.FGVOCW)
                {
                    var nomeArquivoOriginal = "FGVOCW_" + itemHistorico.Usuario.CPF + "_" +
                                              itemHistorico.Oferta.IDChaveExterna + ".pdf";
                    var mFS        = new ManterFileServer();
                    var fileServer = mFS.ObterFileServerPorFiltro(new FileServer
                    {
                        NomeDoArquivoOriginal = nomeArquivoOriginal,
                        MediaServer           = true
                    }).FirstOrDefault();
                    item.TemCertificado = true;
                    if (fileServer != null)
                    {
                        item.LKCertificado =
                            Util.Classes.ConfiguracaoSistemaUtil.ObterInformacoes(enumConfiguracaoSistema.EnderecoSGUS)
                            .Registro + "/MediaServer.ashx?Identificador=" + fileServer.ID;
                    }
                    else
                    {
                        item.LKCertificado = "http://www5.fgv.br/ucsebraeocw/CertificadoCursoGratuitoOnline.aspx?cpf=" +
                                             itemHistorico.Usuario.CPF + "&oferta=" +
                                             itemHistorico.Oferta.IDChaveExterna;
                    }
                }

                // Link de acesso ao curso - Somente se tiver sido aprovado
                if (itemHistorico.MatriculaTurma != null && itemHistorico.MatriculaTurma.FirstOrDefault() != null)
                {
                    var matTurma = itemHistorico.MatriculaTurma.FirstOrDefault();
                    if (matTurma.Turma.AcessoAposConclusao)
                    {
                        item.LKAcesso = string.IsNullOrEmpty(matTurma.MatriculaOferta.LinkAcesso)
                            ? (new ConsultarMeusCursos()).ConsultarLinkAcessoFornecedor(
                            matTurma.MatriculaOferta.Oferta.SolucaoEducacional.Fornecedor, usuario,
                            matTurma.MatriculaOferta.Oferta.CodigoMoodle.ToString())
                            : matTurma.MatriculaOferta.LinkAcesso;
                    }
                }
            }
        }
        private void PreencherDTOComInformacoesDoHistoricoSGTC(int id_Usuario, List <DTOItemHistoricoAcademico> resultado)
        {
            IList <HistoricoSGTC> ListaHistoricoSGTC = new BMHistoricoSGTC().ObterPorUsuario(id_Usuario);

            foreach (var itemHistorico in ListaHistoricoSGTC)
            {
                var item = new DTOItemHistoricoAcademico();
                item.NomeSolucao = itemHistorico.NomeSolucaoEducacional;
                item.Instituicao = Constantes.SGTC;

                item.DataInicio = null;
                item.DataFim    = itemHistorico.DataConclusao.ToShortDateString();

                item.IdMatricula    = 0;
                item.Situacao       = Constantes.Concluido;
                item.Tipo           = Constantes.HistoricoSGTC;
                item.TemCertificado = false;
                item.CargaHoraria   = Constantes.NaoDefinido;
                resultado.Add(item);
            }
        }
        private void PreencherDTOComInformacoesDoHistoricoExtraCurricular(int id_Usuario, List <DTOItemHistoricoAcademico> resultado)
        {
            IList <HistoricoExtraCurricular> ListaHistoricoExtraCurricular = new BMHistoricoExtraCurricular().ObterPorUsuario(id_Usuario);

            foreach (var itemHistorico in ListaHistoricoExtraCurricular)
            {
                var item = new DTOItemHistoricoAcademico();
                item.NomeSolucao = itemHistorico.SolucaoEducacionalExtraCurricular;
                item.Instituicao = string.IsNullOrEmpty(itemHistorico.Instituicao) ? "" : itemHistorico.Instituicao;

                DateTime?data = itemHistorico.DataInicioAtividade.HasValue ? itemHistorico.DataInicioAtividade : null;
                item.DataInicio = data.HasValue ? data.Value.ToString("dd/MM/yyyy") : "";
                item.DataFim    = itemHistorico.DataFimAtividade.HasValue
                    ? itemHistorico.DataFimAtividade.Value.ToString("dd/MM/yyyy")
                    : "";

                item.IdMatricula    = 0;
                item.Situacao       = Constantes.Concluido;
                item.Tipo           = Constantes.HistoricoExtraCurricularUC;
                item.TemCertificado = itemHistorico.FileServer != null;

                if (itemHistorico.FileServer != null)
                {
                    item.LKCertificado = Util.Classes.ConfiguracaoSistemaUtil
                                         .ObterInformacoes(enumConfiguracaoSistema.EnderecoSGUS)
                                         .Registro + "/MediaServer.ashx?Identificador=" + itemHistorico.FileServer.ID;
                }

                item.CargaHoraria = itemHistorico.CargaHoraria.ToString();

                if (itemHistorico.ID > 0)
                {
                    item.idExtraCurricular = itemHistorico.ID;
                }

                resultado.Add(item);
            }
        }
 /// <summary>
 /// Atualiza a data início e data fim do curso no histórico acadêmico
 /// </summary>
 /// <param name="matricula"></param>
 /// <param name="historico"></param>
 /// <returns></returns>
 public void preencherDataInicioDataFimCurso(MatriculaTurma matricula, Oferta oferta, ref DTOItemHistoricoAcademico historico)
 {
     if (oferta.TipoOferta != enumTipoOferta.Continua)
     {
         historico.DataInicio = matricula.Turma.DataInicio.ToString("dd/MM/yyyy");
         historico.DataFim    = matricula.Turma.DataFinal.HasValue ? matricula.Turma.DataFinal.Value.ToString("dd/MM/yyyy") : "";
     }
     else
     {
         historico.DataInicio = matricula.DataMatricula.ToString("dd/MM/yyyy");
         historico.DataFim    = matricula.DataTermino.HasValue
             ? matricula.DataTermino.Value.ToString("dd/MM/yyyy")
             : "";
     }
 }
        private List <DTOItemHistoricoAcademico> PreencherDTOComInformacoesDaMatriculaOferta(IList <MatriculaOferta> listaMatriculaOferta, int idUsuario)
        {
            List <DTOItemHistoricoAcademico> resultado = new List <DTOItemHistoricoAcademico>();

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

            foreach (var itemHistorico in listaMatriculaOferta)
            {
                // Usado para ordenar os objetos corretamente
                itemHistorico.MatriculaTurma = itemHistorico.MatriculaTurma.OrderByDescending(x => x.DataMatricula).ToList();

                var itemMatriculaTurma = itemHistorico.MatriculaTurma.FirstOrDefault();

                if (itemMatriculaTurma == null)
                {
                    continue;
                }

                var item = new DTOItemHistoricoAcademico
                {
                    NomeSolucao = itemHistorico.Oferta.SolucaoEducacional.Nome,
                    Instituicao = Constantes.UCSebrae
                };

                ObterQuestionariosCancelamentoAbandono(itemHistorico, item);

                if (itemHistorico.MatriculaTurma != null && itemHistorico.MatriculaTurma.Count > 0)
                {
                    preencherDataInicioDataFimCurso(itemMatriculaTurma, itemHistorico.Oferta, ref item);

                    //A FGV QUE EFETUA A CORREÇÃO NÃO ATUALIZA O CAMPO QUE NÃO É UTILIZADO NO MÉTODO, ENTÃO PRECISAMOS CRIAR ESTA CONDIÇÃO
                    if (itemHistorico.StatusMatricula == enumStatusMatricula.Aprovado ||
                        itemHistorico.StatusMatricula == enumStatusMatricula.Concluido)
                    {
                        if (!itemMatriculaTurma.DataTermino.HasValue)
                        {
                            if (itemHistorico.Oferta.SolucaoEducacional.Fornecedor.ID == (int)enumFornecedor.FGVOCW)
                            {
                                if (itemHistorico.DataStatusMatricula.HasValue)
                                {
                                    item.DataFim = itemHistorico.DataStatusMatricula.Value.ToString("dd/MM/yyyy");
                                }
                            }
                        }
                    }

                    item.IdTurma = itemMatriculaTurma.Turma.ID;

                    var turma = new BMTurma().ObterPorID((int)item.IdTurma);

                    var questionarioAssociacao = new BMQuestionarioAssociacao().ObterPorTurma(turma).Select(x => x.DataDisparoLinkEficacia);

                    foreach (var itemQuestionarioAssociacao in questionarioAssociacao)
                    {
                        DateTime dateTime;
                        if (DateTime.TryParse(itemQuestionarioAssociacao.ToString(), out dateTime))
                        {
                            item.DataDisparoLinkEficacia = dateTime;
                        }
                    }

                    // VALIDAR QUESTIONARIOS
                    if (itemMatriculaTurma.Turma.ListaQuestionarioAssociacao.Count > 0 && !itemHistorico.IsOuvinte())
                    // Alunos com status Ouvinte não podem responder questionáris.
                    {
                        //QUESTIONARIO POS
                        var itemQuestionarioAssociacaoPos =
                            itemMatriculaTurma.Turma.ListaQuestionarioAssociacao.FirstOrDefault(
                                x => x.TipoQuestionarioAssociacao.ID == (int)enumTipoQuestionarioAssociacao.Pos);

                        if (itemQuestionarioAssociacaoPos != null)
                        {
                            var temParticipacao = new BMQuestionarioParticipacao()
                                                  .ObterPorUsuario(itemHistorico.Usuario).Any(
                                x =>
                                x.TipoQuestionarioAssociacao != null &&
                                x.TipoQuestionarioAssociacao.ID == (int)enumTipoQuestionarioAssociacao.Pos &&
                                x.Turma.ID == itemMatriculaTurma.Turma.ID && x.DataParticipacao != null);

                            // Usado para exibir o quesitonário pós
                            item.DataDisparoLinkPesquisa = !temParticipacao
                                ? itemQuestionarioAssociacaoPos.DataDisparoLinkPesquisa
                                : null;

                            if (UsuarioAprovado(itemHistorico.StatusMatricula))
                            {
                                if (!temParticipacao)
                                {
                                    item.QuestionarioPosPendente = true;
                                    item.DataDisparoLinkPesquisa =
                                        itemQuestionarioAssociacaoPos.DataDisparoLinkPesquisa ??
                                        itemMatriculaTurma.DataTermino;
                                }
                            }
                        }

                        //QUESTIONARIO EFICACIA
                        var itemQuestionarioAssociacaoEficacia =
                            itemMatriculaTurma.Turma.ListaQuestionarioAssociacao.FirstOrDefault(
                                x => x.TipoQuestionarioAssociacao.ID == (int)enumTipoQuestionarioAssociacao.Eficacia);
                        if (itemQuestionarioAssociacaoEficacia != null)
                        {
                            var temParticipacao = new BMQuestionarioParticipacao()
                                                  .ObterPorUsuario(itemHistorico.Usuario).Any(
                                x =>
                                x.TipoQuestionarioAssociacao != null &&
                                x.TipoQuestionarioAssociacao.ID == (int)enumTipoQuestionarioAssociacao.Eficacia &&
                                x.Turma.ID == itemMatriculaTurma.Turma.ID && x.DataParticipacao != null);

                            if (!temParticipacao)
                            {
                                item.QuestionarioEficaciaPendente = true;
                                int quantidadeItens = ConsultarQuantidadeItensQuestionarioAssociados(itemMatriculaTurma);
                                item.QuantidadeItensQuestionarioAgrupados = quantidadeItens > 0 ? quantidadeItens : (int?)null;
                            }
                        }
                    }
                }
                else
                {
                    var matriculaTurma = itemHistorico.MatriculaTurma.FirstOrDefault();
                    preencherDataInicioDataFimCurso(matriculaTurma, matriculaTurma.MatriculaOferta.Oferta, ref item);
                }

                item.IdMatricula = itemHistorico.ID;
                item.Situacao    = itemHistorico.StatusMatriculaFormatado;
                item.Tipo        = Constantes.CursoUC;

                if (itemHistorico.MatriculaTurma != null)
                {
                    var matTurma = (new ManterMatriculaTurma()).ObterMatriculaTurmaPorId(itemMatriculaTurma.ID);
                    item.Feedback = (matTurma.Feedback ?? "").Trim();
                }

                PreencherCertificado(itemHistorico, item, usuario);

                resultado.Add(item);
            }

            return(resultado);
        }
        private void PreencherDTOComInformacoesDaMatriculaPrograma(int idUsuario, List <DTOItemHistoricoAcademico> resultado)
        {
            var manterMatriculaCapacitacao = new ManterMatriculaCapacitacaoService();
            var listaMatriculaCapacitacao  = manterMatriculaCapacitacao.ObterPorUsuario(idUsuario);

            //UST #1158: Exibir cursos, programas e trilhas com status de inscrito no historico academico. Foir removido .Where(x => x.StatusMatricula != enumStatusMatricula.Inscrito)
            foreach (
                var itemHistorico in
                listaMatriculaCapacitacao)
            {
                var item = new DTOItemHistoricoAcademico
                {
                    NomeSolucao = itemHistorico.Capacitacao.Programa.Nome,
                    Instituicao = Constantes.UCSebrae
                };

                var data = itemHistorico.Capacitacao.DataInicio;
                item.DataInicio = data.ToString("dd/MM/yyyy");
                item.DataFim    = itemHistorico.Capacitacao.DataFim.HasValue
                    ? itemHistorico.Capacitacao.DataFim.Value.ToString("dd/MM/yyyy")
                    : "";

                item.IdMatricula = itemHistorico.ID;
                item.Situacao    = itemHistorico.StatusMatriculaFormatado;
                item.Tipo        = Constantes.ProgramaUC;

                if (itemHistorico.ListaMatriculaTurmaCapacitacao != null &&
                    itemHistorico.ListaMatriculaTurmaCapacitacao.Any())
                {
                    var matriculaTurma = itemHistorico.ListaMatriculaTurmaCapacitacao.FirstOrDefault();
                    if (matriculaTurma == null)
                    {
                        continue;
                    }
                    item.IdTurma = matriculaTurma.TurmaCapacitacao.ID;
                    if (matriculaTurma.TurmaCapacitacao.ListaQuestionarioAssociacao.Any())
                    {
                        var itemQuestionarioAssociacaoPos =
                            matriculaTurma.TurmaCapacitacao.ListaQuestionarioAssociacao.FirstOrDefault(
                                x => x.TipoQuestionarioAssociacao.ID == (int)enumTipoQuestionarioAssociacao.Pos);
                        if (itemQuestionarioAssociacaoPos != null)
                        {
                            if (
                                !(new BMQuestionarioParticipacao().ObterPorUsuario(itemHistorico.Usuario)
                                  .Any(
                                      x =>
                                      x.TipoQuestionarioAssociacao.ID == (int)enumTipoQuestionarioAssociacao.Pos &&
                                      x.TurmaCapacitacao != null &&
                                      x.TurmaCapacitacao.ID == matriculaTurma.TurmaCapacitacao.ID &&
                                      x.DataParticipacao != null)))
                            {
                                item.QuestionarioPosPendente = true;
                            }
                        }
                    }
                }


                item.TemCertificado = (itemHistorico.Capacitacao.Certificado != null && !item.QuestionarioPosPendente);

                item.CargaHoraria = Constantes.NaoDefinido;
                resultado.Add(item);
            }
        }