private async Task SalvarPlanoAula(PlanoAula planoAula, PlanoAulaDto planoAulaDto, long planoAnualId) { repositorio.Salvar(planoAula); // Salvar Objetivos await repositorioObjetivosAula.LimparObjetivosAula(planoAula.Id); if (planoAulaDto.ObjetivosAprendizagemJurema != null) { foreach (var objetivoJuremaId in planoAulaDto.ObjetivosAprendizagemJurema) { var objetivoPlanoAnualId = await consultasObjetivoAprendizagem .ObterIdPorObjetivoAprendizagemJurema(planoAnualId, objetivoJuremaId); if (objetivoPlanoAnualId <= 0) { objetivoPlanoAnualId = await SalvarObjetivoPlanoAnual(objetivoJuremaId, planoAnualId); } repositorioObjetivosAula.Salvar(new ObjetivoAprendizagemAula(planoAula.Id, objetivoPlanoAnualId)); } } }
public async Task <bool> Handle(SalvarPlanoAulaCommand request, CancellationToken cancellationToken) { try { var planoAulaDto = request.PlanoAula; var aula = await mediator.Send(new ObterAulaPorIdQuery(planoAulaDto.AulaId)); var turma = await mediator.Send(new ObterTurmaPorCodigoQuery(aula.TurmaId)); DisciplinaDto disciplinaDto = null; if (request.PlanoAula.ComponenteCurricularId.HasValue) { var componentesCurriculares = await mediator.Send(new ObterComponentesCurricularesPorIdsQuery(new long[] { request.PlanoAula.ComponenteCurricularId.Value })); disciplinaDto = componentesCurriculares.SingleOrDefault(); } var abrangenciaTurma = await consultasAbrangencia.ObterAbrangenciaTurma(aula.TurmaId, planoAulaDto.ConsideraHistorico); if (abrangenciaTurma == null) { throw new NegocioException("Usuario sem acesso a turma da respectiva aula"); } var usuario = await mediator.Send(new ObterUsuarioLogadoQuery()); await VerificaSeProfessorPodePersistirTurmaDisciplina(usuario.CodigoRf, aula.TurmaId, aula.DisciplinaId, aula.DataAula, usuario); PlanoAula planoAula = await mediator.Send(new ObterPlanoAulaPorAulaIdQuery(planoAulaDto.AulaId)); planoAula = MapearParaDominio(planoAulaDto, planoAula); var periodoEscolar = await mediator.Send(new ObterPeriodosEscolaresPorTipoCalendarioIdEDataQuery(aula.TipoCalendarioId, aula.DataAula.Date)); if (periodoEscolar == null) { throw new NegocioException("Não foi possível concluir o cadastro, pois não foi localizado o bimestre da aula."); } var planejamentoAnual = await mediator.Send( new ObterPlanejamentoAnualPorAnoEscolaBimestreETurmaQuery(turma.Id, periodoEscolar.Id, long.Parse(aula.DisciplinaId)) ); if ((planejamentoAnual?.Id <= 0 || planejamentoAnual == null) && periodoEscolar.TipoCalendario.AnoLetivo.Equals(DateTime.Now.Year) && !usuario.PerfilAtual.Equals(Perfis.PERFIL_CJ) && !(disciplinaDto != null && disciplinaDto.TerritorioSaber)) { throw new NegocioException("Não foi possível concluir o cadastro, pois não existe plano anual cadastrado"); } if (planoAulaDto.ObjetivosAprendizagemComponente == null || !planoAulaDto.ObjetivosAprendizagemComponente.Any() && !planoAula.Migrado) { var permitePlanoSemObjetivos = false; var possuiObjetivos = await mediator.Send(new VerificaPossuiObjetivosAprendizagemPorComponenteCurricularIdQuery(long.Parse(aula.DisciplinaId))); // Os seguintes componentes curriculares (disciplinas) não tem seleção de objetivos de aprendizagem // Libras, Sala de Leitura permitePlanoSemObjetivos = new string[] { "218", "1061" }.Contains(aula.DisciplinaId) || new[] { Modalidade.EJA, Modalidade.Medio }.Contains(abrangenciaTurma.Modalidade) || // EJA e Médio não obrigam seleção usuario.EhProfessorCj() || // Para professores substitutos (CJ) a seleção dos objetivos deve ser opcional periodoEscolar.TipoCalendario.AnoLetivo < DateTime.Now.Year || // Para anos anteriores não obrigatória seleção de objetivos !possuiObjetivos || // Caso a disciplina não possui vinculo com Jurema, os objetivos não devem ser exigidos abrangenciaTurma.Ano.Equals("0"); // Caso a turma for de educação física multisseriadas, os objetivos não devem ser exigidos; if (!permitePlanoSemObjetivos) { throw new NegocioException("A seleção de objetivos de aprendizagem é obrigatória para criação do plano de aula"); } } await repositorioPlanoAula.SalvarAsync(planoAula); await mediator.Send(new ExcluirPendenciaAulaCommand(planoAula.AulaId, Dominio.TipoPendencia.PlanoAula)); // Salvar Objetivos await repositorioObjetivosAula.LimparObjetivosAula(planoAula.Id); if (planoAulaDto.ObjetivosAprendizagemComponente != null) { foreach (var objetivoAprendizagem in planoAulaDto.ObjetivosAprendizagemComponente) { await repositorioObjetivosAula.SalvarAsync(new ObjetivoAprendizagemAula(planoAula.Id, objetivoAprendizagem.Id, objetivoAprendizagem.ComponenteCurricularId)); } } } catch (Exception ex) { unitOfWork.Rollback(); throw; } return(true); }