Пример #1
0
        public async Task <string> Alterar(long id, ComunicadoInserirDto comunicadoDto)
        {
            Comunicado comunicado = BuscarComunicado(id);

            ComunicadoInserirAeDto comunicadoServico = new ComunicadoInserirAeDto();

            var usuarioLogado = (await servicoUsuario.ObterUsuarioLogado())
                                ?? throw new NegocioException("Usuário logado não encontrado");

            await ValidarAbrangenciaUsuario(comunicadoDto, usuarioLogado);

            MapearAlteracao(comunicadoDto, comunicado);

            try
            {
                unitOfWork.IniciarTransacao();

                await repositorio.SalvarAsync(comunicado);

                MapearParaEntidadeServico(comunicadoServico, comunicado);

                await servicoAcompanhamentoEscolar.AlterarComunicado(comunicadoServico, id);

                unitOfWork.PersistirTransacao();
            }
            catch
            {
                unitOfWork.Rollback();
                throw;
            }

            return("Comunicado alterado com sucesso");
        }
Пример #2
0
 private async Task SalvarGrupos(long id, ComunicadoInserirDto comunicadoDto)
 {
     foreach (var grupoId in comunicadoDto.GruposId)
     {
         await repositorioComunicadoGrupo.SalvarAsync(new ComunicadoGrupo { ComunicadoId = id, GrupoComunicadoId = grupoId });
     }
 }
Пример #3
0
 private void MapearAlteracao(ComunicadoInserirDto comunicadoDto, Comunicado comunicado)
 {
     comunicado.Descricao        = comunicadoDto.Descricao;
     comunicado.Titulo           = comunicadoDto.Titulo;
     comunicado.DataExpiracao    = comunicadoDto.DataExpiracao;
     comunicado.TipoCalendarioId = comunicadoDto.TipoCalendarioId;
     comunicado.EventoId         = comunicadoDto.EventoId;
 }
Пример #4
0
        private async Task ValidarAbrangenciaDre(ComunicadoInserirDto comunicadoDto)
        {
            var abrangenciaDres = await consultasAbrangencia.ObterDres(null);

            var dre = abrangenciaDres.FirstOrDefault(x => x.Codigo.Equals(comunicadoDto.CodigoDre));

            if (dre == null)
            {
                throw new NegocioException($"Usuário não possui permissão para enviar comunicados para a DRE com codigo {comunicadoDto.CodigoDre}");
            }
        }
Пример #5
0
        private async Task ValidarAbrangenciaTurma(ComunicadoInserirDto comunicadoDto)
        {
            foreach (var turma in comunicadoDto.Turmas)
            {
                var abrangenciaTurmas = await consultasAbrangencia.ObterAbrangenciaTurma(turma);

                if (abrangenciaTurmas == null)
                {
                    throw new NegocioException($"Usuário não possui permissão para enviar comunicados para a Turma com codigo {turma}");
                }
            }
        }
Пример #6
0
        private void MapearParaEntidade(ComunicadoInserirDto comunicadoDto, Comunicado comunicado)
        {
            comunicado.DataEnvio         = comunicadoDto.DataEnvio;
            comunicado.DataExpiracao     = comunicadoDto.DataExpiracao;
            comunicado.AlunoEspecificado = comunicadoDto.AlunosEspecificados;
            comunicado.Descricao         = comunicadoDto.Descricao;
            comunicado.Titulo            = comunicadoDto.Titulo;
            comunicado.AnoLetivo         = comunicadoDto.AnoLetivo;
            comunicado.TipoCalendarioId  = comunicadoDto.TipoCalendarioId;
            comunicado.EventoId          = comunicadoDto.EventoId;

            if (!comunicadoDto.CodigoDre.Equals("todas"))
            {
                comunicado.CodigoDre = comunicadoDto.CodigoDre;
            }

            if (!comunicadoDto.CodigoUe.Equals("todas"))
            {
                comunicado.CodigoUe = comunicadoDto.CodigoUe;
            }

            if (comunicadoDto.Turmas != null && comunicadoDto.Turmas.Any())
            {
                comunicadoDto.Turmas.ToList().ForEach(x => comunicado.AdicionarTurma(x));
            }

            if (comunicadoDto.Modalidade.HasValue)
            {
                comunicado.Modalidade = comunicadoDto.Modalidade;
            }

            if (comunicadoDto.GruposId.Any())
            {
                comunicado.Grupos = comunicadoDto.GruposId.Select(s => new ComunicadoGrupo {
                    Id = s
                }).ToList();
            }

            if (comunicadoDto.AlunosEspecificados)
            {
                comunicadoDto.Alunos.ToList().ForEach(x => comunicado.AdicionarAluno(x));
            }

            if (comunicadoDto.Semestre > 0)
            {
                comunicado.Semestre = comunicadoDto.Semestre;
            }

            comunicado.SetarTipoComunicado();
        }
Пример #7
0
        private async Task ValidarAbrangenciaUE(ComunicadoInserirDto comunicadoDto)
        {
            var abrangenciaUes = await consultasAbrangencia.ObterUes(comunicadoDto.CodigoDre, null);

            var ue = abrangenciaUes.FirstOrDefault(x => x.Codigo.Equals(comunicadoDto.CodigoUe));

            if (ue == null)
            {
                throw new NegocioException($"Usuário não possui permissão para enviar comunicados para a UE com codigo {comunicadoDto.CodigoUe}");
            }

            if (comunicadoDto.Turmas != null && comunicadoDto.Turmas.Any())
            {
                await ValidarAbrangenciaTurma(comunicadoDto);
            }
        }
Пример #8
0
        private async Task ValidarInsercao(ComunicadoInserirDto comunicadoDto)
        {
            var usuarioLogado = await servicoUsuario.ObterUsuarioLogado();

            await ValidarAbrangenciaUsuario(comunicadoDto, usuarioLogado);

            if (comunicadoDto.CodigoDre.Equals(Todas) && !comunicadoDto.CodigoUe.Equals(Todas))
            {
                throw new NegocioException("Não é possivel especificar uma escola quando o comunicado é para todas as DREs");
            }

            if (comunicadoDto.CodigoUe.Equals(Todas) && comunicadoDto.Turmas.Any())
            {
                throw new NegocioException("Não é possivel especificar uma turma quando o comunicado é para todas as UEs");
            }

            if ((comunicadoDto.Turmas == null || !comunicadoDto.Turmas.Any()) && (comunicadoDto.AlunosEspecificados || (comunicadoDto.Alunos?.Any() ?? false)))
            {
                throw new NegocioException("Não é possivel especificar alunos quando o comunicado é para todas as Turmas");
            }
        }
 public async Task <string> Executar(ComunicadoInserirDto comunicado)
 {
     return(await mediator.Send(new SolicitarInclusaoComunicadoEscolaAquiCommand(
                                    comunicado.DataEnvio
                                    , comunicado.DataExpiracao
                                    , comunicado.Descricao
                                    , comunicado.GruposId
                                    , comunicado.Titulo
                                    , comunicado.AnoLetivo
                                    , comunicado.CodigoDre
                                    , comunicado.CodigoUe
                                    , comunicado.AlunosEspecificados
                                    , comunicado.Modalidade
                                    , comunicado.Semestre
                                    , comunicado.Alunos
                                    , comunicado.Turmas
                                    , comunicado.SeriesResumidas
                                    , comunicado.TipoCalendarioId
                                    , comunicado.EventoId
                                    )));
 }
Пример #10
0
        private async Task ValidarAbrangenciaUsuario(ComunicadoInserirDto comunicadoDto, Usuario usuarioLogado)
        {
            if (comunicadoDto.CodigoDre.Equals(Todas) && !usuarioLogado.EhPerfilSME())
            {
                throw new NegocioException("Apenas usuários SME podem realizar envio de Comunicados para todas as DREs");
            }

            if (comunicadoDto.CodigoUe.Equals(Todas) && !(usuarioLogado.EhPerfilDRE() || usuarioLogado.EhPerfilSME()))
            {
                throw new NegocioException("Apenas usuários SME e DRE podem realizar envio de Comunicados para todas as Escolas");
            }

            if (usuarioLogado.EhPerfilDRE() && !comunicadoDto.CodigoDre.Equals(Todas))
            {
                await ValidarAbrangenciaDre(comunicadoDto);
            }

            if (usuarioLogado.EhPerfilUE() && !comunicadoDto.CodigoUe.Equals(Todas))
            {
                await ValidarAbrangenciaUE(comunicadoDto);
            }
        }
Пример #11
0
        public async Task <string> Inserir(ComunicadoInserirDto comunicadoDto)
        {
            Comunicado             comunicado        = new Comunicado();
            ComunicadoInserirAeDto comunicadoServico = new ComunicadoInserirAeDto();

            await ValidarInsercao(comunicadoDto);

            MapearParaEntidade(comunicadoDto, comunicado);

            try
            {
                unitOfWork.IniciarTransacao();

                var id = await repositorio.SalvarAsync(comunicado);

                await SalvarGrupos(id, comunicadoDto);

                comunicado.AtualizarIdAlunos();

                comunicado.AtualizarIdTurmas();

                await SalvarTurmas(comunicado.Turmas);

                await SalvarAlunos(comunicado.Alunos);

                MapearParaEntidadeServico(comunicadoServico, comunicado);

                await servicoAcompanhamentoEscolar.CriarComunicado(comunicadoServico);

                unitOfWork.PersistirTransacao();
            }
            catch
            {
                unitOfWork.Rollback();
                throw;
            }

            return("Comunicado criado com sucesso");
        }
 public async Task <IActionResult> PostAsync([FromBody] ComunicadoInserirDto comunicadoDto, [FromServices] ISolicitarInclusaoComunicadoEscolaAquiUseCase solicitarInclusaoComunicadoEscolaAquiUseCase)
 {
     return(Ok(await solicitarInclusaoComunicadoEscolaAquiUseCase.Executar(comunicadoDto)));
 }