Esempio n. 1
0
        private async Task CriarNovaPendenciaAusenciaRegistroIndividualAsync(Turma turma, IEnumerable <AlunoPorTurmaResposta> alunosTurmaComAusenciaRegistroIndividualPorDias)
        {
            var professoresDaTurma = await mediator.Send(new ObterProfessoresTitularesDaTurmaQuery(turma.CodigoTurma));

            if (!professoresDaTurma?.Any() ?? true)
            {
                throw new NegocioException($"Não foram encontrados professores para a turma {turma.CodigoTurma}.");
            }

            var titulo    = DefinirTituloDaPendenciaPorAusenciaDeRegistroIndividual(turma);
            var pendencia = new Pendencia(TipoPendencia.AusenciaDeRegistroIndividual, titulo, DescricaoBase);

            pendencia.Id = await repositorioPendencia.SalvarAsync(pendencia);


            var professoresRfsParaBusca = new List <string>();

            foreach (var professores in professoresDaTurma)
            {
                var listaProfessorComVirgulas = professores.Split(',');
                professoresRfsParaBusca.AddRange(listaProfessorComVirgulas.Select(a => a.Trim()));
            }


            await AdicionarUsuariosDaPendenciaAsync(pendencia, turma, professoresRfsParaBusca);
            await AdicionarPendenciaRegistroIndividualAsync(pendencia, turma, alunosTurmaComAusenciaRegistroIndividualPorDias);
        }
        public async Task <long> Handle(SalvarPendenciaCommand request, CancellationToken cancellationToken)
        {
            var pendencia = new Pendencia(request.TipoPendencia);

            pendencia.Titulo    = string.IsNullOrEmpty(request.Titulo) ? ObterTitulo(request.TipoPendencia) : request.Titulo;
            pendencia.Descricao = string.IsNullOrEmpty(request.Descricao) ? ObterDescricao(request.TipoPendencia) : request.Descricao;
            pendencia.Instrucao = request.Instrucao;

            return(await repositorioPendencia.SalvarAsync(pendencia));
        }
        public async Task <bool> Handle(ExcluirPendenciaPorIdCommand request, CancellationToken cancellationToken)
        {
            var pendencia = await repositorioPendencia.ObterPorIdAsync(request.PendenciaId);

            pendencia.Excluido = true;
            await repositorioPendencia.SalvarAsync(pendencia);

            await mediator.Send(new ExcluirPendenciasUsuariosPorPendenciaIdCommand(request.PendenciaId));

            return(true);
        }
        public async Task <AuditoriaPersistenciaDto> AtualizarPendencia(long pendenciaId, SituacaoPendencia situacaoPendencia)
        {
            var pendencia = repositorioPendencia.ObterPorId(pendenciaId);

            if (pendencia == null)
            {
                throw new NegocioException("Pendência de fechamento não localizada com o identificador consultado");
            }

            pendencia.Situacao = situacaoPendencia;
            await repositorioPendencia.SalvarAsync(pendencia);

            return((AuditoriaPersistenciaDto)pendencia);
        }
        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;
                }
            }
        }