private RegistroFrequencia RegistraFrequenciaTurma(Aula aula, RegistroFrequencia registroFrequencia)
 {
     if (registroFrequencia == null)
     {
         registroFrequencia = new RegistroFrequencia(aula);
         repositorioFrequencia.Salvar(registroFrequencia);
     }
     else
     {
         repositorioRegistroAusenciaAluno.MarcarRegistrosAusenciaAlunoComoExcluidoPorRegistroFrequenciaId(registroFrequencia.Id);
     }
     return(registroFrequencia);
 }
        private FrequenciaDto ObterRegistroFrequencia(long aulaId, Aula aula, Turma turma)
        {
            var registroFrequencia = servicoFrequencia.ObterRegistroFrequenciaPorAulaId(aulaId);

            if (registroFrequencia == null)
            {
                registroFrequencia = new RegistroFrequencia(aula);
            }
            var registroFrequenciaDto = new FrequenciaDto(aulaId)
            {
                AlteradoEm   = registroFrequencia.AlteradoEm,
                AlteradoPor  = registroFrequencia.AlteradoPor,
                AlteradoRF   = registroFrequencia.AlteradoRF,
                CriadoEm     = registroFrequencia.CriadoEm,
                CriadoPor    = registroFrequencia.CriadoPor,
                CriadoRF     = registroFrequencia.CriadoRF,
                Id           = registroFrequencia.Id,
                Desabilitado = !aula.PermiteRegistroFrequencia(turma)
            };

            return(registroFrequenciaDto);
        }
        private void RegistraAusenciaAlunos(IEnumerable <RegistroAusenciaAluno> registroAusenciaAlunos, IEnumerable <AlunoPorTurmaResposta> alunos, RegistroFrequencia registroFrequencia, int quantidadeAulas, DateTime dataAula)
        {
            foreach (var ausencia in registroAusenciaAlunos)
            {
                if (ausencia.NumeroAula > quantidadeAulas)
                {
                    throw new NegocioException($"O número de aula informado: Aula {ausencia.NumeroAula} não foi encontrado.");
                }

                var aluno = alunos.Where(c => c.CodigoAluno == ausencia.CodigoAluno && c.EstaAtivo(dataAula)).Any() ?
                            alunos.FirstOrDefault(c => c.CodigoAluno == ausencia.CodigoAluno && c.EstaAtivo(dataAula)) :
                            alunos.FirstOrDefault(c => c.CodigoAluno == ausencia.CodigoAluno);

                if (aluno == null)
                {
                    throw new NegocioException("O aluno informado na frequência não pertence a essa turma.");
                }

                if (aluno.EstaInativo(dataAula))
                {
                    throw new NegocioException($"Não foi possível registrar a frequência pois o aluno: '{aluno.NomeAluno}' está com a situação: '{aluno.SituacaoMatricula}'.");
                }

                ausencia.RegistroFrequenciaId = registroFrequencia.Id;
                repositorioRegistroAusenciaAluno.Salvar(ausencia);
            }
        }