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); }