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"); }
private async Task SalvarGrupos(long id, ComunicadoInserirDto comunicadoDto) { foreach (var grupoId in comunicadoDto.GruposId) { await repositorioComunicadoGrupo.SalvarAsync(new ComunicadoGrupo { ComunicadoId = id, GrupoComunicadoId = grupoId }); } }
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; }
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}"); } }
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}"); } } }
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(); }
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); } }
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 ))); }
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); } }
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))); }