public PostUserMoneyModel PostUserMoney(PostUserMoneyModel user) { var userAccount = (from c in _context.Cuenta where c.IdCuenta == user.UserAccountId select c).FirstOrDefault(); if (userAccount != null) { var newAmount = userAccount.Monto + user.Amount; userAccount.Monto = newAmount; _context.SaveChanges(); user.Amount = newAmount; } return(user); }
public IActionResult PostMoney(PostUserMoneyModel user) { var result = _accountBusinessLogic.PostMoney(user); return(Ok(result)); }
public ResultModel <PostUserMoneyModel> PostOverdraft(int accountId) { var result = new ResultModel <PostUserMoneyModel>(); try { if (accountId <= 0) { result.AddInputDataError("El id de cuenta es requerido"); } if (!result.Ok) { return(result); } MovementModel movementDeposit = null; var account = _accountRepository.GetAccountById(accountId); var movements = _movementsRepository.GetMovementsByAccountId(accountId); var movementOverdraft = movements.Where(m => m.MovementId == (int)MovementEnum.Overdraft).OrderByDescending(o => o.DateMovement).FirstOrDefault(); if (movementOverdraft != null) { movementDeposit = movements.Where(m => m.MovementId == (int)MovementEnum.Deposit && (m.DateMovement == null || m.DateMovement > movementOverdraft.DateMovement)).FirstOrDefault(); } if (account.Amount > 0 && (movementDeposit != null || movementOverdraft == null)) { var amount = account.Amount * Convert.ToDecimal(0.1); var postOverdraft = new PostUserMoneyModel { Amount = amount, UserAccountId = account.Id }; result.Object = _accountRepository.PostUserMoney(postOverdraft); var movement = new MovementModel { AccountId = account.Id, DestinationAccountId = account.Id, Amount = amount, MovementId = (int)MovementEnum.Overdraft, DateMovement = DateTime.Now }; _movementsRepository.AddMovement(movement); } else if (account.Amount == 0 && (movementDeposit != null || movementOverdraft == null)) { var amount = movementDeposit.Amount * Convert.ToDecimal(0.1); var postOverdraft = new PostUserMoneyModel { Amount = amount, UserAccountId = account.Id }; result.Object = _accountRepository.PostUserMoney(postOverdraft); var movement = new MovementModel { AccountId = account.Id, DestinationAccountId = account.Id, Amount = amount, MovementId = (int)MovementEnum.Overdraft, DateMovement = DateTime.Now }; _movementsRepository.AddMovement(movement); } else if (account.Amount > 0 && movementDeposit == null) { result.AddInputDataError("Debe primero realizar un deposito para girar al descubierto nuevamente."); } else if (account.Amount < 0) { result.AddInputDataError("No se puede girar al descubierto con saldos negativos."); } } catch (Exception ex) { result.AddInternalError(ex.ToString()); } return(result); }
public ResultModel <PostUserMoneyModel> PostMoney(PostUserMoneyModel user) { var result = new ResultModel <PostUserMoneyModel>(); try { if (user.UserAccountId <= 0) { result.AddInputDataError("El id de usuario es requerido"); } if (user.Amount == 0) { result.AddInputDataError("El monto es requerido"); } var account = _accountRepository.GetAccountById(user.UserAccountId); if ((account.Amount + user.Amount) < 0) { result.AddInputDataError("No se puede extraer con saldos negativos"); } if (!result.Ok) { return(result); } MovementModel movementOverdraft = null; var movements = _movementsRepository.GetMovementsByAccountId(user.UserAccountId); var movementDeposit = movements.Where(m => m.MovementId == (int)MovementEnum.Deposit).OrderByDescending(o => o.DateMovement).FirstOrDefault(); if (movementDeposit != null) { movementOverdraft = movements.Where(x => x.MovementId == (int)MovementEnum.Overdraft && x.DateMovement > movementDeposit.DateMovement).OrderByDescending(p => p.DateMovement).FirstOrDefault(); } decimal amount; if (movementOverdraft != null && user.Amount > 0) { amount = user.Amount - movementOverdraft.Amount; } else { amount = user.Amount; } var movement = new MovementModel(); movement.AccountId = user.UserAccountId; movement.DestinationAccountId = user.UserAccountId; movement.Amount = amount; movement.DateMovement = DateTime.Now; if (user.Amount < 0) { movement.MovementId = (int)MovementEnum.Extraction; } else { movement.MovementId = (int)MovementEnum.Deposit; } _movementsRepository.AddMovement(movement); result.Object = _accountRepository.PostUserMoney(user); } catch (Exception ex) { result.AddInternalError(ex.ToString()); } return(result); }