public void vinculaMatriculaOferta(MatriculaOferta matriculaOferta) { matriculaOferta = new ManterMatriculaOferta().ObterMatriculaOfertaPorID(matriculaOferta.ID); // VERIFICA SE MATRICULA OFERTA PERTENCE A ALGUM ITEM TRILHA if (!matriculaOferta.ListaItemTrilhaParticipacao.Any()) { //BUSCA A LISTA DE TURMAS DA MESMA OFERTA CONTINUA var turmasOfertaID = new ManterTurma().ObterTodosIQueryable() .Where(x => x.Oferta.ID == matriculaOferta.Oferta.ID) .Select(x => x.ID).ToList(); //BUSCA A LISTA DE MATRICULAS OFERTA DO USUARIO POR TURMA var matriculasOfertaID = new ManterMatriculaTurma().ObterTodosIQueryable() .Where(x => turmasOfertaID.Contains(x.Turma.ID) && matriculaOferta.Usuario.ID == x.MatriculaOferta.Usuario.ID) .Select(y => y.MatriculaOferta.ID) .ToList(); var itemTrilhaParticipacaoUsuario = new ManterItemTrilhaParticipacao().ObterTodosIQueryable() .FirstOrDefault(x => matriculasOfertaID.Contains(x.MatriculaOferta.ID) && x.Autorizado == false); if (itemTrilhaParticipacaoUsuario != null) { itemTrilhaParticipacaoUsuario.MatriculaOferta = matriculaOferta; Salvar(itemTrilhaParticipacaoUsuario); } } }
private static void PreencherOfertas(List <MatriculaOferta> result) { var ofertasIds = result.Select(x => x.Oferta.ID).Distinct().ToList(); // Pegar os dados das ofertas vindos de apenas uma consulta. Muito mais performático // do que executar várias consultas seguidas. var ofertas = new ManterOferta().ObterTodasOfertas().Select(x => new Oferta { ID = x.ID, AlteraPeloGestorUC = x.AlteraPeloGestorUC, SolucaoEducacional = new SolucaoEducacional { ID = x.SolucaoEducacional.ID }, CertificadoTemplate = x.CertificadoTemplate != null ? new CertificadoTemplate { ID = x.CertificadoTemplate.ID } : null }) .Where(x => ofertasIds.Contains(x.ID)).ToList(); // Preencher dados das SEs. var idsSes = ofertas.Select(x => x.SolucaoEducacional.ID).Distinct().ToList(); var solucoes = new ManterSolucaoEducacional().ObterTodosIQueryable() .Select(x => new SolucaoEducacional { ID = x.ID, Nome = x.Nome, Ativo = x.Ativo, Fornecedor = new Fornecedor { ID = x.Fornecedor.ID }, UFGestor = new Uf { ID = x.UFGestor.ID } }) .Where(x => idsSes.Contains(x.ID)); var turmas = new ManterTurma().ObterTodosIQueryable() .Select(x => new Turma { ID = x.ID, Nome = x.Nome, Oferta = new Oferta { ID = x.Oferta.ID } }) .Where(x => ofertasIds.Contains(x.Oferta.ID)); foreach (var oferta in ofertas) { oferta.SolucaoEducacional = solucoes.FirstOrDefault(x => x.ID == oferta.SolucaoEducacional.ID); oferta.ListaTurma = turmas.Where(x => x.Oferta.ID == oferta.ID).ToList(); var matriculasOferta = result.Where(x => x.Oferta.ID == oferta.ID); foreach (var matricula in matriculasOferta) { matricula.Oferta = oferta; } } }