Exemple #1
0
        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;
                }
            }
        }