예제 #1
0
        public async Task <ContaCadastradaDto> Add(ContaCadastradaDto contaDto)
        {
            var conta = _map.Map <ContaCadastrada>(contaDto);

            _repo.Add(conta);

            if (await _repo.SaveChangeAsync())
            {
                return(_map.Map <ContaCadastradaDto>(conta));
            }
            throw new ArgumentException("Erro ao Adicionar!");
        }
예제 #2
0
        public async Task <ContaDto> Transferencia(HelperContaDto contaDto)
        {
            // CONTA QUE IRA MANDAR A TRANSFERENCIA
            var contaOrigin = await _repo.GetByAgenciaAndContaCorrente(contaDto.Agencia, contaDto.Conta);

            // CONTA QUE IRA RECEBER A TRANSFERENCIA
            var contaDestino = await _repo.GetByAgenciaAndContaCorrente(contaDto.AgenciaDestino, contaDto.ContaDestino);

            await ExistContaFindByCPF(contaDto);

            // SE O REGISTRO RETORNA COMO NULL
            if (contaOrigin == null || contaDestino == null)
            {
                throw new NotFoundException("Conta origin nao encontrada e/ou conta destino nao encontrada!");
            }
            else if (contaDto.Quantia > contaOrigin.Saldo)
            {
                throw new NotFoundException("Saldo Insuficiente!");
            }

            bool senhaConfere = CompareSenha(contaDto.Senha, contaOrigin.Senha);

            if (!senhaConfere)
            {
                throw new ArgumentException("Senha incorreta!");
            }

            contaOrigin.Saldo  -= contaDto.Quantia;
            contaDestino.Saldo += contaDto.Quantia;

            List <Conta> contas = new List <Conta>();

            contas.Add(contaOrigin);
            contas.Add(contaDestino);

            _repo.UpdateRange(contas);
            if (await _repo.SaveAsync())
            {
                HistoricoDto historicoOriginDto = new HistoricoDto
                {
                    DataTransacao         = DateTime.Now,
                    DescricaoTransacao    = "TRANSFERENCIA BANCARIA PARA CONTA CORRENTE",
                    DigitosAgencia        = contaOrigin.DigitosAgencia,
                    DigitosConta          = contaOrigin.DigitosConta,
                    DigitosAgenciaDestino = contaDestino.DigitosAgencia,
                    DigitosContaDestino   = contaDestino.DigitosConta,
                    TipoConta             = 0,
                    Valor            = contaDto.Quantia,
                    NomeConta        = contaOrigin.NomeConta,
                    NomeContaDestino = contaDestino.NomeConta,
                    Operacao         = 4
                };
                var historicoAdd = await _historicoServices.Add(historicoOriginDto);

                HistoricoDto historicoDestinoDto = new HistoricoDto
                {
                    DataTransacao         = DateTime.Now,
                    DescricaoTransacao    = "RECEBIMENTO DE TRANSFERENCIA BANCARIA",
                    DigitosAgencia        = contaOrigin.DigitosAgencia,
                    DigitosConta          = contaOrigin.DigitosConta,
                    DigitosAgenciaDestino = contaDestino.DigitosAgencia,
                    DigitosContaDestino   = contaDestino.DigitosConta,
                    TipoConta             = 0,
                    Valor            = contaDto.Quantia,
                    NomeConta        = contaOrigin.NomeConta,
                    NomeContaDestino = contaDestino.NomeConta,
                };
                var historicoDestinoAdd = await _historicoServices.Add(historicoDestinoDto);

                HistoricosContasDto historicosContasDestinoDto = new HistoricosContasDto
                {
                    ContaId     = contaDestino.Id,
                    HistoricoId = historicoDestinoAdd.Id,
                    DataCriacao = DateTime.Now
                };

                HistoricosContasDto historicosContasDto = new HistoricosContasDto
                {
                    ContaId     = contaOrigin.Id,
                    HistoricoId = historicoAdd.Id,
                    DataCriacao = DateTime.Now
                };
                var historicosContas        = _map.Map <HistoricosContas>(historicosContasDto);
                var historicosContasDestino = _map.Map <HistoricosContas>(historicosContasDestinoDto);

                List <HistoricosContas> listHistoricosContas = new List <HistoricosContas>();

                listHistoricosContas.Add(historicosContas);
                listHistoricosContas.Add(historicosContasDestino);

                _repoHistoricosContas.AddRange(listHistoricosContas);

                if (await _repoHistoricosContas.SaveAsync())
                {
                    bool existeContaCadastrada = await _contaCadastradaService.ExisteContaCadastrada(contaDestino.Id, contaOrigin.PessoaId);

                    if (!existeContaCadastrada)
                    {
                        ContaCadastradaDto contaCadastradaDto = new ContaCadastradaDto
                        {
                            ContaId  = contaDestino.Id,
                            PessoaId = contaOrigin.PessoaId
                        };
                        await _contaCadastradaService.Add(contaCadastradaDto);
                    }
                    return(_map.Map <ContaDto>(contaOrigin));
                }
            }
            throw new ArgumentException("Erro ao persistir no banco!");
        }