private async Task GerarRecorrenciaParaPeriodos(Aula aula, DateTime inicioRecorrencia, DateTime fimRecorrencia, Usuario usuario)
        {
            List <DateTime> diasParaIncluirRecorrencia = new List <DateTime>();

            ObterDiasDaRecorrencia(inicioRecorrencia, fimRecorrencia, diasParaIncluirRecorrencia);

            var datasComRegistro = await repositorioAula.ObterDatasAulasExistentes(diasParaIncluirRecorrencia, aula.TurmaId, aula.DisciplinaId, usuario.CodigoRf);

            if (datasComRegistro.Count() > 0)
            {
                diasParaIncluirRecorrencia.RemoveAll(d => datasComRegistro.Contains(d));
            }

            List <PodePersistirNaDataRetornoEolDto> datasPersistencia = new List <PodePersistirNaDataRetornoEolDto>();

            if (diasParaIncluirRecorrencia.Any())
            {
                if (!usuario.EhProfessorCj())
                {
                    var datasAtribuicao = await servicoEOL.PodePersistirTurmaNasDatas(usuario.CodigoRf, aula.TurmaId, diasParaIncluirRecorrencia.Select(a => a.Date.ToString("s")).ToArray(), aula.ComponenteCurricularEol.Codigo);

                    if (datasAtribuicao == null || !datasAtribuicao.Any())
                    {
                        throw new NegocioException("Não foi possível validar datas para a atribuição do professor no EOL.");
                    }
                    else
                    {
                        datasPersistencia = datasAtribuicao.ToList();
                    }
                }
                else
                {
                    datasPersistencia.AddRange(
                        diasParaIncluirRecorrencia.Select(d =>
                                                          new PodePersistirNaDataRetornoEolDto()
                    {
                        Data          = d,
                        PodePersistir = true
                    }));
                }
            }

            await GerarAulaDeRecorrenciaParaDias(aula, usuario, datasPersistencia, datasComRegistro);
        }
        public async Task <bool> PodePersistirTurmaNasDatas(string codigoRf, string turmaId, string disciplinaId, DateTime data, Usuario usuario = null)
        {
            if (usuario == null)
            {
                usuario = await ObterUsuarioLogado();
            }

            if (!usuario.EhProfessorCj())
            {
                var validacaoData = await servicoEOL.PodePersistirTurmaNasDatas(usuario.CodigoRf, turmaId, new string[] { data.ToString("s") }, long.Parse(disciplinaId));

                if (validacaoData == null || !validacaoData.Any())
                {
                    throw new NegocioException("Não foi possível obter a validação do professor no EOL.");
                }

                return(validacaoData.FirstOrDefault().PodePersistir);
            }
            var atribuicaoCj = repositorioAtribuicaoCJ.ObterAtribuicaoAtiva(usuario.CodigoRf);

            return(atribuicaoCj != null && atribuicaoCj.Any());
        }