public async Task <DiaEventoAula> ObterEventoAulasDia(FiltroEventosAulasCalendarioDiaDto filtro) { List <EventosAulasTipoDiaDto> eventosAulas = new List <EventosAulasTipoDiaDto>(); if (!filtro.TodasTurmas && string.IsNullOrWhiteSpace(filtro.TurmaId)) { throw new NegocioException("É necessario informar uma turma para pesquisa"); } var temTurmaInformada = !string.IsNullOrEmpty(filtro.TurmaId); var data = filtro.Data.Date; var perfil = servicoUsuario.ObterPerfilAtual(); var usuario = await servicoUsuario.ObterUsuarioLogado(); string rf = usuario.TemPerfilGestaoUes() ? string.Empty : usuario.CodigoRf; var disciplinasUsuario = usuario.EhProfessorCj() ? await consultasDisciplina.ObterDisciplinasPerfilCJ(filtro.TurmaId, usuario.CodigoRf) : await servicoEOL.ObterDisciplinasPorCodigoTurmaLoginEPerfil(filtro.TurmaId, usuario.CodigoRf, usuario.PerfilAtual); var eventos = await repositorioEvento.ObterEventosPorTipoDeCalendarioDreUeDia(filtro.TipoCalendarioId, filtro.DreId, filtro.UeId, data, filtro.EhEventoSme); var aulas = await ObterAulasDia(filtro, data, perfil, rf, disciplinasUsuario); var atividades = await repositorioAtividadeAvaliativa.ObterAtividadesPorDia(filtro.DreId, filtro.UeId, data, rf, filtro.TurmaId); ObterEventosParaEventosAulasDia(eventosAulas, eventos); var turmasAulas = aulas.GroupBy(x => x.TurmaId).Select(x => x.Key); var turmasAbrangencia = await ObterTurmasAbrangencia(turmasAulas, filtro.TurmaHistorico); var idsDisciplinasAulas = aulas.Select(a => long.Parse(a.DisciplinaId)).Distinct().ToList(); var idsDisciplinasCompartilhadas = aulas.Where(a => !String.IsNullOrEmpty(a.DisciplinaCompartilhadaId) && !a.DisciplinaCompartilhadaId.Equals("null")) .Select(a => long.Parse(a.DisciplinaCompartilhadaId)).Distinct(); if (idsDisciplinasCompartilhadas != null && idsDisciplinasCompartilhadas.Any()) { idsDisciplinasAulas.AddRange(idsDisciplinasCompartilhadas); } IEnumerable <DisciplinaDto> disciplinasEol = new List <DisciplinaDto>(); if (idsDisciplinasAulas != null && idsDisciplinasAulas.Any()) { disciplinasEol = servicoEOL.ObterDisciplinasPorIds(idsDisciplinasAulas.ToArray()); } aulas .ToList() .ForEach(x => { bool podeCriarAtividade = true; var listaAtividades = atividades.Where(w => w.DataAvaliacao.Date == x.DataAula.Date && w.TurmaId == x.TurmaId && PossuiDisciplinas(w.Id, x.DisciplinaId)).ToList(); var disciplina = disciplinasEol?.FirstOrDefault(d => d.CodigoComponenteCurricular.ToString().Equals(x.DisciplinaId)); var disciplinaCompartilhada = disciplinasEol?.FirstOrDefault(d => d.CodigoComponenteCurricular.ToString().Equals(x.DisciplinaCompartilhadaId)); if (atividades != null && disciplina != null) { foreach (var item in listaAtividades) { if (disciplina.Regencia) { var disciplinasRegenciasComAtividades = repositorioAtividadeAvaliativaRegencia.Listar(item.Id).Result; disciplinasRegenciasComAtividades.ToList().ForEach(r => r.DisciplinaContidaRegenciaNome = servicoEOL.ObterDisciplinasPorIds(new long[] { Convert.ToInt64(r.DisciplinaContidaRegenciaId) }).FirstOrDefault().Nome); item.AtividadeAvaliativaRegencia = new List <AtividadeAvaliativaRegencia>(); item.AtividadeAvaliativaRegencia.AddRange(disciplinasRegenciasComAtividades); podeCriarAtividade = true; } else { podeCriarAtividade = false; } } } var turma = turmasAbrangencia.FirstOrDefault(t => t.CodigoTurma.Equals(x.TurmaId)); eventosAulas.Add(new EventosAulasTipoDiaDto { Id = x.Id, TipoEvento = x.AulaCJ ? "CJ" : "Aula", DadosAula = new DadosAulaDto { DisciplinaId = disciplina?.CodigoComponenteCurricular ?? null, Disciplina = $"{(disciplina?.Nome ?? "Disciplina não encontrada")} {(x.TipoAula == TipoAula.Reposicao ? "(Reposição)" : "")} {(x.Status == EntidadeStatus.AguardandoAprovacao ? "- Aguardando aprovação" : "")}", DisciplinaCompartilhadaId = disciplinaCompartilhada?.CodigoComponenteCurricular ?? null, DisciplinaCompartilhada = $"{(disciplinaCompartilhada?.Nome ?? "Disciplina não encontrada")} ", EhRegencia = disciplina.Regencia, EhCompartilhada = disciplina.Compartilhada, PermiteRegistroFrequencia = disciplina.RegistraFrequencia && !x.SomenteConsulta, podeCadastrarAvaliacao = podeCriarAtividade, Horario = x.DataAula.ToString("hh:mm tt", CultureInfo.InvariantCulture), Modalidade = turma?.Modalidade.GetAttribute <DisplayAttribute>().Name ?? "Modalidade", Tipo = turma?.TipoEscola.GetAttribute <DisplayAttribute>().ShortName ?? "Escola", Turma = x.TurmaNome, UnidadeEscolar = x.UeNome, Atividade = listaAtividades } }); }); return(new DiaEventoAula { EventosAulas = eventosAulas, Letivo = comandosDiasLetivos.VerificarSeDataLetiva(eventos, data) }); }