private async Task AlterarRecorrencia(Aula aula, Usuario usuario, DateTime fimRecorrencia) { var dataRecorrencia = aula.DataAula.AddDays(7); var aulasRecorrencia = await repositorioAula.ObterAulasRecorrencia(aula.AulaPaiId ?? aula.Id, aula.Id, fimRecorrencia); List <(DateTime data, string erro)> aulasQueDeramErro = new List <(DateTime, string)>(); List <(DateTime data, bool existeFrequencia, bool existePlanoAula)> aulasComFrenciaOuPlano = new List <(DateTime data, bool existeFrequencia, bool existePlanoAula)>(); List <DateTime> diasParaAlterarRecorrencia = new List <DateTime>(); ObterDiasDaRecorrencia(dataRecorrencia, fimRecorrencia, diasParaAlterarRecorrencia); var datasComRegistro = await repositorioAula.ObterDatasAulasExistentes(diasParaAlterarRecorrencia, aula.TurmaId, aula.DisciplinaId, usuario.CodigoRf); if (datasComRegistro.Count() > 0) { aulasQueDeramErro.AddRange( datasComRegistro.Select(d => (d, $"Já existe uma aula criada neste dia para este componente curricular.") )); } foreach (var aulaRecorrente in aulasRecorrencia) { var ehDataComRegistro = datasComRegistro.Select(d => d.Equals(dataRecorrencia)).FirstOrDefault(); if (!ehDataComRegistro) { var existeFrequencia = await consultasFrequencia.FrequenciaAulaRegistrada(aulaRecorrente.Id); var existePlanoAula = await consultasPlanoAula.PlanoAulaRegistrado(aulaRecorrente.Id); if (existeFrequencia || existePlanoAula) { aulasComFrenciaOuPlano.Add((aulaRecorrente.DataAula, existeFrequencia, existePlanoAula)); } var quantidadeOriginal = aulaRecorrente.Quantidade; aulaRecorrente.DataAula = dataRecorrencia; aulaRecorrente.Quantidade = aula.Quantidade; try { await Salvar(aulaRecorrente, usuario, aulaRecorrente.RecorrenciaAula, quantidadeOriginal, true); } catch (NegocioException nex) { aulasQueDeramErro.Add((dataRecorrencia, nex.Message)); } catch (Exception ex) { servicoLog.Registrar(ex); aulasQueDeramErro.Add((dataRecorrencia, $"Erro Interno: {ex.Message}")); } } dataRecorrencia = dataRecorrencia.AddDays(7); } await NotificarUsuario(usuario, aula, Operacao.Alteracao, aulasRecorrencia.Count() - aulasQueDeramErro.Count, aulasQueDeramErro, aulasComFrenciaOuPlano); }