public async Task Salvar(Evento evento, bool dataConfirmada = false) { var tipoEvento = repositorioEventoTipo.ObterPorId(evento.TipoEventoId); if (tipoEvento == null) { throw new NegocioException("O tipo do evento deve ser informado."); } var tipoCalendario = repositorioTipoCalendario.ObterPorId(evento.TipoCalendarioId); if (tipoCalendario == null) { throw new NegocioException("Calendário não encontrado."); } evento.AdicionarTipoEvento(tipoEvento); evento.ValidaPeriodoEvento(); var usuario = await servicoUsuario.ObterUsuarioLogado(); usuario.PodeCriarEvento(evento); if (!evento.PermiteConcomitancia()) { var existeOutroEventoNaMesmaData = repositorioEvento.ExisteEventoNaMesmaDataECalendario(evento.DataInicio, evento.TipoCalendarioId); if (existeOutroEventoNaMesmaData) { throw new NegocioException("Não é permitido cadastrar um evento nesta data pois esse tipo de evento não permite concomitância."); } } var periodos = repositorioPeriodoEscolar.ObterPorTipoCalendario(evento.TipoCalendarioId); if (evento.DeveSerEmDiaLetivo()) { evento.EstaNoPeriodoLetivo(periodos); } await VerificaParticularidadesSME(evento, usuario, periodos, dataConfirmada); repositorioEvento.Salvar(evento); }