private async Task AdicionarPendenciaRegistroIndividualAsync(Pendencia pendencia, Turma turma, IEnumerable <AlunoPorTurmaResposta> alunosTurmaComAusenciaRegistroIndividualPorDias) { var pendenciaRegistroIndividual = new PendenciaRegistroIndividual(pendencia, turma); pendenciaRegistroIndividual.Id = await repositorioPendenciaRegistroIndividual.SalvarAsync(pendenciaRegistroIndividual); var codigosDosAlunos = alunosTurmaComAusenciaRegistroIndividualPorDias.Select(x => long.Parse(x.CodigoAluno)); pendenciaRegistroIndividual.AdicionarAlunos(codigosDosAlunos); foreach (var pendenciaRegistroIndividualAluno in pendenciaRegistroIndividual.Alunos) { pendenciaRegistroIndividualAluno.Id = await repositorioPendenciaRegistroIndividualAluno.SalvarAsync(pendenciaRegistroIndividualAluno); } }
protected override async Task Handle(AtualizarPendenciaRegistroIndividualCommand request, CancellationToken cancellationToken) { var pendenciaRegistroIndividual = await repositorioPendenciaRegistroIndividual.ObterPendenciaRegistroIndividualPorTurmaESituacao(request.TurmaId, SituacaoPendencia.Pendente); if (pendenciaRegistroIndividual is null) { return; } var alunoDaPendencia = pendenciaRegistroIndividual.Alunos?.FirstOrDefault(x => x.CodigoAluno == request.CodigoAluno && x.Situacao == SituacaoPendenciaRegistroIndividualAluno.Pendente); if (alunoDaPendencia is null) { return; } var diasDeAusencia = await ObterDiasDeAusenciaParaPendenciaRegistroIndividualAsync(); var direrencaEntreDataAtualEUltimoRegistro = DateTime.Today.Subtract(request.DataRegistro.Date); if (direrencaEntreDataAtualEUltimoRegistro.Days >= diasDeAusencia) { return; } using (var transacao = unitOfWork.IniciarTransacao()) { try { alunoDaPendencia.ResolverPendenciaDoAluno(); await repositorioPendenciaRegistroIndividualAluno.SalvarAsync(alunoDaPendencia); if (pendenciaRegistroIndividual.Alunos.All(x => x.Situacao == SituacaoPendenciaRegistroIndividualAluno.Resolvido)) { pendenciaRegistroIndividual.ResolverPendencia(); await repositorioPendencia.SalvarAsync(pendenciaRegistroIndividual.Pendencia); } unitOfWork.PersistirTransacao(); } catch { unitOfWork.Rollback(); throw; } } }