public IQueryable <Oferta> ObterOfertaPorSolucaoEducacional(int idSolucaoEducacional)
 {
     using (var bm = new BMOferta())
     {
         return(bm.ObterTodos().Where(o => o.SolucaoEducacional.ID == idSolucaoEducacional));
     }
 }
        public DTO.Services.RetornoWebService EntrarNaFilaDeEspera(int pUsuario, int idOferta)
        {
            try
            {
                var usuario = new BMUsuario().ObterPorId(pUsuario);
                var oferta  = new BMOferta().ObterPorId(idOferta);

                if (EstaInscrito(pUsuario, idOferta))
                {
                    return(new DTO.Services.RetornoWebService
                    {
                        Erro = 0,
                        Mensagem = "Já Inscrito"
                    });
                }

                var matriculaOferta = new MatriculaOferta
                {
                    Usuario         = usuario,
                    Oferta          = oferta,
                    StatusMatricula = enumStatusMatricula.FilaEspera,
                    UF = usuario.UF,
                    NivelOcupacional = usuario.NivelOcupacional,
                    DataSolicitacao  = DateTime.Now,
                    Auditoria        = new Auditoria(usuario.CPF)
                };

                new BMMatriculaOferta().Salvar(matriculaOferta);

                var matriculaTurma = new MatriculaTurma
                {
                    Turma           = oferta.ListaTurma.FirstOrDefault(),
                    MatriculaOferta = matriculaOferta,
                    DataMatricula   = DateTime.Now,
                    Auditoria       = new Auditoria(usuario.CPF)
                };

                matriculaTurma.DataLimite = matriculaTurma.CalcularDataLimite(matriculaOferta.Oferta);
                new BMMatriculaTurma().Salvar(matriculaTurma);

                EnvialEmailFilaEspera(usuario);

                return(new DTO.Services.RetornoWebService
                {
                    Erro = 0,
                    Mensagem = "Success"
                });
            }
            catch (Exception ex)
            {
                return(new DTO.Services.RetornoWebService
                {
                    Erro = 1,
                    Mensagem = "Falha",
                    Stack = ex.Message
                });
            }
        }
        public DTOSolucoes ConsultarTurmaPorSolucaoEducacional(int idSolucaoEducacional, int idOferta, string cpfUsuario)
        {
            DTOSolucoes retorno = new DTOSolucoes();

            var        usuario           = new BMUsuario().ObterPorCPF(cpfUsuario);
            List <int> permissoesOfertas =
                new BMOferta().ObterListaDePermissoes(usuario.ID).Select(f => f.IdOferta).Distinct().ToList();

            var solucaoEducacional = new ManterSolucaoEducacional().ObterSolucaoEducacionalPorId(idSolucaoEducacional);

            IList <Oferta> ofertas = RecuperarOfertasValidas(solucaoEducacional, permissoesOfertas);

            if (idOferta > 0)
            {
                ofertas = ofertas.Where(f => f.ID == idOferta).ToList();
            }

            var se = new DTOCurso();

            se.IDSolucaoEducacional = solucaoEducacional.ID;

            foreach (var oferta in ofertas)
            {
                var o = new DTOOfertas
                {
                    IDOferta = oferta.ID,
                    PermiteAlterarStatusPeloGestor =
                        (oferta.AlteraPeloGestorUC.HasValue ? oferta.AlteraPeloGestorUC.Value : true)
                };

                var turmas =
                    oferta.ListaTurma.Where(
                        f => (f.DataFinal == null || f.DataFinal.Value.Date > DateTime.Today) && f.InAberta).ToList();

                foreach (var turma in turmas)
                {
                    o.ListaTurma.Add(new DTOOfertaTurma {
                        IdTurma = turma.ID, Nome = turma.Nome
                    });
                }

                se.Ofertas.Add(o);
            }

            if (se.Ofertas.Count() > 0)
            {
                retorno.Cursos.Add(se);
            }

            return(retorno);
        }
        protected void btnEnviarObservacao_OnClick(object sender, EventArgs e)
        {
            bool aprovar = rblAprovar.SelectedValue.Contains("Aprovar");
            BMOfertaGerenciadorVaga bmOfertaGerenciadorVaga = new BMOfertaGerenciadorVaga();
            OfertaGerenciadorVaga dados = null;

            if (aprovar)
            {
                dados = bmOfertaGerenciadorVaga.ObterPorID(OfertaGerenciadorVagaEmAlteracao.ID);
                dados.Contemplado = true;
                dados.Resposta = txtResposta.Text;
            }
            else
            {
                if (string.IsNullOrEmpty(txtResposta.Text))
                {
                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Alerta, "Para cancelar a recusa você deve informar um motivo");
                }
                else
                {
                    dados = bmOfertaGerenciadorVaga.ObterPorID(OfertaGerenciadorVagaEmAlteracao.ID);
                    dados.Contemplado = false;
                    dados.Vigente = false;
                    dados.Resposta = txtResposta.Text;

                    var oferta = new BMOferta().ObterPorId(dados.Oferta.ID);
                    var permissaoUF = oferta.ListaPermissao.FirstOrDefault(x => x.Uf != null && x.Uf == dados.UF);
                    if (permissaoUF != null)
                    {
                        permissaoUF.QuantidadeVagasPorEstado = dados.VagasAnteriores;
                        new BMOfertaPermissao().Salvar(permissaoUF);
                    }
                }
            }

            if (dados != null)
            {
                dados.Auditoria = new Auditoria(bmUsuario.ObterUsuarioLogado().CPF);
                bmOfertaGerenciadorVaga.Alterar(dados);
                WebFormHelper.ExibirMensagem(enumTipoMensagem.Sucesso, "Dados alterados com sucesso", "GerenciarOfertaRecusaVaga.aspx");
            }
        }
예제 #5
0
        public void ValidarQuantidadeDeInscricoes(int idOferta, int idUsuario, List <int> pListaIdMetaIndividualAssociada,
                                                  List <int> pListaIdMetaInstitucionalAssociada, AuthenticationRequest autenticacao)
        {
            Oferta oferta = new BMOferta().ObterPorId(idOferta);

            if (oferta == null)
            {
                throw new AcademicoException("Erro: Oferta não encontrada");
            }

            if (oferta.TipoOferta.Equals(enumTipoOferta.Continua))
            {
                ValidarOfertaContinua(oferta, idUsuario, pListaIdMetaIndividualAssociada,
                                      pListaIdMetaInstitucionalAssociada, autenticacao);
            }
            if (oferta.TipoOferta.Equals(enumTipoOferta.Normal))
            {
                ValidarOfertaNormal(oferta, idUsuario, pListaIdMetaIndividualAssociada,
                                    pListaIdMetaInstitucionalAssociada, autenticacao);
            }
        }
예제 #6
0
        public void IncluirMatriculaTurma(MatriculaTurma matriculaTurma)
        {
            try
            {
                matriculaTurma.DataMatricula = DateTime.Now;

                if (matriculaTurma.ID == 0)
                {
                    //Se if tipooferta == normal || exclusiva
                    var bmOferta = new BMOferta();
                    var oferta   = bmOferta.ObterPorTurma(matriculaTurma.Turma.ID);

                    if (oferta != null)
                    {
                        matriculaTurma.DataLimite = matriculaTurma.CalcularDataLimite(oferta);
                    }

                    //Insere, ou seja, matricula o usuário na turma
                    bmMatriculaTurma.Salvar(matriculaTurma);
                }
                else
                {
                    //Atualiza
                    var turmaAnterior = bmMatriculaTurma.ObterMatriculaTurma(matriculaTurma.MatriculaOferta.Usuario.ID,
                                                                             matriculaTurma.TurmaAnterior.ID);

                    if (turmaAnterior != null)
                    {
                        //Passa os dados de uma Turma para a nova Turma
                        //this.TransferirInformacoesDeUmaTurmaParaOutra(turmaAnterior, pMatriculaTurma);
                        turmaAnterior.Turma = new BMTurma().ObterPorID(matriculaTurma.Turma.ID);
                        bmMatriculaTurma.Salvar(matriculaTurma);
                    }
                }
            }
            catch (AcademicoException ex)
            {
                throw ex;
            }
        }
예제 #7
0
        public IQueryable <Oferta> ObterOfertas(int idSolucaoEducacional, int idUF = 0)
        {
            using (var bmO = new BMOferta())
            {
                var retorno = bmO.ObterTodos();

                if (idSolucaoEducacional != 0)
                {
                    retorno = retorno.Where(x => x.SolucaoEducacional.ID == idSolucaoEducacional);
                }

                if (idUF > 0)
                {
                    retorno =
                        retorno.Where(
                            x =>
                            x.ListaPermissao.All(c => c.Uf != null) ||
                            x.ListaPermissao.Any(c => c.Uf != null && c.Uf.ID == idUF));
                }

                return(retorno);
            }
        }
        public DTOCursosPorCategoria ConsultarCursosPorCategoria(int idNoCategoriaConteudo, string cpf, string nome,
                                                                 bool somenteComInscricoesAbertas)
        {
            var retorno = new DTOCursosPorCategoria
            {
                Categoria   = new DTOCategoriaConteudo(),
                ListaCursos = new List <DTOSolucaoEducacional>()
            };

            var categoria = new BMCategoriaConteudo().ObterPorIdNode(idNoCategoriaConteudo);

            retorno.Categoria.ID   = categoria.ID;
            retorno.Categoria.Nome = categoria.Nome;

            var usuario = new BMUsuario().ObterPorCPF(cpf);

            var permissoesSe =
                new BMSolucaoEducacional().ObterListaDePermissoes(usuario.ID, 0)
                .Select(x => x.SolucaoEducacional.ID)
                .ToList();
            var permissoesOf = new BMOferta().ObterListaDePermissoes(usuario.ID).Select(x => x.IdOferta).ToList();

            var solucoesEducacionais = new BMSolucaoEducacional().ObterTodos().AsEnumerable()
                                       .Where(x => x.Nome.ToLower().Contains(nome.ToLower()) &&
                                              x.CategoriaConteudo != null &&
                                              x.Ativo &&
                                              x.CategoriaConteudo.IdNode == idNoCategoriaConteudo &&
                                              //(x.IdNode.HasValue || !string.IsNullOrEmpty(x.Link)) &&
                                              permissoesSe.Contains(x.ID) &&
                                              x.ListaOferta != null &&
                                              x.ListaOferta.Any(o => permissoesOf.Contains(o.ID)) &&
                                              x.ListaOferta.Any(o => o.TipoOferta != enumTipoOferta.Exclusiva)
                                              ).ToList();

            foreach (var item in solucoesEducacionais)
            {
                var obj = new DTOSolucaoEducacional
                {
                    ID                = item.ID,
                    IDChaveExterna    = item.IDChaveExterna,
                    IdNode            = item.IdNode,
                    Nome              = item.Nome,
                    InscricoesAbertas = false
                };

                if (
                    item.ListaOferta.Any(
                        x =>
                        x.DataInicioInscricoes.HasValue && x.DataFimInscricoes.HasValue &&
                        x.DataInicioInscricoes.Value <= DateTime.Today &&
                        x.DataFimInscricoes.Value >= DateTime.Today))
                {
                    foreach (var oferta in item.ListaOferta)
                    {
                        if (string.IsNullOrEmpty(obj.Link))
                        {
                            obj.Link = (item.Fornecedor.ID == (int)enumFornecedor.FGVOCW ||
                                        item.Fornecedor.ID == (int)enumFornecedor.FGVSiga) &&
                                       !string.IsNullOrEmpty(oferta.Link)
                                ? oferta.Link
                                : "";
                        }

                        obj.InscricoesAbertas = oferta.ListaTurma.Any(x => x.DataInicio <= DateTime.Today &&
                                                                      x.DataFinal.HasValue &&
                                                                      x.DataFinal.Value >= DateTime.Today);
                    }
                }
                else
                {
                    obj.InscricoesAbertas = false;
                }

                bool adicionar = true;

                if (somenteComInscricoesAbertas)
                {
                    adicionar = obj.InscricoesAbertas;
                }

                if (adicionar)
                {
                    retorno.ListaCursos.Add(obj);
                }
            }

            return(retorno);
        }
        public DTOSolucoes ConsultarDisponibilidadeMatriculaPorUsuario(int pIdUsuario, int idSolucaoEducacional,
                                                                       int cargaHoraria)
        {
            var retorno = new DTOSolucoes();

            var usuario = new ManterUsuario().ObterUsuarioPorID(pIdUsuario);

            if (usuario != null)
            {
                var permissoesSoculaoEducacional =
                    new BMSolucaoEducacional().ObterListaDePermissoes(usuario.ID, idSolucaoEducacional)
                    .Select(f => f.SolucaoEducacional.ID)
                    .Distinct()
                    .ToList();
                var permissoesOfertas =
                    new BMOferta().ObterListaDePermissoes(usuario.ID).Select(f => f.IdOferta).Distinct().ToList();


                if (idSolucaoEducacional > 0 && permissoesSoculaoEducacional.Contains(idSolucaoEducacional))
                {
                    permissoesSoculaoEducacional.Clear();
                    permissoesSoculaoEducacional.Add(idSolucaoEducacional);
                }

                var solucoes = new ManterSolucaoEducacional().ObterPorFiltroPesquisa(new SolucaoEducacional(), true,
                                                                                     permissoesSoculaoEducacional);

                foreach (var solucaoEducacional in solucoes)
                {
                    var ofertas = solucaoEducacional.ListaOferta.Where(
                        x =>
                        (x.DataInicioInscricoes.HasValue &&
                         x.DataInicioInscricoes.Value.Date <= DateTime.Today) &&
                        x.DataFimInscricoes.HasValue &&
                        x.DataFimInscricoes.Value.Date >= DateTime.Today &&
                        permissoesOfertas.Contains(x.ID) &&
                        //x.ListaPermissao.Any(f=>f.Uf.ID == usuario.UF.ID) &&
                        !(x.ListaTurma.Any(
                              f =>
                              (f.DataFinal == null || f.DataFinal.Value.Date > DateTime.Today) &&

                              // Remover turmas canceladas das possibilidades de matrícula. #2997
                              f.Status != enumStatusTurma.Cancelada &&
                              f.InAberta == false)));

                    if (cargaHoraria > 0)
                    {
                        ofertas = ofertas.Where(f => f.CargaHoraria == cargaHoraria);
                    }

                    var se = new DTOCurso {
                        IDSolucaoEducacional = solucaoEducacional.ID
                    };

                    foreach (var oferta in ofertas.OrderBy(x => x.DataInicioInscricoes))
                    {
                        if (oferta.TipoOferta.Equals(enumTipoOferta.Exclusiva))
                        {
                            break;
                        }

                        //Verificando se existe alguma matricula na SE
                        if (ExisteAlgumaMatriculaComoInscrito(usuario.ListaMatriculaOferta, se.IDSolucaoEducacional))
                        {
                            break;
                        }

                        //VALIDAR SE O USUARIO POSSUI ACESSO A SE: 205 (permissão a se)
                        //VALIDADO NA BUSCA

                        //VALIDAR SE O USUARIO ESTA CURSANDO OUTRA SE
                        //VERIFICA O LIMITE DE CURSOS SIMULTANEOS
                        int cursosEmAndamento =
                            usuario.ListaMatriculaOferta.Where(
                                x => x.StatusMatricula.Equals(enumStatusMatricula.Inscrito)).Count();
                        int limteCursosSimultaneos =
                            int.Parse(
                                ConfiguracaoSistemaUtil.ObterInformacoes(enumConfiguracaoSistema.CursosSimultaneos)
                                .Registro);
                        if (cursosEmAndamento >= limteCursosSimultaneos)
                        {
                            break;
                        }

                        //VALIDAR SE O USUARIO ESTA COM ALGUM ABANDONO ATIVO
                        if (new BMUsuarioAbandono().ValidarAbandonoAtivo(usuario.ID))
                        {
                            break;
                        }

                        //VERIFICA SE A OFERTA INFORMADA FOI ENCONTRADA
                        //NO CADASTRO

                        if (oferta.TipoOferta.Equals(enumTipoOferta.Continua))
                        {
                        }

                        if (oferta.TipoOferta.Equals(enumTipoOferta.Normal))
                        {
                        }

                        var qtdInscritosNaOferta =
                            oferta.ListaMatriculaOferta.Count(
                                x => (x.StatusMatricula != enumStatusMatricula.CanceladoAdm &&
                                      x.StatusMatricula != enumStatusMatricula.CanceladoAluno));

                        if (qtdInscritosNaOferta >= oferta.QuantidadeMaximaInscricoes && !oferta.FiladeEspera)
                        {
                            break;
                        }

                        var trancadoPorNaoPagante = false;

                        if (oferta.ListaNiveisTrancados != null &&
                            oferta.ListaNiveisTrancados.Any(x => x.ID == usuario.NivelOcupacional.ID))
                        {
                            if (!VerificarTrancadoParaPagante(usuario))
                            {
                                trancadoPorNaoPagante = true;
                            }
                        }

                        se.Ofertas.Add(new DTOOfertas
                        {
                            IDOferta                = oferta.ID,
                            CargaHoraria            = oferta.CargaHoraria,
                            TrancadoPorNaoPagamento = trancadoPorNaoPagante,
                            Nome = oferta.Nome
                        });
                    }

                    if (se.Ofertas.Any())
                    {
                        retorno.Cursos.Add(se);
                    }
                }
            }

            return(retorno);
        }
예제 #10
0
        public DTOConsultarOfertasPorPeriodo ConsultarOfertasPorPeriodo(DateTime dataInicio, DateTime dataFim)
        {
            var dados   = new DTOConsultarOfertasPorPeriodo();
            var ofertas = new BMOferta().ConsultarOfertasPorPeriodo(dataInicio, dataFim);

            foreach (var item in ofertas)
            {
                var dtoOferta = new DTODadosOferta
                {
                    ID   = item.ID,
                    Nome = item.Nome
                };

                var turma = item.ListaTurma.OrderByDescending(x => x.AcessoWifi).FirstOrDefault();

                switch (turma.AcessoWifi.Value)
                {
                case 1:
                    dtoOferta.AcessoWifi = "Asa Norte";
                    break;

                case 2:
                    dtoOferta.AcessoWifi = "Asa Sul";
                    break;

                case 3:
                    dtoOferta.AcessoWifi = "Asa Norte e Asa Sul";
                    break;
                }

                if (!string.IsNullOrEmpty(item.EmailResponsavel))
                {
                    dtoOferta.Responsavel.Email = item.EmailResponsavel;

                    var buscarResponsavelPorEmail = new BMUsuario().ObterPorEmail(item.EmailResponsavel);

                    if (buscarResponsavelPorEmail != null)
                    {
                        dtoOferta.Responsavel.CPF   = buscarResponsavelPorEmail.CPF;
                        dtoOferta.Responsavel.Email = buscarResponsavelPorEmail.Email;
                        dtoOferta.Responsavel.Nome  = buscarResponsavelPorEmail.Nome;
                        dtoOferta.Responsavel.UF    = buscarResponsavelPorEmail.UF.Sigla;
                    }
                }

                dtoOferta.ListaDadosMatriculados.AddRange(
                    item.ListaMatriculaOferta.Select(
                        x =>
                        new DTODadosMatriculados
                {
                    CPF            = x.Usuario.CPF,
                    DataNascimento = x.Usuario.DataNascimento,
                    Email          = x.Usuario.Email,
                    Matricula      = x.Usuario.Matricula,
                    Nome           = x.Usuario.Nome,
                    UF             = x.Usuario.UF.Sigla
                }));

                dados.ListaDadosOferta.Add(dtoOferta);
            }

            return(dados);
        }
예제 #11
0
        public DTOManterOferta ConsultaOferta(string idsOfertas, string idChaveExternaOferta, string idChaveExternaSolucaoEducacional, AuthenticationProviderRequest pAutenticacao)
        {
            DTOManterOferta ofResult = null;

            try
            {
                this.RegistrarLogExecucaoFornecedor((new BMFornecedor()).ObterPorFiltro(new Fornecedor()
                {
                    Login = pAutenticacao.Login
                }).FirstOrDefault(), "ConsultaOferta");
                using (ofertaBM = new BMOferta())
                {
                    IList <int> lsIdsOfertas = null;
                    if (!string.IsNullOrEmpty(idsOfertas))
                    {
                        lsIdsOfertas = idsOfertas.Split(',').Select(Int32.Parse).ToList();
                    }
                    var oferta = ofertaBM.ObterOfertaPorFornecedor(lsIdsOfertas, pAutenticacao.Login, idChaveExternaOferta, idChaveExternaSolucaoEducacional);
                    if (oferta == null)
                    {
                        throw new AcademicoException("Oferta não encontrada");
                    }
                    var existeProximaOferta = false;
                    // #1855 - Caso o fornecedor seja Moodle e caso a oferta esteja vencida,
                    // remover o ID da Chave Externa e continuar buscando a oferta atual.
                    if (oferta.SolucaoEducacional.Fornecedor.ID == (int)enumFornecedor.MoodleSebrae)
                    {
                        if (lsIdsOfertas == null)
                        {
                            lsIdsOfertas = new List <int>();
                        }
                        lsIdsOfertas.Add(oferta.ID);

                        if (oferta.ListaMatriculaOferta.Any(p => p.StatusMatricula != enumStatusMatricula.Inscrito))
                        {
                            oferta.IDChaveExterna = null;
                            ofertaBM.Salvar(oferta);
                        }

                        var proximaOferta = ofertaBM.ObterOfertaPorFornecedor(lsIdsOfertas, pAutenticacao.Login,
                                                                              idChaveExternaOferta, idChaveExternaSolucaoEducacional);

                        existeProximaOferta = proximaOferta != null && proximaOferta.ID != oferta.ID;
                    }

                    ofResult = new DTOManterOferta
                    {
                        IDChaveExternaOferta             = oferta.IDChaveExterna,
                        DataFimInscricoes                = oferta.DataFimInscricoes,
                        DataInicioInscricoes             = oferta.DataInicioInscricoes,
                        FiladeEspera                     = oferta.FiladeEspera,
                        TipoOferta                       = oferta.TipoOferta.ToString(),
                        IDChaveExternaSolucaoEducacional = oferta.SolucaoEducacional.IDChaveExterna,
                        ListaMatriculaAlunoOferta        = new List <DTOMatriculaSE>(),
                        ListaTurmasOferta                = new List <DTOManterTurma>(),
                        NomedaOferta                     = oferta.Nome,
                        QuantidadeMaximaInscricoes       = oferta.QuantidadeMaximaInscricoes,
                        QTCargaHoraria                   = oferta.CargaHoraria,
                        InscricaoOnline                  = oferta.InscricaoOnline,
                        QTDiasPrazo                      = oferta.DiasPrazo,
                        CodigoMoodle                     = oferta.CodigoMoodle.ToString(),
                        ProximaOferta                    = existeProximaOferta,
                        IDOferta = oferta.ID
                    };

                    foreach (var mo in oferta.ListaMatriculaOferta)
                    {
                        var dtoMatriculaSE = new DTOMatriculaSE
                        {
                            IdMatriculaOferta = mo.ID,
                            Nome             = mo.Usuario.Nome,
                            NivelOcupacional = mo.Usuario.NivelOcupacional.Nome,
                            UF                  = mo.Usuario.UF.Nome,
                            Cpf                 = mo.Usuario.CPF,
                            DataNascimento      = mo.Usuario.DataNascimento,
                            Email               = mo.Usuario.Email,
                            Telefone            = mo.Usuario.TelefoneExibicao,
                            Endereco            = mo.Usuario.Endereco,
                            Cidade              = mo.Usuario.Cidade,
                            Estado              = mo.Usuario.Estado,
                            Cep                 = mo.Usuario.Cep,
                            StatusMatricula     = mo.StatusMatricula.ToString(),
                            DataSolicitacao     = mo.DataSolicitacao,
                            DataStatusMatricula = mo.DataStatusMatricula,
                            LinkAcesso          = mo.LinkAcesso,
                            LinkCertificado     = mo.LinkCertificado
                        };

                        if (mo.MatriculaTurma != null && mo.MatriculaTurma.Count > 0)
                        {
                            var matriculaTurma = mo.MatriculaTurma.First();
                            dtoMatriculaSE.IDTurma             = matriculaTurma.Turma.ID;
                            dtoMatriculaSE.IDChaveExternaTurma = matriculaTurma.Turma.IDChaveExterna;
                            dtoMatriculaSE.NomeTurma           = matriculaTurma.Turma.Nome;
                            dtoMatriculaSE.DataMatriculaTurma  = matriculaTurma.DataMatricula;
                            dtoMatriculaSE.DataLimite          = matriculaTurma.DataLimite;
                            dtoMatriculaSE.Nota1               = matriculaTurma.Nota1;
                            dtoMatriculaSE.Nota2               = matriculaTurma.Nota2;
                            dtoMatriculaSE.MediaFinal          = matriculaTurma.MediaFinal;
                            dtoMatriculaSE.NotaOnline          = matriculaTurma.ValorNotaProvaOnline;
                            dtoMatriculaSE.DataSolicitacao     = mo.DataSolicitacao;
                            dtoMatriculaSE.ValorNotaMinima     = matriculaTurma.Turma.NotaMinima;
                            dtoMatriculaSE.AcessoAposConclusao = matriculaTurma.Turma.AcessoAposConclusao ? 1 : 0;
                        }
                        ofResult.ListaMatriculaAlunoOferta.Add(dtoMatriculaSE);
                    }
                    //Listando as turmas vinculadas à Oferta.
                    using (var bmTurma = new BMTurma())
                    {
                        ofResult.ListaTurmasOferta = new BMTurma()
                                                     .ObterTodos()
                                                     .Where(turma => turma.Oferta.ID == oferta.ID)
                                                     .ToList()
                                                     .Select(MapearListaParaDtoManterTurma())
                                                     .ToList();
                    }
                }
            }
            catch (AcademicoException ex)
            {
                throw new AcademicoException(ex.Message);
            }
            catch (Exception ex)
            {
                ErroUtil.Instancia.TratarErro(ex);
            }

            return(ofResult);
        }
예제 #12
0
        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");
        }
예제 #13
0
 public ManterOferta()
     : base()
 {
     bmOferta = new BMOferta();
 }
예제 #14
0
        public string MatriculaSolucaoEducacionalGestorUC(int idOferta, string cpf, int idStatusMatricula, int idTurma, string solicitante, string dataInscricao = "", string dataConclusao = "")
        {
            var manterUsuario = new ManterUsuario();
            var usuario       = manterUsuario.ObterPorCPF(cpf);
            var usuarioLogado = new BMUsuario().ObterPorCPF(solicitante);

            if (!(idStatusMatricula == 2 || idStatusMatricula == 6 || idStatusMatricula == 8))
            {
                throw new AcademicoException("Status da matrícula inválido");
            }
            if (usuario == null)
            {
                throw new AcademicoException("CPF não localizado na base");
            }

            var oferta = new BMOferta().ObterPorId(idOferta);

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

            if (oferta.ListaMatriculaOferta == null)
            {
                oferta.ListaMatriculaOferta = new List <MatriculaOferta>();
            }

            if (oferta.ListaMatriculaOferta.Any(x => x.Usuario.ID == usuario.ID && (x.StatusMatricula == enumStatusMatricula.Inscrito || x.StatusMatricula == enumStatusMatricula.PendenteConfirmacaoAluno)))
            {
                throw new AcademicoException("Usuário já inscrito nesta oferta");
            }

            //VERIFICA PRÉ-REQUISITO
            if (oferta.SolucaoEducacional.ListaPreRequisito.Any())
            {
                var aprovados = new List <enumStatusMatricula> {
                    enumStatusMatricula.Aprovado,
                    enumStatusMatricula.Concluido
                };

                foreach (var item in oferta.SolucaoEducacional.ListaPreRequisito)
                {
                    if (!usuario.ListaMatriculaOferta.Any(x => aprovados.Contains(x.StatusMatricula) && x.Oferta.SolucaoEducacional.ID == item.PreRequisito.ID))
                    {
                        throw new AcademicoException("Erro: Existem soluções como pré-requisito que não estão cursadas");
                    }
                }
            }

            if (usuarioLogado.UF.ID != (int)enumUF.NA)
            {
                if (usuario.UF.ID != usuarioLogado.UF.ID)
                {
                    throw new AcademicoException("Este usuário não é do seu estado");
                }
            }

            var ofertaEstado = oferta.ListaPermissao.FirstOrDefault(f => f.Uf != null && f.Uf.ID == usuario.UF.ID);

            if (ofertaEstado == null)
            {
                throw new AcademicoException("Erro: A vaga não é permitida para o seu estado");
            }
            if (ofertaEstado.QuantidadeVagasPorEstado > 0)
            {
                var qtdMatriculaOfertaPorEstado = oferta.ListaMatriculaOferta.Count(x => !x.IsUtilizado() && x.UF.ID == ofertaEstado.Uf.ID);

                if (qtdMatriculaOfertaPorEstado >= ofertaEstado.QuantidadeVagasPorEstado && !oferta.FiladeEspera)
                {
                    throw new AcademicoException("Erro: As vagas já foram preenchidas para o seu estado");
                }
            }

            if (usuario.ListaMatriculaOferta.Any(x => x.Usuario.ID == usuario.ID && x.Oferta.ID == oferta.ID && x.Oferta.SolucaoEducacional.ID == oferta.SolucaoEducacional.ID && (x.StatusMatricula == enumStatusMatricula.Inscrito ||
                                                                                                                                                                                   x.StatusMatricula == enumStatusMatricula.PendenteConfirmacaoAluno ||
                                                                                                                                                                                   x.StatusMatricula == enumStatusMatricula.Aprovado ||
                                                                                                                                                                                   x.StatusMatricula == enumStatusMatricula.Concluido
                                                                                                                                                                                   )))
            {
                throw new AcademicoException("Usuário já cursou esta Solução Educacional");
            }

            var matriculaOferta = new MatriculaOferta
            {
                Usuario         = usuario,
                Oferta          = oferta,
                DataSolicitacao = DateTime.Now,
                StatusMatricula = (enumStatusMatricula)idStatusMatricula,
                UF = usuario.UF,
                NivelOcupacional = usuario.NivelOcupacional,
                Auditoria        = new Auditoria(solicitante)
            };

            (new ManterMatriculaOferta()).VerificarPoliticaDeConsequencia(matriculaOferta);

            if (matriculaOferta.StatusMatricula == enumStatusMatricula.Inscrito)
            {
                Turma turma;
                if (idTurma > 0)
                {
                    turma = oferta.ListaTurma.FirstOrDefault(x => x.ID == idTurma);
                    if (turma == null)
                    {
                        throw new AcademicoException("A turma informada não pertence a oferta informada");
                    }
                }
                else
                {
                    turma = oferta.ListaTurma.FirstOrDefault();
                }

                if (turma != null)
                {
                    if (!turma.InAberta)
                    {
                        throw new AcademicoException("A turma não está aberta para inscrições");
                    }

                    if (!usuarioLogado.IsGestor() && (turma.Oferta.DataInicioInscricoes > DateTime.Now || (turma.Oferta.DataFimInscricoes.HasValue && turma.Oferta.DataFimInscricoes.Value < DateTime.Now)))
                    {
                        throw new AcademicoException("A oferta selecionada está fora do período de inscrição");
                    }

                    //Verifica se a quantidade de matriculas para a turma foi preenchida.
                    if (turma.QuantidadeMaximaInscricoes > 0 && turma.QuantidadeAlunosMatriculadosNaTurma >= turma.QuantidadeMaximaInscricoes)
                    {
                        throw new AcademicoException("Todas as vagas para esta turma foram preenchidas");
                    }

                    var matriculaTurma = new MatriculaTurma
                    {
                        Turma           = turma,
                        MatriculaOferta = matriculaOferta,
                        DataMatricula   = DateTime.Now,
                        Auditoria       = new Auditoria(solicitante)
                    };

                    matriculaTurma.DataLimite = matriculaTurma.CalcularDataLimite(matriculaOferta.Oferta);

                    matriculaTurma.DataMatricula = DateTime.Now;
                    if (!usuarioLogado.IsGestor() && matriculaOferta.Oferta.DataInicioInscricoes.HasValue && matriculaOferta.Oferta.DataFimInscricoes.HasValue && !matriculaTurma.DataMatricula.Date.Between(matriculaOferta.Oferta.DataInicioInscricoes.Value, matriculaOferta.Oferta.DataFimInscricoes.Value))
                    {
                        throw new AcademicoException(
                                  "Data de matrícula fora do periodo de inscrição da turma que é de " +
                                  matriculaTurma.Turma.DataInicio.ToString("dd/MM/yyyy") + " a " +
                                  (matriculaTurma.Turma.DataFinal != null
                                ? matriculaTurma.Turma.DataFinal.Value.ToString("dd/MM/yyyy")
                                : ""));
                    }

                    if (matriculaOferta.MatriculaTurma == null)
                    {
                        matriculaOferta.MatriculaTurma = new List <MatriculaTurma>();
                    }

                    matriculaOferta.MatriculaTurma.Add(matriculaTurma);
                }
            }

            new BMMatriculaOferta().Salvar(matriculaOferta);

            try
            {
                if (matriculaOferta.StatusMatricula == enumStatusMatricula.PendenteConfirmacaoAluno)
                {
                    var templateMensagemEmailOfertaExclusiva = TemplateUtil.ObterInformacoes(enumTemplate.EnvioEmailParaPendenteDeConfirmacao);

                    var assuntoDoEmail = templateMensagemEmailOfertaExclusiva.Assunto;

                    var corpoEmail = templateMensagemEmailOfertaExclusiva.TextoTemplate;

                    var emailDoDestinatario = matriculaOferta.Usuario.Email;

                    if (matriculaOferta.StatusMatricula == enumStatusMatricula.PendenteConfirmacaoAluno)
                    {
                        assuntoDoEmail = assuntoDoEmail.Replace("#NOME_CURSO", matriculaOferta.NomeSolucaoEducacional);
                        corpoEmail     = new ManterOferta().CorpoEmail(corpoEmail, matriculaOferta);

                        EmailUtil.Instancia.EnviarEmail(emailDoDestinatario.Trim(), assuntoDoEmail, corpoEmail);
                    }
                }
            }
            catch
            {
                // ignored
            }

            return(string.Empty);
        }
예제 #15
0
        public void ManterOfertaFornecedor(DTOManterOferta dtoOferta, AuthenticationProviderRequest pAutenticacao)
        {
            Fornecedor fornecedor = new BMFornecedor().ObterPorFiltro(new Fornecedor()
            {
                Login = pAutenticacao.Login
            }).FirstOrDefault();

            try
            {
                this.RegistrarLogExecucaoFornecedor(fornecedor, "ManterOferta");

                using (ofertaBM = new BMOferta())
                {
                    ValidarCamposObrigatoriosOferta(dtoOferta);

                    SolucaoEducacional solucaoEducacional = new BMSolucaoEducacional().ObterSolucaoEducacionalPorFornecedor(pAutenticacao.Login, dtoOferta.IDChaveExternaSolucaoEducacional);
                    if (solucaoEducacional == null)
                    {
                        throw new AcademicoException("Não foi possível encontrar a Solução Educacional");
                    }
                    Oferta oferta = ofertaBM.ObterOfertaPorFornecedor(null, fornecedor.Login, dtoOferta.IDChaveExternaOferta, dtoOferta.IDChaveExternaSolucaoEducacional);

                    if (oferta == null)
                    {
                        oferta = new Oferta();
                        oferta.IDChaveExterna     = dtoOferta.IDChaveExternaOferta;
                        oferta.SolucaoEducacional = solucaoEducacional;
                        try
                        {
                            oferta.TipoOferta = (enumTipoOferta)Enum.Parse(typeof(enumTipoOferta), dtoOferta.TipoOferta.ToString());
                        }
                        catch
                        {
                            throw new AcademicoException("Não foi possível encontrar o Tipo da Oferta");
                        }
                        oferta.ListaMatriculaOferta = new List <MatriculaOferta>();
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(dtoOferta.IDChaveExternaOfertaNova))
                        {
                            oferta.IDChaveExterna = dtoOferta.IDChaveExternaOfertaNova;
                        }
                    }

                    oferta.DataFimInscricoes    = dtoOferta.DataFimInscricoes;
                    oferta.DataInicioInscricoes = dtoOferta.DataInicioInscricoes;
                    oferta.FiladeEspera         = dtoOferta.FiladeEspera;
                    oferta.InscricaoOnline      = dtoOferta.InscricaoOnline;
                    oferta.Nome = dtoOferta.NomedaOferta;

                    if (dtoOferta.IdCertificado > 0)
                    {
                        oferta.CertificadoTemplate = new BMCertificadoTemplate().ObterPorID(dtoOferta.IdCertificado);
                    }

                    int codigoMoodle = 0;

                    if (int.TryParse(dtoOferta.CodigoMoodle, out codigoMoodle))
                    {
                        oferta.CodigoMoodle = codigoMoodle;
                    }

                    if (dtoOferta.QTDiasPrazo.HasValue)
                    {
                        oferta.DiasPrazo = dtoOferta.QTDiasPrazo.Value;
                    }
                    else
                    {
                        oferta.DiasPrazo = 30;
                    }

                    oferta.QuantidadeMaximaInscricoes = dtoOferta.QuantidadeMaximaInscricoes;
                    oferta.Auditoria    = new Auditoria(pAutenticacao.Login);
                    oferta.CargaHoraria = dtoOferta.QTCargaHoraria;

                    if (dtoOferta.ListaMatriculaAlunoOferta != null && dtoOferta.ListaMatriculaAlunoOferta.Count > 0)
                    {
                        var manterItemTrilhaParticipacao = new BP.ManterItemTrilhaParticipacao();

                        foreach (var dtoMatriculaSE in dtoOferta.ListaMatriculaAlunoOferta)
                        {
                            if (string.IsNullOrWhiteSpace(dtoMatriculaSE.Cpf))
                            {
                                throw new AcademicoException("O CPF do aluno é obrigatório");
                            }
                            if (string.IsNullOrWhiteSpace(dtoMatriculaSE.StatusMatricula))
                            {
                                throw new AcademicoException("O status da matrícula do aluno é obrigatório");
                            }

                            enumStatusMatricula statusMatricula;
                            try
                            {
                                statusMatricula = (enumStatusMatricula)Enum.Parse(typeof(enumStatusMatricula), dtoMatriculaSE.StatusMatricula);
                            }
                            catch
                            {
                                throw new AcademicoException("Status da matrícula inválido");
                            }

                            if (statusMatricula == enumStatusMatricula.CanceladoAdm || statusMatricula == enumStatusMatricula.CanceladoAluno)
                            {
                                continue;
                            }

                            MatriculaOferta matriculaOferta = null;
                            Usuario         usuario         = null;

                            if (dtoMatriculaSE.IdMatriculaOferta > 0)
                            {
                                matriculaOferta = oferta.ListaMatriculaOferta.Where(x => x.ID == dtoMatriculaSE.IdMatriculaOferta).FirstOrDefault();
                                usuario         = matriculaOferta.Usuario;
                            }
                            else
                            {
                                matriculaOferta = new MatriculaOferta();
                                usuario         = (new BMUsuario()).ObterPorCPF(dtoMatriculaSE.Cpf);
                                if (usuario == null)
                                {
                                    throw new AcademicoException("Não foi possível encontrar o aluno");
                                }
                                matriculaOferta.Oferta           = oferta;
                                matriculaOferta.Usuario          = usuario;
                                matriculaOferta.UF               = usuario.UF;
                                matriculaOferta.NivelOcupacional = usuario.NivelOcupacional;
                            }

                            if (matriculaOferta.ID == 0)
                            {
                                //Criar Matricula Oferta
                                matriculaOferta.StatusMatricula     = statusMatricula;
                                matriculaOferta.Auditoria           = new Auditoria(pAutenticacao.Login);
                                matriculaOferta.DataSolicitacao     = dtoMatriculaSE.DataSolicitacao;
                                matriculaOferta.DataStatusMatricula = dtoMatriculaSE.DataStatusMatricula;
                                matriculaOferta.LinkAcesso          = dtoMatriculaSE.LinkAcesso;
                                matriculaOferta.LinkCertificado     = dtoMatriculaSE.LinkCertificado;

                                if (!string.IsNullOrWhiteSpace(dtoMatriculaSE.IDChaveExternaTurma))
                                {
                                    //Criar matricula Turma
                                    Turma turma = new BMTurma().ObterTurmaPorFornecedor(fornecedor.Login, dtoMatriculaSE.IDChaveExternaTurma);
                                    if (turma != null)
                                    {
                                        MatriculaTurma matriculaTurma = new MatriculaTurma()
                                        {
                                            Turma                = turma,
                                            MatriculaOferta      = matriculaOferta,
                                            DataMatricula        = dtoMatriculaSE.DataMatriculaTurma.Value,
                                            DataLimite           = dtoMatriculaSE.DataLimite.Value,
                                            Nota1                = dtoMatriculaSE.Nota1,
                                            Nota2                = dtoMatriculaSE.Nota2,
                                            MediaFinal           = dtoMatriculaSE.MediaFinal,
                                            ValorNotaProvaOnline = dtoMatriculaSE.NotaOnline,
                                            Auditoria            = new Auditoria(pAutenticacao.Login),
                                        };
                                        if (matriculaOferta.MatriculaTurma == null)
                                        {
                                            matriculaOferta.MatriculaTurma = new List <MatriculaTurma>();
                                        }

                                        matriculaOferta.MatriculaTurma.Add(matriculaTurma);
                                    }
                                }
                            }
                            else
                            {
                                //Alterar Dados da Matricula Oferta
                                bool terminou = false;
                                if (matriculaOferta.StatusMatricula != statusMatricula && (statusMatricula == enumStatusMatricula.Aprovado || statusMatricula == enumStatusMatricula.Concluido))
                                {
                                    terminou = true;
                                }
                                matriculaOferta.StatusMatricula     = statusMatricula;
                                matriculaOferta.DataStatusMatricula = dtoMatriculaSE.DataStatusMatricula;
                                matriculaOferta.LinkAcesso          = dtoMatriculaSE.LinkAcesso;
                                matriculaOferta.LinkCertificado     = dtoMatriculaSE.LinkCertificado;
                                matriculaOferta.Auditoria           = new Auditoria(pAutenticacao.Login);
                                //matriculaOferta.DataSolicitacao = dtoMatriculaSE.DataSolicitacao;

                                if (!string.IsNullOrWhiteSpace(dtoMatriculaSE.IDChaveExternaTurma))
                                {
                                    if (matriculaOferta.MatriculaTurma != null && matriculaOferta.MatriculaTurma.Count > 0)
                                    {
                                        matriculaOferta.MatriculaTurma[0].DataMatricula        = dtoMatriculaSE.DataMatriculaTurma.Value;
                                        matriculaOferta.MatriculaTurma[0].DataLimite           = dtoMatriculaSE.DataLimite.Value;
                                        matriculaOferta.MatriculaTurma[0].Nota1                = dtoMatriculaSE.Nota1;
                                        matriculaOferta.MatriculaTurma[0].Nota2                = dtoMatriculaSE.Nota2;
                                        matriculaOferta.MatriculaTurma[0].MediaFinal           = dtoMatriculaSE.MediaFinal;
                                        matriculaOferta.MatriculaTurma[0].ValorNotaProvaOnline = dtoMatriculaSE.NotaOnline;

                                        if (terminou)
                                        {
                                            matriculaOferta.MatriculaTurma[0].DataTermino = DateTime.Now;
                                            manterItemTrilhaParticipacao.AtualizarStatusParticipacoesTrilhas(matriculaOferta);
                                        }

                                        matriculaOferta.MatriculaTurma[0].Auditoria = new Auditoria(pAutenticacao.Login);
                                    }
                                    else
                                    {
                                        Turma turma = new BMTurma().ObterTurmaPorFornecedor(fornecedor.Login, dtoMatriculaSE.IDChaveExternaTurma);
                                        if (turma != null)
                                        {
                                            MatriculaTurma matriculaTurma = new MatriculaTurma()
                                            {
                                                Turma                = turma,
                                                MatriculaOferta      = matriculaOferta,
                                                DataMatricula        = dtoMatriculaSE.DataMatriculaTurma.Value,
                                                DataLimite           = dtoMatriculaSE.DataLimite.Value,
                                                Nota1                = dtoMatriculaSE.Nota1,
                                                Nota2                = dtoMatriculaSE.Nota2,
                                                MediaFinal           = dtoMatriculaSE.MediaFinal,
                                                ValorNotaProvaOnline = dtoMatriculaSE.NotaOnline,
                                                Auditoria            = new Auditoria(pAutenticacao.Login)
                                            };

                                            if (matriculaOferta.MatriculaTurma == null)
                                            {
                                                matriculaOferta.MatriculaTurma = new List <MatriculaTurma>();
                                            }

                                            matriculaOferta.MatriculaTurma.Add(matriculaTurma);
                                        }
                                    }
                                }
                            }
                            if (matriculaOferta.ID == 0)
                            {
                                oferta.ListaMatriculaOferta.Add(matriculaOferta);
                            }
                        }
                    }

                    if (oferta.ID != 0)
                    {
                        ofertaBM.EvictOferta(oferta);
                    }

                    ofertaBM.Salvar(oferta);
                }
            }
            catch (AcademicoException ex)
            {
                throw new AcademicoException(ex.Message);
            }
            catch (Exception ex)
            {
                ErroUtil.Instancia.TratarErro(ex);
            }
        }
예제 #16
0
        public DTOGestorUC ConsultarDisponibilidadeGestorUC(int idSolucaoEducacional, string cpf, string nome, int idOferta, int turmaId, string cpfGestor)
        {
            Usuario usuario = new BMUsuario().ObterPorCPF(cpfGestor);

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

            if (usuario.ListaPerfil == null)
            {
                throw new AcademicoException("Usuário sem permissão de acesso à funcionalidade");
            }

            if (!usuario.ListaPerfil.Any(x => x.Perfil.ID == (int)enumPerfil.GestorUC))
            {
                throw new AcademicoException("Usuário sem perfil de gestor");
            }

            var listaDTOPermissaoOfertas = new BMOferta().ObterListaDePermissoes(usuario.ID);

            if (listaDTOPermissaoOfertas == null || !listaDTOPermissaoOfertas.Any())
            {
                throw new AcademicoException("Não há ofertas disponíveis");
            }

            var idOfertas = listaDTOPermissaoOfertas.Where(x => x.PermiteGestorUC &&
                                                           ((x.DataFim.HasValue &&
                                                             x.DataFim.Value.Date >= DateTime.Today) ||
                                                            (!x.DataFim.HasValue)) &&
                                                           (x.DataInicioInscricoes.HasValue &&
                                                            x.DataInicioInscricoes.Value.Date <=
                                                            DateTime.Today) &&
                                                           x.IdSolucaoEducacional == idSolucaoEducacional)
                            .OrderBy(x => x.DataInicio)
                            .Select(x => x.IdOferta).Distinct().ToList();

            if (idOfertas == null || idOfertas.Count() == 0)
            {
                throw new AcademicoException("Não há ofertas disponíveis");
            }

            if (idOferta == 0)
            {
                idOferta = idOfertas.FirstOrDefault();
            }

            Oferta oferta = new BMOferta().ObterPorId(idOferta);

            //if (usuario.UF.ID > 1 && !(oferta.ListaPermissao.Any(x => x.Uf.ID == usuario.UF.ID)))
            //    oferta = null;

            if (oferta == null)
            {
                throw new AcademicoException("Erro ao recuperar oferta");
            }

            int qtdInscritosNaOferta = oferta.ListaMatriculaOferta.Where(x =>
                                                                         (x.StatusMatricula != enumStatusMatricula.CanceladoAdm ||
                                                                          x.StatusMatricula != enumStatusMatricula.CanceladoAluno) ||
                                                                         x.StatusMatricula != enumStatusMatricula.FilaEspera).Count();

            DTOGestorUC retorno = new DTOGestorUC();

            foreach (var item in idOfertas)
            {
                var objOferta           = new Sebrae.Academico.BP.DTO.Dominio.DTOOferta();
                var objOfertaRecuperada = new BMOferta().ObterPorId(item);
                if (item == idOferta)
                {
                    objOferta.ID   = oferta.ID;
                    objOferta.Nome = oferta.Nome;
                }
                else
                {
                    objOferta.ID   = objOfertaRecuperada.ID;
                    objOferta.Nome = objOfertaRecuperada.Nome;
                }
                retorno.ListaOfertas.Add(objOferta);
            }


            retorno.IdOferta                       = oferta.ID;
            retorno.NomeOferta                     = oferta.Nome;
            retorno.DataInicioInscricoes           = oferta.DataInicioInscricoes;
            retorno.DataFimInscricoes              = oferta.DataFimInscricoes;
            retorno.QtdVagasDisponiveis            = oferta.QuantidadeMaximaInscricoes - qtdInscritosNaOferta;
            retorno.PermiteAlterarStatusPeloGestor = (oferta.AlteraPeloGestorUC.HasValue ? oferta.AlteraPeloGestorUC.Value : true);

            if (retorno.QtdVagasDisponiveis < 0)
            {
                retorno.QtdVagasDisponiveis = 0;
            }

            IList <MatriculaOferta> listaMatriculaOferta = oferta.ListaMatriculaOferta.Where(f => f.StatusMatricula != enumStatusMatricula.CanceladoAdm).ToList();

            if (usuario.UF.ID == 1)
            {
                listaMatriculaOferta = oferta.ListaMatriculaOferta;
            }
            else if (usuario.UF.ID > 1)
            {
                listaMatriculaOferta = oferta.ListaMatriculaOferta.Where(f => f.Usuario.UF.ID == usuario.UF.ID).ToList();
            }



            if (oferta.ListaMatriculaOferta != null && oferta.ListaMatriculaOferta.Count > 0)
            {
                if (!string.IsNullOrEmpty(nome))
                {
                    listaMatriculaOferta = listaMatriculaOferta.Where(f => (f.Usuario.Nome.Contains(nome) || f.Usuario.Nome.Contains(nome.ToUpper()))).ToList();
                }

                if (!string.IsNullOrEmpty(cpf))
                {
                    listaMatriculaOferta = listaMatriculaOferta.Where(f => f.Usuario.CPF.Contains(cpf)).ToList();
                }

                if (turmaId > 0)
                {
                    listaMatriculaOferta = listaMatriculaOferta.Where(f => f.MatriculaTurma.Any(c => c.Turma.ID == turmaId)).ToList();
                }
            }

            foreach (MatriculaOferta matriculaOferta in listaMatriculaOferta.OrderBy(x => x.Usuario.Nome))
            {
                DTOGestorUCUsuario usuarioInscrito = new DTOGestorUCUsuario();
                usuarioInscrito.NomeUsuario       = matriculaOferta.Usuario.Nome;
                usuarioInscrito.CPFUsuario        = matriculaOferta.Usuario.CPF;
                usuarioInscrito.DataSolicitacao   = matriculaOferta.DataSolicitacao;
                usuarioInscrito.IdMatriculaOferta = matriculaOferta.ID;
                usuarioInscrito.NivelOcupacional  = matriculaOferta.Usuario.NivelOcupacional.Nome;
                usuarioInscrito.StatusMatriculaID = (int)matriculaOferta.StatusMatricula;
                usuarioInscrito.StatusMatricula   = matriculaOferta.StatusMatriculaFormatado;
                usuarioInscrito.UF = matriculaOferta.Usuario.UF.Sigla;

                if (matriculaOferta.StatusMatricula == enumStatusMatricula.Inscrito)
                {
                    usuarioInscrito.PermiteCancelamento = true;
                }
                else
                {
                    usuarioInscrito.PermiteCancelamento = false;
                }

                if (matriculaOferta.MatriculaTurma != null && matriculaOferta.MatriculaTurma.Count() > 0)
                {
                    usuarioInscrito.Turma.ID = matriculaOferta.MatriculaTurma.FirstOrDefault().Turma.ID;
                    usuarioInscrito.Turma.IDChaveExternaTurma = matriculaOferta.MatriculaTurma.FirstOrDefault().Turma.IDChaveExterna;
                    usuarioInscrito.Turma.Nome = matriculaOferta.NomeTurma;
                }

                retorno.ListaMatriculados.Add(usuarioInscrito);
            }

            return(retorno);
        }
 public ManterFormacaoDeMultiplicadores()
 {
     _bmMatriculaOferta = new BMMatriculaOferta();
     _bmOferta          = new BMOferta();
 }