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); }
public DTODisponibilidadeSolucaoEducacionalPorUsuarioT ConsultarDisponibilidadeMatriculaPorUsuario( int pIdUsuario, int?pagina) { var retorno = new DTODisponibilidadeSolucaoEducacionalPorUsuarioT(); var usuario = new ManterUsuario().ObterUsuarioPorID(pIdUsuario); new ManterMatriculaOferta().ObterPorUsuario(pIdUsuario); var listaPermissaoSolucaoEducacional = new BMSolucaoEducacional().ObterListaDePermissoes(usuario.ID, 0); var idsSolucoesPermissoes = listaPermissaoSolucaoEducacional.Select(f => f.SolucaoEducacional.ID).ToList(); var filtro = new SolucaoEducacional(); var recuperarListaSolucaoEducacional = new ManterSolucaoEducacional().ObterPorFiltroPesquisa(filtro, true, idsSolucoesPermissoes); const int skip = 5; var paginaAtual = (pagina.HasValue && pagina.Value > 0) ? (pagina.Value - 1) : 0; retorno.PaginaAtual = (paginaAtual + 1); retorno.QtdeSolucoes = recuperarListaSolucaoEducacional.Count(); retorno.QtdePaginas = Convert.ToInt32((retorno.QtdeSolucoes / skip)); if ((retorno.QtdeSolucoes % skip) > 0) { retorno.QtdePaginas++; } foreach (var item in recuperarListaSolucaoEducacional.Skip((paginaAtual * skip)).Take(skip).ToList()) { retorno.DTODisponibilidadeSolucaoEducacional.Add( ConsultarDisponibilidadeMatriculaSolucaoEducacional(pIdUsuario, item.ID)); } return(retorno); }
/// <summary> /// Verificar se o usuário informado pode se inscrever na solução informada. /// </summary> /// <param name="usuario">Usuário a ser matriculado.</param> /// <param name="solucaoId">ID da solução que o usuário deseja se matricular.</param> /// <param name="retorno">Objeto de retorno com DTO das informações de bloqueio de matrícula, caso necessário.</param> /// <returns>True: usuário não pode se inscrever por causa de algum bloqueio. False: usuário pode proceder com a inscrição.</returns> private static bool UsuarioPossuiBloqueioInscricao(Usuario usuario, int solucaoId, ref DTODisponibilidadeSolucaoEducacional retorno) { // Verifica pendências if (PossuiQuestionarioPendente(usuario, ref retorno)) { return(true); } // Verifica se o usuário está matriculado no limite de cursos simultâneos. if (UsuarioPossuiLimiteInscricoesSimultaneas(usuario.ID, ref retorno)) { return(true); } // Obter todas as matrículas da Solução. var matriculasSe = new ManterMatriculaOferta().ObterPorUsuarioESolucaoEducacional(usuario.ID, solucaoId).ToList(); // Verifica se o aluno já está matriculado na SE if (UsuarioPossuiMatriculaSolucao(matriculasSe, solucaoId, ref retorno)) { return(true); } // Verifica se existe alguma matricula como Pendente de Confirmação. if (UsuarioPossuiPendenciaConfirmacao(matriculasSe, usuario, ref retorno)) { return(true); } // Se chegou até aqui, pode retornar os dados do termo de aceite e da política de consequência. var solucaoEducacional = new ManterSolucaoEducacional().ObterSolucaoEducacionalPorId(solucaoId); // Verifica se o usuário tem permissão para se inscrever na SE. if (UsuarioPossuiPermissaoSolucao(usuario, solucaoEducacional, ref retorno)) { return(true); } // MÉTODO IMPORTANTE!!! // Verificar bloqueio de acordo com as políticas de consequência. if (UsuarioPossuiBloqueioPoliticaDeConsequencia(usuario.ID, solucaoId, ref retorno)) { return(true); } // Sse o aluno estiver inscrito em algum programa, verifica se existe algum pré-requisito não cursado. if (UsuarioPossuiPendenciaCapacitacaoPrograma(solucaoId, usuario, ref retorno)) { return(true); } if (solucaoEducacional.TermoAceite != null) { retorno.NomeTermoAceite = solucaoEducacional.TermoAceite.Nome; retorno.TextoTermoAceite = solucaoEducacional.TermoAceite.Texto; retorno.TextoPoliticaConsequencia = solucaoEducacional.TermoAceite.PoliticaConsequencia; } // Verifica se a Solução está Inativa. if (solucaoEducacional.Ativo == false) { retorno.TextoDisponibilidade = "Solução Educacional não está ativa no momento"; return(true); } return(false); }
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); }