public async Task <PlanoAulaRetornoDto> ObterPlanoAulaPorAula(long aulaId) { if (!await VerificarPlanoAnualExistente(aulaId)) { throw new NegocioException("Não foi possível carregar o plano de aula porque não há plano anual cadastrado"); } PlanoAulaRetornoDto planoAulaDto = new PlanoAulaRetornoDto(); // Busca plano de aula por data e disciplina da aula var plano = await repositorio.ObterPlanoAulaPorAula(aulaId); var aulaDto = await consultasAula.BuscarPorId(aulaId); var atividadeAvaliativa = await repositorioAtividadeAvaliativa.ObterAtividadeAvaliativa(aulaDto.DataAula.Date, aulaDto.DisciplinaId, aulaDto.TurmaId, aulaDto.UeId); if (plano != null) { planoAulaDto = MapearParaDto(plano) ?? new PlanoAulaRetornoDto(); // Carrega objetivos aprendizagem Jurema var planoAnual = await consultasPlanoAnual.ObterPorEscolaTurmaAnoEBimestre(new FiltroPlanoAnualDto() { AnoLetivo = aulaDto.DataAula.Year, Bimestre = (aulaDto.DataAula.Month + 2) / 3, ComponenteCurricularEolId = long.Parse(aulaDto.DisciplinaId), EscolaId = aulaDto.UeId, TurmaId = aulaDto.TurmaId }, seNaoExistirRetornaNovo : false); // Carrega objetivos já cadastrados no plano de aula var objetivosAula = await consultasObjetivosAula.ObterObjetivosPlanoAula(plano.Id); if (planoAnual != null) { // Filtra objetivos anual com os objetivos da aula planoAulaDto.ObjetivosAprendizagemAula = planoAnual.ObjetivosAprendizagem .Where(c => objetivosAula.Any(a => a.ObjetivoAprendizagemPlano.ObjetivoAprendizagemJuremaId == c.Id)) .ToList(); } } var periodoEscolar = consultasPeriodoEscolar.ObterPorTipoCalendario(aulaDto.TipoCalendarioId); var periodo = periodoEscolar.Periodos.FirstOrDefault(p => p.PeriodoInicio <= aulaDto.DataAula && p.PeriodoFim >= aulaDto.DataAula); var planoAnualId = await consultasPlanoAnual.ObterIdPlanoAnualPorAnoEscolaBimestreETurma( aulaDto.DataAula.Year, aulaDto.UeId, long.Parse(aulaDto.TurmaId), periodo.Bimestre, long.Parse(aulaDto.DisciplinaId)); // Carrega informações da aula para o retorno planoAulaDto.PossuiPlanoAnual = planoAnualId > 0; planoAulaDto.AulaId = aulaDto.Id; planoAulaDto.QtdAulas = aulaDto.Quantidade; planoAulaDto.IdAtividadeAvaliativa = atividadeAvaliativa?.Id; planoAulaDto.PodeLancarNota = planoAulaDto.IdAtividadeAvaliativa.HasValue && aulaDto.DataAula.Date <= DateTime.Now.Date; return(planoAulaDto); }
public async Task Salvar(PlanoAulaDto planoAulaDto, bool controlarTransacao = true) { var aula = repositorioAula.ObterPorId(planoAulaDto.AulaId); var abrangenciaTurma = await consultasAbrangencia.ObterAbrangenciaTurma(aula.TurmaId); if (abrangenciaTurma == null) { throw new NegocioException("Usuario sem acesso a turma da respectiva aula"); } var usuario = await servicoUsuario.ObterUsuarioLogado(); await VerificaSeProfessorPodePersistirTurmaDisciplina(usuario.CodigoRf, aula.TurmaId, aula.DisciplinaId, aula.DataAula, usuario); PlanoAula planoAula = await repositorio.ObterPlanoAulaPorAula(planoAulaDto.AulaId); planoAula = MapearParaDominio(planoAulaDto, planoAula); if (planoAulaDto.ObjetivosAprendizagemJurema == null || !planoAulaDto.ObjetivosAprendizagemJurema.Any() && !planoAula.Migrado) { var permitePlanoSemObjetivos = false; // 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); // EJA e Médio não obrigam seleção if (!permitePlanoSemObjetivos) { permitePlanoSemObjetivos = new[] { Modalidade.EJA, Modalidade.Medio }.Contains(abrangenciaTurma.Modalidade); } // Para professores substitutos (CJ) a seleção dos objetivos deve ser opcional if (!permitePlanoSemObjetivos) { permitePlanoSemObjetivos = usuario.EhProfessorCj(); } // Caso a disciplina não possui vinculo com Jurema, os objetivos não devem ser exigidos if (!permitePlanoSemObjetivos) { permitePlanoSemObjetivos = !(consultasObjetivoAprendizagem.DisciplinaPossuiObjetivosDeAprendizagem(Convert.ToInt64(aula.DisciplinaId))); } if (!permitePlanoSemObjetivos) { throw new NegocioException("A seleção de objetivos de aprendizagem é obrigatória para criação do plano de aula"); } } var bimestre = (aula.DataAula.Month + 2) / 3; var planoAnualId = await consultasPlanoAnual.ObterIdPlanoAnualPorAnoEscolaBimestreETurma( aula.DataAula.Year, aula.UeId, long.Parse(aula.TurmaId), bimestre, long.Parse(aula.DisciplinaId)); if (planoAnualId <= 0 && !usuario.PerfilAtual.Equals(Perfis.PERFIL_CJ)) { throw new NegocioException("Não foi possível concluir o cadastro, pois não existe plano anual cadastrado"); } if (controlarTransacao) { using (var transacao = unitOfWork.IniciarTransacao()) { await SalvarPlanoAula(planoAula, planoAulaDto, planoAnualId); unitOfWork.PersistirTransacao(); } } else { await SalvarPlanoAula(planoAula, planoAulaDto, planoAnualId); } }