コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }