Example #1
0
        public Task <Domain.ContaCorrente.ContaCorrente> Obter(ContaModel conta)
        {
            if (conta == null)
            {
                return(Task.FromResult <Domain.ContaCorrente.ContaCorrente> (null));
            }

            Domain.ContaCorrente.ContaCorrente fakeConta = null;

            if (StaticValues.ContaCorrenteInterna(conta.Banco))
            {
                // Gerando dados de saldos, limites, status e etc, devido a aplicação não estar persistindo dados
                fakeConta = new Domain.ContaCorrente.ContaCorrente()
                {
                    Agencia      = conta.Agencia,
                    Conta        = conta.Conta,
                    DigitoConta  = conta.DigitoConta,
                    DataAbertura = DateTime.Now,
                    Limite       = new Random().Next(0, 30000),
                    Saldo        = new Random().Next(-5000, 50000),
                    Status       = StatusContaCorrente.ATIVA,
                    Tipo         = TipoContaCorrente.PESSOA_FISICA
                };
            }
            return(Task.FromResult <Domain.ContaCorrente.ContaCorrente> (fakeConta));
        }
        public async Task <ServiceResult> Transferir(ContaModel ccOrigem, ContaModel ccDestino, decimal valor)
        {
            Domain.ContaCorrente.ContaCorrente contaDestino = null;

            if (valor <= 0)
            {
                return(Criticas.Transferencia.ValorInvalido);
            }

            var contaOrigem = await this.ContaCorrenteService.Obter(ccOrigem);

            if (contaOrigem == null)
            {
                return(Criticas.ContaCorrente.ContaInvalida);
            }

            var contaOrigemAtiva = await this.ContaCorrenteService.ValidarContaAtiva(contaOrigem);

            if (!contaOrigemAtiva)
            {
                return(Criticas.Transferencia.ContaOrigemInvalida);
            }

            if (StaticValues.ContaCorrenteInterna(ccDestino.Banco))
            {
                contaDestino = await this.ContaCorrenteService.Obter(ccDestino);

                if (contaDestino == null)
                {
                    return(Criticas.ContaCorrente.ContaInvalida);
                }

                var contaDestinoAtiva = await this.ContaCorrenteService.ValidarContaAtiva(contaDestino);

                if (!contaDestinoAtiva)
                {
                    return(Criticas.Transferencia.ContaDestinoInvalida);
                }
            }

            var debitoResult = await this.ContaCorrenteService.Debitar(contaOrigem, valor);

            if (!debitoResult.Ok)
            {
                return(debitoResult);
            }

            if (StaticValues.ContaCorrenteInterna(ccDestino.Banco))
            {
                await this.ContaCorrenteService.Creditar(contaDestino, valor);
            }
            else
            {
                await this.SPBQueueService.EnviarTransferenciaSPB(ccDestino, valor);
            }

            return(ServiceResult.Processado());
        }
Example #3
0
        public Task <bool> ValidarContaAtiva(Domain.ContaCorrente.ContaCorrente conta)
        {
            if (conta.Status != StatusContaCorrente.ATIVA)
            {
                return(Task.FromResult(false));
            }

            return(Task.FromResult(true));
        }
Example #4
0
        public Task <ServiceResult> InserirLancamento(Domain.ContaCorrente.ContaCorrente conta, LancamentosConta lancamento)
        {
            if (conta.Lancamentos == null)
            {
                conta.Lancamentos = new List <LancamentosConta> ();
            }
            conta.Lancamentos.Add(lancamento);

            return(ServiceResult.ProcessadoTask());
        }
Example #5
0
        public async Task <ServiceResult> Creditar(Domain.ContaCorrente.ContaCorrente conta, decimal valor)
        {
            conta.Saldo += valor;

            // Persistencia de dados

            await InserirLancamento(conta, new LancamentosConta()
            {
                IdLancamento      = Guid.NewGuid(),
                HorarioLancamento = DateTime.Now,
                Tipo  = TipoLancamento.CREDITO,
                Valor = valor
            });

            return(ServiceResult.Processado());
        }
Example #6
0
        public async Task <ServiceResult> Debitar(Domain.ContaCorrente.ContaCorrente conta, decimal valor)
        {
            if (conta.SaldoComLimite < valor)
            {
                return(Criticas.Transferencia.SemSaldo);
            }

            conta.Saldo -= valor;

            // Persistencia de dados

            await InserirLancamento(conta, new LancamentosConta()
            {
                IdLancamento      = Guid.NewGuid(),
                HorarioLancamento = DateTime.Now,
                Tipo  = TipoLancamento.DEBITO,
                Valor = valor
            });

            return(ServiceResult.Processado());
        }