public ResultModel <List <MovementModel> > GetMovementsByAccountId(int accountId) { var result = new ResultModel <List <MovementModel> >(); try { if (accountId <= 0) { result.AddInputDataError("El id de cuenta es requerido"); } if (!result.Ok) { return(result); } result.Object = _movementsRepository.GetMovementsByAccountId(accountId); } 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); }