public async Task Transfer_between_accounts_negative_value()
        {
            //Arrange
            var transferenciaController = new TransferenciaController(_context);

            var transferencia = new TransferenciaDTO()
            {
                Origem = new ContaCorrente()
                {
                    Agencia     = "5207",
                    NumeroConta = "000000000015489",
                    Digito      = "02"
                },
                Destino = new ContaCorrente()
                {
                    Agencia     = "9512",
                    NumeroConta = "000000000026841",
                    Digito      = "12"
                },
                Valor = -300
            };

            //Act
            var actionResult = await transferenciaController.EnviaDinheiroAsync(transferencia) as BadRequestResult;

            //Assert
            Assert.Equal(actionResult.StatusCode, (int)System.Net.HttpStatusCode.BadRequest);
        }
예제 #2
0
        public JsonResult GetById(TransferenciaDTO transferenciaDTO)
        {
            var jsonResponse = new JsonResponse {
                Success = true
            };

            try
            {
                var transferencia      = MapperHelper.Map <TransferenciaDTO, Transferencia>(transferenciaDTO);
                var transferenciaByDTO = TransferenciaBL.Instancia.GetById(transferencia);
                if (transferenciaByDTO != null)
                {
                    transferenciaDTO  = MapperHelper.Map <Transferencia, TransferenciaDTO>(transferenciaByDTO);
                    jsonResponse.Data = transferenciaDTO;
                }
                else
                {
                    jsonResponse.Warning = true;
                    jsonResponse.Message = Mensajes.UsuarioNoExiste;
                }
            }
            catch (Exception ex)
            {
                LogError(ex);
                jsonResponse.Success = false;
                jsonResponse.Message = Mensajes.IntenteloMasTarde;
            }

            return(Json(jsonResponse));
        }
예제 #3
0
        public JsonResult ListarNotaSalidaDetalle(TransferenciaDTO transferenciaDTO)
        {
            var jsonResponse = new JsonResponse {
                Success = true
            };

            try
            {
                var transferencia               = MapperHelper.Map <TransferenciaDTO, Transferencia>(transferenciaDTO);
                var transferenciadetalleList    = TransferenciaBL.Instancia.GetAll(transferencia);
                var transferenciadetalleDTOList = MapperHelper.Map <IEnumerable <TransferenciaDetalle>, IEnumerable <TransferenciaDetalleDTO> >(transferenciadetalleList);

                if (transferenciadetalleDTOList != null)
                {
                    jsonResponse.Data    = transferenciadetalleDTOList;
                    jsonResponse.Message = "datos encontrados";
                }
            }
            catch (Exception ex)
            {
                LogError(ex);

                ViewBag.MessageError = ex.Message;
                jsonResponse.Data    = new List <UsuarioPaginationModel>();
            }
            return(Json(jsonResponse));
        }
예제 #4
0
        public JsonResult Update(TransferenciaDTO transferenciaDTO)
        {
            var jsonResponse = new JsonResponse {
                Success = true
            };

            try
            {
                var transferencia = MapperHelper.Map <TransferenciaDTO, Transferencia>(transferenciaDTO);
                DateTime.ParseExact(transferencia.trfc_sfecha_transf_, "dd/mm/yyyy", CultureInfo.InvariantCulture).ToString(appSettings.FormatoFecha);

                int resultado = 0;
                resultado = TransferenciaBL.Instancia.Update(transferencia);
                if (resultado > 0)
                {
                    jsonResponse.Title   = Title.TitleActualizar;
                    jsonResponse.Message = Mensajes.ActualizacionSatisfactoria;
                }
                if (resultado == -2)
                {
                    jsonResponse.Title   = Title.TitleAlerta;
                    jsonResponse.Warning = true;
                    jsonResponse.Message = Mensajes.ActualizacionFallida;
                }
                if (resultado == -1)
                {
                    jsonResponse.Title   = Title.TitleAlerta;
                    jsonResponse.Warning = true;
                    jsonResponse.Message = Mensajes.YaExisteRegistro;
                }
                LogBL.Instancia.Add(new Log
                {
                    Accion        = Mensajes.Update,
                    Controlador   = Mensajes.UsuarioController,
                    Identificador = resultado,
                    Mensaje       = jsonResponse.Message,
                    Usuario       = transferenciaDTO.UsuarioRegistro,
                    Objeto        = JsonConvert.SerializeObject(transferenciaDTO)
                });
            }
            catch (Exception ex)
            {
                LogError(ex);
                jsonResponse.Success = false;
                jsonResponse.Title   = Title.TitleAlerta;
                jsonResponse.Message = Mensajes.YaExisteRegistro;

                LogBL.Instancia.Add(new Log
                {
                    Accion        = Mensajes.Update,
                    Controlador   = Mensajes.UsuarioController,
                    Identificador = 0,
                    Mensaje       = ex.Message,
                    Usuario       = transferenciaDTO.UsuarioRegistro,
                    Objeto        = JsonConvert.SerializeObject(transferenciaDTO)
                });
            }

            return(Json(jsonResponse));
        }
예제 #5
0
        public async Task <bool> Transferir(TransferenciaDTO transferenciaDTO)
        {
            if (await ObtenerSaldo(transferenciaDTO))
            {
                var DebitarA = new Movimiento
                {
                    NroCuenta = transferenciaDTO.TransferirDeNroCuenta,
                    Fecha     = DateTime.UtcNow,
                    Tipo      = TipoMovimiento.D.ToString(),
                    Importe   = transferenciaDTO.Importe,
                };
                _db.Movimiento.Add(DebitarA);
                await _spRepository.DebitarSaldo(transferenciaDTO.Importe, transferenciaDTO.TransferirDeNroCuenta);

                var AbonarA = new Movimiento
                {
                    NroCuenta = transferenciaDTO.NroCuentaATransferir,
                    Fecha     = DateTime.UtcNow,
                    Tipo      = TipoMovimiento.A.ToString(),
                    Importe   = transferenciaDTO.Importe,
                };
                _db.Movimiento.Add(AbonarA);
                await _db.SaveChangesAsync();

                await _spRepository.AbonarSaldo(transferenciaDTO.Importe, transferenciaDTO.NroCuentaATransferir);

                return(true);
            }

            return(false);
        }
예제 #6
0
        public JsonResult Delete(TransferenciaDTO transferenciaDTO)
        {
            var jsonResponse = new JsonResponse {
                Success = true
            };

            try
            {
                var transferencia = MapperHelper.Map <TransferenciaDTO, Transferencia>(transferenciaDTO);
                int resultado     = TransferenciaBL.Instancia.Delete(transferencia);

                if (resultado > 0)
                {
                    jsonResponse.Title   = Title.TitleEliminar;
                    jsonResponse.Message = Mensajes.EliminacionSatisfactoria;
                }
                else
                {
                    jsonResponse.Title   = Title.TitleAlerta;
                    jsonResponse.Warning = true;
                    jsonResponse.Message = Mensajes.EliminacionFallida;
                }

                LogBL.Instancia.Add(new Log
                {
                    Accion        = Mensajes.Delete,
                    Controlador   = Mensajes.UsuarioController,
                    Identificador = resultado,
                    Mensaje       = jsonResponse.Message,
                    Usuario       = transferenciaDTO.UsuarioRegistro,
                    Objeto        = JsonConvert.SerializeObject(transferenciaDTO)
                });
            }
            catch (Exception ex)
            {
                LogError(ex);
                jsonResponse.Success = false;
                jsonResponse.Title   = Title.TitleAlerta;
                jsonResponse.Message = Mensajes.IntenteloMasTarde;

                LogBL.Instancia.Add(new Log
                {
                    Accion        = Mensajes.Delete,
                    Controlador   = Mensajes.UsuarioController,
                    Identificador = 0,
                    Mensaje       = ex.Message,
                    Usuario       = transferenciaDTO.UsuarioRegistro,
                    Objeto        = JsonConvert.SerializeObject(transferenciaDTO)
                });
            }

            return(Json(jsonResponse));
        }
예제 #7
0
        private async Task <bool> ObtenerSaldo(TransferenciaDTO transferenciaDTO)
        {
            var cuenta = await _db.Cuenta.FirstOrDefaultAsync(x => x.NroCuenta == transferenciaDTO.TransferirDeNroCuenta);

            decimal?saldo = cuenta.Saldo;

            if (saldo > transferenciaDTO.Importe)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public IHttpActionResult DeleteTransferencia(string crDestino, string funcMatricula)
        {
            Transferencia transferencia = db.Transferencia.Find(crDestino, funcMatricula);

            if (transferencia == null)
            {
                return(NotFound());
            }

            TransferenciaDTO t = new TransferenciaDTO(transferencia);

            db.Transferencia.Remove(transferencia);
            db.SaveChanges();

            return(Ok(t));
        }
예제 #9
0
        public void Deve_Retornar_Mensagem_Valor_Nao_Informado()
        {
            var transferencia = new TransferenciaDTO
            {
                AgenciaDestino = 1542,
                AgenciaOrigem  = 1643,
                BancoDestino   = 33,
                BancoOrigem    = 33,
                ContaDestino   = 113856,
                ContaOrigem    = 114856
            };

            _contaService.Transferir(transferencia);

            Assert.True(_notificacaoEvent.ExistemNotificacoes());
        }
예제 #10
0
        public ActionResult RealizarTransferencia(TransferenciaDTO transferenciaDTO)
        {
            try
            {
                var result = _contaCorrenteService.RealizarTransferencia(transferenciaDTO);

                return(Ok(result));
            }
            catch (AppNotFoundException ex)
            {
                return(NotFound(ex.Message));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
예제 #11
0
        public async Task <ActionResult> Transferir([FromBody] TransferenciaDTO transferenciaDTO)
        {
            try
            {
                var realizarTransferencia = await _movimientoRepository.Transferir(transferenciaDTO);

                if (!realizarTransferencia)
                {
                    return(StatusCode(StatusCodes.Status304NotModified, "No se pudo realizar la transferencia Saldo insuficiente"));
                }

                return(Ok());
            }
            catch
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, "Data Base Failure"));
            }
        }
예제 #12
0
        public void Deve_Debitar_Valor_Conta()
        {
            var transferencia = new TransferenciaDTO
            {
                AgenciaDestino = 1542,
                AgenciaOrigem  = 1643,
                BancoDestino   = 33,
                BancoOrigem    = 33,
                ContaDestino   = 113856,
                ContaOrigem    = 114856,
                Valor          = 1000
            };

            var valorInicial = _conta2.Saldo;

            _contaService.Transferir(transferencia);

            Assert.True(_conta2.Saldo < valorInicial);
        }
예제 #13
0
        public async Task <IActionResult> Post(TransferenciaDTO transferencia)
        {
            var           userId  = User.FindFirstValue(ClaimTypes.Name);
            ContaCorrente cc_user = await _repo.GetContaByAgenciaConta(transferencia.Agencia_user, transferencia.Conta_user);

            ContaCorrente cc_trans = await _repo.GetContaByAgenciaConta(transferencia.Agencia_transferencia, transferencia.Conta_transferencia);

            if (cc_user == null)
            {
                return(BadRequest("Não existe a conta na agência inserida!"));
            }
            if (cc_trans == null)
            {
                return(BadRequest("Não existe a conta na agência do beneficiário!"));
            }
            if (cc_user.UserId != int.Parse(userId))
            {
                return(Unauthorized());
            }

            if (cc_user.Saldo <= 0)
            {
                return(Ok("Saldo negativo."));
            }
            if (transferencia.Valor <= 0)
            {
                return(BadRequest("O valor da transferência terá que ser maior que zero!"));
            }

            cc_user.Saldo  -= transferencia.Valor;
            cc_trans.Saldo += transferencia.Valor;


            _repo.Update(cc_user);
            _repo.Update(cc_trans);

            if (await _repo.SaveChangeAsync())
            {
                return(Ok("Novo saldo: R$" + cc_user.Saldo));
            }
            return(BadRequest());
        }
예제 #14
0
        public async Task <IActionResult> EnviaDinheiroAsync([FromBody] TransferenciaDTO transferencia)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            try
            {
                transferencia.Origem.Id = _context.ContasCorrentes.Where(x => x.Agencia == transferencia.Origem.Agencia &&
                                                                         x.NumeroConta == transferencia.Origem.NumeroConta &&
                                                                         x.Digito == transferencia.Origem.Digito).FirstOrDefault().Id;

                transferencia.Destino.Id = _context.ContasCorrentes.Where(x => x.Agencia == transferencia.Destino.Agencia &&
                                                                          x.NumeroConta == transferencia.Destino.NumeroConta &&
                                                                          x.Digito == transferencia.Destino.Digito).FirstOrDefault().Id;

                var saldo = _context.Lancamentos.Where(x => x.ContaCorrenteId == transferencia.Origem.Id)
                            .Sum(x => x.Valor);

                if (saldo <= 0 || transferencia.Valor <= 0 || saldo < transferencia.Valor)
                {
                    return(BadRequest());
                }

                var lancamentoDebito = new Lancamento()
                {
                    Id = Guid.NewGuid(),
                    ContaCorrenteId = transferencia.Origem.Id,
                    TipoOperacao    = "Debito",
                    Valor           = -transferencia.Valor,
                    DataOperacao    = DateTime.UtcNow
                };

                var lancamentoCredito = new Lancamento()
                {
                    Id = Guid.NewGuid(),
                    ContaCorrenteId = transferencia.Destino.Id,
                    TipoOperacao    = "Credito",
                    Valor           = transferencia.Valor,
                    DataOperacao    = DateTime.UtcNow
                };

                var lancamentos = new List <Lancamento>()
                {
                    lancamentoDebito, lancamentoCredito
                };

                var transfer = _context.Lancamentos.AddRangeAsync(lancamentos).IsCompletedSuccessfully;

                if (!transfer)
                {
                    return(BadRequest());
                }

                await _context.SaveChangesAsync();

                return(Ok());
            }
            catch (Exception)
            {
                return(BadRequest());
            }
        }
예제 #15
0
        public string RealizarTransferencia(TransferenciaDTO transferenciaDTO)
        {
            try
            {
                var contaCorrenteOrigem = _unitOfWork.ContaCorrenteRepository.GetContaCorrenteById(transferenciaDTO.ContaCorrenteOrigem);

                if (contaCorrenteOrigem == null)
                {
                    throw new AppNotFoundException("Conta corrente de origem não encontrada");
                }

                var contaCorrenteDestino = _unitOfWork.ContaCorrenteRepository.GetContaCorrenteById(transferenciaDTO.ContaCorrenteDestino);

                if (contaCorrenteDestino == null)
                {
                    throw new AppNotFoundException("Conta corrente de destino não encontrada");
                }

                var guid = Guid.NewGuid();

                var lancamentoDebito = new Lancamento
                {
                    ContaCorrente = transferenciaDTO.ContaCorrenteOrigem,
                    Valor         = transferenciaDTO.Valor,
                    Tipo          = 'D',
                    IdTransacao   = guid
                };

                _unitOfWork.ContaCorrenteRepository.InserirLancamento(lancamentoDebito);

                var lancamentoCredito = new Lancamento
                {
                    ContaCorrente = transferenciaDTO.ContaCorrenteDestino,
                    Valor         = transferenciaDTO.Valor,
                    Tipo          = 'C',
                    IdTransacao   = guid
                };

                _unitOfWork.ContaCorrenteRepository.InserirLancamento(lancamentoCredito);

                contaCorrenteOrigem.Debitar(transferenciaDTO.Valor);

                _unitOfWork.ContaCorrenteRepository.AtualizarContaCorrente(contaCorrenteOrigem);

                contaCorrenteDestino.Creditar(transferenciaDTO.Valor);

                _unitOfWork.ContaCorrenteRepository.AtualizarContaCorrente(contaCorrenteDestino);

                _unitOfWork.Commit();

                return("Transferencia realizada com sucesso!");
            }
            catch (AppNotFoundException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw new Exception("Erro ao realizar tranferência", ex);
            }
        }
예제 #16
0
        public void Transferir(TransferenciaDTO transferenciaDTO)
        {
            var notificacoes = transferenciaDTO.Validar();

            if (notificacoes.Any())
            {
                NotificarErroNegocio(notificacoes);
                return;
            }

            var contaOrigem = _contaRepository.Buscar
                              (
                transferenciaDTO.BancoOrigem,
                transferenciaDTO.ContaOrigem,
                transferenciaDTO.AgenciaOrigem
                              );

            if (contaOrigem == null)
            {
                NotificarErroNegocio("Conta de origem não encontrada");
                return;
            }

            var contaDestino = _contaRepository.Buscar
                               (
                transferenciaDTO.BancoDestino,
                transferenciaDTO.ContaDestino,
                transferenciaDTO.AgenciaDestino
                               );

            if (contaDestino == null)
            {
                NotificarErroNegocio("Conta de Destino não encontrada");
                return;
            }

            if (!contaOrigem.Debitar(transferenciaDTO.Valor))
            {
                NotificarErroNegocio("Saldo insuficiente para completar a operação");
                return;
            }

            contaDestino.Creditar(transferenciaDTO.Valor);

            var lancamento = new Lancamento
            {
                ContaDestino = contaDestino,
                ContaOrigem  = contaOrigem,
                Data         = DateTime.Now,
                Valor        = transferenciaDTO.Valor
            };

            _contaRepository.Atualizar(contaOrigem);
            _contaRepository.Atualizar(contaDestino);
            _contaRepository.AdicionarLancamento(lancamento);

            try
            {
                _unitOfWork.Commit();
            }
            catch (Exception ex)
            {
                NotificarErroInterno(ex.Message);
            }
        }