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 PreencherMatriculaTurma(List <MatriculaOferta> result) { // Pegar os dados das matrículas turmas vindos de apenas uma consulta. Muito mais performático // do que executar várias consultas seguidas. var matriculasIds = result.Select(x => x.ID).Distinct().ToList(); var matriculasTurmas = new ManterMatriculaTurma().ObterTodosIQueryable().Select(x => new MatriculaTurma { ID = x.ID, DataTermino = x.DataTermino, MediaFinal = x.MediaFinal, MatriculaOferta = new MatriculaOferta { ID = x.MatriculaOferta.ID }, Turma = new Turma { ID = x.Turma.ID, Nome = x.Turma.Nome } }) .Where(x => matriculasIds.Contains(x.MatriculaOferta.ID)).ToList(); var turmasIds = matriculasTurmas.Select(x => x.Turma.ID).Distinct().ToList(); var avaliacoes = new ManterAvaliacao().ObterTodasIQueryable() .Select(x => new Avaliacao { ID = x.ID, Turma = new Turma { ID = x.Turma.ID } }) .Where(x => turmasIds.Contains(x.Turma.ID)); // Atualizar avaliações. foreach (var matriculaTurma in matriculasTurmas) { matriculaTurma.Turma.Avaliacoes = avaliacoes.Where(x => x.Turma.ID == matriculaTurma.Turma.ID).ToList(); } // Atualizar matrículas turmas direto nas matrículas ofertas. foreach (var matricula in result) { matricula.MatriculaTurma = matriculasTurmas.Where(x => x.MatriculaOferta.ID == matricula.ID).ToList(); } }