Example #1
0
        public static async Task <EventosAulasNoDiaCalendarioDto> Executar(IMediator mediator, FiltroAulasEventosCalendarioDto filtroAulasEventosCalendarioDto, long tipoCalendarioId, int mes, int dia, int anoLetivo,
                                                                           IServicoUsuario servicoUsuario)
        {
            var dataConsulta = new DateTime(anoLetivo, mes, dia);

            var usuarioLogado = await mediator.Send(new ObterUsuarioLogadoQuery());

            if (usuarioLogado == null)
            {
                throw new NegocioException("Não foi possível localizar o Usuário logado.");
            }


            var eventosDaUeSME = await mediator.Send(new ObterEventosCalendarioProfessorPorMesDiaQuery()
            {
                UeCodigo         = filtroAulasEventosCalendarioDto.UeCodigo,
                DreCodigo        = filtroAulasEventosCalendarioDto.DreCodigo,
                TipoCalendarioId = tipoCalendarioId,
                DataConsulta     = dataConsulta
            });

            var aulasDoDia = await mediator.Send(new ObterAulasCalendarioProfessorPorMesDiaQuery()
            {
                UeCodigo         = filtroAulasEventosCalendarioDto.UeCodigo,
                DreCodigo        = filtroAulasEventosCalendarioDto.DreCodigo,
                TurmaCodigo      = filtroAulasEventosCalendarioDto.TurmaCodigo,
                TipoCalendarioId = tipoCalendarioId,
                DiaConsulta      = dataConsulta
            });

            var turma = await mediator.Send(new ObterTurmaPorCodigoQuery()
            {
                TurmaCodigo = filtroAulasEventosCalendarioDto.TurmaCodigo
            });


            var retorno = new EventosAulasNoDiaCalendarioDto();

            var podeCadastrarAulaEMensagem = await mediator.Send(new ObterPodeCadastrarAulaPorDataQuery()
            {
                UeCodigo         = filtroAulasEventosCalendarioDto.UeCodigo,
                DreCodigo        = filtroAulasEventosCalendarioDto.DreCodigo,
                TipoCalendarioId = tipoCalendarioId,
                DataAula         = dataConsulta,
                Turma            = turma
            });

            retorno.PodeCadastrarAula        = podeCadastrarAulaEMensagem.PodeCadastrar;
            retorno.MensagemPeriodoEncerrado = podeCadastrarAulaEMensagem.MensagemPeriodo;


            string[] componentesCurricularesDoProfessor = new string[0];
            if (usuarioLogado.EhProfessor())
            {
                //Transformar em query
                componentesCurricularesDoProfessor = await servicoUsuario.ObterComponentesCurricularesQuePodeVisualizarHoje(filtroAulasEventosCalendarioDto.TurmaCodigo, usuarioLogado);
            }

            IEnumerable <Aula> aulasParaVisualizar = usuarioLogado.ObterAulasQuePodeVisualizar(aulasDoDia, componentesCurricularesDoProfessor);


            IEnumerable <AtividadeAvaliativa> atividadesAvaliativas   = Enumerable.Empty <AtividadeAvaliativa>();
            IEnumerable <DisciplinaDto>       componentesCurriculares = Enumerable.Empty <DisciplinaDto>();

            if (aulasParaVisualizar.Any())
            {
                componentesCurriculares = await mediator.Send(new ObterComponentesCurricularesPorIdsQuery(aulasParaVisualizar.Select(a => long.Parse(a.DisciplinaId)).ToArray(), aulasParaVisualizar.Any(a => a.DisciplinaId.Length > 5)));

                atividadesAvaliativas = await mediator.Send(new ObterAtividadesAvaliativasCalendarioProfessorPorMesDiaQuery()
                {
                    UeCodigo       = filtroAulasEventosCalendarioDto.UeCodigo,
                    DreCodigo      = filtroAulasEventosCalendarioDto.DreCodigo,
                    TurmaCodigo    = filtroAulasEventosCalendarioDto.TurmaCodigo,
                    DataReferencia = dataConsulta
                });

                atividadesAvaliativas = usuarioLogado.ObterAtividadesAvaliativasQuePodeVisualizar(atividadesAvaliativas, componentesCurricularesDoProfessor);
            }

            retorno.EventosAulas = await mediator.Send(new ObterAulaEventoAvaliacaoCalendarioProfessorPorMesDiaQuery()
            {
                TurmaCodigo     = filtroAulasEventosCalendarioDto.TurmaCodigo,
                UsuarioCodigoRf = usuarioLogado.CodigoRf,
                Aulas           = aulasParaVisualizar,
                Avaliacoes      = atividadesAvaliativas,
                ComponentesCurricularesParaVisualizacao = componentesCurriculares,
                EventosDaUeSME = eventosDaUeSME
            });

            return(retorno);
        }