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