コード例 #1
0
        public async Task <IActionResult> BuyCurrencyAsync([FromBody] TransactionBuyCurrency tbc)
        {
            try
            {
                var user_id = int.Parse(User.Claims.First(i => i.Type == "UserId").Value);
                await _transactionBusiness.BuyCurrency(tbc, user_id);

                return(StatusCode(201));
            }
            catch { throw; }
        }
コード例 #2
0
        public async Task BuyCurrency(TransactionBuyCurrency tbc, int user_id)
        {
            //Get accounts and balances
            int    ARS_accountId = _unitOfWork.Accounts.GetAccountId(user_id, "ARS");
            int    USD_accountId = _unitOfWork.Accounts.GetAccountId(user_id, "USD");
            double balance_ARS   = _accountBusiness.GetAccountBalance(user_id, "ARS");
            double balance_USD   = _accountBusiness.GetAccountBalance(user_id, "USD");
            double cost;
            Rates  rates = await _rates.GetRates();

            Transactions transactionOrigin;
            Transactions transactionDestiny;

            if (tbc.Type == "Compra")
            {
                cost = tbc.Amount * rates.BuyingPrice;
                if (balance_ARS >= cost)
                {
                    //en USD
                    transactionOrigin = new Transactions
                    {
                        Amount     = tbc.Amount,
                        Concept    = "Compra de divisas",
                        Type       = "Topup",
                        AccountId  = USD_accountId,
                        CategoryId = 2
                    };
                    //en ARS
                    transactionDestiny = new Transactions
                    {
                        Amount     = cost,
                        Concept    = "Compra de divisas",
                        Type       = "Payment",
                        AccountId  = ARS_accountId,
                        CategoryId = 2
                    };
                }
                else
                {
                    throw new CustomException(400, "Saldo insuficiente");
                }
            }
            else
            {
                cost = tbc.Amount * rates.SellingPrice;
                if (tbc.Amount <= balance_USD)
                {
                    //en USD
                    transactionOrigin = new Transactions
                    {
                        AccountId  = (int)USD_accountId,
                        Amount     = tbc.Amount,
                        Concept    = "Compra de divisas",
                        Type       = "Payment",
                        CategoryId = 2
                    };
                    //en ARS
                    transactionDestiny = new Transactions
                    {
                        AccountId  = (int)ARS_accountId,
                        Amount     = cost,
                        Concept    = "Compra de divisas",
                        Type       = "Topup",
                        CategoryId = 2
                    };
                }
                else
                {
                    throw new CustomException(400, "Saldo insuficiente");
                }
            }
            _unitOfWork.Transactions.Insert(transactionOrigin);
            _unitOfWork.Transactions.Insert(transactionDestiny);
            await _unitOfWork.Complete();

            return;
        }